diff options
| author | 2022-08-23 09:46:13 +0000 | |
|---|---|---|
| committer | 2022-08-25 06:20:42 +0000 | |
| commit | 394ef3150ce01984d6c20f070e65834a16206183 (patch) | |
| tree | 38aad3a6c2f842dd2923d4f188d1ef77b8ebe652 | |
| parent | aaec84898c78c11be0ee592ce113a9c32a8e4002 (diff) | |
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
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java | 21 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index 84e1c3d4c8f0..86837366e0b7 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -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); } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java index 51f39b358659..cd0fc3737594 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java @@ -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. |