Loading packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java +2 −2 Original line number Diff line number Diff line Loading @@ -336,7 +336,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView> } public SecurityMode getCurrentSecurityMode() { return mKeyguardSecurityContainerController.getCurrentSecuritySelection(); return mKeyguardSecurityContainerController.getCurrentSecurityMode(); } public int getTop() { Loading @@ -350,7 +350,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView> } public boolean handleBackKey() { if (mKeyguardSecurityContainerController.getCurrentSecuritySelection() if (mKeyguardSecurityContainerController.getCurrentSecurityMode() != SecurityMode.None) { mKeyguardSecurityContainerController.dismiss( false, KeyguardUpdateMonitor.getCurrentUser()); Loading packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +3 −3 Original line number Diff line number Diff line Loading @@ -136,9 +136,9 @@ public class KeyguardInputViewController extends ViewController<KeyguardInputVie mView.onStartingToHide(); } public void showSelf() { KeyguardSecurityViewFlipper flipper = (KeyguardSecurityViewFlipper) mView.getParent(); flipper.setDisplayedChild(flipper.indexOfChild(mView)); /** Finds the index of this view in the suppplied parent view. */ public int getIndexIn(KeyguardSecurityViewFlipper view) { return view.indexOfChild(mView); } /** Factory for a {@link KeyguardInputViewController}. */ Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +0 −8 Original line number Diff line number Diff line Loading @@ -146,10 +146,6 @@ public class KeyguardSecurityContainer extends FrameLayout { } }; KeyguardSecurityViewFlipper getSecurityViewFlipper() { return mSecurityViewFlipper; } // Used to notify the container when something interesting happens. public interface SecurityCallback { boolean dismiss(boolean authenticated, int targetUserId, boolean bypassSecondaryLockScreen); Loading Loading @@ -501,10 +497,6 @@ public class KeyguardSecurityContainer extends FrameLayout { showDialog(null, message); } public boolean needsInput() { return mSecurityViewFlipper.needsInput(); } public void reset() { mSecurityViewFlipper.reset(); mDisappearAnimRunning = false; Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +39 −86 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -44,11 +44,10 @@ 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; Loading @@ -57,6 +56,7 @@ import java.util.List; import javax.inject.Inject; /** Controller for {@link KeyguardSecurityContainer} */ @KeyguardBouncerScope public class KeyguardSecurityContainerController extends ViewController<KeyguardSecurityContainer> implements KeyguardSecurityView { Loading @@ -70,13 +70,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final MetricsLogger mMetricsLogger; private final UiEventLogger mUiEventLogger; private final KeyguardStateController mKeyguardStateController; private final LayoutInflater mLayoutInflater; private final KeyguardInputViewController.Factory mKeyguardSecurityViewControllerFactory; private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController; private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private SecurityCallback mSecurityCallback; private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid; private KeyguardSecurityView mCurrentSecurityView; private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid; private KeyguardSecurityCallback mKeyguardSecurityCallback = new KeyguardSecurityCallback() { public void userActivity() { Loading Loading @@ -182,9 +180,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard MetricsLogger metricsLogger, UiEventLogger uiEventLogger, KeyguardStateController keyguardStateController, LayoutInflater layoutInflater, InjectionInflationController injectionInflationController, KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory) { KeyguardSecurityViewFlipperController securityViewFlipperController) { super(view); mLockPatternUtils = lockPatternUtils; mUpdateMonitor = keyguardUpdateMonitor; Loading @@ -192,9 +188,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mMetricsLogger = metricsLogger; mUiEventLogger = uiEventLogger; mKeyguardStateController = keyguardStateController; mLayoutInflater = injectionInflationController.injectable(layoutInflater); mSecurityViewFlipperController = securityViewFlipperController; view.setLockPatternUtils(mLockPatternUtils); mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory; mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create( mKeyguardSecurityCallback); } Loading @@ -216,8 +211,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** */ public void onPause() { mAdminSecondaryLockScreenController.hide(); if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onPause(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onPause(); } mView.onPause(); } Loading @@ -237,22 +232,22 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void showPromptReason(int reason) { if (mCurrentSecuritySelection != SecurityMode.None) { if (mCurrentSecurityMode != SecurityMode.None) { if (reason != PROMPT_REASON_NONE) { Log.i(TAG, "Strong auth required, reason: " + reason); } getSecurityView(mCurrentSecuritySelection).showPromptReason(reason); getSecurityView(mCurrentSecurityMode).showPromptReason(reason); } } public void showMessage(CharSequence message, ColorStateList colorState) { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).showMessage(message, colorState); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).showMessage(message, colorState); } } public SecurityMode getCurrentSecuritySelection() { return mCurrentSecuritySelection; public SecurityMode getCurrentSecurityMode() { return mCurrentSecurityMode; } public void dismiss(boolean authenticated, int targetUserId) { Loading @@ -269,8 +264,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onResume(int reason) { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onResume(reason); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onResume(reason); } mView.onResume( mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()), Loading @@ -278,16 +273,16 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public void startAppearAnimation() { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).startAppearAnimation(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).startAppearAnimation(); } } public boolean startDisappearAnimation(Runnable onFinishRunnable) { mView.startDisappearAnimation(getCurrentSecuritySelection()); mView.startDisappearAnimation(getCurrentSecurityMode()); if (mCurrentSecuritySelection != SecurityMode.None) { return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation( if (mCurrentSecurityMode != SecurityMode.None) { return getSecurityView(mCurrentSecurityMode).startDisappearAnimation( onFinishRunnable); } Loading @@ -295,8 +290,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public void onStartingToHide() { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onStartingToHide(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onStartingToHide(); } } Loading Loading @@ -329,7 +324,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard finish = true; eventSubtype = BOUNCER_DISMISS_BIOMETRIC; uiEvent = BouncerUiEvent.BOUNCER_DISMISS_BIOMETRIC; } else if (SecurityMode.None == getCurrentSecuritySelection()) { } else if (SecurityMode.None == getCurrentSecurityMode()) { SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); if (SecurityMode.None == securityMode) { finish = true; // no security required Loading @@ -339,7 +334,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard showSecurityScreen(securityMode); // switch to the alternate security view } } else if (authenticated) { switch (getCurrentSecuritySelection()) { switch (getCurrentSecurityMode()) { case Pattern: case Password: case PIN: Loading @@ -364,7 +359,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard break; default: Log.v(TAG, "Bad security screen " + getCurrentSecuritySelection() Log.v(TAG, "Bad security screen " + getCurrentSecurityMode() + ", fail safe"); showPrimarySecurityScreen(false); break; Loading Loading @@ -393,23 +388,25 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public boolean needsInput() { return mView.needsInput(); return mSecurityViewFlipperController.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 == mCurrentSecuritySelection) return; if (securityMode == SecurityMode.Invalid || securityMode == mCurrentSecurityMode) { return; } KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection); KeyguardSecurityView newView = getSecurityView(securityMode); KeyguardInputViewController oldView = getSecurityView(mCurrentSecurityMode); KeyguardInputViewController newView = getSecurityView(securityMode); // Emulate Activity life cycle if (oldView != null) { Loading @@ -419,17 +416,10 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard if (newView != null) { newView.onResume(KeyguardSecurityView.VIEW_REVEALED); newView.setKeyguardCallback(mKeyguardSecurityCallback); mSecurityViewFlipperController.show(newView); } // Find and show this child. for (KeyguardInputViewController child : mChildren) { if (child.getSecurityMode().equals(securityMode)) { child.showSelf(); } } mCurrentSecuritySelection = securityMode; mCurrentSecurityView = newView; mCurrentSecurityMode = securityMode; mSecurityCallback.onSecurityModeChanged( securityMode, newView != null && newView.needsInput()); } Loading Loading @@ -498,45 +488,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mView.showUsabilityHint(); } private KeyguardSecurityView getSecurityView(SecurityMode securityMode) { KeyguardInputViewController childController = null; for (KeyguardInputViewController mChild : mChildren) { if (mChild.getSecurityMode() == securityMode) { childController = mChild; break; } private KeyguardInputViewController getSecurityView(SecurityMode securityMode) { return mSecurityViewFlipperController .getSecurityView(securityMode, mKeyguardSecurityCallback); } 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; } } } packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java 0 → 100644 +186 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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; import com.android.systemui.R; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.ViewController; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** * Controller for a {@link KeyguardSecurityViewFlipper}. */ @KeyguardBouncerScope public class KeyguardSecurityViewFlipperController extends ViewController<KeyguardSecurityViewFlipper> implements KeyguardSecurityView { private static final boolean DEBUG = KeyguardConstants.DEBUG; private static final String TAG = "KeyguardSecurityView"; private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private final LayoutInflater mLayoutInflater; private final Factory mKeyguardSecurityViewControllerFactory; @Inject protected KeyguardSecurityViewFlipperController(KeyguardSecurityViewFlipper view, LayoutInflater layoutInflater, InjectionInflationController injectionInflationController, KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory) { super(view); mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory; mLayoutInflater = injectionInflationController.injectable(layoutInflater); } @Override protected void onViewAttached() { } @Override protected void onViewDetached() { } @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() { 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 getSecurityView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { 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, false); mView.addView(view); childController = mKeyguardSecurityViewControllerFactory.create( view, securityMode, keyguardSecurityCallback); 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; } } /** Makes the supplied child visible if it is contained win this view, */ public void show(KeyguardInputViewController childController) { int index = childController.getIndexIn(mView); if (index != -1) { mView.setDisplayedChild(index); } } } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java +2 −2 Original line number Diff line number Diff line Loading @@ -336,7 +336,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView> } public SecurityMode getCurrentSecurityMode() { return mKeyguardSecurityContainerController.getCurrentSecuritySelection(); return mKeyguardSecurityContainerController.getCurrentSecurityMode(); } public int getTop() { Loading @@ -350,7 +350,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView> } public boolean handleBackKey() { if (mKeyguardSecurityContainerController.getCurrentSecuritySelection() if (mKeyguardSecurityContainerController.getCurrentSecurityMode() != SecurityMode.None) { mKeyguardSecurityContainerController.dismiss( false, KeyguardUpdateMonitor.getCurrentUser()); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +3 −3 Original line number Diff line number Diff line Loading @@ -136,9 +136,9 @@ public class KeyguardInputViewController extends ViewController<KeyguardInputVie mView.onStartingToHide(); } public void showSelf() { KeyguardSecurityViewFlipper flipper = (KeyguardSecurityViewFlipper) mView.getParent(); flipper.setDisplayedChild(flipper.indexOfChild(mView)); /** Finds the index of this view in the suppplied parent view. */ public int getIndexIn(KeyguardSecurityViewFlipper view) { return view.indexOfChild(mView); } /** Factory for a {@link KeyguardInputViewController}. */ Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +0 −8 Original line number Diff line number Diff line Loading @@ -146,10 +146,6 @@ public class KeyguardSecurityContainer extends FrameLayout { } }; KeyguardSecurityViewFlipper getSecurityViewFlipper() { return mSecurityViewFlipper; } // Used to notify the container when something interesting happens. public interface SecurityCallback { boolean dismiss(boolean authenticated, int targetUserId, boolean bypassSecondaryLockScreen); Loading Loading @@ -501,10 +497,6 @@ public class KeyguardSecurityContainer extends FrameLayout { showDialog(null, message); } public boolean needsInput() { return mSecurityViewFlipper.needsInput(); } public void reset() { mSecurityViewFlipper.reset(); mDisappearAnimRunning = false; Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +39 −86 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -44,11 +44,10 @@ 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; Loading @@ -57,6 +56,7 @@ import java.util.List; import javax.inject.Inject; /** Controller for {@link KeyguardSecurityContainer} */ @KeyguardBouncerScope public class KeyguardSecurityContainerController extends ViewController<KeyguardSecurityContainer> implements KeyguardSecurityView { Loading @@ -70,13 +70,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final MetricsLogger mMetricsLogger; private final UiEventLogger mUiEventLogger; private final KeyguardStateController mKeyguardStateController; private final LayoutInflater mLayoutInflater; private final KeyguardInputViewController.Factory mKeyguardSecurityViewControllerFactory; private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController; private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private SecurityCallback mSecurityCallback; private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid; private KeyguardSecurityView mCurrentSecurityView; private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid; private KeyguardSecurityCallback mKeyguardSecurityCallback = new KeyguardSecurityCallback() { public void userActivity() { Loading Loading @@ -182,9 +180,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard MetricsLogger metricsLogger, UiEventLogger uiEventLogger, KeyguardStateController keyguardStateController, LayoutInflater layoutInflater, InjectionInflationController injectionInflationController, KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory) { KeyguardSecurityViewFlipperController securityViewFlipperController) { super(view); mLockPatternUtils = lockPatternUtils; mUpdateMonitor = keyguardUpdateMonitor; Loading @@ -192,9 +188,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mMetricsLogger = metricsLogger; mUiEventLogger = uiEventLogger; mKeyguardStateController = keyguardStateController; mLayoutInflater = injectionInflationController.injectable(layoutInflater); mSecurityViewFlipperController = securityViewFlipperController; view.setLockPatternUtils(mLockPatternUtils); mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory; mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create( mKeyguardSecurityCallback); } Loading @@ -216,8 +211,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** */ public void onPause() { mAdminSecondaryLockScreenController.hide(); if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onPause(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onPause(); } mView.onPause(); } Loading @@ -237,22 +232,22 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void showPromptReason(int reason) { if (mCurrentSecuritySelection != SecurityMode.None) { if (mCurrentSecurityMode != SecurityMode.None) { if (reason != PROMPT_REASON_NONE) { Log.i(TAG, "Strong auth required, reason: " + reason); } getSecurityView(mCurrentSecuritySelection).showPromptReason(reason); getSecurityView(mCurrentSecurityMode).showPromptReason(reason); } } public void showMessage(CharSequence message, ColorStateList colorState) { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).showMessage(message, colorState); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).showMessage(message, colorState); } } public SecurityMode getCurrentSecuritySelection() { return mCurrentSecuritySelection; public SecurityMode getCurrentSecurityMode() { return mCurrentSecurityMode; } public void dismiss(boolean authenticated, int targetUserId) { Loading @@ -269,8 +264,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard @Override public void onResume(int reason) { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onResume(reason); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onResume(reason); } mView.onResume( mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()), Loading @@ -278,16 +273,16 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public void startAppearAnimation() { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).startAppearAnimation(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).startAppearAnimation(); } } public boolean startDisappearAnimation(Runnable onFinishRunnable) { mView.startDisappearAnimation(getCurrentSecuritySelection()); mView.startDisappearAnimation(getCurrentSecurityMode()); if (mCurrentSecuritySelection != SecurityMode.None) { return getSecurityView(mCurrentSecuritySelection).startDisappearAnimation( if (mCurrentSecurityMode != SecurityMode.None) { return getSecurityView(mCurrentSecurityMode).startDisappearAnimation( onFinishRunnable); } Loading @@ -295,8 +290,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public void onStartingToHide() { if (mCurrentSecuritySelection != SecurityMode.None) { getSecurityView(mCurrentSecuritySelection).onStartingToHide(); if (mCurrentSecurityMode != SecurityMode.None) { getSecurityView(mCurrentSecurityMode).onStartingToHide(); } } Loading Loading @@ -329,7 +324,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard finish = true; eventSubtype = BOUNCER_DISMISS_BIOMETRIC; uiEvent = BouncerUiEvent.BOUNCER_DISMISS_BIOMETRIC; } else if (SecurityMode.None == getCurrentSecuritySelection()) { } else if (SecurityMode.None == getCurrentSecurityMode()) { SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); if (SecurityMode.None == securityMode) { finish = true; // no security required Loading @@ -339,7 +334,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard showSecurityScreen(securityMode); // switch to the alternate security view } } else if (authenticated) { switch (getCurrentSecuritySelection()) { switch (getCurrentSecurityMode()) { case Pattern: case Password: case PIN: Loading @@ -364,7 +359,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard break; default: Log.v(TAG, "Bad security screen " + getCurrentSecuritySelection() Log.v(TAG, "Bad security screen " + getCurrentSecurityMode() + ", fail safe"); showPrimarySecurityScreen(false); break; Loading Loading @@ -393,23 +388,25 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } public boolean needsInput() { return mView.needsInput(); return mSecurityViewFlipperController.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 == mCurrentSecuritySelection) return; if (securityMode == SecurityMode.Invalid || securityMode == mCurrentSecurityMode) { return; } KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection); KeyguardSecurityView newView = getSecurityView(securityMode); KeyguardInputViewController oldView = getSecurityView(mCurrentSecurityMode); KeyguardInputViewController newView = getSecurityView(securityMode); // Emulate Activity life cycle if (oldView != null) { Loading @@ -419,17 +416,10 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard if (newView != null) { newView.onResume(KeyguardSecurityView.VIEW_REVEALED); newView.setKeyguardCallback(mKeyguardSecurityCallback); mSecurityViewFlipperController.show(newView); } // Find and show this child. for (KeyguardInputViewController child : mChildren) { if (child.getSecurityMode().equals(securityMode)) { child.showSelf(); } } mCurrentSecuritySelection = securityMode; mCurrentSecurityView = newView; mCurrentSecurityMode = securityMode; mSecurityCallback.onSecurityModeChanged( securityMode, newView != null && newView.needsInput()); } Loading Loading @@ -498,45 +488,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mView.showUsabilityHint(); } private KeyguardSecurityView getSecurityView(SecurityMode securityMode) { KeyguardInputViewController childController = null; for (KeyguardInputViewController mChild : mChildren) { if (mChild.getSecurityMode() == securityMode) { childController = mChild; break; } private KeyguardInputViewController getSecurityView(SecurityMode securityMode) { return mSecurityViewFlipperController .getSecurityView(securityMode, mKeyguardSecurityCallback); } 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; } } }
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java 0 → 100644 +186 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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; import com.android.systemui.R; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.ViewController; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** * Controller for a {@link KeyguardSecurityViewFlipper}. */ @KeyguardBouncerScope public class KeyguardSecurityViewFlipperController extends ViewController<KeyguardSecurityViewFlipper> implements KeyguardSecurityView { private static final boolean DEBUG = KeyguardConstants.DEBUG; private static final String TAG = "KeyguardSecurityView"; private final List<KeyguardInputViewController> mChildren = new ArrayList<>(); private final LayoutInflater mLayoutInflater; private final Factory mKeyguardSecurityViewControllerFactory; @Inject protected KeyguardSecurityViewFlipperController(KeyguardSecurityViewFlipper view, LayoutInflater layoutInflater, InjectionInflationController injectionInflationController, KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory) { super(view); mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory; mLayoutInflater = injectionInflationController.injectable(layoutInflater); } @Override protected void onViewAttached() { } @Override protected void onViewDetached() { } @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() { 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 getSecurityView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { 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, false); mView.addView(view); childController = mKeyguardSecurityViewControllerFactory.create( view, securityMode, keyguardSecurityCallback); 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; } } /** Makes the supplied child visible if it is contained win this view, */ public void show(KeyguardInputViewController childController) { int index = childController.getIndexIn(mView); if (index != -1) { mView.setDisplayedChild(index); } } }