Merge "[View Controllers] (2/3) Move KSBVC's visibility and shouldUpdate calculation out of NPVController and into KSBVC." into sc-v2-dev am: 2fc7622e47
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15597556 Change-Id: Idce5cc3d2f3e8e70d19cd9dbe4638539607503db
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
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_IN;
|
||||||
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_OUT;
|
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.AnimatorListenerAdapter;
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.hardware.biometrics.BiometricSourceType;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.keyguard.CarrierTextController;
|
import com.android.keyguard.CarrierTextController;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.animation.Interpolators;
|
import com.android.systemui.animation.Interpolators;
|
||||||
import com.android.systemui.battery.BatteryMeterViewController;
|
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.SystemStatusAnimationCallback;
|
||||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
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.statusbar.policy.UserInfoController;
|
||||||
import com.android.systemui.util.ViewController;
|
import com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
@@ -58,6 +66,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory;
|
private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory;
|
||||||
private final BatteryMeterViewController mBatteryMeterViewController;
|
private final BatteryMeterViewController mBatteryMeterViewController;
|
||||||
private final ViewStateProvider mViewStateProvider;
|
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 =
|
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
||||||
new ConfigurationController.ConfigurationListener() {
|
new ConfigurationController.ConfigurationListener() {
|
||||||
@@ -115,12 +128,71 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
updateViewState();
|
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 final List<String> mBlockedIcons;
|
||||||
|
|
||||||
private boolean mBatteryListening;
|
private boolean mBatteryListening;
|
||||||
private StatusBarIconController.TintedIconManager mTintedIconManager;
|
private StatusBarIconController.TintedIconManager mTintedIconManager;
|
||||||
|
|
||||||
private float mKeyguardStatusBarAnimateAlpha = 1f;
|
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
|
@Inject
|
||||||
public KeyguardStatusBarViewController(
|
public KeyguardStatusBarViewController(
|
||||||
@@ -133,7 +205,12 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
StatusBarIconController statusBarIconController,
|
StatusBarIconController statusBarIconController,
|
||||||
StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory,
|
StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory,
|
||||||
BatteryMeterViewController batteryMeterViewController,
|
BatteryMeterViewController batteryMeterViewController,
|
||||||
ViewStateProvider viewStateProvider) {
|
ViewStateProvider viewStateProvider,
|
||||||
|
KeyguardStateController keyguardStateController,
|
||||||
|
KeyguardBypassController bypassController,
|
||||||
|
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
|
BiometricUnlockController biometricUnlockController,
|
||||||
|
SysuiStatusBarStateController statusBarStateController) {
|
||||||
super(view);
|
super(view);
|
||||||
mCarrierTextController = carrierTextController;
|
mCarrierTextController = carrierTextController;
|
||||||
mConfigurationController = configurationController;
|
mConfigurationController = configurationController;
|
||||||
@@ -144,6 +221,24 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
mTintedIconManagerFactory = tintedIconManagerFactory;
|
mTintedIconManagerFactory = tintedIconManagerFactory;
|
||||||
mBatteryMeterViewController = batteryMeterViewController;
|
mBatteryMeterViewController = batteryMeterViewController;
|
||||||
mViewStateProvider = viewStateProvider;
|
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();
|
Resources r = getResources();
|
||||||
mBlockedIcons = Collections.unmodifiableList(Arrays.asList(
|
mBlockedIcons = Collections.unmodifiableList(Arrays.asList(
|
||||||
@@ -164,6 +259,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
mConfigurationController.addCallback(mConfigurationListener);
|
mConfigurationController.addCallback(mConfigurationListener);
|
||||||
mAnimationScheduler.addCallback(mAnimationCallback);
|
mAnimationScheduler.addCallback(mAnimationCallback);
|
||||||
mUserInfoController.addCallback(mOnUserInfoChangedListener);
|
mUserInfoController.addCallback(mOnUserInfoChangedListener);
|
||||||
|
mStatusBarStateController.addCallback(mStatusBarStateListener);
|
||||||
|
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
|
||||||
if (mTintedIconManager == null) {
|
if (mTintedIconManager == null) {
|
||||||
mTintedIconManager =
|
mTintedIconManager =
|
||||||
mTintedIconManagerFactory.create(mView.findViewById(R.id.statusIcons));
|
mTintedIconManagerFactory.create(mView.findViewById(R.id.statusIcons));
|
||||||
@@ -178,6 +275,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
mConfigurationController.removeCallback(mConfigurationListener);
|
mConfigurationController.removeCallback(mConfigurationListener);
|
||||||
mAnimationScheduler.removeCallback(mAnimationCallback);
|
mAnimationScheduler.removeCallback(mAnimationCallback);
|
||||||
mUserInfoController.removeCallback(mOnUserInfoChangedListener);
|
mUserInfoController.removeCallback(mOnUserInfoChangedListener);
|
||||||
|
mStatusBarStateController.removeCallback(mStatusBarStateListener);
|
||||||
|
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
|
||||||
if (mTintedIconManager != null) {
|
if (mTintedIconManager != null) {
|
||||||
mStatusBarIconController.removeIconGroup(mTintedIconManager);
|
mStatusBarIconController.removeIconGroup(mTintedIconManager);
|
||||||
}
|
}
|
||||||
@@ -221,6 +320,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
mView.setTopClipping(notificationPanelTop - mView.getTop());
|
mView.setTopClipping(notificationPanelTop - mView.getTop());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the dozing state. */
|
||||||
|
public void setDozing(boolean dozing) {
|
||||||
|
mDozing = dozing;
|
||||||
|
}
|
||||||
|
|
||||||
/** Animate the keyguard status bar in. */
|
/** Animate the keyguard status bar in. */
|
||||||
public void animateKeyguardStatusBarIn() {
|
public void animateKeyguardStatusBarIn() {
|
||||||
mView.setVisibility(View.VISIBLE);
|
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}
|
* Updates the {@link KeyguardStatusBarView} state based on what the {@link ViewStateProvider}
|
||||||
* provides.
|
* and other controllers provide.
|
||||||
*/
|
*/
|
||||||
public void updateViewState() {
|
public void updateViewState() {
|
||||||
ViewState newViewState = mViewStateProvider.provideViewState();
|
ViewState newViewState = mViewStateProvider.provideViewState();
|
||||||
if (!newViewState.mShouldUpdate) {
|
if (!isKeyguardShowing()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
updateViewState(
|
|
||||||
newViewState.mAlpha * mKeyguardStatusBarAnimateAlpha,
|
float newAlpha = newViewState.mAlpha * mKeyguardStatusBarAnimateAlpha;
|
||||||
newViewState.mVisibility);
|
|
||||||
|
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);
|
mView.setVisibility(visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isKeyguardShowing() {
|
||||||
|
return mStatusBarState == KEYGUARD;
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||||
pw.println("KeyguardStatusBarView:");
|
pw.println("KeyguardStatusBarView:");
|
||||||
@@ -287,14 +402,10 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
|
|||||||
|
|
||||||
/** A POJO for the desired state of {@link KeyguardStatusBarView}. */
|
/** A POJO for the desired state of {@link KeyguardStatusBarView}. */
|
||||||
static class ViewState {
|
static class ViewState {
|
||||||
final boolean mShouldUpdate;
|
|
||||||
final float mAlpha;
|
final float mAlpha;
|
||||||
final int mVisibility;
|
|
||||||
|
|
||||||
ViewState(boolean shouldUpdate, float alpha, int visibility) {
|
ViewState(float alpha) {
|
||||||
this.mShouldUpdate = shouldUpdate;
|
|
||||||
this.mAlpha = alpha;
|
this.mAlpha = alpha;
|
||||||
this.mVisibility = visibility;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ import android.graphics.PointF;
|
|||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.Region;
|
import android.graphics.Region;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.hardware.biometrics.BiometricSourceType;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
@@ -91,7 +90,6 @@ import com.android.internal.util.LatencyTracker;
|
|||||||
import com.android.keyguard.KeyguardStatusView;
|
import com.android.keyguard.KeyguardStatusView;
|
||||||
import com.android.keyguard.KeyguardStatusViewController;
|
import com.android.keyguard.KeyguardStatusViewController;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
|
||||||
import com.android.keyguard.LockIconViewController;
|
import com.android.keyguard.LockIconViewController;
|
||||||
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
|
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
|
||||||
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
|
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
|
||||||
@@ -232,7 +230,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
|
|
||||||
@VisibleForTesting final StatusBarStateListener mStatusBarStateListener =
|
@VisibleForTesting final StatusBarStateListener mStatusBarStateListener =
|
||||||
new StatusBarStateListener();
|
new StatusBarStateListener();
|
||||||
private final BiometricUnlockController mBiometricUnlockController;
|
|
||||||
private final NotificationPanelView mView;
|
private final NotificationPanelView mView;
|
||||||
private final VibratorHelper mVibratorHelper;
|
private final VibratorHelper mVibratorHelper;
|
||||||
private final MetricsLogger mMetricsLogger;
|
private final MetricsLogger mMetricsLogger;
|
||||||
@@ -270,42 +267,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
private static final AnimationProperties
|
private static final AnimationProperties
|
||||||
KEYGUARD_HUN_PROPERTIES =
|
KEYGUARD_HUN_PROPERTIES =
|
||||||
new AnimationProperties().setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
|
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 LayoutInflater mLayoutInflater;
|
||||||
private final PowerManager mPowerManager;
|
private final PowerManager mPowerManager;
|
||||||
@@ -587,17 +548,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
*/
|
*/
|
||||||
private boolean mIsPanelCollapseOnQQS;
|
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;
|
private boolean mAnimatingQS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -686,17 +636,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
float alphaQsExpansion = 1 - Math.min(1, computeQsExpansionFraction() * 2);
|
float alphaQsExpansion = 1 - Math.min(1, computeQsExpansionFraction() * 2);
|
||||||
float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion)
|
float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion)
|
||||||
* (1.0f - mKeyguardHeadsUpShowingAmount);
|
* (1.0f - mKeyguardHeadsUpShowingAmount);
|
||||||
|
return new KeyguardStatusBarViewController.ViewState(newAlpha);
|
||||||
boolean hideForBypass =
|
|
||||||
mFirstBypassAttempt && mUpdateMonitor.shouldListenForFace()
|
|
||||||
|| mDelayShowingKeyguardStatusBar;
|
|
||||||
int newVisibility = newAlpha != 0f && !mDozing && !hideForBypass
|
|
||||||
? View.VISIBLE : View.INVISIBLE;
|
|
||||||
|
|
||||||
return new KeyguardStatusBarViewController.ViewState(
|
|
||||||
/* shouldAnimate= */ mKeyguardShowing,
|
|
||||||
newAlpha,
|
|
||||||
newVisibility);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -723,7 +663,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||||
ConversationNotificationManager conversationNotificationManager,
|
ConversationNotificationManager conversationNotificationManager,
|
||||||
MediaHierarchyManager mediaHierarchyManager,
|
MediaHierarchyManager mediaHierarchyManager,
|
||||||
BiometricUnlockController biometricUnlockController,
|
|
||||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||||
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
||||||
KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
|
KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
|
||||||
@@ -809,7 +748,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
mDisplayId = displayId;
|
mDisplayId = displayId;
|
||||||
mPulseExpansionHandler = pulseExpansionHandler;
|
mPulseExpansionHandler = pulseExpansionHandler;
|
||||||
mDozeParameters = dozeParameters;
|
mDozeParameters = dozeParameters;
|
||||||
mBiometricUnlockController = biometricUnlockController;
|
|
||||||
mScrimController = scrimController;
|
mScrimController = scrimController;
|
||||||
mScrimController.setClipsQsScrim(!mShouldUseSplitNotificationShade);
|
mScrimController.setClipsQsScrim(!mShouldUseSplitNotificationShade);
|
||||||
mUserManager = userManager;
|
mUserManager = userManager;
|
||||||
@@ -825,21 +763,8 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
mThemeResId = mView.getContext().getThemeResId();
|
mThemeResId = mView.getContext().getThemeResId();
|
||||||
mKeyguardBypassController = bypassController;
|
mKeyguardBypassController = bypassController;
|
||||||
mUpdateMonitor = keyguardUpdateMonitor;
|
mUpdateMonitor = keyguardUpdateMonitor;
|
||||||
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
|
|
||||||
KeyguardStateController.Callback
|
|
||||||
keyguardMonitorCallback =
|
|
||||||
new KeyguardStateController.Callback() {
|
|
||||||
@Override
|
|
||||||
public void onKeyguardFadingAwayChanged() {
|
|
||||||
if (!mKeyguardStateController.isKeyguardFadingAway()) {
|
|
||||||
mFirstBypassAttempt = false;
|
|
||||||
mDelayShowingKeyguardStatusBar = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
|
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
|
||||||
lockscreenShadeTransitionController.setNotificationPanelController(this);
|
lockscreenShadeTransitionController.setNotificationPanelController(this);
|
||||||
mKeyguardStateController.addCallback(keyguardMonitorCallback);
|
|
||||||
DynamicPrivacyControlListener
|
DynamicPrivacyControlListener
|
||||||
dynamicPrivacyControlListener =
|
dynamicPrivacyControlListener =
|
||||||
new DynamicPrivacyControlListener();
|
new DynamicPrivacyControlListener();
|
||||||
@@ -3629,6 +3554,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
mDozing = dozing;
|
mDozing = dozing;
|
||||||
mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation);
|
mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation);
|
||||||
mKeyguardBottomArea.setDozing(mDozing, animate);
|
mKeyguardBottomArea.setDozing(mDozing, animate);
|
||||||
|
mKeyguardStatusBarViewController.setDozing(mDozing);
|
||||||
|
|
||||||
if (dozing) {
|
if (dozing) {
|
||||||
mBottomAreaShadeAlphaAnimator.cancel();
|
mBottomAreaShadeAlphaAnimator.cancel();
|
||||||
@@ -4505,7 +4431,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
.addTagListener(QS.TAG, mFragmentListener);
|
.addTagListener(QS.TAG, mFragmentListener);
|
||||||
mStatusBarStateController.addCallback(mStatusBarStateListener);
|
mStatusBarStateController.addCallback(mStatusBarStateListener);
|
||||||
mConfigurationController.addCallback(mConfigurationListener);
|
mConfigurationController.addCallback(mConfigurationListener);
|
||||||
mUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
|
|
||||||
// Theme might have changed between inflating this view and attaching it to the
|
// Theme might have changed between inflating this view and attaching it to the
|
||||||
// window, so
|
// window, so
|
||||||
// force a call to onThemeChanged
|
// force a call to onThemeChanged
|
||||||
@@ -4522,7 +4447,6 @@ public class NotificationPanelViewController extends PanelViewController {
|
|||||||
.removeTagListener(QS.TAG, mFragmentListener);
|
.removeTagListener(QS.TAG, mFragmentListener);
|
||||||
mStatusBarStateController.removeCallback(mStatusBarStateListener);
|
mStatusBarStateController.removeCallback(mStatusBarStateListener);
|
||||||
mConfigurationController.removeCallback(mConfigurationListener);
|
mConfigurationController.removeCallback(mConfigurationListener);
|
||||||
mUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
|
|
||||||
mFalsingManager.removeTapListener(mFalsingTapListener);
|
mFalsingManager.removeTapListener(mFalsingTapListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,14 @@
|
|||||||
package com.android.systemui.statusbar.phone;
|
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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
@@ -30,18 +34,24 @@ import android.view.View;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.keyguard.CarrierTextController;
|
import com.android.keyguard.CarrierTextController;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.battery.BatteryMeterViewController;
|
import com.android.systemui.battery.BatteryMeterViewController;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
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.events.SystemStatusAnimationScheduler;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
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.statusbar.policy.UserInfoController;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
@@ -66,11 +76,23 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private BatteryMeterViewController mBatteryMeterViewController;
|
private BatteryMeterViewController mBatteryMeterViewController;
|
||||||
@Mock
|
@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 KeyguardStatusBarView mKeyguardStatusBarView;
|
||||||
private KeyguardStatusBarViewController mController;
|
private KeyguardStatusBarViewController mController;
|
||||||
|
|
||||||
|
private float mAlpha = 0.5f;
|
||||||
|
private final KeyguardStatusBarViewController.ViewStateProvider mViewStateProvider =
|
||||||
|
() -> new KeyguardStatusBarViewController.ViewState(mAlpha);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -92,7 +114,12 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
mStatusBarIconController,
|
mStatusBarIconController,
|
||||||
new StatusBarIconController.TintedIconManager.Factory(mFeatureFlags),
|
new StatusBarIconController.TintedIconManager.Factory(mFeatureFlags),
|
||||||
mBatteryMeterViewController,
|
mBatteryMeterViewController,
|
||||||
mViewStateProvider
|
mViewStateProvider,
|
||||||
|
mKeyguardStateController,
|
||||||
|
mKeyguardBypassController,
|
||||||
|
mKeyguardUpdateMonitor,
|
||||||
|
mBiometricUnlockController,
|
||||||
|
mStatusBarStateController
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,4 +207,92 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(newAlpha);
|
assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(newAlpha);
|
||||||
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(newVisibility);
|
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.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.hardware.biometrics.BiometricSourceType;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
@@ -229,8 +228,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private ConversationNotificationManager mConversationNotificationManager;
|
private ConversationNotificationManager mConversationNotificationManager;
|
||||||
@Mock
|
@Mock
|
||||||
private BiometricUnlockController mBiometricUnlockController;
|
|
||||||
@Mock
|
|
||||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
@Mock
|
@Mock
|
||||||
private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
|
private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
|
||||||
@@ -416,7 +413,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
|||||||
mMetricsLogger, mActivityManager, mConfigurationController,
|
mMetricsLogger, mActivityManager, mConfigurationController,
|
||||||
() -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
() -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||||
mConversationNotificationManager, mMediaHiearchyManager,
|
mConversationNotificationManager, mMediaHiearchyManager,
|
||||||
mBiometricUnlockController, mStatusBarKeyguardViewManager,
|
mStatusBarKeyguardViewManager,
|
||||||
mNotificationStackScrollLayoutController,
|
mNotificationStackScrollLayoutController,
|
||||||
mKeyguardStatusViewComponentFactory,
|
mKeyguardStatusViewComponentFactory,
|
||||||
mKeyguardQsUserSwitchComponentFactory,
|
mKeyguardQsUserSwitchComponentFactory,
|
||||||
@@ -511,20 +508,6 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
|||||||
assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
|
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
|
@Test
|
||||||
public void testA11y_initializeNode() {
|
public void testA11y_initializeNode() {
|
||||||
AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
|
AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
|
||||||
|
|||||||
Reference in New Issue
Block a user