diff options
6 files changed, 25 insertions, 13 deletions
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt index 0f5280efcdc0..78ee81921f25 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt @@ -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}") diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt index 54a8678df9cc..c409ba6aa78e 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt @@ -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) { diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt index 081490e50907..f2377db86609 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt @@ -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() diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt index 339968158a91..bd4375f4513e 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt @@ -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() diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt index a258984fd70b..a378f1c16753 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt @@ -164,7 +164,9 @@ fun CreateCredentialScreen( } } }, - onDismiss = viewModel::onUserCancel + onDismiss = viewModel::onUserCancel, + isInitialRender = viewModel.uiState.isInitialRender, + onInitialRenderComplete = viewModel::onInitialRenderComplete, ) } diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt index 31af7aa78c69..40c99ee07d69 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt @@ -148,6 +148,8 @@ fun GetCredentialScreen( } }, onDismiss = viewModel::onUserCancel, + isInitialRender = viewModel.uiState.isInitialRender, + onInitialRenderComplete = viewModel::onInitialRenderComplete, ) } } |