Merge "Fix The pop-up security lock will disappear after rotate" into tm-qpr-dev am: f2b50de574

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19711753

Change-Id: I0866ae1bccf45e55af354f8ecc65dec19d4671b5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Vincent Wang
2022-08-31 03:54:11 +00:00
committed by Automerger Merge Worker
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 Set<Integer> mFailedModalities = new HashSet<Integer>();
private final @Background DelayableExecutor mBackgroundExecutor; 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. // 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; @Nullable @AuthDialogCallback.DismissedReason private Integer mPendingCallbackReason;
@@ -441,6 +443,12 @@ public class AuthContainerView extends LinearLayout
public void onWindowFocusChanged(boolean hasWindowFocus) { public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus); super.onWindowFocusChanged(hasWindowFocus);
if (!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"); Log.v(TAG, "Lost window focus, dismissing the dialog");
animateAway(AuthDialogCallback.DISMISSED_USER_CANCELED); animateAway(AuthDialogCallback.DISMISSED_USER_CANCELED);
} }
@@ -450,6 +458,9 @@ public class AuthContainerView extends LinearLayout
public void onAttachedToWindow() { public void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
//save the first orientation
mOrientation = getResources().getConfiguration().orientation;
mWakefulnessLifecycle.addObserver(this); mWakefulnessLifecycle.addObserver(this);
if (Utils.isBiometricAllowed(mConfig.mPromptInfo)) { if (Utils.isBiometricAllowed(mConfig.mPromptInfo)) {
@@ -621,6 +632,12 @@ public class AuthContainerView extends LinearLayout
if (mBiometricView != null) { if (mBiometricView != null) {
mBiometricView.restoreState(savedState); mBiometricView.restoreState(savedState);
} }
if (savedState != null) {
mSkipFirstLostFocus = savedState.getBoolean(
AuthDialog.KEY_BIOMETRIC_ORIENTATION_CHANGED);
}
wm.addView(this, getLayoutParams(mWindowToken, mConfig.mPromptInfo.getTitle())); wm.addView(this, getLayoutParams(mWindowToken, mConfig.mPromptInfo.getTitle()));
} }
@@ -677,6 +694,10 @@ public class AuthContainerView extends LinearLayout
mBiometricView != null && mCredentialView == null); mBiometricView != null && mCredentialView == null);
outState.putBoolean(AuthDialog.KEY_CREDENTIAL_SHOWING, 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) { if (mBiometricView != null) {
mBiometricView.onSaveState(outState); 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_TYPE = "sensor_type";
String KEY_BIOMETRIC_SENSOR_PROPS = "sensor_props"; String KEY_BIOMETRIC_SENSOR_PROPS = "sensor_props";
String KEY_BIOMETRIC_ORIENTATION_CHANGED = "orientation_changed";
int SIZE_UNKNOWN = 0; int SIZE_UNKNOWN = 0;
/** /**
* Minimal UI, showing only biometric icon. * Minimal UI, showing only biometric icon.