10/N Ensure KeyguardSecurityContainer always has Callback

This passes the SecurityCallback directly into the
KeyguardSecurityContainer's constructor, rather than setting it during
on-attach.

Fixes: 169231892
Test: atest SystemUITests && manual
Change-Id: Ia9adf399e299768b3b8a70822cfda662a54d803b
This commit is contained in:
Dave Mankoff
2020-09-24 14:34:57 -04:00
parent 9a80cc2ec8
commit 28822be533
4 changed files with 68 additions and 19 deletions

View File

@@ -163,16 +163,18 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
@Inject
public KeyguardHostViewController(KeyguardHostView view,
KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardSecurityContainerController keyguardSecurityContainerController,
AudioManager audioManager,
TelephonyManager telephonyManager,
ViewMediatorCallback viewMediatorCallback) {
ViewMediatorCallback viewMediatorCallback,
KeyguardSecurityContainerController.Factory
keyguardSecurityContainerControllerFactory) {
super(view);
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardSecurityContainerController = keyguardSecurityContainerController;
mAudioManager = audioManager;
mTelephonyManager = telephonyManager;
mViewMediatorCallback = viewMediatorCallback;
mKeyguardSecurityContainerController = keyguardSecurityContainerControllerFactory.create(
mSecurityCallback);
}
/** Initialize the Controller. */
@@ -188,7 +190,6 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
mViewMediatorCallback.setNeedsInput(mKeyguardSecurityContainerController.needsInput());
mKeyguardUpdateMonitor.registerCallback(mUpdateCallback);
mView.setOnKeyListener(mOnKeyListener);
mKeyguardSecurityContainerController.setSecurityCallback(mSecurityCallback);
mKeyguardSecurityContainerController.showPrimarySecurityScreen(false);
}

View File

@@ -68,8 +68,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
private final UiEventLogger mUiEventLogger;
private final KeyguardStateController mKeyguardStateController;
private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController;
private final SecurityCallback mSecurityCallback;
private SecurityCallback mSecurityCallback;
private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid;
private KeyguardSecurityCallback mKeyguardSecurityCallback = new KeyguardSecurityCallback() {
@@ -145,8 +145,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
};
@Inject
KeyguardSecurityContainerController(KeyguardSecurityContainer view,
private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
AdminSecondaryLockScreenController.Factory adminSecondaryLockScreenControllerFactory,
LockPatternUtils lockPatternUtils,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -154,6 +153,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
MetricsLogger metricsLogger,
UiEventLogger uiEventLogger,
KeyguardStateController keyguardStateController,
SecurityCallback securityCallback,
KeyguardSecurityViewFlipperController securityViewFlipperController) {
super(view);
mLockPatternUtils = lockPatternUtils;
@@ -162,6 +162,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
mMetricsLogger = metricsLogger;
mUiEventLogger = uiEventLogger;
mKeyguardStateController = keyguardStateController;
mSecurityCallback = securityCallback;
mSecurityViewFlipperController = securityViewFlipperController;
mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create(
mKeyguardSecurityCallback);
@@ -269,10 +270,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
}
public void setSecurityCallback(SecurityCallback securityCallback) {
mSecurityCallback = securityCallback;
}
/**
* Shows the next security screen if there is one.
* @param authenticated true if the user entered the correct authentication
@@ -450,4 +447,49 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
mCurrentSecurityMode = securityMode;
return getCurrentSecurityController();
}
static class Factory {
private final KeyguardSecurityContainer mView;
private final AdminSecondaryLockScreenController.Factory
mAdminSecondaryLockScreenControllerFactory;
private final LockPatternUtils mLockPatternUtils;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final KeyguardSecurityModel mKeyguardSecurityModel;
private final MetricsLogger mMetricsLogger;
private final UiEventLogger mUiEventLogger;
private final KeyguardStateController mKeyguardStateController;
private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController;
@Inject
Factory(KeyguardSecurityContainer view,
AdminSecondaryLockScreenController.Factory
adminSecondaryLockScreenControllerFactory,
LockPatternUtils lockPatternUtils,
KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardSecurityModel keyguardSecurityModel,
MetricsLogger metricsLogger,
UiEventLogger uiEventLogger,
KeyguardStateController keyguardStateController,
KeyguardSecurityViewFlipperController securityViewFlipperController) {
mView = view;
mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory;
mLockPatternUtils = lockPatternUtils;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardSecurityModel = keyguardSecurityModel;
mMetricsLogger = metricsLogger;
mUiEventLogger = uiEventLogger;
mKeyguardStateController = keyguardStateController;
mSecurityViewFlipperController = securityViewFlipperController;
}
public KeyguardSecurityContainerController create(
SecurityCallback securityCallback) {
return new KeyguardSecurityContainerController(mView,
mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
mKeyguardStateController, securityCallback, mSecurityViewFlipperController);
}
}
}

View File

@@ -16,8 +16,10 @@
package com.android.keyguard;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.media.AudioManager;
import android.telephony.TelephonyManager;
@@ -47,13 +49,15 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
@Mock
private KeyguardHostView mKeyguardHostView;
@Mock
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
@Mock
private AudioManager mAudioManager;
@Mock
private TelephonyManager mTelephonyManager;
@Mock
private ViewMediatorCallback mViewMediatorCallback;
@Mock
KeyguardSecurityContainerController.Factory mKeyguardSecurityContainerControllerFactory;
@Mock
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -62,9 +66,12 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
@Before
public void setup() {
when(mKeyguardSecurityContainerControllerFactory.create(any(
KeyguardSecurityContainer.SecurityCallback.class)))
.thenReturn(mKeyguardSecurityContainerController);
mKeyguardHostViewController = new KeyguardHostViewController(
mKeyguardHostView, mKeyguardUpdateMonitor, mKeyguardSecurityContainerController,
mAudioManager, mTelephonyManager, mViewMediatorCallback);
mKeyguardHostView, mKeyguardUpdateMonitor, mAudioManager, mTelephonyManager,
mViewMediatorCallback, mKeyguardSecurityContainerControllerFactory);
}
@Test

View File

@@ -89,12 +89,11 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
.thenReturn(mAdminSecondaryLockScreenController);
when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController(
mKeyguardSecurityContainerController = new KeyguardSecurityContainerController.Factory(
mView, mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
mKeyguardStateController, mKeyguardSecurityViewFlipperController);
mKeyguardSecurityContainerController.setSecurityCallback(mSecurityCallback);
mKeyguardStateController, mKeyguardSecurityViewFlipperController)
.create(mSecurityCallback);
}
@Test