Skip to content

Commit b145360

Browse files
committed
chore: setup testTags for all screen root's
abstract and require screens to implement `testTag` Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 9885ecf commit b145360

47 files changed

Lines changed: 332 additions & 401 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/App.kt

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import androidx.compose.runtime.setValue
1515
import androidx.compose.ui.Modifier
1616
import androidx.compose.ui.platform.LocalContext
1717
import androidx.compose.ui.res.stringResource
18+
import androidx.compose.ui.semantics.semantics
19+
import androidx.compose.ui.semantics.testTagsAsResourceId
1820
import androidx.compose.ui.unit.dp
1921
import androidx.lifecycle.Lifecycle
2022
import androidx.lifecycle.compose.LocalLifecycleOwner
@@ -27,6 +29,7 @@ import cafe.adriel.voyager.navigator.Navigator
2729
import cafe.adriel.voyager.navigator.currentOrThrow
2830
import cafe.adriel.voyager.transitions.CrossfadeTransition
2931
import cafe.adriel.voyager.transitions.SlideTransition
32+
import com.flipcash.app.android.BuildConfig
3033
import com.flipcash.app.bill.customization.BillPlaygroundScaffold
3134
import com.flipcash.app.core.LocalUserManager
3235
import com.flipcash.app.core.AppRoute
@@ -271,11 +274,31 @@ private fun AppNavHost(
271274
var combinedNavigator by remember {
272275
mutableStateOf<CombinedNavigator?>(null)
273276
}
274-
BottomSheetNavigator(
275-
modifier = Modifier.fillMaxSize(),
276-
sheetBackgroundColor = LocalCodeColors.current.background,
277-
sheetContentColor = LocalCodeColors.current.onBackground,
278-
sheetContent = { sheetNav ->
277+
278+
val semanticsModifier = if (BuildConfig.DEBUG) {
279+
Modifier.semantics { testTagsAsResourceId = true }
280+
} else Modifier
281+
282+
Box(modifier = semanticsModifier) {
283+
BottomSheetNavigator(
284+
modifier = Modifier.fillMaxSize(),
285+
sheetBackgroundColor = LocalCodeColors.current.background,
286+
sheetContentColor = LocalCodeColors.current.onBackground,
287+
sheetContent = { sheetNav ->
288+
if (combinedNavigator == null) {
289+
combinedNavigator = CombinedNavigator(sheetNav)
290+
}
291+
combinedNavigator?.let {
292+
CompositionLocalProvider(
293+
LocalCodeNavigator provides it,
294+
LocalBiometricsState provides biometricsState,
295+
) {
296+
SheetSlideTransition(navigator = it)
297+
}
298+
}
299+
},
300+
onHide = ModalManager::clear
301+
) { sheetNav ->
279302
if (combinedNavigator == null) {
280303
combinedNavigator = CombinedNavigator(sheetNav)
281304
}
@@ -284,22 +307,9 @@ private fun AppNavHost(
284307
LocalCodeNavigator provides it,
285308
LocalBiometricsState provides biometricsState,
286309
) {
287-
SheetSlideTransition(navigator = it)
310+
content()
288311
}
289312
}
290-
},
291-
onHide = ModalManager::clear
292-
) { sheetNav ->
293-
if (combinedNavigator == null) {
294-
combinedNavigator = CombinedNavigator(sheetNav)
295-
}
296-
combinedNavigator?.let {
297-
CompositionLocalProvider(
298-
LocalCodeNavigator provides it,
299-
LocalBiometricsState provides biometricsState,
300-
) {
301-
content()
302-
}
303313
}
304314
}
305315
}

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppRestrictedScreen.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,21 @@ import com.flipcash.app.core.AppRoute
99
import com.flipcash.app.internal.ui.HomeViewModel
1010
import com.getcode.navigation.core.LocalCodeNavigator
1111
import com.getcode.navigation.extensions.getActivityScopedViewModel
12+
import com.getcode.navigation.screens.AppScreen
1213
import com.getcode.ui.components.restrictions.ContentRestrictedView
1314
import com.getcode.ui.core.RestrictionType
1415
import kotlinx.coroutines.launch
16+
import kotlinx.parcelize.IgnoredOnParcel
1517
import kotlinx.parcelize.Parcelize
1618

1719
@Parcelize
18-
class AppRestrictedScreen(private val restrictionType: RestrictionType): Screen, Parcelable {
20+
class AppRestrictedScreen(private val restrictionType: RestrictionType): AppScreen, Parcelable {
21+
22+
@IgnoredOnParcel
23+
override val testTag: String = "app_restricted_screen"
24+
1925
@Composable
20-
override fun Content() {
26+
override fun ScreenContent() {
2127
val homeViewModel = getActivityScopedViewModel<HomeViewModel>()
2228
val navigator = LocalCodeNavigator.current
2329
val coroutineScope = rememberCoroutineScope()

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import com.flipcash.app.withdrawal.WithdrawalConfirmationScreen
3939
import com.flipcash.app.withdrawal.WithdrawalDestinationScreen
4040
import com.flipcash.app.withdrawal.WithdrawalEntryScreen
4141
import com.flipcash.app.withdrawal.WithdrawalFlow
42-
import com.getcode.navigation.modal.ModalScreen
42+
import com.getcode.navigation.screens.ModalScreen
4343

4444
@Composable
4545
internal fun AppScreenContent(content: @Composable () -> Unit) {
@@ -186,18 +186,4 @@ internal fun AppScreenContent(content: @Composable () -> Unit) {
186186
PreloadLabs()
187187

188188
content()
189-
}
190-
191-
private class Dummy: Screen {
192-
@Composable
193-
override fun Content() {
194-
195-
}
196-
}
197-
198-
private class DummyModal: ModalScreen {
199-
@Composable
200-
override fun ModalContent() {
201-
202-
}
203189
}

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/MainRoot.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.flipcash.app.router.LocalRouter
3434
import com.flipcash.app.router.Router
3535
import com.flipcash.services.internal.model.account.UserFlags
3636
import com.flipcash.services.user.AuthState
37+
import com.getcode.navigation.screens.AppScreen
3738
import com.getcode.theme.CodeTheme
3839
import com.getcode.ui.theme.CodeCircularProgressIndicator
3940
import com.getcode.utils.trace
@@ -48,13 +49,16 @@ import kotlinx.parcelize.Parcelize
4849
import kotlin.time.Duration.Companion.seconds
4950

5051
@Parcelize
51-
internal class MainRoot(private val deepLink: () -> DeepLink?) : Screen, Parcelable {
52+
internal class MainRoot(private val deepLink: () -> DeepLink?) : AppScreen, Parcelable {
5253

5354
@IgnoredOnParcel
5455
override val key: ScreenKey = uniqueScreenKey
5556

57+
@IgnoredOnParcel
58+
override val testTag: String = "root_screen"
59+
5660
@Composable
57-
override fun Content() {
61+
override fun ScreenContent() {
5862
val navigator = LocalNavigator.currentOrThrow
5963
val userManager = LocalUserManager.currentOrThrow
6064
var showLoading by remember { mutableStateOf(false) }

apps/flipcash/features/advanced/src/main/kotlin/com/flipcash/app/advanced/AdvancedFeaturesScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ import com.flipcash.app.advanced.internal.AdvancedFeaturesScreenViewModel
1717
import com.flipcash.app.bill.customization.LocalBillPlaygroundController
1818
import com.flipcash.core.R
1919
import com.getcode.navigation.core.LocalCodeNavigator
20-
import com.getcode.navigation.modal.ModalScreen
21-
import com.getcode.navigation.screens.NamedScreen
20+
import com.getcode.navigation.screens.ModalScreen
2221
import com.getcode.opencode.model.financial.Token
2322
import com.getcode.opencode.model.financial.usdf
2423
import com.getcode.ui.components.AppBarWithTitle
@@ -30,13 +29,13 @@ import kotlinx.parcelize.IgnoredOnParcel
3029
import kotlinx.parcelize.Parcelize
3130

3231
@Parcelize
33-
class AdvancedFeaturesScreen: ModalScreen, NamedScreen, Parcelable {
32+
class AdvancedFeaturesScreen: ModalScreen, Parcelable {
3433

3534
@IgnoredOnParcel
3635
override val key: ScreenKey = uniqueScreenKey
3736

38-
override val name: String
39-
@Composable get() = stringResource(R.string.title_advancedFeatures)
37+
@IgnoredOnParcel
38+
override val testTag: String = "advanced_features_screen"
4039

4140
@Composable
4241
override fun ModalContent() {
@@ -49,7 +48,7 @@ class AdvancedFeaturesScreen: ModalScreen, NamedScreen, Parcelable {
4948
horizontalAlignment = Alignment.CenterHorizontally,
5049
) {
5150
AppBarWithTitle(
52-
title = name,
51+
title = stringResource(R.string.title_advancedFeatures),
5352
titleAlignment = Alignment.CenterHorizontally,
5453
isInModal = true,
5554
backButton = true,

apps/flipcash/features/appsettings/src/main/kotlin/com/flipcash/app/appsettings/AppSettingsScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,19 @@ import cafe.adriel.voyager.core.screen.uniqueScreenKey
1212
import com.flipcash.app.appsettings.internal.AppSettingsScreenContent
1313
import com.flipcash.core.R
1414
import com.getcode.navigation.core.LocalCodeNavigator
15-
import com.getcode.navigation.modal.ModalScreen
16-
import com.getcode.navigation.screens.NamedScreen
15+
import com.getcode.navigation.screens.ModalScreen
1716
import com.getcode.ui.components.AppBarWithTitle
1817
import kotlinx.parcelize.IgnoredOnParcel
1918
import kotlinx.parcelize.Parcelize
2019

2120
@Parcelize
22-
class AppSettingsScreen : ModalScreen, NamedScreen, Parcelable {
21+
class AppSettingsScreen : ModalScreen, Parcelable {
2322

2423
@IgnoredOnParcel
2524
override val key: ScreenKey = uniqueScreenKey
2625

27-
override val name: String
28-
@Composable get() = stringResource(R.string.title_appSettings)
26+
@IgnoredOnParcel
27+
override val testTag: String = "app_settings_screen"
2928

3029
@Composable
3130
override fun ModalContent() {
@@ -36,7 +35,7 @@ class AppSettingsScreen : ModalScreen, NamedScreen, Parcelable {
3635
horizontalAlignment = Alignment.CenterHorizontally,
3736
) {
3837
AppBarWithTitle(
39-
title = name,
38+
title = stringResource(R.string.title_appSettings),
4039
titleAlignment = Alignment.CenterHorizontally,
4140
backButton = true,
4241
isInModal = true,

apps/flipcash/features/backupkey/src/main/kotlin/com/flipcash/app/backupkey/BackupKeyScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,19 @@ import com.flipcash.app.backupkey.internal.BackupKeyScreenContent
1414
import com.flipcash.app.backupkey.internal.BackupKeyScreenViewModel
1515
import com.flipcash.core.R
1616
import com.getcode.navigation.core.LocalCodeNavigator
17-
import com.getcode.navigation.modal.ModalScreen
18-
import com.getcode.navigation.screens.NamedScreen
17+
import com.getcode.navigation.screens.ModalScreen
1918
import com.getcode.ui.components.AppBarWithTitle
2019
import kotlinx.parcelize.IgnoredOnParcel
2120
import kotlinx.parcelize.Parcelize
2221

2322
@Parcelize
24-
class BackupKeyScreen: ModalScreen, NamedScreen, Parcelable {
23+
class BackupKeyScreen: ModalScreen, Parcelable {
2524

2625
@IgnoredOnParcel
2726
override val key: ScreenKey = uniqueScreenKey
2827

29-
override val name: String
30-
@Composable get() = stringResource(R.string.title_accessKey)
28+
@IgnoredOnParcel
29+
override val testTag: String = "access_key_screen"
3130

3231

3332
@Composable
@@ -40,7 +39,7 @@ class BackupKeyScreen: ModalScreen, NamedScreen, Parcelable {
4039
horizontalAlignment = Alignment.CenterHorizontally,
4140
) {
4241
AppBarWithTitle(
43-
title = name,
42+
title = stringResource(R.string.title_accessKey),
4443
isInModal = true,
4544
titleAlignment = Alignment.CenterHorizontally,
4645
backButton = true,

apps/flipcash/features/balance/src/main/kotlin/com/flipcash/app/balance/BalanceScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ import com.flipcash.app.tokens.ui.SelectTokenViewModel
2121
import com.flipcash.core.R
2222
import com.getcode.navigation.core.LocalCodeNavigator
2323
import com.getcode.navigation.extensions.getActivityScopedViewModel
24-
import com.getcode.navigation.modal.ModalScreen
25-
import com.getcode.navigation.screens.NamedScreen
24+
import com.getcode.navigation.screens.ModalScreen
2625
import com.getcode.ui.components.AppBarDefaults
2726
import com.getcode.ui.components.AppBarWithTitle
2827
import kotlinx.coroutines.flow.filterIsInstance
@@ -33,14 +32,14 @@ import kotlinx.parcelize.IgnoredOnParcel
3332
import kotlinx.parcelize.Parcelize
3433

3534
@Parcelize
36-
class BalanceScreen: ModalScreen, NamedScreen, Parcelable {
35+
class BalanceScreen: ModalScreen, Parcelable {
3736

3837
@IgnoredOnParcel
3938
override val key:
4039
ScreenKey = uniqueScreenKey
4140

42-
override val name: String
43-
@Composable get() = stringResource(R.string.title_wallet)
41+
@IgnoredOnParcel
42+
override val testTag: String = "wallet_screen"
4443

4544
@Composable
4645
override fun ModalContent() {
@@ -50,7 +49,7 @@ class BalanceScreen: ModalScreen, NamedScreen, Parcelable {
5049
horizontalAlignment = Alignment.CenterHorizontally,
5150
) {
5251
AppBarWithTitle(
53-
title = name,
52+
title = stringResource(R.string.title_wallet),
5453
isInModal = true,
5554
titleAlignment = Alignment.CenterHorizontally,
5655
endContent = {

apps/flipcash/features/cash/src/main/kotlin/com/flipcash/app/cash/CashScreen.kt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,13 @@
11
package com.flipcash.app.cash
22

33
import android.os.Parcelable
4-
import androidx.compose.foundation.Image
5-
import androidx.compose.foundation.layout.Arrangement
6-
import androidx.compose.foundation.layout.Box
74
import androidx.compose.foundation.layout.Column
8-
import androidx.compose.foundation.layout.Row
95
import androidx.compose.foundation.layout.fillMaxSize
10-
import androidx.compose.foundation.layout.fillMaxWidth
11-
import androidx.compose.foundation.layout.width
12-
import androidx.compose.foundation.layout.wrapContentHeight
13-
import androidx.compose.foundation.layout.wrapContentWidth
14-
import androidx.compose.foundation.shape.CircleShape
156
import androidx.compose.runtime.Composable
167
import androidx.compose.runtime.LaunchedEffect
178
import androidx.compose.runtime.getValue
189
import androidx.compose.ui.Alignment
1910
import androidx.compose.ui.Modifier
20-
import androidx.compose.ui.draw.clip
21-
import androidx.compose.ui.res.painterResource
22-
import androidx.compose.ui.res.stringResource
2311
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2412
import cafe.adriel.voyager.core.registry.ScreenRegistry
2513
import cafe.adriel.voyager.core.screen.ScreenKey
@@ -30,17 +18,13 @@ import com.flipcash.app.cash.internal.CashScreenViewModel
3018
import com.flipcash.app.cash.internal.GiveScreenContent
3119
import com.flipcash.app.core.AppRoute
3220
import com.flipcash.app.core.tokens.TokenPurpose
33-
import com.flipcash.app.core.ui.TokenIconWithName
3421
import com.flipcash.app.core.ui.TokenSelectionPill
3522
import com.flipcash.app.session.LocalSessionController
36-
import com.flipcash.features.cash.R
3723
import com.getcode.navigation.core.LocalCodeNavigator
38-
import com.getcode.navigation.modal.ModalScreen
24+
import com.getcode.navigation.screens.ModalScreen
3925
import com.getcode.solana.keys.Mint
40-
import com.getcode.theme.CodeTheme
4126
import com.getcode.ui.components.AppBarDefaults
4227
import com.getcode.ui.components.AppBarWithTitle
43-
import com.getcode.ui.core.rememberedClickable
4428
import kotlinx.coroutines.flow.filterIsInstance
4529
import kotlinx.coroutines.flow.launchIn
4630
import kotlinx.coroutines.flow.map
@@ -56,6 +40,13 @@ class CashScreen(
5640
@IgnoredOnParcel
5741
override val key: ScreenKey = uniqueScreenKey
5842

43+
companion object {
44+
const val TEST_TAG = "cash_screen"
45+
}
46+
47+
@IgnoredOnParcel
48+
override val testTag = TEST_TAG
49+
5950
@Composable
6051
override fun ModalContent() {
6152
val navigator = LocalCodeNavigator.current

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/VerificationFlowScreen.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import com.flipcash.features.contact.verification.R
2727
import com.getcode.manager.BottomBarAction
2828
import com.getcode.manager.BottomBarManager
2929
import com.getcode.navigation.core.LocalCodeNavigator
30-
import com.getcode.navigation.modal.ModalScreen
30+
import com.getcode.navigation.screens.ModalScreen
3131
import kotlinx.parcelize.IgnoredOnParcel
3232
import kotlinx.parcelize.Parcelize
3333

@@ -44,6 +44,9 @@ class VerificationFlowScreen(
4444
@IgnoredOnParcel
4545
override val key: ScreenKey = uniqueScreenKey
4646

47+
@IgnoredOnParcel
48+
override val testTag: String = "verification_screen"
49+
4750
@OptIn(ExperimentalVoyagerApi::class)
4851
@Composable
4952
override fun ModalContent() {

0 commit comments

Comments
 (0)