diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java')
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java | 125 |
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; + } + } + } |