@@ -13,6 +13,8 @@ import androidx.compose.runtime.mutableStateOf
1313import androidx.compose.runtime.remember
1414import androidx.compose.runtime.setValue
1515import androidx.compose.ui.Modifier
16+ import androidx.compose.ui.res.stringResource
17+ import androidx.compose.ui.unit.dp
1618import androidx.lifecycle.Lifecycle
1719import cafe.adriel.voyager.core.registry.ScreenRegistry
1820import cafe.adriel.voyager.core.stack.StackEvent
@@ -29,12 +31,15 @@ import com.flipcash.app.session.LocalSessionController
2931import com.flipcash.app.theme.FlipcashTheme
3032import com.flipcash.app.ui.navigation.AppScreenContent
3133import com.flipcash.app.ui.navigation.MainRoot
34+ import com.flipcash.features.shareapp.R
3235import com.flipcash.services.modals.ModalManager
36+ import com.getcode.libs.qr.rememberQrBitmapPainter
3337import com.getcode.navigation.core.BottomSheetNavigator
3438import com.getcode.navigation.core.CombinedNavigator
3539import com.getcode.navigation.core.LocalCodeNavigator
3640import com.getcode.navigation.extensions.getActivityScopedViewModel
3741import com.getcode.navigation.transitions.SheetSlideTransition
42+ import com.getcode.theme.CodeTheme
3843import com.getcode.theme.LocalCodeColors
3944import com.getcode.ui.components.OnLifecycleEvent
4045import com.getcode.ui.components.bars.BottomBarContainer
@@ -75,111 +80,119 @@ fun App(
7580 val userState by userManager.state.collectAsState()
7681
7782 FlipcashTheme {
83+ // save download QR early
84+ rememberQrBitmapPainter(
85+ content = stringResource(
86+ R .string.app_download_link,
87+ stringResource(id = R .string.app_download_link_qr_ref)
88+ ),
89+ size = CodeTheme .dimens.screenWidth * 0.60f ,
90+ padding = 0.25 .dp
91+ )
92+
7893 val barManager = rememberBarManager()
7994 AppScreenContent {
80- // TODO: create PaymentScaffold for flipcash
81- // PaymentScaffold {
82- TipScaffold (tipsEngine = tipsEngine) {
83- ScrimSupport {
84- AppNavHost {
85- val codeNavigator = LocalCodeNavigator .current
86- CodeScaffold { innerPaddingModifier ->
87- Navigator (
88- screen = MainRoot { deepLink },
89- ) { navigator ->
90- LaunchedEffect (navigator.lastItem) {
91- // update global navigator for platform access to support push/pop from a single
92- // navigator current
93- codeNavigator.screensNavigator = navigator
94- }
95+ TipScaffold (tipsEngine = tipsEngine) {
96+ ScrimSupport {
97+ AppNavHost {
98+ val codeNavigator = LocalCodeNavigator .current
99+ CodeScaffold { innerPaddingModifier ->
100+ Navigator (
101+ screen = MainRoot { deepLink },
102+ ) { navigator ->
103+ LaunchedEffect (navigator.lastItem) {
104+ // update global navigator for platform access to support push/pop from a single
105+ // navigator current
106+ codeNavigator.screensNavigator = navigator
107+ }
95108
96- Box (
97- modifier = Modifier
98- .padding(innerPaddingModifier)
99- ) {
100-
101- when (navigator.lastEvent) {
102- StackEvent .Push ,
103- StackEvent .Pop -> {
104- when (navigator.lastItem) {
105- ScreenRegistry .get(NavScreenProvider .Login .SeedInput ),
106- ScreenRegistry .get(NavScreenProvider .Permissions .Camera ()),
107- is MainRoot -> {
108- CrossfadeTransition (navigator = navigator)
109- }
110-
111- else -> SlideTransition (navigator = navigator)
109+ Box (
110+ modifier = Modifier
111+ .padding(innerPaddingModifier)
112+ ) {
113+
114+ when (navigator.lastEvent) {
115+ StackEvent .Push ,
116+ StackEvent .Pop -> {
117+ when (navigator.lastItem) {
118+ ScreenRegistry .get(NavScreenProvider .Login .SeedInput ),
119+ ScreenRegistry .get(NavScreenProvider .Permissions .Camera ()),
120+ is MainRoot -> {
121+ CrossfadeTransition (navigator = navigator)
112122 }
113- }
114123
115- StackEvent . Idle ,
116- StackEvent . Replace -> CurrentScreen ()
124+ else -> SlideTransition (navigator = navigator)
125+ }
117126 }
127+
128+ StackEvent .Idle ,
129+ StackEvent .Replace -> CurrentScreen ()
118130 }
131+ }
119132
120- LaunchedEffect (deepLink) {
121- if (codeNavigator.lastItem !is MainRoot ) {
122- if (deepLink != null ) {
123- val screenSet = router.processDestination(deepLink)
124- if (screenSet.isNotEmpty()) {
125- codeNavigator.replaceAll(screenSet)
126- }
133+ LaunchedEffect (deepLink) {
134+ if (codeNavigator.lastItem !is MainRoot ) {
135+ if (deepLink != null ) {
136+ val screenSet = router.processDestination(deepLink)
137+ if (screenSet.isNotEmpty()) {
138+ codeNavigator.replaceAll(screenSet)
127139 }
128140 }
129141 }
142+ }
130143
131- LaunchedEffect (loginRequest) {
132- loginRequest?.let { entropy ->
133- viewModel.handleLoginEntropy(
134- entropy,
135- onSwitchAccount = {
136- loginRequest = null
137- codeNavigator.replaceAll(
138- ScreenRegistry .get(
139- NavScreenProvider .Login .Home (
140- entropy
141- )
144+ LaunchedEffect (loginRequest) {
145+ loginRequest?.let { entropy ->
146+ viewModel.handleLoginEntropy(
147+ entropy,
148+ onSwitchAccount = {
149+ loginRequest = null
150+ codeNavigator.replaceAll(
151+ ScreenRegistry .get(
152+ NavScreenProvider .Login .Home (
153+ entropy
142154 )
143155 )
144- },
145- onCancel = {
146- loginRequest = null
147- }
148- )
149- }
156+ )
157+ },
158+ onCancel = {
159+ loginRequest = null
160+ }
161+ )
150162 }
163+ }
151164
152- LaunchedEffect (userState.isTimelockUnlocked) {
153- if (userState.isTimelockUnlocked) {
154- codeNavigator.replaceAll(
155- ScreenRegistry .get(
156- NavScreenProvider .AppRestricted (RestrictionType .TIMELOCK_UNLOCKED )
157- )
165+ LaunchedEffect (userState.isTimelockUnlocked) {
166+ if (userState.isTimelockUnlocked) {
167+ codeNavigator.replaceAll(
168+ ScreenRegistry .get(
169+ NavScreenProvider .AppRestricted (RestrictionType .TIMELOCK_UNLOCKED )
158170 )
159- }
171+ )
160172 }
173+ }
161174
162- OnLifecycleEvent { _, event ->
163- when (event) {
164- Lifecycle .Event .ON_RESUME -> {
165- session.onAppInForeground()
166- }
167-
168- Lifecycle .Event .ON_STOP ,
169- Lifecycle .Event .ON_DESTROY -> {
170- session.onAppInBackground()
171- }
175+ OnLifecycleEvent { _, event ->
176+ when (event) {
177+ Lifecycle .Event .ON_RESUME -> {
178+ session.onAppInForeground()
179+ }
172180
173- else -> Unit
181+ Lifecycle .Event .ON_STOP ,
182+ Lifecycle .Event .ON_DESTROY -> {
183+ session.onAppInBackground()
174184 }
185+
186+ else -> Unit
175187 }
176188 }
177189 }
178190 }
179191 }
180192 }
181- // }
193+ }
182194 }
195+
183196 TopBarContainer (barManager.barMessages)
184197 BottomBarContainer (barManager.barMessages)
185198 }
0 commit comments