Skip to content

Commit accc332

Browse files
committed
chore(flipcash): add back lab access from login router
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 91f19f0 commit accc332

8 files changed

Lines changed: 76 additions & 12 deletions

File tree

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import androidx.compose.ui.res.stringResource
1717
import androidx.compose.ui.unit.dp
1818
import androidx.lifecycle.Lifecycle
1919
import androidx.lifecycle.compose.collectAsStateWithLifecycle
20-
import androidx.lifecycle.viewModelScope
2120
import cafe.adriel.voyager.core.registry.ScreenRegistry
2221
import cafe.adriel.voyager.core.stack.StackEvent
2322
import cafe.adriel.voyager.navigator.CurrentScreen
@@ -28,12 +27,11 @@ import cafe.adriel.voyager.transitions.SlideTransition
2827
import com.flipcash.app.core.LocalUserManager
2928
import com.flipcash.app.core.NavScreenProvider
3029
import com.flipcash.app.core.navigation.DeeplinkType
31-
import com.flipcash.app.router.LocalRouter
32-
import com.flipcash.app.session.LocalSessionController
33-
import com.flipcash.app.internal.ui.theme.FlipcashTheme
3430
import com.flipcash.app.internal.ui.navigation.AppScreenContent
3531
import com.flipcash.app.internal.ui.navigation.MainRoot
36-
import com.flipcash.app.shareable.LocalShareController
32+
import com.flipcash.app.internal.ui.theme.FlipcashTheme
33+
import com.flipcash.app.router.LocalRouter
34+
import com.flipcash.app.session.LocalSessionController
3735
import com.flipcash.features.shareapp.R
3836
import com.flipcash.services.modals.ModalManager
3937
import com.flipcash.services.user.AuthState

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import com.flipcash.app.core.NavScreenProvider
1010
import com.flipcash.app.currency.CurrencySelectionModal
1111
import com.flipcash.app.deposit.DepositScreen
1212
import com.flipcash.app.cash.CashScreen
13-
import com.flipcash.app.lab.LabScreen
13+
import com.flipcash.app.lab.LabsScreen
14+
import com.flipcash.app.lab.LabsModal
1415
import com.flipcash.app.login.accesskey.AccessKeyScreen
1516
import com.flipcash.app.login.router.LoginRouter
1617
import com.flipcash.app.login.seed.SeedInputScreen
@@ -90,8 +91,12 @@ internal fun AppScreenContent(content: @Composable () -> Unit) {
9091
AppSettingsScreen()
9192
}
9293

94+
register<NavScreenProvider.Login.Lab> {
95+
LabsScreen()
96+
}
97+
9398
register<NavScreenProvider.HomeScreen.Menu.Lab> {
94-
LabScreen()
99+
LabsModal()
95100
}
96101

97102
register<NavScreenProvider.HomeScreen.Menu.Deposit> {

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/NavScreenProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ sealed class NavScreenProvider : ScreenProvider {
1414
NavScreenProvider()
1515

1616
data object SeedInput : NavScreenProvider()
17+
18+
data object Lab : NavScreenProvider()
1719
}
1820

1921
sealed interface Permissions {

apps/flipcash/features/lab/src/main/kotlin/com/flipcash/app/lab/LabScreen.kt renamed to apps/flipcash/features/lab/src/main/kotlin/com/flipcash/app/lab/LabsScreen.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable
77
import androidx.compose.ui.Alignment
88
import androidx.compose.ui.Modifier
99
import androidx.compose.ui.res.stringResource
10+
import cafe.adriel.voyager.core.screen.Screen
1011
import cafe.adriel.voyager.core.screen.ScreenKey
1112
import cafe.adriel.voyager.core.screen.uniqueScreenKey
1213
import com.flipcash.app.lab.internal.LabsScreenContent
@@ -20,7 +21,7 @@ import kotlinx.parcelize.Parcelize
2021

2122

2223
@Parcelize
23-
class LabScreen: ModalScreen, NamedScreen, Parcelable {
24+
class LabsModal: ModalScreen, NamedScreen, Parcelable {
2425

2526
@IgnoredOnParcel
2627
override val key: ScreenKey = uniqueScreenKey
@@ -44,6 +45,35 @@ class LabScreen: ModalScreen, NamedScreen, Parcelable {
4445
onBackIconClicked = navigator::pop
4546
)
4647

48+
LabsScreenContent()
49+
}
50+
}
51+
}
52+
53+
@Parcelize
54+
class LabsScreen: Screen, NamedScreen, Parcelable {
55+
56+
@IgnoredOnParcel
57+
override val key: ScreenKey = uniqueScreenKey
58+
59+
override val name: String
60+
@Composable get() = stringResource(R.string.title_betaFlags)
61+
62+
@Composable
63+
override fun Content() {
64+
val navigator = LocalCodeNavigator.current
65+
66+
Column(
67+
modifier = Modifier.fillMaxSize(),
68+
horizontalAlignment = Alignment.CenterHorizontally,
69+
) {
70+
AppBarWithTitle(
71+
title = name,
72+
titleAlignment = Alignment.CenterHorizontally,
73+
backButton = true,
74+
onBackIconClicked = navigator::pop
75+
)
76+
4777
LabsScreenContent()
4878
}
4979
}

apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/internal/LoginScreenContent.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,11 @@ import com.getcode.view.LoadingSuccessState
4242
internal fun LoginRouterScreenContent(
4343
isCreatingAccount: LoadingSuccessState = LoadingSuccessState(),
4444
isLoggingIn: LoadingSuccessState = LoadingSuccessState(),
45+
isLabsOpen: Boolean,
4546
createAccount: () -> Unit,
4647
login: () -> Unit,
48+
onLogoTapped: () -> Unit,
49+
openBetaFlags: () -> Unit,
4750
) {
4851
val context = LocalContext.current
4952

@@ -57,7 +60,8 @@ internal fun LoginRouterScreenContent(
5760

5861
Column(
5962
modifier = Modifier
60-
.align(Alignment.CenterHorizontally),
63+
.align(Alignment.CenterHorizontally)
64+
.noRippleClickable(enabled = !isLabsOpen) { onLogoTapped() },
6165
horizontalAlignment = Alignment.CenterHorizontally,
6266
verticalArrangement = Arrangement.spacedBy(CodeTheme.dimens.inset)
6367
) {
@@ -135,5 +139,17 @@ internal fun LoginRouterScreenContent(
135139
}
136140
)
137141
}
142+
143+
if (isLabsOpen) {
144+
IconButton(
145+
modifier = Modifier
146+
.align(Alignment.TopEnd)
147+
.statusBarsPadding()
148+
.padding(top = CodeTheme.dimens.grid.x2),
149+
onClick = openBetaFlags
150+
) {
151+
Icon(Icons.Filled.Science, contentDescription = null, tint = Color.White)
152+
}
153+
}
138154
}
139155
}

apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/router/LoginRouter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class LoginRouter(
2626
private val seed: String? = null,
2727
private val fromDeeplink: Boolean = false,
2828
) : Screen, Parcelable {
29+
2930
@IgnoredOnParcel
3031
override val key: ScreenKey = uniqueScreenKey
3132

@@ -61,7 +62,10 @@ class LoginRouter(
6162
isCreatingAccount = state.creatingAccount,
6263
isLoggingIn = state.loggingIn,
6364
createAccount = { vm.dispatchEvent(LoginViewModel.Event.CreateAccount) },
64-
login = { navigator.push(ScreenRegistry.get(NavScreenProvider.Login.SeedInput)) }
65+
login = { navigator.push(ScreenRegistry.get(NavScreenProvider.Login.SeedInput)) },
66+
isLabsOpen = state.betaOptionsVisible,
67+
onLogoTapped = { vm.dispatchEvent(LoginViewModel.Event.OnLogoTapped) },
68+
openBetaFlags = { navigator.push(ScreenRegistry.get(NavScreenProvider.Login.Lab)) }
6569
)
6670
}
6771
}

apps/flipcash/shared/featureflags/src/main/kotlin/com/flipcash/app/featureflags/FeatureFlag.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,22 @@ sealed interface FeatureFlag {
77
val default: Boolean
88
val launched: Boolean
99
val visible: Boolean
10+
val persistLogOut: Boolean
1011

1112
data object CredentialManager: FeatureFlag {
1213
override val key: String = "credential_manager_enabled"
1314
override val default: Boolean = false
1415
override val launched: Boolean = false
15-
override val visible: Boolean = BuildConfig.DEBUG
16+
override val visible: Boolean = true
17+
override val persistLogOut: Boolean = true
1618
}
1719

1820
data object VibrateOnScan: FeatureFlag {
1921
override val key: String = "scan_debug_enabled"
2022
override val default: Boolean = false
2123
override val launched: Boolean = false
2224
override val visible = true
25+
override val persistLogOut: Boolean = false
2326
}
2427

2528
companion object {

apps/flipcash/shared/featureflags/src/main/kotlin/com/flipcash/app/featureflags/internal/InternalFeatureFlagController.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,13 @@ internal class InternalFeatureFlagController @Inject constructor(
109109

110110
override fun reset() {
111111
dataScope.launch {
112-
betaFlags.edit { it.clear() }
112+
betaFlags.edit { prefs ->
113+
FeatureFlag.entries.map { it to it.booleanPreferenceKey }
114+
.filterNot { it.first.persistLogOut }
115+
.onEach { prefs.remove(it.second) }
116+
117+
prefs.remove(betaOverrideKey)
118+
}
113119
}
114120
}
115121
}

0 commit comments

Comments
 (0)