summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java45
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java28
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java15
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java82
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java27
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPasswordView.java29
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java68
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java25
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java16
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java13
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java80
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java30
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java107
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java105
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java20
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java8
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java20
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/ViewController.java8
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);
}
/**