diff options
21 files changed, 555 insertions, 196 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java index cc6df45c598f..1296990d4931 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -17,11 +17,13 @@ package com.android.keyguard; import android.content.Context; +import android.content.res.ColorStateList; import android.util.AttributeSet; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.View; +import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockscreenCredential; import com.android.systemui.R; @@ -29,6 +31,8 @@ import com.android.systemui.R; * Base class for PIN and password unlock screens. */ public abstract class KeyguardAbsKeyInputView extends KeyguardInputView { + protected KeyguardSecurityCallback mCallback; + protected SecurityMessageDisplay mSecurityMessageDisplay; protected View mEcaView; protected boolean mEnableHaptics; @@ -49,6 +53,19 @@ public abstract class KeyguardAbsKeyInputView extends KeyguardInputView { mEnableHaptics = enableHaptics; } + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + mCallback = callback; + } + + @Override + public void setLockPatternUtils(LockPatternUtils utils) { + } + + @Override + public void reset() { + } + protected abstract int getPasswordTextViewId(); protected abstract void resetState(); @@ -76,6 +93,29 @@ public abstract class KeyguardAbsKeyInputView extends KeyguardInputView { return mKeyDownListener != null && mKeyDownListener.onKeyDown(keyCode, event); } + @Override + public boolean needsInput() { + return false; + } + + @Override + public KeyguardSecurityCallback getCallback() { + return mCallback; + } + + @Override + public void showPromptReason(int reason) { + + } + + @Override + public void showMessage(CharSequence message, ColorStateList colorState) { + if (colorState != null) { + mSecurityMessageDisplay.setNextMessageColor(colorState); + } + mSecurityMessageDisplay.setMessage(message); + } + protected abstract int getPromptReasonStringRes(int reason); // Cause a VIRTUAL_KEY vibration @@ -87,6 +127,11 @@ public abstract class KeyguardAbsKeyInputView extends KeyguardInputView { } } + @Override + public boolean startDisappearAnimation(Runnable finishRunnable) { + return false; + } + public void setKeyDownListener(KeyDownListener keyDownListener) { mKeyDownListener = keyDownListener; } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java index d957628c52ab..0ddc9680a217 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -20,7 +20,6 @@ import static com.android.internal.util.LatencyTracker.ACTION_CHECK_CREDENTIAL; import static com.android.internal.util.LatencyTracker.ACTION_CHECK_CREDENTIAL_UNLOCKED; import static com.android.keyguard.KeyguardAbsKeyInputView.MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT; -import android.content.res.ColorStateList; import android.os.AsyncTask; import android.os.CountDownTimer; import android.os.SystemClock; @@ -39,6 +38,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey extends KeyguardInputViewController<T> { private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final LockPatternUtils mLockPatternUtils; + protected final KeyguardSecurityCallback mKeyguardSecurityCallback; private final LatencyTracker mLatencyTracker; private CountDownTimer mCountdownTimer; protected KeyguardMessageAreaController mMessageAreaController; @@ -59,7 +59,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey private final EmergencyButtonCallback mEmergencyButtonCallback = new EmergencyButtonCallback() { @Override public void onEmergencyButtonClickedWhenInCall() { - getKeyguardSecurityCallback().reset(); + mKeyguardSecurityCallback.reset(); } }; @@ -73,6 +73,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey super(view, securityMode, keyguardSecurityCallback); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; + mKeyguardSecurityCallback = keyguardSecurityCallback; mLatencyTracker = latencyTracker; KeyguardMessageArea kma = KeyguardMessageArea.findSecurityMessageDisplay(mView); mMessageAreaController = messageAreaControllerFactory.create(kma); @@ -111,19 +112,6 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey } } - @Override - public boolean needsInput() { - return false; - } - - @Override - public void showMessage(CharSequence message, ColorStateList colorState) { - if (colorState != null) { - mMessageAreaController.setNextMessageColor(colorState); - } - mMessageAreaController.setMessage(message); - } - // Allow subclasses to override this behavior protected boolean shouldLockout(long deadline) { return deadline != 0; @@ -156,14 +144,14 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey void onPasswordChecked(int userId, boolean matched, int timeoutMs, boolean isValidPassword) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { - getKeyguardSecurityCallback().reportUnlockAttempt(userId, true, 0); + mKeyguardSecurityCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mDismissing = true; - getKeyguardSecurityCallback().dismiss(true, userId); + mKeyguardSecurityCallback.dismiss(true, userId); } } else { if (isValidPassword) { - getKeyguardSecurityCallback().reportUnlockAttempt(userId, false, timeoutMs); + mKeyguardSecurityCallback.reportUnlockAttempt(userId, false, timeoutMs); if (timeoutMs > 0) { long deadline = mLockPatternUtils.setLockoutAttemptDeadline( userId, timeoutMs); @@ -248,8 +236,8 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey } protected void onUserInput() { - getKeyguardSecurityCallback().userActivity(); - getKeyguardSecurityCallback().onUserInput(); + mKeyguardSecurityCallback.userActivity(); + mKeyguardSecurityCallback.onUserInput(); mMessageAreaController.setMessage(""); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java index d42a53cc875e..976ec02e4f29 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java @@ -18,7 +18,6 @@ package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; -import android.view.MotionEvent; import android.widget.LinearLayout; import androidx.annotation.Nullable; @@ -26,7 +25,7 @@ import androidx.annotation.Nullable; /** * A Base class for all Keyguard password/pattern/pin related inputs. */ -public abstract class KeyguardInputView extends LinearLayout { +public abstract class KeyguardInputView extends LinearLayout implements KeyguardSecurityView { public KeyguardInputView(Context context) { super(context); @@ -40,16 +39,4 @@ public abstract class KeyguardInputView extends LinearLayout { public KeyguardInputView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } - - abstract CharSequence getTitle(); - - boolean disallowInterceptTouch(MotionEvent event) { - return false; - } - - void startAppearAnimation() {} - - boolean startDisappearAnimation(Runnable finishRunnable) { - return false; - } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java index fbda818740e8..c73149c7a8b9 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java @@ -19,6 +19,7 @@ package com.android.keyguard; import android.content.res.ColorStateList; import android.content.res.Resources; import android.telephony.TelephonyManager; +import android.view.MotionEvent; import android.view.inputmethod.InputMethodManager; import com.android.internal.util.LatencyTracker; @@ -36,38 +37,18 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> extends ViewController<T> implements KeyguardSecurityView { private final SecurityMode mSecurityMode; - private final KeyguardSecurityCallback mKeyguardSecurityCallback; - private boolean mPaused; - - - // The following is used to ignore callbacks from SecurityViews that are no longer current - // (e.g. face unlock). This avoids unwanted asynchronous events from messing with the - // state for the current security method. - private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() { - @Override - public void userActivity() { } - @Override - public void reportUnlockAttempt(int userId, boolean success, int timeoutMs) { } - @Override - public boolean isVerifyUnlockOnly() { - return false; - } - @Override - public void dismiss(boolean securityVerified, int targetUserId) { } - @Override - public void dismiss(boolean authenticated, int targetId, - boolean bypassSecondaryLockScreen) { } - @Override - public void onUserInput() { } - @Override - public void reset() {} - }; protected KeyguardInputViewController(T view, SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { super(view); mSecurityMode = securityMode; - mKeyguardSecurityCallback = keyguardSecurityCallback; + mView.setKeyguardCallback(keyguardSecurityCallback); + } + + @Override + public void init() { + super.init(); + mView.reset(); } @Override @@ -82,40 +63,63 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> return mSecurityMode; } - protected KeyguardSecurityCallback getKeyguardSecurityCallback() { - if (mPaused) { - return mNullCallback; - } - return mKeyguardSecurityCallback; + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + mView.setKeyguardCallback(callback); + } + + @Override + public void setLockPatternUtils(LockPatternUtils utils) { + mView.setLockPatternUtils(utils); } @Override public void reset() { + mView.reset(); } @Override public void onPause() { - mPaused = true; + mView.onPause(); } @Override public void onResume(int reason) { - mPaused = false; + mView.onResume(reason); + } + + @Override + public boolean needsInput() { + return mView.needsInput(); + } + + @Override + public KeyguardSecurityCallback getCallback() { + return mView.getCallback(); } @Override public void showPromptReason(int reason) { + mView.showPromptReason(reason); } @Override public void showMessage(CharSequence message, ColorStateList colorState) { + mView.showMessage(message, colorState); } + @Override + public void showUsabilityHint() { + mView.showUsabilityHint(); + } + + @Override public void startAppearAnimation() { mView.startAppearAnimation(); } + @Override public boolean startDisappearAnimation(Runnable finishRunnable) { return mView.startDisappearAnimation(finishRunnable); } @@ -125,6 +129,16 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> return mView.getTitle(); } + @Override + public boolean disallowInterceptTouch(MotionEvent event) { + return mView.disallowInterceptTouch(event); + } + + @Override + public void onStartingToHide() { + mView.onStartingToHide(); + } + /** Finds the index of this view in the suppplied parent view. */ public int getIndexIn(KeyguardSecurityViewFlipper view) { return view.indexOfChild(mView); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java index 580d7043a220..bfa187ea099b 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java @@ -103,6 +103,28 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { new View[]{ null, mEcaView, null }}; + + View cancelBtn = findViewById(R.id.cancel_button); + if (cancelBtn != null) { + cancelBtn.setOnClickListener(view -> { + mCallback.reset(); + mCallback.onCancelClicked(); + }); + } + } + + @Override + public void onPause() { + + } + + @Override + public void onResume(int reason) { + + } + + @Override + public void showUsabilityHint() { } @Override @@ -126,6 +148,11 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { }); } + @Override + public boolean startDisappearAnimation(final Runnable finishRunnable) { + return false; + } + public boolean startDisappearAnimation(boolean needsSlowUnlockTransition, final Runnable finishRunnable) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java index aaa5efec807e..3b865922503a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java @@ -16,13 +16,6 @@ package com.android.keyguard; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEVICE_ADMIN; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NONE; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PREPARE_FOR_UPDATE; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST; - import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; @@ -37,7 +30,8 @@ import com.android.systemui.R; * Displays an alphanumeric (latin-1) key entry for the user to enter * an unlock password */ -public class KeyguardPasswordView extends KeyguardAbsKeyInputView { +public class KeyguardPasswordView extends KeyguardAbsKeyInputView + implements KeyguardSecurityView { private final int mDisappearYTranslation; @@ -75,6 +69,21 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView { } @Override + public void onPause() { + } + + @Override + public void onResume(int reason) { + + } + + @Override + public boolean needsInput() { + return true; + } + + + @Override protected int getPromptReasonStringRes(int reason) { switch (reason) { case PROMPT_REASON_RESTART: @@ -130,6 +139,10 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView { } @Override + public void showUsabilityHint() { + } + + @Override public int getWrongPasswordStringId() { return R.string.kg_wrong_password; } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java index d34ea8c5e018..52afdcd1cacb 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java @@ -156,11 +156,6 @@ public class KeyguardPasswordViewController } @Override - public boolean needsInput() { - return true; - } - - @Override void resetState() { mPasswordEntry.setTextOperationUser(UserHandle.of(KeyguardUpdateMonitor.getCurrentUser())); mMessageAreaController.setMessage(""); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java index bdcf467c2456..8baee3b306ef 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java @@ -16,6 +16,7 @@ package com.android.keyguard; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.Rect; import android.os.SystemClock; import android.text.TextUtils; @@ -26,6 +27,7 @@ import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternView; import com.android.settingslib.animation.AppearAnimationCreator; import com.android.settingslib.animation.AppearAnimationUtils; @@ -56,6 +58,7 @@ public class KeyguardPatternView extends KeyguardInputView private final Rect mLockPatternScreenBounds = new Rect(); private LockPatternView mLockPatternView; + private KeyguardSecurityCallback mCallback; /** * Keeps track of the last time we poked the wake lock during dispatching of the touch event. @@ -68,6 +71,7 @@ public class KeyguardPatternView extends KeyguardInputView KeyguardMessageArea mSecurityMessageDisplay; private View mEcaView; private ViewGroup mContainer; + private int mDisappearYTranslation; public KeyguardPatternView(Context context) { this(context, null); @@ -87,6 +91,17 @@ public class KeyguardPatternView extends KeyguardInputView (long) (125 * DISAPPEAR_MULTIPLIER_LOCKED), 1.2f /* translationScale */, 0.6f /* delayScale */, AnimationUtils.loadInterpolator( mContext, android.R.interpolator.fast_out_linear_in)); + mDisappearYTranslation = getResources().getDimensionPixelSize( + R.dimen.disappear_y_translation); + } + + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + mCallback = callback; + } + + @Override + public void setLockPatternUtils(LockPatternUtils utils) { } @Override @@ -133,11 +148,46 @@ public class KeyguardPatternView extends KeyguardInputView } @Override - boolean disallowInterceptTouch(MotionEvent event) { + public void reset() { + } + + @Override + public void showUsabilityHint() { + } + + @Override + public boolean disallowInterceptTouch(MotionEvent event) { return !mLockPatternView.isEmpty() || mLockPatternScreenBounds.contains((int) event.getRawX(), (int) event.getRawY()); } + @Override + public boolean needsInput() { + return false; + } + + @Override + public void onPause() { + } + + @Override + public void onResume(int reason) { + } + + @Override + public KeyguardSecurityCallback getCallback() { + return mCallback; + } + + @Override + public void showPromptReason(int reason) { + } + + @Override + public void showMessage(CharSequence message, ColorStateList colorState) { + } + + @Override public void startAppearAnimation() { enableClipping(false); setAlpha(1f); @@ -146,7 +196,12 @@ public class KeyguardPatternView extends KeyguardInputView 0, mAppearAnimationUtils.getInterpolator()); mAppearAnimationUtils.startAnimation2d( mLockPatternView.getCellStates(), - () -> enableClipping(true), + new Runnable() { + @Override + public void run() { + enableClipping(true); + } + }, this); if (!TextUtils.isEmpty(mSecurityMessageDisplay.getText())) { mAppearAnimationUtils.createAnimation(mSecurityMessageDisplay, 0, @@ -158,6 +213,15 @@ public class KeyguardPatternView extends KeyguardInputView } } + /** + * @deprecated Use {@link #startDisappearAnimation(boolean, Runnable)} + */ + @Override + public boolean startDisappearAnimation(Runnable finishRunnable) { + // TODO(b/166448040): remove this when possible + return false; + } + public boolean startDisappearAnimation(boolean needsSlowUnlockTransition, final Runnable finishRunnable) { float durationMultiplier = needsSlowUnlockTransition ? DISAPPEAR_MULTIPLIER_LOCKED : 1f; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java index 3db9db7be00c..38b535049fb4 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java @@ -54,12 +54,13 @@ public class KeyguardPatternViewController private KeyguardMessageAreaController mMessageAreaController; private LockPatternView mLockPatternView; private CountDownTimer mCountdownTimer; + private KeyguardSecurityCallback mCallback; private AsyncTask<?, ?, ?> mPendingLockCheck; private EmergencyButtonCallback mEmergencyButtonCallback = new EmergencyButtonCallback() { @Override public void onEmergencyButtonClickedWhenInCall() { - getKeyguardSecurityCallback().reset(); + mCallback.reset(); } }; @@ -87,8 +88,8 @@ public class KeyguardPatternViewController @Override public void onPatternCellAdded(List<Cell> pattern) { - getKeyguardSecurityCallback().userActivity(); - getKeyguardSecurityCallback().onUserInput(); + mCallback.userActivity(); + mCallback.onUserInput(); } @Override @@ -140,8 +141,8 @@ public class KeyguardPatternViewController } }); if (pattern.size() > MIN_PATTERN_BEFORE_POKE_WAKELOCK) { - getKeyguardSecurityCallback().userActivity(); - getKeyguardSecurityCallback().onUserInput(); + mCallback.userActivity(); + mCallback.onUserInput(); } } @@ -149,15 +150,15 @@ public class KeyguardPatternViewController boolean isValidPattern) { boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; if (matched) { - getKeyguardSecurityCallback().reportUnlockAttempt(userId, true, 0); + mCallback.reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct); - getKeyguardSecurityCallback().dismiss(true, userId); + mCallback.dismiss(true, userId); } } else { mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong); if (isValidPattern) { - getKeyguardSecurityCallback().reportUnlockAttempt(userId, false, timeoutMs); + mCallback.reportUnlockAttempt(userId, false, timeoutMs); if (timeoutMs > 0) { long deadline = mLockPatternUtils.setLockoutAttemptDeadline( userId, timeoutMs); @@ -212,8 +213,8 @@ public class KeyguardPatternViewController View cancelBtn = mView.findViewById(R.id.cancel_button); if (cancelBtn != null) { cancelBtn.setOnClickListener(view -> { - getKeyguardSecurityCallback().reset(); - getKeyguardSecurityCallback().onCancelClicked(); + mCallback.reset(); + mCallback.onCancelClicked(); }); } } @@ -268,8 +269,8 @@ public class KeyguardPatternViewController } @Override - public boolean needsInput() { - return false; + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + mCallback = callback; } @Override diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java index 7fa43116a7b1..e579380fc8d5 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -16,13 +16,6 @@ package com.android.keyguard; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_DEVICE_ADMIN; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_NONE; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_PREPARE_FOR_UPDATE; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_RESTART; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_TIMEOUT; -import static com.android.keyguard.KeyguardSecurityView.PROMPT_REASON_USER_REQUEST; - import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java index 6769436be8ef..625ab5214da1 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java @@ -16,12 +16,9 @@ package com.android.keyguard; -import android.view.View; - import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.R; public class KeyguardPinViewController extends KeyguardPinBasedInputViewController<KeyguardPINView> { @@ -40,19 +37,6 @@ public class KeyguardPinViewController } @Override - protected void onViewAttached() { - super.onViewAttached(); - - View cancelBtn = mView.findViewById(R.id.cancel_button); - if (cancelBtn != null) { - cancelBtn.setOnClickListener(view -> { - getKeyguardSecurityCallback().reset(); - getKeyguardSecurityCallback().onCancelClicked(); - }); - } - } - - @Override void resetState() { super.resetState(); mMessageAreaController.setMessage(""); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index b62ea6bc2ff6..07f70c14b74a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -395,6 +395,10 @@ public class KeyguardSecurityContainer extends FrameLayout { mSecurityViewFlipper = findViewById(R.id.view_flipper); } + public void setLockPatternUtils(LockPatternUtils utils) { + mSecurityViewFlipper.setLockPatternUtils(utils); + } + @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { @@ -494,7 +498,16 @@ public class KeyguardSecurityContainer extends FrameLayout { } public void reset() { + mSecurityViewFlipper.reset(); mDisappearAnimRunning = false; } + + public KeyguardSecurityCallback getCallback() { + return mSecurityViewFlipper.getCallback(); + } + + public void showUsabilityHint() { + mSecurityViewFlipper.showUsabilityHint(); + } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 64676e55b038..2c7dce6e4302 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -50,6 +50,9 @@ import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.ViewController; +import java.util.ArrayList; +import java.util.List; + import javax.inject.Inject; /** Controller for {@link KeyguardSecurityContainer} */ @@ -68,6 +71,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final UiEventLogger mUiEventLogger; private final KeyguardStateController mKeyguardStateController; private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController; + private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private SecurityCallback mSecurityCallback; private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid; @@ -133,6 +137,28 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } }; + // The following is used to ignore callbacks from SecurityViews that are no longer current + // (e.g. face unlock). This avoids unwanted asynchronous events from messing with the + // state for the current security method. + private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() { + @Override + public void userActivity() { } + @Override + public void reportUnlockAttempt(int userId, boolean success, int timeoutMs) { } + @Override + public boolean isVerifyUnlockOnly() { + return false; + } + @Override + public void dismiss(boolean securityVerified, int targetUserId) { } + @Override + public void dismiss(boolean authenticated, int targetId, + boolean bypassSecondaryLockScreen) { } + @Override + public void onUserInput() { } + @Override + public void reset() {} + }; private SwipeListener mSwipeListener = new SwipeListener() { @Override @@ -163,6 +189,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mUiEventLogger = uiEventLogger; mKeyguardStateController = keyguardStateController; mSecurityViewFlipperController = securityViewFlipperController; + view.setLockPatternUtils(mLockPatternUtils); mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create( mKeyguardSecurityCallback); } @@ -186,7 +213,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void onPause() { mAdminSecondaryLockScreenController.hide(); if (mCurrentSecurityMode != SecurityMode.None) { - getCurrentSecurityController().onPause(); + getSecurityView(mCurrentSecurityMode).onPause(); } mView.onPause(); } @@ -210,13 +237,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard if (reason != PROMPT_REASON_NONE) { Log.i(TAG, "Strong auth required, reason: " + reason); } - getCurrentSecurityController().showPromptReason(reason); + getSecurityView(mCurrentSecurityMode).showPromptReason(reason); } } public void showMessage(CharSequence message, ColorStateList colorState) { if (mCurrentSecurityMode != SecurityMode.None) { - getCurrentSecurityController().showMessage(message, colorState); + getSecurityView(mCurrentSecurityMode).showMessage(message, colorState); } } @@ -240,7 +267,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onResume(int reason) { if (mCurrentSecurityMode != SecurityMode.None) { - getCurrentSecurityController().onResume(reason); + getSecurityView(mCurrentSecurityMode).onResume(reason); } mView.onResume( mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()), @@ -249,7 +276,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void startAppearAnimation() { if (mCurrentSecurityMode != SecurityMode.None) { - getCurrentSecurityController().startAppearAnimation(); + getSecurityView(mCurrentSecurityMode).startAppearAnimation(); } } @@ -257,7 +284,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mView.startDisappearAnimation(getCurrentSecurityMode()); if (mCurrentSecurityMode != SecurityMode.None) { - return getCurrentSecurityController().startDisappearAnimation(onFinishRunnable); + return getSecurityView(mCurrentSecurityMode).startDisappearAnimation( + onFinishRunnable); } return false; @@ -265,7 +293,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void onStartingToHide() { if (mCurrentSecurityMode != SecurityMode.None) { - getCurrentSecurityController().onStartingToHide(); + getSecurityView(mCurrentSecurityMode).onStartingToHide(); } } @@ -362,7 +390,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public boolean needsInput() { - return getCurrentSecurityController().needsInput(); + return mSecurityViewFlipperController.needsInput(); } /** @@ -379,19 +407,21 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard return; } - KeyguardInputViewController<KeyguardInputView> oldView = getCurrentSecurityController(); + KeyguardInputViewController oldView = getSecurityView(mCurrentSecurityMode); + KeyguardInputViewController newView = getSecurityView(securityMode); // Emulate Activity life cycle if (oldView != null) { oldView.onPause(); + oldView.setKeyguardCallback(mNullCallback); // ignore requests from old view } - - KeyguardInputViewController<KeyguardInputView> newView = changeSecurityMode(securityMode); if (newView != null) { newView.onResume(KeyguardSecurityView.VIEW_REVEALED); + newView.setKeyguardCallback(mKeyguardSecurityCallback); mSecurityViewFlipperController.show(newView); } + mCurrentSecurityMode = securityMode; mSecurityCallback.onSecurityModeChanged( securityMode, newView != null && newView.needsInput()); } @@ -440,14 +470,28 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } } - private KeyguardInputViewController<KeyguardInputView> getCurrentSecurityController() { - return mSecurityViewFlipperController - .getSecurityView(mCurrentSecurityMode, mKeyguardSecurityCallback); + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + // no-op. This should never be reset. } - private KeyguardInputViewController<KeyguardInputView> changeSecurityMode( - SecurityMode securityMode) { - mCurrentSecurityMode = securityMode; - return getCurrentSecurityController(); + @Override + public void setLockPatternUtils(LockPatternUtils utils) { + // We already have one of these. + } + + @Override + public KeyguardSecurityCallback getCallback() { + return mView.getCallback(); + } + + @Override + public void showUsabilityHint() { + mView.showUsabilityHint(); + } + + private KeyguardInputViewController getSecurityView(SecurityMode securityMode) { + return mSecurityViewFlipperController + .getSecurityView(securityMode, mKeyguardSecurityCallback); } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java index ac00e9453c97..43cef3acf147 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java @@ -18,9 +18,11 @@ package com.android.keyguard; import android.content.res.ColorStateList; import android.view.MotionEvent; +import com.android.internal.widget.LockPatternUtils; + public interface KeyguardSecurityView { - int SCREEN_ON = 1; - int VIEW_REVEALED = 2; + static public final int SCREEN_ON = 1; + static public final int VIEW_REVEALED = 2; int PROMPT_REASON_NONE = 0; @@ -61,6 +63,18 @@ public interface KeyguardSecurityView { int PROMPT_REASON_NON_STRONG_BIOMETRIC_TIMEOUT = 7; /** + * Interface back to keyguard to tell it when security + * @param callback + */ + void setKeyguardCallback(KeyguardSecurityCallback callback); + + /** + * Set {@link LockPatternUtils} object. Useful for providing a mock interface. + * @param utils + */ + void setLockPatternUtils(LockPatternUtils utils); + + /** * Reset the view and prepare to take input. This should do things like clearing the * password or pattern and clear error messages. */ @@ -87,6 +101,12 @@ public interface KeyguardSecurityView { boolean needsInput(); /** + * Get {@link KeyguardSecurityCallback} for the given object + * @return KeyguardSecurityCallback + */ + KeyguardSecurityCallback getCallback(); + + /** * Show a string explaining why the security view needs to be solved. * * @param reason a flag indicating which string should be shown, see {@link #PROMPT_REASON_NONE} @@ -103,6 +123,12 @@ public interface KeyguardSecurityView { void showMessage(CharSequence message, ColorStateList colorState); /** + * Instruct the view to show usability hints, if any. + * + */ + void showUsabilityHint(); + + /** * Starts the animation which should run when the security view appears. */ void startAppearAnimation(); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java index b8439af6daaa..24da3ad46f23 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java @@ -18,6 +18,7 @@ package com.android.keyguard; import android.annotation.NonNull; import android.content.Context; +import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Rect; import android.util.AttributeSet; @@ -30,6 +31,7 @@ import android.view.ViewHierarchyEncoder; import android.widget.FrameLayout; import android.widget.ViewFlipper; +import com.android.internal.widget.LockPatternUtils; import com.android.systemui.R; /** @@ -37,7 +39,7 @@ import com.android.systemui.R; * we can emulate {@link android.view.WindowManager.LayoutParams#FLAG_SLIPPERY} within a view * hierarchy. */ -public class KeyguardSecurityViewFlipper extends ViewFlipper { +public class KeyguardSecurityViewFlipper extends ViewFlipper implements KeyguardSecurityView { private static final String TAG = "KeyguardSecurityViewFlipper"; private static final boolean DEBUG = KeyguardConstants.DEBUG; @@ -67,16 +69,111 @@ public class KeyguardSecurityViewFlipper extends ViewFlipper { return result; } - KeyguardInputView getSecurityView() { + KeyguardSecurityView getSecurityView() { View child = getChildAt(getDisplayedChild()); - if (child instanceof KeyguardInputView) { - return (KeyguardInputView) child; + if (child instanceof KeyguardSecurityView) { + return (KeyguardSecurityView) child; } return null; } + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.setKeyguardCallback(callback); + } + } + + @Override + public void setLockPatternUtils(LockPatternUtils utils) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.setLockPatternUtils(utils); + } + } + + @Override + public void reset() { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.reset(); + } + } + + @Override + public void onPause() { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.onPause(); + } + } + + @Override + public void onResume(int reason) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.onResume(reason); + } + } + + @Override + public boolean needsInput() { + KeyguardSecurityView ksv = getSecurityView(); + return (ksv != null) ? ksv.needsInput() : false; + } + + @Override + public KeyguardSecurityCallback getCallback() { + KeyguardSecurityView ksv = getSecurityView(); + return (ksv != null) ? ksv.getCallback() : null; + } + + @Override + public void showPromptReason(int reason) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.showPromptReason(reason); + } + } + + @Override + public void showMessage(CharSequence message, ColorStateList colorState) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.showMessage(message, colorState); + } + } + + @Override + public void showUsabilityHint() { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.showUsabilityHint(); + } + } + + @Override + public void startAppearAnimation() { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + ksv.startAppearAnimation(); + } + } + + @Override + public boolean startDisappearAnimation(Runnable finishRunnable) { + KeyguardSecurityView ksv = getSecurityView(); + if (ksv != null) { + return ksv.startDisappearAnimation(finishRunnable); + } else { + return false; + } + } + + @Override public CharSequence getTitle() { - KeyguardInputView ksv = getSecurityView(); + KeyguardSecurityView ksv = getSecurityView(); if (ksv != null) { return ksv.getTitle(); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java index 49530355a6fb..73adff94650a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java @@ -16,10 +16,12 @@ package com.android.keyguard; +import android.content.res.ColorStateList; import android.util.Log; import android.view.LayoutInflater; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardInputViewController.Factory; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.keyguard.dagger.KeyguardBouncerScope; @@ -36,13 +38,12 @@ import javax.inject.Inject; */ @KeyguardBouncerScope public class KeyguardSecurityViewFlipperController - extends ViewController<KeyguardSecurityViewFlipper> { + extends ViewController<KeyguardSecurityViewFlipper> implements KeyguardSecurityView { private static final boolean DEBUG = KeyguardConstants.DEBUG; private static final String TAG = "KeyguardSecurityView"; - private final List<KeyguardInputViewController<KeyguardInputView>> mChildren = - new ArrayList<>(); + private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private final LayoutInflater mLayoutInflater; private final Factory mKeyguardSecurityViewControllerFactory; @@ -65,19 +66,80 @@ public class KeyguardSecurityViewFlipperController } + @Override + public void setKeyguardCallback(KeyguardSecurityCallback callback) { + mView.setKeyguardCallback(callback); + } + + @Override + public void setLockPatternUtils(LockPatternUtils utils) { + mView.setLockPatternUtils(utils); + } + + @Override public void reset() { - for (KeyguardInputViewController<KeyguardInputView> child : mChildren) { + for (KeyguardInputViewController child : mChildren) { child.reset(); } } + @Override + public void onPause() { + mView.onPause(); + } + + @Override + public void onResume(int reason) { + mView.onResume(reason); + } + + @Override + public boolean needsInput() { + return mView.needsInput(); + } + + @Override + public KeyguardSecurityCallback getCallback() { + return mView.getCallback(); + } + + @Override + public void showPromptReason(int reason) { + mView.showPromptReason(reason); + } + + @Override + public void showMessage(CharSequence message, ColorStateList colorState) { + mView.showMessage(message, colorState); + } + + @Override + public void showUsabilityHint() { + mView.showUsabilityHint(); + } + + @Override + public void startAppearAnimation() { + mView.startAppearAnimation(); + } + + @Override + public boolean startDisappearAnimation(Runnable finishRunnable) { + return mView.startDisappearAnimation(finishRunnable); + } + + @Override + public CharSequence getTitle() { + return mView.getTitle(); + } + @VisibleForTesting - KeyguardInputViewController<KeyguardInputView> getSecurityView(SecurityMode securityMode, + KeyguardInputViewController getSecurityView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { - KeyguardInputViewController<KeyguardInputView> childController = null; - for (KeyguardInputViewController<KeyguardInputView> child : mChildren) { - if (child.getSecurityMode() == securityMode) { - childController = child; + KeyguardInputViewController childController = null; + for (KeyguardInputViewController mChild : mChildren) { + if (mChild.getSecurityMode() == securityMode) { + childController = mChild; break; } } @@ -100,11 +162,6 @@ public class KeyguardSecurityViewFlipperController } } - if (childController == null) { - childController = new NullKeyguardInputViewController( - securityMode, keyguardSecurityCallback); - } - return childController; } @@ -121,28 +178,10 @@ public class KeyguardSecurityViewFlipperController } /** Makes the supplied child visible if it is contained win this view, */ - public void show(KeyguardInputViewController<KeyguardInputView> childController) { + public void show(KeyguardInputViewController childController) { int index = childController.getIndexIn(mView); if (index != -1) { mView.setDisplayedChild(index); } } - - private static class NullKeyguardInputViewController - extends KeyguardInputViewController<KeyguardInputView> { - protected NullKeyguardInputViewController(SecurityMode securityMode, - KeyguardSecurityCallback keyguardSecurityCallback) { - super(null, securityMode, keyguardSecurityCallback); - } - - @Override - public boolean needsInput() { - return false; - } - - @Override - public void onStartingToHide() { - - } - } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java index c0f9ce794628..202971d2a009 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java @@ -69,11 +69,31 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { } @Override + public void onPause() { + + } + + @Override + public void onResume(int reason) { + + } + + @Override + public void showUsabilityHint() { + + } + + @Override public void startAppearAnimation() { // noop. } @Override + public boolean startDisappearAnimation(Runnable finishRunnable) { + return false; + } + + @Override public CharSequence getTitle() { return getContext().getString( com.android.internal.R.string.keyguard_accessibility_sim_pin_unlock); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java index cc8bf4f2d028..3c29058e0afc 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java @@ -106,7 +106,7 @@ public class KeyguardSimPinViewController @Override public boolean startDisappearAnimation(Runnable finishRunnable) { - return false; + return mView.startDisappearAnimation(finishRunnable); } @Override @@ -137,7 +137,7 @@ public class KeyguardSimPinViewController mMessageAreaController.setMessage( com.android.systemui.R.string.kg_invalid_sim_pin_hint); mView.resetPasswordText(true /* animate */, true /* announce */); - getKeyguardSecurityCallback().userActivity(); + mKeyguardSecurityCallback.userActivity(); return; } @@ -159,7 +159,7 @@ public class KeyguardSimPinViewController mKeyguardUpdateMonitor.reportSimUnlocked(mSubId); mRemainingAttempts = -1; mShowDefaultMessage = true; - getKeyguardSecurityCallback().dismiss( + mKeyguardSecurityCallback.dismiss( true, KeyguardUpdateMonitor.getCurrentUser()); } else { mShowDefaultMessage = false; @@ -186,7 +186,7 @@ public class KeyguardSimPinViewController + " attemptsRemaining=" + result.getAttemptsRemaining()); } } - getKeyguardSecurityCallback().userActivity(); + mKeyguardSecurityCallback.userActivity(); mCheckSimPinThread = null; }); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java index 0d72c93e9041..932d9b966fa3 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java @@ -16,6 +16,7 @@ package com.android.keyguard; +import android.app.ProgressDialog; import android.content.Context; import android.util.AttributeSet; import android.util.Log; @@ -30,6 +31,8 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { private static final boolean DEBUG = KeyguardConstants.DEBUG; public static final String TAG = "KeyguardSimPukView"; + private ProgressDialog mSimUnlockProgressDialog = null; + public KeyguardSimPukView(Context context) { this(context, null); } @@ -87,6 +90,23 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { } @Override + public void showUsabilityHint() { + } + + @Override + public void onPause() { + // dismiss the dialog. + if (mSimUnlockProgressDialog != null) { + mSimUnlockProgressDialog.dismiss(); + mSimUnlockProgressDialog = null; + } + } + + @Override + public void onResume(int reason) { + } + + @Override public void startAppearAnimation() { // noop. } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java index a87374939ba6..9b2166b04415 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java @@ -69,7 +69,7 @@ public class KeyguardSimPukViewController if (simState == TelephonyManager.SIM_STATE_READY) { mRemainingAttempts = -1; mShowDefaultMessage = true; - getKeyguardSecurityCallback().dismiss(true, KeyguardUpdateMonitor.getCurrentUser()); + mKeyguardSecurityCallback.dismiss(true, KeyguardUpdateMonitor.getCurrentUser()); } else { resetState(); } @@ -273,7 +273,7 @@ public class KeyguardSimPukViewController mRemainingAttempts = -1; mShowDefaultMessage = true; - getKeyguardSecurityCallback().dismiss( + mKeyguardSecurityCallback.dismiss( true, KeyguardUpdateMonitor.getCurrentUser()); } else { mShowDefaultMessage = false; @@ -362,15 +362,6 @@ public class KeyguardSimPukViewController return mRemainingAttemptsDialog; } - @Override - public void onPause() { - // dismiss the dialog. - if (mSimUnlockProgressDialog != null) { - mSimUnlockProgressDialog.dismiss(); - mSimUnlockProgressDialog = null; - } - } - /** * Since the IPC can block, we want to run the request in a separate thread * with a callback. diff --git a/packages/SystemUI/src/com/android/systemui/util/ViewController.java b/packages/SystemUI/src/com/android/systemui/util/ViewController.java index c7aa780fcacb..f30472f75d29 100644 --- a/packages/SystemUI/src/com/android/systemui/util/ViewController.java +++ b/packages/SystemUI/src/com/android/systemui/util/ViewController.java @@ -67,12 +67,10 @@ public abstract class ViewController<T extends View> { } mInited = true; - if (mView != null) { - if (mView.isAttachedToWindow()) { - mOnAttachStateListener.onViewAttachedToWindow(mView); - } - mView.addOnAttachStateChangeListener(mOnAttachStateListener); + if (mView.isAttachedToWindow()) { + mOnAttachStateListener.onViewAttachedToWindow(mView); } + mView.addOnAttachStateChangeListener(mOnAttachStateListener); } /** |