Revert "5/N Add KeyguardSecurityViewFlipperController."
Revert submission 12585643-b166448040-keyguard-message-area Reason for revert: http://b/169081305 & http://b/169020145 Reverted Changes: I6fa05012c:4/N Setup Controller fo KeyguardSecurityContainer.... Iecf265744:5/N Add KeyguardSecurityViewFlipperController. I90ab99b2f:6/N Add Controller for KeyguardPatternView I4b74eddd1:7/N controllers for remaining Keyguard Password Vi... I805286374:8/N Remove View Injection from KeyguardMessageArea... I362755980:9/N Clean Up Keyguard Class Structure Change-Id: I5cbe04c0cfb1c081fbf2e9958cb22dca3e4d80ad Fixes: 169081305 Fixes: 169020145
This commit is contained in:
@@ -336,7 +336,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
|
||||
}
|
||||
|
||||
public SecurityMode getCurrentSecurityMode() {
|
||||
return mKeyguardSecurityContainerController.getCurrentSecurityMode();
|
||||
return mKeyguardSecurityContainerController.getCurrentSecuritySelection();
|
||||
}
|
||||
|
||||
public int getTop() {
|
||||
@@ -350,7 +350,7 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
|
||||
}
|
||||
|
||||
public boolean handleBackKey() {
|
||||
if (mKeyguardSecurityContainerController.getCurrentSecurityMode()
|
||||
if (mKeyguardSecurityContainerController.getCurrentSecuritySelection()
|
||||
!= SecurityMode.None) {
|
||||
mKeyguardSecurityContainerController.dismiss(
|
||||
false, KeyguardUpdateMonitor.getCurrentUser());
|
||||
|
||||
@@ -136,9 +136,9 @@ public class KeyguardInputViewController extends ViewController<KeyguardInputVie
|
||||
mView.onStartingToHide();
|
||||
}
|
||||
|
||||
/** Finds the index of this view in the suppplied parent view. */
|
||||
public int getIndexIn(KeyguardSecurityViewFlipper view) {
|
||||
return view.indexOfChild(mView);
|
||||
public void showSelf() {
|
||||
KeyguardSecurityViewFlipper flipper = (KeyguardSecurityViewFlipper) mView.getParent();
|
||||
flipper.setDisplayedChild(flipper.indexOfChild(mView));
|
||||
}
|
||||
|
||||
/** Factory for a {@link KeyguardInputViewController}. */
|
||||
|
||||
@@ -146,6 +146,10 @@ 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);
|
||||
@@ -497,6 +501,10 @@ public class KeyguardSecurityContainer extends FrameLayout {
|
||||
showDialog(null, message);
|
||||
}
|
||||
|
||||
public boolean needsInput() {
|
||||
return mSecurityViewFlipper.needsInput();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
mSecurityViewFlipper.reset();
|
||||
mDisappearAnimRunning = false;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,186 +0,0 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,6 @@ import android.view.ViewGroup;
|
||||
import com.android.keyguard.KeyguardHostView;
|
||||
import com.android.keyguard.KeyguardMessageArea;
|
||||
import com.android.keyguard.KeyguardSecurityContainer;
|
||||
import com.android.keyguard.KeyguardSecurityViewFlipper;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBouncer;
|
||||
|
||||
@@ -59,15 +58,7 @@ public interface KeyguardBouncerModule {
|
||||
/** */
|
||||
@Provides
|
||||
@KeyguardBouncerScope
|
||||
static KeyguardSecurityContainer providesKeyguardSecurityContainer(KeyguardHostView hostView) {
|
||||
static KeyguardSecurityContainer preovidesKeyguardSecurityContainer(KeyguardHostView hostView) {
|
||||
return hostView.findViewById(R.id.keyguard_security_container);
|
||||
}
|
||||
|
||||
/** */
|
||||
@Provides
|
||||
@KeyguardBouncerScope
|
||||
static KeyguardSecurityViewFlipper providesKeyguardSecurityViewFlipper(
|
||||
KeyguardSecurityContainer containerView) {
|
||||
return containerView.findViewById(R.id.view_flipper);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,14 +17,18 @@
|
||||
package com.android.keyguard;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowInsetsController;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
@@ -35,6 +39,7 @@ import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
@@ -71,15 +76,21 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private KeyguardStateController mKeyguardStateController;
|
||||
@Mock
|
||||
private KeyguardInputViewController mInputViewController;
|
||||
private LayoutInflater mLayoutInflater;
|
||||
@Mock
|
||||
private InjectionInflationController mInjectionInflationController;
|
||||
@Mock
|
||||
private KeyguardInputViewController.Factory mKeyguardSecurityViewControllerFactory;
|
||||
@Mock
|
||||
private KeyguardInputViewController mKeyguardInputViewController;
|
||||
@Mock
|
||||
private KeyguardInputView mInputView;
|
||||
@Mock
|
||||
private KeyguardSecurityContainer.SecurityCallback mSecurityCallback;
|
||||
@Mock
|
||||
private WindowInsetsController mWindowInsetsController;
|
||||
@Mock
|
||||
private KeyguardSecurityViewFlipper mSecurityViewFlipper;
|
||||
@Mock
|
||||
private KeyguardSecurityViewFlipperController mKeyguardSecurityViewFlipperController;
|
||||
|
||||
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
|
||||
|
||||
@@ -87,28 +98,39 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
public void setup() {
|
||||
when(mAdminSecondaryLockScreenControllerFactory.create(any(KeyguardSecurityCallback.class)))
|
||||
.thenReturn(mAdminSecondaryLockScreenController);
|
||||
when(mInjectionInflationController.injectable(mLayoutInflater)).thenReturn(mLayoutInflater);
|
||||
when(mKeyguardSecurityViewControllerFactory.create(
|
||||
any(KeyguardInputView.class), any(SecurityMode.class),
|
||||
any(KeyguardSecurityCallback.class)))
|
||||
.thenReturn(mKeyguardInputViewController);
|
||||
when(mView.getSecurityViewFlipper()).thenReturn(mSecurityViewFlipper);
|
||||
when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
|
||||
|
||||
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController(
|
||||
mView, mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
|
||||
mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
|
||||
mKeyguardStateController, mKeyguardSecurityViewFlipperController);
|
||||
mKeyguardStateController, mLayoutInflater, mInjectionInflationController,
|
||||
mKeyguardSecurityViewControllerFactory
|
||||
);
|
||||
|
||||
mKeyguardSecurityContainerController.setSecurityCallback(mSecurityCallback);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showSecurityScreen_canInflateAllModes() {
|
||||
SecurityMode[] modes = SecurityMode.values();
|
||||
for (SecurityMode mode : modes) {
|
||||
when(mInputViewController.getSecurityMode()).thenReturn(mode);
|
||||
KeyguardSecurityModel.SecurityMode[] modes =
|
||||
KeyguardSecurityModel.SecurityMode.values();
|
||||
for (KeyguardSecurityModel.SecurityMode mode : modes) {
|
||||
reset(mLayoutInflater);
|
||||
when(mLayoutInflater.inflate(anyInt(), eq(mSecurityViewFlipper), eq(false)))
|
||||
.thenReturn(mInputView);
|
||||
when(mKeyguardInputViewController.getSecurityMode()).thenReturn(mode);
|
||||
mKeyguardSecurityContainerController.showSecurityScreen(mode);
|
||||
if (mode == SecurityMode.Invalid) {
|
||||
verify(mKeyguardSecurityViewFlipperController, never()).getSecurityView(
|
||||
any(SecurityMode.class), any(KeyguardSecurityCallback.class));
|
||||
if (mode == SecurityMode.Invalid || mode == SecurityMode.None) {
|
||||
verify(mLayoutInflater, never()).inflate(
|
||||
anyInt(), any(ViewGroup.class), anyBoolean());
|
||||
} else {
|
||||
verify(mKeyguardSecurityViewFlipperController).getSecurityView(
|
||||
eq(mode), any(KeyguardSecurityCallback.class));
|
||||
verify(mLayoutInflater).inflate(anyInt(), eq(mSecurityViewFlipper), eq(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -116,15 +138,14 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void startDisappearAnimation_animatesKeyboard() {
|
||||
when(mKeyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(
|
||||
SecurityMode.Password);
|
||||
when(mInputViewController.getSecurityMode()).thenReturn(
|
||||
SecurityMode.Password);
|
||||
when(mKeyguardSecurityViewFlipperController.getSecurityView(
|
||||
eq(SecurityMode.Password), any(KeyguardSecurityCallback.class)))
|
||||
.thenReturn(mInputViewController);
|
||||
KeyguardSecurityModel.SecurityMode.Password);
|
||||
when(mKeyguardInputViewController.getSecurityMode()).thenReturn(
|
||||
KeyguardSecurityModel.SecurityMode.Password);
|
||||
when(mLayoutInflater.inflate(anyInt(), eq(mSecurityViewFlipper), eq(false)))
|
||||
.thenReturn(mInputView);
|
||||
mKeyguardSecurityContainerController.showPrimarySecurityScreen(false /* turningOff */);
|
||||
|
||||
mKeyguardSecurityContainerController.startDisappearAnimation(null);
|
||||
verify(mInputViewController).startDisappearAnimation(eq(null));
|
||||
verify(mKeyguardInputViewController).startDisappearAnimation(eq(null));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
/*
|
||||
* 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 static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowInsetsController;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@TestableLooper.RunWithLooper()
|
||||
public class KeyguardSecurityViewFlipperControllerTest extends SysuiTestCase {
|
||||
|
||||
@Rule
|
||||
public MockitoRule mRule = MockitoJUnit.rule();
|
||||
|
||||
@Mock
|
||||
private KeyguardSecurityViewFlipper mView;
|
||||
@Mock
|
||||
private LayoutInflater mLayoutInflater;
|
||||
@Mock
|
||||
private InjectionInflationController mInjectionInflationController;
|
||||
@Mock
|
||||
private KeyguardInputViewController.Factory mKeyguardSecurityViewControllerFactory;
|
||||
@Mock
|
||||
private KeyguardInputViewController mKeyguardInputViewController;
|
||||
@Mock
|
||||
private KeyguardInputView mInputView;
|
||||
@Mock
|
||||
private WindowInsetsController mWindowInsetsController;
|
||||
@Mock
|
||||
private KeyguardSecurityCallback mKeyguardSecurityCallback;
|
||||
|
||||
private KeyguardSecurityViewFlipperController mKeyguardSecurityViewFlipperController;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
when(mInjectionInflationController.injectable(mLayoutInflater)).thenReturn(mLayoutInflater);
|
||||
when(mKeyguardSecurityViewControllerFactory.create(
|
||||
any(KeyguardInputView.class), any(SecurityMode.class),
|
||||
any(KeyguardSecurityCallback.class)))
|
||||
.thenReturn(mKeyguardInputViewController);
|
||||
when(mView.getWindowInsetsController()).thenReturn(mWindowInsetsController);
|
||||
|
||||
mKeyguardSecurityViewFlipperController = new KeyguardSecurityViewFlipperController(mView,
|
||||
mLayoutInflater, mInjectionInflationController,
|
||||
mKeyguardSecurityViewControllerFactory);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showSecurityScreen_canInflateAllModes() {
|
||||
SecurityMode[] modes = SecurityMode.values();
|
||||
// Always return an invalid controller so that we're always making a new one.
|
||||
when(mKeyguardInputViewController.getSecurityMode()).thenReturn(SecurityMode.Invalid);
|
||||
for (SecurityMode mode : modes) {
|
||||
reset(mLayoutInflater);
|
||||
when(mLayoutInflater.inflate(anyInt(), eq(mView), eq(false)))
|
||||
.thenReturn(mInputView);
|
||||
mKeyguardSecurityViewFlipperController.getSecurityView(mode, mKeyguardSecurityCallback);
|
||||
if (mode == SecurityMode.Invalid || mode == SecurityMode.None) {
|
||||
verify(mLayoutInflater, never()).inflate(
|
||||
anyInt(), any(ViewGroup.class), anyBoolean());
|
||||
} else {
|
||||
verify(mLayoutInflater).inflate(anyInt(), eq(mView), eq(false));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user