[BiometricsV2] Fix intro overlap enrolling page

Fix fragment overlapped if user rotates device on findSensor page, then
enter enrolling page and back again.

It is because the flag isFirstFragmentAdded is not saved and restored
after activity recreated

Bug: 288212767
Test: atest FingerprintEnrollmentActivityTest
Test: atest FingerprintEnrollmentViewModelTest
Test: atest biometrics-enrollment-test
Test: Manually test this scenario
Change-Id: I5b582582d97caac2488b787f551c50abec9f810c
This commit is contained in:
Milton Wu
2023-06-27 19:00:37 +08:00
parent 4dd2e56ddf
commit 570b23e0a0
4 changed files with 339 additions and 69 deletions

View File

@@ -53,12 +53,17 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
@VisibleForTesting
static final String SAVED_STATE_IS_NEW_FINGERPRINT_ADDED = "is_new_fingerprint_added";
@VisibleForTesting
static final String SAVED_STATE_IS_FIRST_FRAGMENT_ADDED = "is_first_fragment_added";
@NonNull private final FingerprintRepository mFingerprintRepository;
private final AtomicBoolean mIsWaitingActivityResult = new AtomicBoolean(false);
private final MutableLiveData<ActivityResult> mSetResultLiveData = new MutableLiveData<>();
@NonNull private final EnrollmentRequest mRequest;
private boolean mIsNewFingerprintAdded = false;
/** Flag for FragmentManager::addToBackStack() */
private boolean mIsFirstFragmentAdded = false;
public FingerprintEnrollmentViewModel(
@NonNull Application application,
@@ -145,7 +150,7 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
/**
* Handle savedInstanceState from activity onCreated()
*/
public void setSavedInstanceState(@Nullable Bundle savedInstanceState) {
public void onRestoreInstanceState(@Nullable Bundle savedInstanceState) {
if (savedInstanceState == null) {
return;
}
@@ -154,6 +159,8 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
);
mIsNewFingerprintAdded = savedInstanceState.getBoolean(
SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, false);
mIsFirstFragmentAdded = savedInstanceState.getBoolean(
SAVED_STATE_IS_FIRST_FRAGMENT_ADDED, false);
}
/**
@@ -162,6 +169,7 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, mIsWaitingActivityResult.get());
outState.putBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, mIsNewFingerprintAdded);
outState.putBoolean(SAVED_STATE_IS_FIRST_FRAGMENT_ADDED, mIsFirstFragmentAdded);
}
/**
@@ -193,6 +201,17 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
mIsNewFingerprintAdded = true;
}
public boolean isFirstFragmentAdded() {
return mIsFirstFragmentAdded;
}
/**
* set mIsFirstFragmentAdded to true, this flag will be used during adding fragment
*/
public void setIsFirstFragmentAdded() {
mIsFirstFragmentAdded = true;
}
/**
* Update FINGERPRINT_SUGGESTION_ACTIVITY into package manager
*/