Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit daaeb2f0 authored by Caitlin Cassidy's avatar Caitlin Cassidy
Browse files

[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
Merged-In: I0a88132293dd5a083122a3fd971a5bbc6487355f
parent 3186c166
Loading
Loading
Loading
Loading
+122 −11
Original line number Original line Diff line number Diff line
@@ -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;
        }
        }
    }
    }
}
}
+2 −78
Original line number Original line Diff line number Diff line
@@ -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;
@@ -234,7 +232,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;
@@ -272,42 +269,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;
@@ -591,17 +552,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;


    /**
    /**
@@ -693,17 +643,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);
                }
                }
            };
            };


@@ -730,7 +670,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,
@@ -818,7 +757,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;
@@ -834,21 +772,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();
@@ -3642,6 +3567,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();
@@ -4523,7 +4449,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
@@ -4540,7 +4465,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);
        }
        }
    }
    }
+117 −2
Original line number Original line Diff line number Diff line
@@ -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);
    }
}
}
+1 −18

File changed.

Preview size limit exceeded, changes collapsed.