[View Controllers] (2/3) Move KSBVC's visibility and shouldUpdate calculation
out of NPVController and into KSBVC. Test: atest (+ new unit tests) and manual Bug: 195442899 Change-Id: I0a88132293dd5a083122a3fd971a5bbc6487355f
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_IN;
|
||||
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_OUT;
|
||||
|
||||
@@ -23,19 +24,26 @@ import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.keyguard.CarrierTextController;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.battery.BatteryMeterViewController;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||
import com.android.systemui.util.ViewController;
|
||||
|
||||
@@ -58,6 +66,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory;
|
||||
private final BatteryMeterViewController mBatteryMeterViewController;
|
||||
private final ViewStateProvider mViewStateProvider;
|
||||
private final KeyguardStateController mKeyguardStateController;
|
||||
private final KeyguardBypassController mKeyguardBypassController;
|
||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private final BiometricUnlockController mBiometricUnlockController;
|
||||
private final SysuiStatusBarStateController mStatusBarStateController;
|
||||
|
||||
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
||||
new ConfigurationController.ConfigurationListener() {
|
||||
@@ -115,12 +128,71 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
updateViewState();
|
||||
};
|
||||
|
||||
private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
@Override
|
||||
public void onBiometricAuthenticated(
|
||||
int userId,
|
||||
BiometricSourceType biometricSourceType,
|
||||
boolean isStrongBiometric) {
|
||||
if (mFirstBypassAttempt
|
||||
&& mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(
|
||||
isStrongBiometric)) {
|
||||
mDelayShowingKeyguardStatusBar = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBiometricRunningStateChanged(
|
||||
boolean running,
|
||||
BiometricSourceType biometricSourceType) {
|
||||
boolean keyguardOrShadeLocked =
|
||||
mStatusBarState == KEYGUARD
|
||||
|| mStatusBarState == StatusBarState.SHADE_LOCKED;
|
||||
if (!running
|
||||
&& mFirstBypassAttempt
|
||||
&& keyguardOrShadeLocked
|
||||
&& !mDozing
|
||||
&& !mDelayShowingKeyguardStatusBar
|
||||
&& !mBiometricUnlockController.isBiometricUnlock()) {
|
||||
mFirstBypassAttempt = false;
|
||||
animateKeyguardStatusBarIn();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinishedGoingToSleep(int why) {
|
||||
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
|
||||
mDelayShowingKeyguardStatusBar = false;
|
||||
}
|
||||
};
|
||||
|
||||
private final StatusBarStateController.StateListener mStatusBarStateListener =
|
||||
new StatusBarStateController.StateListener() {
|
||||
@Override
|
||||
public void onStateChanged(int newState) {
|
||||
mStatusBarState = newState;
|
||||
}
|
||||
};
|
||||
|
||||
private final List<String> mBlockedIcons;
|
||||
|
||||
private boolean mBatteryListening;
|
||||
private StatusBarIconController.TintedIconManager mTintedIconManager;
|
||||
|
||||
private float mKeyguardStatusBarAnimateAlpha = 1f;
|
||||
/**
|
||||
* If face auth with bypass is running for the first time after you turn on the screen.
|
||||
* (From aod or screen off)
|
||||
*/
|
||||
private boolean mFirstBypassAttempt;
|
||||
/**
|
||||
* If auth happens successfully during {@code mFirstBypassAttempt}, and we should wait until
|
||||
* the keyguard is dismissed to show the status bar.
|
||||
*/
|
||||
private boolean mDelayShowingKeyguardStatusBar;
|
||||
private int mStatusBarState;
|
||||
private boolean mDozing;
|
||||
|
||||
@Inject
|
||||
public KeyguardStatusBarViewController(
|
||||
@@ -133,7 +205,12 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
StatusBarIconController statusBarIconController,
|
||||
StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory,
|
||||
BatteryMeterViewController batteryMeterViewController,
|
||||
ViewStateProvider viewStateProvider) {
|
||||
ViewStateProvider viewStateProvider,
|
||||
KeyguardStateController keyguardStateController,
|
||||
KeyguardBypassController bypassController,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
SysuiStatusBarStateController statusBarStateController) {
|
||||
super(view);
|
||||
mCarrierTextController = carrierTextController;
|
||||
mConfigurationController = configurationController;
|
||||
@@ -144,6 +221,24 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
mTintedIconManagerFactory = tintedIconManagerFactory;
|
||||
mBatteryMeterViewController = batteryMeterViewController;
|
||||
mViewStateProvider = viewStateProvider;
|
||||
mKeyguardStateController = keyguardStateController;
|
||||
mKeyguardBypassController = bypassController;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mBiometricUnlockController = biometricUnlockController;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
|
||||
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
|
||||
mKeyguardStateController.addCallback(
|
||||
new KeyguardStateController.Callback() {
|
||||
@Override
|
||||
public void onKeyguardFadingAwayChanged() {
|
||||
if (!mKeyguardStateController.isKeyguardFadingAway()) {
|
||||
mFirstBypassAttempt = false;
|
||||
mDelayShowingKeyguardStatusBar = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Resources r = getResources();
|
||||
mBlockedIcons = Collections.unmodifiableList(Arrays.asList(
|
||||
@@ -164,6 +259,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
mConfigurationController.addCallback(mConfigurationListener);
|
||||
mAnimationScheduler.addCallback(mAnimationCallback);
|
||||
mUserInfoController.addCallback(mOnUserInfoChangedListener);
|
||||
mStatusBarStateController.addCallback(mStatusBarStateListener);
|
||||
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
|
||||
if (mTintedIconManager == null) {
|
||||
mTintedIconManager =
|
||||
mTintedIconManagerFactory.create(mView.findViewById(R.id.statusIcons));
|
||||
@@ -178,6 +275,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
mConfigurationController.removeCallback(mConfigurationListener);
|
||||
mAnimationScheduler.removeCallback(mAnimationCallback);
|
||||
mUserInfoController.removeCallback(mOnUserInfoChangedListener);
|
||||
mStatusBarStateController.removeCallback(mStatusBarStateListener);
|
||||
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
|
||||
if (mTintedIconManager != null) {
|
||||
mStatusBarIconController.removeIconGroup(mTintedIconManager);
|
||||
}
|
||||
@@ -221,6 +320,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
mView.setTopClipping(notificationPanelTop - mView.getTop());
|
||||
}
|
||||
|
||||
/** Sets the dozing state. */
|
||||
public void setDozing(boolean dozing) {
|
||||
mDozing = dozing;
|
||||
}
|
||||
|
||||
/** Animate the keyguard status bar in. */
|
||||
public void animateKeyguardStatusBarIn() {
|
||||
mView.setVisibility(View.VISIBLE);
|
||||
@@ -252,16 +356,23 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
|
||||
/**
|
||||
* Updates the {@link KeyguardStatusBarView} state based on what the {@link ViewStateProvider}
|
||||
* provides.
|
||||
* and other controllers provide.
|
||||
*/
|
||||
public void updateViewState() {
|
||||
ViewState newViewState = mViewStateProvider.provideViewState();
|
||||
if (!newViewState.mShouldUpdate) {
|
||||
if (!isKeyguardShowing()) {
|
||||
return;
|
||||
}
|
||||
updateViewState(
|
||||
newViewState.mAlpha * mKeyguardStatusBarAnimateAlpha,
|
||||
newViewState.mVisibility);
|
||||
|
||||
float newAlpha = newViewState.mAlpha * mKeyguardStatusBarAnimateAlpha;
|
||||
|
||||
boolean hideForBypass =
|
||||
mFirstBypassAttempt && mKeyguardUpdateMonitor.shouldListenForFace()
|
||||
|| mDelayShowingKeyguardStatusBar;
|
||||
int newVisibility = newAlpha != 0f && !mDozing && !hideForBypass
|
||||
? View.VISIBLE : View.INVISIBLE;
|
||||
|
||||
updateViewState(newAlpha, newVisibility);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -272,6 +383,10 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
mView.setVisibility(visibility);
|
||||
}
|
||||
|
||||
private boolean isKeyguardShowing() {
|
||||
return mStatusBarState == KEYGUARD;
|
||||
}
|
||||
|
||||
/** */
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
pw.println("KeyguardStatusBarView:");
|
||||
@@ -287,14 +402,10 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
||||
|
||||
/** A POJO for the desired state of {@link KeyguardStatusBarView}. */
|
||||
static class ViewState {
|
||||
final boolean mShouldUpdate;
|
||||
final float mAlpha;
|
||||
final int mVisibility;
|
||||
|
||||
ViewState(boolean shouldUpdate, float alpha, int visibility) {
|
||||
this.mShouldUpdate = shouldUpdate;
|
||||
ViewState(float alpha) {
|
||||
this.mAlpha = alpha;
|
||||
this.mVisibility = visibility;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.PowerManager;
|
||||
@@ -92,7 +91,6 @@ import com.android.internal.util.LatencyTracker;
|
||||
import com.android.keyguard.KeyguardStatusView;
|
||||
import com.android.keyguard.KeyguardStatusViewController;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.keyguard.LockIconViewController;
|
||||
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
|
||||
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
|
||||
@@ -242,7 +240,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
|
||||
@VisibleForTesting final StatusBarStateListener mStatusBarStateListener =
|
||||
new StatusBarStateListener();
|
||||
private final BiometricUnlockController mBiometricUnlockController;
|
||||
private final NotificationPanelView mView;
|
||||
private final VibratorHelper mVibratorHelper;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
@@ -280,42 +277,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
private static final AnimationProperties
|
||||
KEYGUARD_HUN_PROPERTIES =
|
||||
new AnimationProperties().setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
|
||||
@VisibleForTesting
|
||||
final KeyguardUpdateMonitorCallback
|
||||
mKeyguardUpdateCallback =
|
||||
new KeyguardUpdateMonitorCallback() {
|
||||
|
||||
@Override
|
||||
public void onBiometricAuthenticated(int userId,
|
||||
BiometricSourceType biometricSourceType,
|
||||
boolean isStrongBiometric) {
|
||||
if (mFirstBypassAttempt
|
||||
&& mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric)) {
|
||||
mDelayShowingKeyguardStatusBar = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBiometricRunningStateChanged(boolean running,
|
||||
BiometricSourceType biometricSourceType) {
|
||||
boolean
|
||||
keyguardOrShadeLocked =
|
||||
mBarState == KEYGUARD
|
||||
|| mBarState == StatusBarState.SHADE_LOCKED;
|
||||
if (!running && mFirstBypassAttempt && keyguardOrShadeLocked && !mDozing
|
||||
&& !mDelayShowingKeyguardStatusBar
|
||||
&& !mBiometricUnlockController.isBiometricUnlock()) {
|
||||
mFirstBypassAttempt = false;
|
||||
mKeyguardStatusBarViewController.animateKeyguardStatusBarIn();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinishedGoingToSleep(int why) {
|
||||
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
|
||||
mDelayShowingKeyguardStatusBar = false;
|
||||
}
|
||||
};
|
||||
|
||||
private final LayoutInflater mLayoutInflater;
|
||||
private final PowerManager mPowerManager;
|
||||
@@ -625,17 +586,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
*/
|
||||
private boolean mIsPanelCollapseOnQQS;
|
||||
|
||||
/**
|
||||
* If face auth with bypass is running for the first time after you turn on the screen.
|
||||
* (From aod or screen off)
|
||||
*/
|
||||
private boolean mFirstBypassAttempt;
|
||||
/**
|
||||
* If auth happens successfully during {@code mFirstBypassAttempt}, and we should wait until
|
||||
* the keyguard is dismissed to show the status bar.
|
||||
*/
|
||||
private boolean mDelayShowingKeyguardStatusBar;
|
||||
|
||||
private boolean mAnimatingQS;
|
||||
|
||||
/**
|
||||
@@ -753,17 +703,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
float alphaQsExpansion = 1 - Math.min(1, computeQsExpansionFraction() * 2);
|
||||
float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion)
|
||||
* (1.0f - mKeyguardHeadsUpShowingAmount);
|
||||
|
||||
boolean hideForBypass =
|
||||
mFirstBypassAttempt && mUpdateMonitor.shouldListenForFace()
|
||||
|| mDelayShowingKeyguardStatusBar;
|
||||
int newVisibility = newAlpha != 0f && !mDozing && !hideForBypass
|
||||
? View.VISIBLE : View.INVISIBLE;
|
||||
|
||||
return new KeyguardStatusBarViewController.ViewState(
|
||||
/* shouldAnimate= */ mKeyguardShowing,
|
||||
newAlpha,
|
||||
newVisibility);
|
||||
return new KeyguardStatusBarViewController.ViewState(newAlpha);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -792,7 +732,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||
ConversationNotificationManager conversationNotificationManager,
|
||||
MediaHierarchyManager mediaHierarchyManager,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
||||
KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
|
||||
@@ -883,7 +822,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mDisplayId = displayId;
|
||||
mPulseExpansionHandler = pulseExpansionHandler;
|
||||
mDozeParameters = dozeParameters;
|
||||
mBiometricUnlockController = biometricUnlockController;
|
||||
mScrimController = scrimController;
|
||||
mScrimController.setClipsQsScrim(!mShouldUseSplitNotificationShade);
|
||||
mUserManager = userManager;
|
||||
@@ -900,21 +838,8 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mKeyguardBypassController = bypassController;
|
||||
mUpdateMonitor = keyguardUpdateMonitor;
|
||||
mCommunalSourceMonitor = communalSourceMonitor;
|
||||
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
|
||||
KeyguardStateController.Callback
|
||||
keyguardMonitorCallback =
|
||||
new KeyguardStateController.Callback() {
|
||||
@Override
|
||||
public void onKeyguardFadingAwayChanged() {
|
||||
if (!mKeyguardStateController.isKeyguardFadingAway()) {
|
||||
mFirstBypassAttempt = false;
|
||||
mDelayShowingKeyguardStatusBar = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
|
||||
lockscreenShadeTransitionController.setNotificationPanelController(this);
|
||||
mKeyguardStateController.addCallback(keyguardMonitorCallback);
|
||||
DynamicPrivacyControlListener
|
||||
dynamicPrivacyControlListener =
|
||||
new DynamicPrivacyControlListener();
|
||||
@@ -3740,6 +3665,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mDozing = dozing;
|
||||
mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation);
|
||||
mKeyguardBottomArea.setDozing(mDozing, animate);
|
||||
mKeyguardStatusBarViewController.setDozing(mDozing);
|
||||
|
||||
if (dozing) {
|
||||
mBottomAreaShadeAlphaAnimator.cancel();
|
||||
@@ -4649,7 +4575,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
.addTagListener(QS.TAG, mFragmentListener);
|
||||
mStatusBarStateController.addCallback(mStatusBarStateListener);
|
||||
mConfigurationController.addCallback(mConfigurationListener);
|
||||
mUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
|
||||
mCommunalSourceMonitor.addCallback(mCommunalSourceMonitorCallback);
|
||||
// Theme might have changed between inflating this view and attaching it to the
|
||||
// window, so
|
||||
@@ -4668,7 +4593,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
.removeTagListener(QS.TAG, mFragmentListener);
|
||||
mStatusBarStateController.removeCallback(mStatusBarStateListener);
|
||||
mConfigurationController.removeCallback(mConfigurationListener);
|
||||
mUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
|
||||
mCommunalSourceMonitor.removeCallback(mCommunalSourceMonitorCallback);
|
||||
// Clear source when detached.
|
||||
setCommunalSource(null /*source*/);
|
||||
|
||||
@@ -17,10 +17,14 @@
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
|
||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||
import static com.android.systemui.statusbar.StatusBarState.SHADE;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -30,18 +34,24 @@ import android.view.View;
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.keyguard.CarrierTextController;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.battery.BatteryMeterViewController;
|
||||
import com.android.systemui.flags.FeatureFlags;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@@ -66,11 +76,23 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private BatteryMeterViewController mBatteryMeterViewController;
|
||||
@Mock
|
||||
private KeyguardStatusBarViewController.ViewStateProvider mViewStateProvider;
|
||||
private KeyguardStateController mKeyguardStateController;
|
||||
@Mock
|
||||
private KeyguardBypassController mKeyguardBypassController;
|
||||
@Mock
|
||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock
|
||||
private BiometricUnlockController mBiometricUnlockController;
|
||||
@Mock
|
||||
private SysuiStatusBarStateController mStatusBarStateController;
|
||||
|
||||
private KeyguardStatusBarView mKeyguardStatusBarView;
|
||||
private KeyguardStatusBarViewController mController;
|
||||
|
||||
private float mAlpha = 0.5f;
|
||||
private final KeyguardStatusBarViewController.ViewStateProvider mViewStateProvider =
|
||||
() -> new KeyguardStatusBarViewController.ViewState(mAlpha);
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
@@ -92,7 +114,12 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
||||
mStatusBarIconController,
|
||||
new StatusBarIconController.TintedIconManager.Factory(mFeatureFlags),
|
||||
mBatteryMeterViewController,
|
||||
mViewStateProvider
|
||||
mViewStateProvider,
|
||||
mKeyguardStateController,
|
||||
mKeyguardBypassController,
|
||||
mKeyguardUpdateMonitor,
|
||||
mBiometricUnlockController,
|
||||
mStatusBarStateController
|
||||
);
|
||||
}
|
||||
|
||||
@@ -180,4 +207,92 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
||||
assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(newAlpha);
|
||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(newVisibility);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateViewState_notKeyguardState_nothingUpdated() {
|
||||
mAlpha = 0.255f;
|
||||
mController.onViewAttached();
|
||||
updateStateToNotKeyguard();
|
||||
|
||||
float oldAlpha = mKeyguardStatusBarView.getAlpha();
|
||||
|
||||
mController.updateViewState();
|
||||
|
||||
assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(oldAlpha);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateViewState_bypassEnabledAndShouldListenForFace_viewHidden() {
|
||||
mController.onViewAttached();
|
||||
updateStateToKeyguard();
|
||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
|
||||
when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(true);
|
||||
when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true);
|
||||
onFinishedGoingToSleep();
|
||||
|
||||
mController.updateViewState();
|
||||
|
||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.INVISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateViewState_bypassNotEnabled_viewShown() {
|
||||
mController.onViewAttached();
|
||||
updateStateToKeyguard();
|
||||
|
||||
when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(true);
|
||||
when(mKeyguardBypassController.getBypassEnabled()).thenReturn(false);
|
||||
onFinishedGoingToSleep();
|
||||
|
||||
mController.updateViewState();
|
||||
|
||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateViewState_shouldNotListenForFace_viewShown() {
|
||||
mController.onViewAttached();
|
||||
updateStateToKeyguard();
|
||||
|
||||
when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(false);
|
||||
when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true);
|
||||
onFinishedGoingToSleep();
|
||||
|
||||
mController.updateViewState();
|
||||
|
||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
// TODO(b/195442899): Add more tests for #updateViewState once CLs are finalized.
|
||||
|
||||
private void updateStateToNotKeyguard() {
|
||||
updateStatusBarState(SHADE);
|
||||
}
|
||||
|
||||
private void updateStateToKeyguard() {
|
||||
updateStatusBarState(KEYGUARD);
|
||||
}
|
||||
|
||||
private void updateStatusBarState(int state) {
|
||||
ArgumentCaptor<StatusBarStateController.StateListener> statusBarStateListenerCaptor =
|
||||
ArgumentCaptor.forClass(StatusBarStateController.StateListener.class);
|
||||
verify(mStatusBarStateController).addCallback(statusBarStateListenerCaptor.capture());
|
||||
StatusBarStateController.StateListener callback = statusBarStateListenerCaptor.getValue();
|
||||
|
||||
callback.onStateChanged(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link com.android.keyguard.KeyguardUpdateMonitorCallback#onFinishedGoingToSleep(int)}
|
||||
* to ensure values are updated properly.
|
||||
*/
|
||||
private void onFinishedGoingToSleep() {
|
||||
ArgumentCaptor<KeyguardUpdateMonitorCallback> keyguardUpdateCallbackCaptor =
|
||||
ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class);
|
||||
verify(mKeyguardUpdateMonitor).registerCallback(keyguardUpdateCallbackCaptor.capture());
|
||||
KeyguardUpdateMonitorCallback callback = keyguardUpdateCallbackCaptor.getValue();
|
||||
|
||||
callback.onFinishedGoingToSleep(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@ import android.content.ContentResolver;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.database.ContentObserver;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager;
|
||||
@@ -241,8 +240,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private ConversationNotificationManager mConversationNotificationManager;
|
||||
@Mock
|
||||
private BiometricUnlockController mBiometricUnlockController;
|
||||
@Mock
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
@Mock
|
||||
private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
|
||||
@@ -476,7 +473,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
mCommunalSourceMonitor, mMetricsLogger, mActivityManager, mConfigurationController,
|
||||
() -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||
mConversationNotificationManager, mMediaHiearchyManager,
|
||||
mBiometricUnlockController, mStatusBarKeyguardViewManager,
|
||||
mStatusBarKeyguardViewManager,
|
||||
mNotificationStackScrollLayoutController,
|
||||
mKeyguardStatusViewComponentFactory,
|
||||
mKeyguardQsUserSwitchComponentFactory,
|
||||
@@ -573,20 +570,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKeyguardStatusBarVisibility_hiddenForBypass() {
|
||||
when(mUpdateMonitor.shouldListenForFace()).thenReturn(true);
|
||||
mNotificationPanelViewController.mKeyguardUpdateCallback.onBiometricRunningStateChanged(
|
||||
true, BiometricSourceType.FACE);
|
||||
verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE);
|
||||
|
||||
when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true);
|
||||
mNotificationPanelViewController.mKeyguardUpdateCallback.onFinishedGoingToSleep(0);
|
||||
mNotificationPanelViewController.mKeyguardUpdateCallback.onBiometricRunningStateChanged(
|
||||
true, BiometricSourceType.FACE);
|
||||
verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testA11y_initializeNode() {
|
||||
AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
|
||||
|
||||
Reference in New Issue
Block a user