summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Helen Qin <helenqin@google.com> 2023-05-08 02:52:30 +0000
committer Helen Qin <helenqin@google.com> 2023-05-08 02:52:30 +0000
commit76694b6ebb6dd23b6443a20112190b8b436e4112 (patch)
tree08901a79f8bc0f6d950aba0b336c8ac8773073ba
parent4c30ffa634573a46dfdbd0549bee841d30c82371 (diff)
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
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt8
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt6
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt7
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/common/ui/BottomSheet.kt11
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt4
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt2
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,
)
}
}