Fix The pop-up security lock will disappear after rotate

Don't close BP when getting first onWindowFocusChanged(false) if device
orientation changed.

BUG: 236330327
Test: Reference b/236330327
Change-Id: Idc1e618e1549edf7a578dce52f4962f346f3d69d
This commit is contained in:
Vincent Wang
2022-08-23 09:46:13 +00:00
parent aaec84898c
commit 394ef3150c
2 changed files with 23 additions and 0 deletions

View File

@@ -129,6 +129,8 @@ public class AuthContainerView extends LinearLayout
private final Set<Integer> mFailedModalities = new HashSet<Integer>();
private final @Background DelayableExecutor mBackgroundExecutor;
private int mOrientation;
private boolean mSkipFirstLostFocus = false;
// Non-null only if the dialog is in the act of dismissing and has not sent the reason yet.
@Nullable @AuthDialogCallback.DismissedReason private Integer mPendingCallbackReason;
@@ -441,6 +443,12 @@ public class AuthContainerView extends LinearLayout
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (!hasWindowFocus) {
//it's a workaround to avoid closing BP incorrectly
//BP gets a onWindowFocusChanged(false) and then gets a onWindowFocusChanged(true)
if (mSkipFirstLostFocus) {
mSkipFirstLostFocus = false;
return;
}
Log.v(TAG, "Lost window focus, dismissing the dialog");
animateAway(AuthDialogCallback.DISMISSED_USER_CANCELED);
}
@@ -450,6 +458,9 @@ public class AuthContainerView extends LinearLayout
public void onAttachedToWindow() {
super.onAttachedToWindow();
//save the first orientation
mOrientation = getResources().getConfiguration().orientation;
mWakefulnessLifecycle.addObserver(this);
if (Utils.isBiometricAllowed(mConfig.mPromptInfo)) {
@@ -621,6 +632,12 @@ public class AuthContainerView extends LinearLayout
if (mBiometricView != null) {
mBiometricView.restoreState(savedState);
}
if (savedState != null) {
mSkipFirstLostFocus = savedState.getBoolean(
AuthDialog.KEY_BIOMETRIC_ORIENTATION_CHANGED);
}
wm.addView(this, getLayoutParams(mWindowToken, mConfig.mPromptInfo.getTitle()));
}
@@ -677,6 +694,10 @@ public class AuthContainerView extends LinearLayout
mBiometricView != null && mCredentialView == null);
outState.putBoolean(AuthDialog.KEY_CREDENTIAL_SHOWING, mCredentialView != null);
if (mOrientation != getResources().getConfiguration().orientation) {
outState.putBoolean(AuthDialog.KEY_BIOMETRIC_ORIENTATION_CHANGED, true);
}
if (mBiometricView != null) {
mBiometricView.onSaveState(outState);
}

View File

@@ -48,6 +48,8 @@ public interface AuthDialog extends Dumpable {
String KEY_BIOMETRIC_SENSOR_TYPE = "sensor_type";
String KEY_BIOMETRIC_SENSOR_PROPS = "sensor_props";
String KEY_BIOMETRIC_ORIENTATION_CHANGED = "orientation_changed";
int SIZE_UNKNOWN = 0;
/**
* Minimal UI, showing only biometric icon.