Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76694b6e authored by Helen Qin's avatar Helen Qin
Browse files

Bug fix caused by animation.

The animation state was not stored across activity relaunch upon
configuration changes and hence cause bug for relaunching the bottom
sheet after a configuration change. This fix stores the animation state
across configuration changes.

Test: manual
Bug: 281438960
Change-Id: I68fac15e89cc104ee8254d27ff02730399e7469b
parent 4c30ffa6
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ class CredentialManagerRepo(
    private val context: Context,
    intent: Intent,
    userConfigRepo: UserConfigRepo,
    isNewActivity: Boolean,
) {
    val requestInfo: RequestInfo?
    private val providerEnabledList: List<ProviderData>
@@ -125,7 +126,8 @@ class CredentialManagerRepo(
                        isPasskeyFirstUse = isPasskeyFirstUse,
                    )!!,
                    getCredentialUiState = null,
                    cancelRequestState = cancelUiRequestState
                    cancelRequestState = cancelUiRequestState,
                    isInitialRender = isNewActivity,
                )
            }
            RequestInfo.TYPE_GET -> {
@@ -140,7 +142,8 @@ class CredentialManagerRepo(
                    if (autoSelectEntry == null) ProviderActivityState.NOT_APPLICABLE
                    else ProviderActivityState.READY_TO_LAUNCH,
                    isAutoSelectFlow = autoSelectEntry != null,
                    cancelRequestState = cancelUiRequestState
                    cancelRequestState = cancelUiRequestState,
                    isInitialRender = isNewActivity,
                )
            }
            else -> {
@@ -149,6 +152,7 @@ class CredentialManagerRepo(
                        createCredentialUiState = null,
                        getCredentialUiState = null,
                        cancelRequestState = cancelUiRequestState,
                        isInitialRender = isNewActivity,
                    )
                } else {
                    throw IllegalStateException("Unrecognized request type: ${requestInfo?.type}")
+4 −2
Original line number Diff line number Diff line
@@ -62,7 +62,8 @@ class CredentialSelectorActivity : ComponentActivity() {
                return
            }
            val userConfigRepo = UserConfigRepo(this)
            val credManRepo = CredentialManagerRepo(this, intent, userConfigRepo)
            val credManRepo = CredentialManagerRepo(
                this, intent, userConfigRepo, isNewActivity = true)

            val backPressedCallback = object : OnBackPressedCallback(
                true // default to enabled
@@ -103,7 +104,8 @@ class CredentialSelectorActivity : ComponentActivity() {
                }
            } else {
                val userConfigRepo = UserConfigRepo(this)
                val credManRepo = CredentialManagerRepo(this, intent, userConfigRepo)
                val credManRepo = CredentialManagerRepo(
                    this, intent, userConfigRepo, isNewActivity = false)
                viewModel.onNewCredentialManagerRepo(credManRepo)
            }
        } catch (e: Exception) {
+6 −1
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ data class UiState(
    // launched immediately, and canceling it will cancel the whole UI flow.
    val isAutoSelectFlow: Boolean = false,
    val cancelRequestState: CancelUiRequestState?,
    val isInitialRender: Boolean,
)

data class CancelUiRequestState(
@@ -82,6 +83,10 @@ class CredentialSelectorViewModel(
        uiState = uiState.copy(dialogState = DialogState.COMPLETE)
    }

    fun onInitialRenderComplete() {
        uiState = uiState.copy(isInitialRender = false)
    }

    fun onCancellationUiRequested(appDisplayName: String?) {
        uiState = uiState.copy(cancelRequestState = CancelUiRequestState(appDisplayName))
    }
@@ -96,7 +101,7 @@ class CredentialSelectorViewModel(

    fun onNewCredentialManagerRepo(credManRepo: CredentialManagerRepo) {
        this.credManRepo = credManRepo
        uiState = credManRepo.initState()
        uiState = credManRepo.initState().copy(isInitialRender = false)

        if (this.credManRepo.requestInfo?.token != credManRepo.requestInfo?.token) {
            this.uiMetrics.resetInstanceId()
+4 −7
Original line number Diff line number Diff line
@@ -20,10 +20,6 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -40,9 +36,10 @@ import kotlinx.coroutines.launch
@Composable
fun ModalBottomSheet(
    sheetContent: @Composable ColumnScope.() -> Unit,
    onDismiss: () -> Unit
    onDismiss: () -> Unit,
    isInitialRender: Boolean,
    onInitialRenderComplete: () -> Unit,
) {
    var isInitialRender by remember { mutableStateOf(true) }
    val scope = rememberCoroutineScope()
    val state = rememberModalBottomSheetState(
        initialValue = ModalBottomSheetValue.Hidden,
@@ -64,7 +61,7 @@ fun ModalBottomSheet(
    LaunchedEffect(state.currentValue) {
        if (state.currentValue == ModalBottomSheetValue.Hidden) {
            if (isInitialRender) {
                isInitialRender = false
                onInitialRenderComplete()
                scope.launch { state.show() }
            } else {
                onDismiss()
+3 −1
Original line number Diff line number Diff line
@@ -164,7 +164,9 @@ fun CreateCredentialScreen(
                }
            }
        },
        onDismiss = viewModel::onUserCancel
        onDismiss = viewModel::onUserCancel,
        isInitialRender = viewModel.uiState.isInitialRender,
        onInitialRenderComplete = viewModel::onInitialRenderComplete,
    )
}

Loading