summaryrefslogtreecommitdiff
path: root/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
diff options
context:
space:
mode:
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java')
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java125
1 files changed, 86 insertions, 39 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 87d3dd818232..11f951be9a15 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -33,8 +33,8 @@ import android.metrics.LogMaker;
import android.os.UserHandle;
import android.util.Log;
import android.util.Slog;
+import android.view.LayoutInflater;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.nano.MetricsProto;
@@ -44,10 +44,11 @@ import com.android.keyguard.KeyguardSecurityContainer.BouncerUiEvent;
import com.android.keyguard.KeyguardSecurityContainer.SecurityCallback;
import com.android.keyguard.KeyguardSecurityContainer.SwipeListener;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
-import com.android.keyguard.dagger.KeyguardBouncerScope;
import com.android.settingslib.utils.ThreadUtils;
+import com.android.systemui.R;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.InjectionInflationController;
import com.android.systemui.util.ViewController;
import java.util.ArrayList;
@@ -56,7 +57,6 @@ import java.util.List;
import javax.inject.Inject;
/** Controller for {@link KeyguardSecurityContainer} */
-@KeyguardBouncerScope
public class KeyguardSecurityContainerController extends ViewController<KeyguardSecurityContainer>
implements KeyguardSecurityView {
@@ -70,11 +70,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
private final MetricsLogger mMetricsLogger;
private final UiEventLogger mUiEventLogger;
private final KeyguardStateController mKeyguardStateController;
- private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController;
+ private final LayoutInflater mLayoutInflater;
+ private final KeyguardInputViewController.Factory mKeyguardSecurityViewControllerFactory;
private final List<KeyguardInputViewController> mChildren = new ArrayList<>();
private SecurityCallback mSecurityCallback;
- private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid;
+ private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
+ private KeyguardSecurityView mCurrentSecurityView;
private KeyguardSecurityCallback mKeyguardSecurityCallback = new KeyguardSecurityCallback() {
public void userActivity() {
@@ -180,7 +182,9 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
MetricsLogger metricsLogger,
UiEventLogger uiEventLogger,
KeyguardStateController keyguardStateController,
- KeyguardSecurityViewFlipperController securityViewFlipperController) {
+ LayoutInflater layoutInflater,
+ InjectionInflationController injectionInflationController,
+ KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory) {
super(view);
mLockPatternUtils = lockPatternUtils;
mUpdateMonitor = keyguardUpdateMonitor;
@@ -188,8 +192,9 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
mMetricsLogger = metricsLogger;
mUiEventLogger = uiEventLogger;
mKeyguardStateController = keyguardStateController;
- mSecurityViewFlipperController = securityViewFlipperController;
+ mLayoutInflater = injectionInflationController.injectable(layoutInflater);
view.setLockPatternUtils(mLockPatternUtils);
+ mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory;
mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create(
mKeyguardSecurityCallback);
}
@@ -211,8 +216,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
/** */
public void onPause() {
mAdminSecondaryLockScreenController.hide();
- if (mCurrentSecurityMode != SecurityMode.None) {
- getSecurityView(mCurrentSecurityMode).onPause();
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ getSecurityView(mCurrentSecuritySelection).onPause();
}
mView.onPause();
}
@@ -232,22 +237,22 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
@Override
public void showPromptReason(int reason) {
- if (mCurrentSecurityMode != SecurityMode.None) {
+ if (mCurrentSecuritySelection != SecurityMode.None) {
if (reason != PROMPT_REASON_NONE) {
Log.i(TAG, "Strong auth required, reason: " + reason);
}
- getSecurityView(mCurrentSecurityMode).showPromptReason(reason);
+ getSecurityView(mCurrentSecuritySelection).showPromptReason(reason);
}
}
public void showMessage(CharSequence message, ColorStateList colorState) {
- if (mCurrentSecurityMode != SecurityMode.None) {
- getSecurityView(mCurrentSecurityMode).showMessage(message, colorState);
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ getSecurityView(mCurrentSecuritySelection).showMessage(message, colorState);
}
}
- public SecurityMode getCurrentSecurityMode() {
- return mCurrentSecurityMode;
+ public SecurityMode getCurrentSecuritySelection() {
+ return mCurrentSecuritySelection;
}
public void dismiss(boolean authenticated, int targetUserId) {
@@ -264,8 +269,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
@Override
public void onResume(int reason) {
- if (mCurrentSecurityMode != SecurityMode.None) {
- getSecurityView(mCurrentSecurityMode).onResume(reason);
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ getSecurityView(mCurrentSecuritySelection).onResume(reason);
}
mView.onResume(
mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()),
@@ -273,16 +278,16 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
public void startAppearAnimation() {
- if (mCurrentSecurityMode != SecurityMode.None) {
- getSecurityView(mCurrentSecurityMode).startAppearAnimation();
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ getSecurityView(mCurrentSecuritySelection).startAppearAnimation();
}
}
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
- mView.startDisappearAnimation(getCurrentSecurityMode());
+ mView.startDisappearAnimation(getCurrentSecuritySelection());
- if (mCurrentSecurityMode != SecurityMode.None) {
- return getSecurityView(mCurrentSecurityMode).startDisappearAnimation(
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation(
onFinishRunnable);
}
@@ -290,8 +295,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
public void onStartingToHide() {
- if (mCurrentSecurityMode != SecurityMode.None) {
- getSecurityView(mCurrentSecurityMode).onStartingToHide();
+ if (mCurrentSecuritySelection != SecurityMode.None) {
+ getSecurityView(mCurrentSecuritySelection).onStartingToHide();
}
}
@@ -324,7 +329,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
finish = true;
eventSubtype = BOUNCER_DISMISS_BIOMETRIC;
uiEvent = BouncerUiEvent.BOUNCER_DISMISS_BIOMETRIC;
- } else if (SecurityMode.None == getCurrentSecurityMode()) {
+ } else if (SecurityMode.None == getCurrentSecuritySelection()) {
SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId);
if (SecurityMode.None == securityMode) {
finish = true; // no security required
@@ -334,7 +339,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
showSecurityScreen(securityMode); // switch to the alternate security view
}
} else if (authenticated) {
- switch (getCurrentSecurityMode()) {
+ switch (getCurrentSecuritySelection()) {
case Pattern:
case Password:
case PIN:
@@ -359,7 +364,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
break;
default:
- Log.v(TAG, "Bad security screen " + getCurrentSecurityMode()
+ Log.v(TAG, "Bad security screen " + getCurrentSecuritySelection()
+ ", fail safe");
showPrimarySecurityScreen(false);
break;
@@ -388,25 +393,23 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
public boolean needsInput() {
- return mSecurityViewFlipperController.needsInput();
+ return mView.needsInput();
}
+
/**
* Switches to the given security view unless it's already being shown, in which case
* this is a no-op.
*
* @param securityMode
*/
- @VisibleForTesting
void showSecurityScreen(SecurityMode securityMode) {
if (DEBUG) Log.d(TAG, "showSecurityScreen(" + securityMode + ")");
- if (securityMode == SecurityMode.Invalid || securityMode == mCurrentSecurityMode) {
- return;
- }
+ if (securityMode == mCurrentSecuritySelection) return;
- KeyguardInputViewController oldView = getSecurityView(mCurrentSecurityMode);
- KeyguardInputViewController newView = getSecurityView(securityMode);
+ KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection);
+ KeyguardSecurityView newView = getSecurityView(securityMode);
// Emulate Activity life cycle
if (oldView != null) {
@@ -416,10 +419,17 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
if (newView != null) {
newView.onResume(KeyguardSecurityView.VIEW_REVEALED);
newView.setKeyguardCallback(mKeyguardSecurityCallback);
- mSecurityViewFlipperController.show(newView);
}
- mCurrentSecurityMode = securityMode;
+ // Find and show this child.
+ for (KeyguardInputViewController child : mChildren) {
+ if (child.getSecurityMode().equals(securityMode)) {
+ child.showSelf();
+ }
+ }
+
+ mCurrentSecuritySelection = securityMode;
+ mCurrentSecurityView = newView;
mSecurityCallback.onSecurityModeChanged(
securityMode, newView != null && newView.needsInput());
}
@@ -488,8 +498,45 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
mView.showUsabilityHint();
}
- private KeyguardInputViewController getSecurityView(SecurityMode securityMode) {
- return mSecurityViewFlipperController
- .getSecurityView(securityMode, mKeyguardSecurityCallback);
+ private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
+ KeyguardInputViewController childController = null;
+ for (KeyguardInputViewController mChild : mChildren) {
+ if (mChild.getSecurityMode() == securityMode) {
+ childController = mChild;
+ break;
+ }
+ }
+
+ if (childController == null
+ && securityMode != SecurityMode.None && securityMode != SecurityMode.Invalid) {
+
+ int layoutId = getLayoutIdFor(securityMode);
+ KeyguardInputView view = null;
+ if (layoutId != 0) {
+ if (DEBUG) Log.v(TAG, "inflating id = " + layoutId);
+ view = (KeyguardInputView) mLayoutInflater.inflate(
+ layoutId, mView.getSecurityViewFlipper(), false);
+ mView.getSecurityViewFlipper().addView(view);
+ childController = mKeyguardSecurityViewControllerFactory.create(
+ view, securityMode, mKeyguardSecurityCallback);
+
+ mChildren.add(childController);
+ }
+ }
+
+ return childController;
}
+
+ private int getLayoutIdFor(SecurityMode securityMode) {
+ switch (securityMode) {
+ case Pattern: return com.android.systemui.R.layout.keyguard_pattern_view;
+ case PIN: return com.android.systemui.R.layout.keyguard_pin_view;
+ case Password: return com.android.systemui.R.layout.keyguard_password_view;
+ case SimPin: return com.android.systemui.R.layout.keyguard_sim_pin_view;
+ case SimPuk: return R.layout.keyguard_sim_puk_view;
+ default:
+ return 0;
+ }
+ }
+
}