From 619e36272cc93ba1a0b0252ca1273670123d09d4 Mon Sep 17 00:00:00 2001 From: Hao Dong Date: Mon, 9 Oct 2023 21:53:30 +0000 Subject: [PATCH] Fix recreate crash on Enroll v2. Replay sensorType once to avoid |contentLayoutId| to be null when Education is recreated. Bug: 295206773 Test: manual test - proceed Enroll page and rotate, no crash happens Change-Id: I0ec49d138ebe74044ba3554b38722984e78ed5d7 --- .../enrollment/activity/FingerprintEnrollmentV2Activity.kt | 3 +++ .../viewmodel/FingerprintEnrollFindSensorViewModel.kt | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt index 31afcb7e05a..bbd67b58de7 100644 --- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt +++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt @@ -255,6 +255,9 @@ class FingerprintEnrollmentV2Activity : FragmentActivity() { } if (theClass != null) { + supportFragmentManager.fragments.onEach { fragment -> + supportFragmentManager.beginTransaction().remove(fragment).commit() + } supportFragmentManager .beginTransaction() .setReorderingAllowed(true) diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt index 94bfce33e21..17f8132a7be 100644 --- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt +++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt @@ -25,11 +25,13 @@ import com.android.settings.biometrics.fingerprint2.shared.model.FingerEnrollSta import com.android.systemui.biometrics.shared.model.FingerprintSensorType import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combineTransform import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.transform import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -45,7 +47,9 @@ class FingerprintEnrollFindSensorViewModel( ) : ViewModel() { /** Represents the stream of sensor type. */ val sensorType: Flow = - fingerprintEnrollViewModel.sensorType.filterWhenEducationIsShown() + fingerprintEnrollViewModel.sensorType + .filterWhenEducationIsShown() + .shareIn(viewModelScope, SharingStarted.WhileSubscribed(), 1) private val _isUdfps: Flow = sensorType.map { it == FingerprintSensorType.UDFPS_OPTICAL || it == FingerprintSensorType.UDFPS_ULTRASONIC