Skip to content

Commit 6bfb316

Browse files
authored
Merge pull request #1806 from vector-im/feature/fga/lock_screen_composition
LockScreen : rework LoggedInFlowNode and Back management
2 parents 40ea49a + 2aa92b6 commit 6bfb316

File tree

5 files changed

+34
-57
lines changed

5 files changed

+34
-57
lines changed

app/src/main/kotlin/io/element/android/x/MainActivity.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.bumble.appyx.core.integration.NodeHost
3333
import com.bumble.appyx.core.integrationpoint.NodeActivity
3434
import com.bumble.appyx.core.plugin.NodeReadyObserver
3535
import io.element.android.features.lockscreen.api.handleSecureFlag
36+
import io.element.android.features.lockscreen.api.isLocked
3637
import io.element.android.libraries.architecture.bindings
3738
import io.element.android.libraries.core.log.logger.LoggerTag
3839
import io.element.android.libraries.designsystem.utils.snackbar.LocalSnackbarDispatcher
@@ -46,7 +47,6 @@ private val loggerTag = LoggerTag("MainActivity")
4647
class MainActivity : NodeActivity() {
4748

4849
private lateinit var mainNode: MainNode
49-
5050
private lateinit var appBindings: AppBindings
5151

5252
override fun onCreate(savedInstanceState: Bundle?) {
@@ -61,6 +61,20 @@ class MainActivity : NodeActivity() {
6161
}
6262
}
6363

64+
@Deprecated("")
65+
override fun onBackPressed() {
66+
// If the app is locked, we need to intercept onBackPressed before it goes to OnBackPressedDispatcher.
67+
// Indeed, otherwise we would need to trick Appyx backstack management everywhere.
68+
// Without this trick, we would get pop operations on the hidden backstack.
69+
if (appBindings.lockScreenService().isLocked) {
70+
// Do not kill the app in this case, just go to background.
71+
moveTaskToBack(false)
72+
} else {
73+
@Suppress("DEPRECATION")
74+
super.onBackPressed()
75+
}
76+
}
77+
6478
@Composable
6579
private fun MainContent(appBindings: AppBindings) {
6680
ElementTheme {

appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -362,23 +362,18 @@ class LoggedInFlowNode @AssistedInject constructor(
362362
override fun View(modifier: Modifier) {
363363
Box(modifier = modifier) {
364364
val lockScreenState by lockScreenStateService.lockState.collectAsState()
365-
when (lockScreenState) {
366-
LockScreenLockState.Unlocked -> {
367-
Children(
368-
navModel = backstack,
369-
modifier = Modifier,
370-
// Animate navigation to settings and to a room
371-
transitionHandler = rememberDefaultTransitionHandler(),
372-
)
373-
val isFtueDisplayed by ftueState.shouldDisplayFlow.collectAsState()
374-
if (!isFtueDisplayed) {
375-
PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LoggedInPermanent)
376-
}
377-
}
378-
LockScreenLockState.Locked -> {
379-
MoveActivityToBackgroundBackHandler()
380-
PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LockPermanent)
381-
}
365+
Children(
366+
navModel = backstack,
367+
modifier = Modifier,
368+
// Animate navigation to settings and to a room
369+
transitionHandler = rememberDefaultTransitionHandler(),
370+
)
371+
val isFtueDisplayed by ftueState.shouldDisplayFlow.collectAsState()
372+
if (!isFtueDisplayed) {
373+
PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LoggedInPermanent)
374+
}
375+
if (lockScreenState == LockScreenLockState.Locked) {
376+
PermanentChild(permanentNavModel = permanentNavModel, navTarget = NavTarget.LockPermanent)
382377
}
383378
}
384379
}

appnav/src/main/kotlin/io/element/android/appnav/MoveActivityToBackgroundBackHandler.kt

Lines changed: 0 additions & 39 deletions
This file was deleted.

changelog.d/1806.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
LockScreen : rework LoggedInFlowNode and back management when locked.

features/lockscreen/api/src/main/kotlin/io/element/android/features/lockscreen/api/LockScreenService.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ interface LockScreenService {
4444
fun isPinSetup(): Flow<Boolean>
4545
}
4646

47+
/**
48+
* Check if the app is currently locked.
49+
*/
50+
val LockScreenService.isLocked: Boolean
51+
get() = lockState.value == LockScreenLockState.Locked
52+
4753
/**
4854
* Makes sure the secure flag is set on the activity if the pin is setup.
4955
* @param activity the activity to set the flag on.

0 commit comments

Comments
 (0)