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

Commit 1bfc6d54 authored by Justin Weir's avatar Justin Weir Committed by Android (Google) Code Review
Browse files

Merge "Begin deleting ShadeExpansionStateManager.addFullExpansionListener" into main

parents 1acb8c1b 34e464f8
Loading
Loading
Loading
Loading
+11 −9
Original line number Original line Diff line number Diff line
@@ -114,7 +114,6 @@ import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
import com.android.systemui.DejankUtils;
import com.android.systemui.DejankUtils;
import com.android.systemui.Dumpable;
import com.android.systemui.Dumpable;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.res.R;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.animation.LaunchAnimator;
import com.android.systemui.animation.LaunchAnimator;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.AuthController;
@@ -163,6 +162,7 @@ import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.res.R;
import com.android.systemui.shade.data.repository.ShadeRepository;
import com.android.systemui.shade.data.repository.ShadeRepository;
import com.android.systemui.shade.transition.ShadeTransitionController;
import com.android.systemui.shade.transition.ShadeTransitionController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.QuickStepContract;
@@ -393,7 +393,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    private TrackingStartedListener mTrackingStartedListener;
    private TrackingStartedListener mTrackingStartedListener;
    private OpenCloseListener mOpenCloseListener;
    private OpenCloseListener mOpenCloseListener;
    private GestureRecorder mGestureRecorder;
    private GestureRecorder mGestureRecorder;
    private boolean mPanelExpanded;


    private boolean mKeyguardQsUserSwitchEnabled;
    private boolean mKeyguardQsUserSwitchEnabled;
    private boolean mKeyguardUserSwitcherEnabled;
    private boolean mKeyguardUserSwitcherEnabled;
@@ -1321,7 +1320,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump


        // when we switch between split shade and regular shade we want to enforce setting qs to
        // when we switch between split shade and regular shade we want to enforce setting qs to
        // the default state: expanded for split shade and collapsed otherwise
        // the default state: expanded for split shade and collapsed otherwise
        if (!isKeyguardShowing() && mPanelExpanded) {
        if (!isKeyguardShowing() && isPanelExpanded()) {
            mQsController.setExpanded(mSplitShadeEnabled);
            mQsController.setExpanded(mSplitShadeEnabled);
        }
        }
        if (isKeyguardShowing() && mQsController.getExpanded() && mSplitShadeEnabled) {
        if (isKeyguardShowing() && mQsController.getExpanded() && mSplitShadeEnabled) {
@@ -2630,10 +2629,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump


    private void updatePanelExpanded() {
    private void updatePanelExpanded() {
        boolean isExpanded = !isFullyCollapsed() || mExpectingSynthesizedDown;
        boolean isExpanded = !isFullyCollapsed() || mExpectingSynthesizedDown;
        if (mPanelExpanded != isExpanded) {
        if (isPanelExpanded() != isExpanded) {
            mPanelExpanded = isExpanded;
            setExpandedOrAwaitingInputTransfer(isExpanded);
            updateSystemUiStateFlags();
            updateSystemUiStateFlags();
            mShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(mPanelExpanded);
            mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded);
            mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded);
            if (!isExpanded) {
            if (!isExpanded) {
                mQsController.closeQsCustomizer();
                mQsController.closeQsCustomizer();
@@ -2641,9 +2639,13 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        }
        }
    }
    }


    private void setExpandedOrAwaitingInputTransfer(boolean expandedOrAwaitingInputTransfer) {
        mShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(expandedOrAwaitingInputTransfer);
    }

    @Override
    @Override
    public boolean isPanelExpanded() {
    public boolean isPanelExpanded() {
        return mPanelExpanded;
        return mShadeRepository.getLegacyExpandedOrAwaitingInputTransfer().getValue();
    }
    }


    private int calculatePanelHeightShade() {
    private int calculatePanelHeightShade() {
@@ -3392,7 +3394,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        ipw.print("mMaxAllowedKeyguardNotifications=");
        ipw.print("mMaxAllowedKeyguardNotifications=");
        ipw.println(mMaxAllowedKeyguardNotifications);
        ipw.println(mMaxAllowedKeyguardNotifications);
        ipw.print("mAnimateNextPositionUpdate="); ipw.println(mAnimateNextPositionUpdate);
        ipw.print("mAnimateNextPositionUpdate="); ipw.println(mAnimateNextPositionUpdate);
        ipw.print("mPanelExpanded="); ipw.println(mPanelExpanded);
        ipw.print("isPanelExpanded()="); ipw.println(isPanelExpanded());
        ipw.print("mKeyguardQsUserSwitchEnabled="); ipw.println(mKeyguardQsUserSwitchEnabled);
        ipw.print("mKeyguardQsUserSwitchEnabled="); ipw.println(mKeyguardQsUserSwitchEnabled);
        ipw.print("mKeyguardUserSwitcherEnabled="); ipw.println(mKeyguardUserSwitcherEnabled);
        ipw.print("mKeyguardUserSwitcherEnabled="); ipw.println(mKeyguardUserSwitcherEnabled);
        ipw.print("mDozing="); ipw.println(mDozing);
        ipw.print("mDozing="); ipw.println(mDozing);
@@ -3606,7 +3608,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                    + isFullyExpanded() + " inQs=" + mQsController.getExpanded());
                    + isFullyExpanded() + " inQs=" + mQsController.getExpanded());
        }
        }
        mSysUiState
        mSysUiState
                .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE, mPanelExpanded)
                .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE, isPanelExpanded())
                .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
                .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
                        isFullyExpanded() && !mQsController.getExpanded())
                        isFullyExpanded() && !mQsController.getExpanded())
                .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
                .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
+21 −10
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_BEHAVIOR_CONT
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPTIMIZE_MEASURE;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPTIMIZE_MEASURE;


import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;


import android.app.IActivityManager;
import android.app.IActivityManager;
import android.content.Context;
import android.content.Context;
@@ -48,7 +49,6 @@ import android.view.WindowManagerGlobal;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dumpable;
import com.android.systemui.Dumpable;
import com.android.systemui.res.R;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
@@ -58,7 +58,9 @@ import com.android.systemui.dump.DumpsysTableLogger;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.res.R;
import com.android.systemui.scene.ui.view.WindowRootViewComponent;
import com.android.systemui.scene.ui.view.WindowRootViewComponent;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -71,6 +73,8 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;


import dagger.Lazy;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.lang.ref.Reference;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.lang.ref.WeakReference;
@@ -108,6 +112,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    private final KeyguardBypassController mKeyguardBypassController;
    private final KeyguardBypassController mKeyguardBypassController;
    private final Executor mBackgroundExecutor;
    private final Executor mBackgroundExecutor;
    private final AuthController mAuthController;
    private final AuthController mAuthController;
    private final Lazy<ShadeInteractor> mShadeInteractorLazy;
    private ViewGroup mWindowRootView;
    private ViewGroup mWindowRootView;
    private LayoutParams mLp;
    private LayoutParams mLp;
    private boolean mHasTopUi;
    private boolean mHasTopUi;
@@ -151,6 +156,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
            ScreenOffAnimationController screenOffAnimationController,
            ScreenOffAnimationController screenOffAnimationController,
            AuthController authController,
            AuthController authController,
            ShadeExpansionStateManager shadeExpansionStateManager,
            ShadeExpansionStateManager shadeExpansionStateManager,
            Lazy<ShadeInteractor> shadeInteractorLazy,
            ShadeWindowLogger logger) {
            ShadeWindowLogger logger) {
        mContext = context;
        mContext = context;
        mWindowRootViewComponentFactory = windowRootViewComponentFactory;
        mWindowRootViewComponentFactory = windowRootViewComponentFactory;
@@ -171,12 +177,12 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
        mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed();
        mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed();
        mLockScreenDisplayTimeout = context.getResources()
        mLockScreenDisplayTimeout = context.getResources()
                .getInteger(R.integer.config_lockScreenDisplayTimeout);
                .getInteger(R.integer.config_lockScreenDisplayTimeout);
        mShadeInteractorLazy = shadeInteractorLazy;
        ((SysuiStatusBarStateController) statusBarStateController)
        ((SysuiStatusBarStateController) statusBarStateController)
                .addCallback(mStateListener,
                .addCallback(mStateListener,
                        SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
                        SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
        configurationController.addCallback(this);
        configurationController.addCallback(this);
        shadeExpansionStateManager.addQsExpansionListener(this::onQsExpansionChanged);
        shadeExpansionStateManager.addQsExpansionListener(this::onQsExpansionChanged);
        shadeExpansionStateManager.addFullExpansionListener(this::onShadeExpansionFullyChanged);


        float desiredPreferredRefreshRate = context.getResources()
        float desiredPreferredRefreshRate = context.getResources()
                .getInteger(R.integer.config_keyguardRefreshRate);
                .getInteger(R.integer.config_keyguardRefreshRate);
@@ -224,9 +230,9 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    void onShadeExpansionFullyChanged(Boolean isExpanded) {
    void onShadeOrQsExpanded(Boolean isExpanded) {
        if (mCurrentState.panelExpanded != isExpanded) {
        if (mCurrentState.shadeOrQsExpanded != isExpanded) {
            mCurrentState.panelExpanded = isExpanded;
            mCurrentState.shadeOrQsExpanded = isExpanded;
            apply(mCurrentState);
            apply(mCurrentState);
        }
        }
    }
    }
@@ -289,6 +295,11 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    public void fetchWindowRootView() {
    public void fetchWindowRootView() {
        WindowRootViewComponent component = mWindowRootViewComponentFactory.create();
        WindowRootViewComponent component = mWindowRootViewComponentFactory.create();
        mWindowRootView = component.getWindowRootView();
        mWindowRootView = component.getWindowRootView();
        collectFlow(
                mWindowRootView,
                mShadeInteractorLazy.get().isAnyExpanded(),
                this::onShadeOrQsExpanded
        );
    }
    }


    @Override
    @Override
@@ -384,7 +395,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    }
    }


    private void applyFocusableFlag(NotificationShadeWindowState state) {
    private void applyFocusableFlag(NotificationShadeWindowState state) {
        boolean panelFocusable = state.notificationShadeFocusable && state.panelExpanded;
        boolean panelFocusable = state.notificationShadeFocusable && state.shadeOrQsExpanded;
        if (state.bouncerShowing && (state.keyguardOccluded || state.keyguardNeedsInput)
        if (state.bouncerShowing && (state.keyguardOccluded || state.keyguardNeedsInput)
                || ENABLE_REMOTE_INPUT && state.remoteInputActive
                || ENABLE_REMOTE_INPUT && state.remoteInputActive
                // Make the panel focusable if we're doing the screen off animation, since the light
                // Make the panel focusable if we're doing the screen off animation, since the light
@@ -408,7 +419,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    }
    }


    private void applyForceShowNavigationFlag(NotificationShadeWindowState state) {
    private void applyForceShowNavigationFlag(NotificationShadeWindowState state) {
        if (state.panelExpanded || state.bouncerShowing
        if (state.shadeOrQsExpanded || state.bouncerShowing
                || ENABLE_REMOTE_INPUT && state.remoteInputActive) {
                || ENABLE_REMOTE_INPUT && state.remoteInputActive) {
            mLpChanged.forciblyShownTypes |= WindowInsets.Type.navigationBars();
            mLpChanged.forciblyShownTypes |= WindowInsets.Type.navigationBars();
        } else {
        } else {
@@ -544,7 +555,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
                state.keyguardOccluded,
                state.keyguardOccluded,
                state.keyguardNeedsInput,
                state.keyguardNeedsInput,
                state.panelVisible,
                state.panelVisible,
                state.panelExpanded,
                state.shadeOrQsExpanded,
                state.notificationShadeFocusable,
                state.notificationShadeFocusable,
                state.bouncerShowing,
                state.bouncerShowing,
                state.keyguardFadingAway,
                state.keyguardFadingAway,
@@ -582,7 +593,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
                    mCurrentState.keyguardGoingAway,
                    mCurrentState.keyguardGoingAway,
                    mCurrentState.bouncerShowing,
                    mCurrentState.bouncerShowing,
                    mCurrentState.dozing,
                    mCurrentState.dozing,
                    mCurrentState.panelExpanded,
                    mCurrentState.shadeOrQsExpanded,
                    mCurrentState.dreaming);
                    mCurrentState.dreaming);
        }
        }
    }
    }
@@ -833,7 +844,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
     */
     */
    @Override
    @Override
    public boolean getPanelExpanded() {
    public boolean getPanelExpanded() {
        return mCurrentState.panelExpanded;
        return mCurrentState.shadeOrQsExpanded;
    }
    }


    @Override
    @Override
+3 −3
Original line number Original line Diff line number Diff line
@@ -32,7 +32,7 @@ class NotificationShadeWindowState(
    @JvmField var keyguardNeedsInput: Boolean = false,
    @JvmField var keyguardNeedsInput: Boolean = false,
    @JvmField var panelVisible: Boolean = false,
    @JvmField var panelVisible: Boolean = false,
    /** shade panel is expanded (expansion fraction > 0) */
    /** shade panel is expanded (expansion fraction > 0) */
    @JvmField var panelExpanded: Boolean = false,
    @JvmField var shadeOrQsExpanded: Boolean = false,
    @JvmField var notificationShadeFocusable: Boolean = false,
    @JvmField var notificationShadeFocusable: Boolean = false,
    @JvmField var bouncerShowing: Boolean = false,
    @JvmField var bouncerShowing: Boolean = false,
    @JvmField var keyguardFadingAway: Boolean = false,
    @JvmField var keyguardFadingAway: Boolean = false,
@@ -70,7 +70,7 @@ class NotificationShadeWindowState(
            keyguardOccluded.toString(),
            keyguardOccluded.toString(),
            keyguardNeedsInput.toString(),
            keyguardNeedsInput.toString(),
            panelVisible.toString(),
            panelVisible.toString(),
            panelExpanded.toString(),
            shadeOrQsExpanded.toString(),
            notificationShadeFocusable.toString(),
            notificationShadeFocusable.toString(),
            bouncerShowing.toString(),
            bouncerShowing.toString(),
            keyguardFadingAway.toString(),
            keyguardFadingAway.toString(),
@@ -137,7 +137,7 @@ class NotificationShadeWindowState(
                this.keyguardOccluded = keyguardOccluded
                this.keyguardOccluded = keyguardOccluded
                this.keyguardNeedsInput = keyguardNeedsInput
                this.keyguardNeedsInput = keyguardNeedsInput
                this.panelVisible = panelVisible
                this.panelVisible = panelVisible
                this.panelExpanded = panelExpanded
                this.shadeOrQsExpanded = panelExpanded
                this.notificationShadeFocusable = notificationShadeFocusable
                this.notificationShadeFocusable = notificationShadeFocusable
                this.bouncerShowing = bouncerShowing
                this.bouncerShowing = bouncerShowing
                this.keyguardFadingAway = keyguardFadingAway
                this.keyguardFadingAway = keyguardFadingAway
+3 −0
Original line number Original line Diff line number Diff line
@@ -104,6 +104,7 @@ import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.shade.ShadeWindowLogger;
import com.android.systemui.shade.ShadeWindowLogger;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -185,6 +186,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
    private @Mock SysuiColorExtractor mColorExtractor;
    private @Mock SysuiColorExtractor mColorExtractor;
    private @Mock AuthController mAuthController;
    private @Mock AuthController mAuthController;
    private @Mock ShadeExpansionStateManager mShadeExpansionStateManager;
    private @Mock ShadeExpansionStateManager mShadeExpansionStateManager;
    private @Mock ShadeInteractor mShadeInteractor;
    private @Mock ShadeWindowLogger mShadeWindowLogger;
    private @Mock ShadeWindowLogger mShadeWindowLogger;
    private @Captor ArgumentCaptor<KeyguardStateController.Callback>
    private @Captor ArgumentCaptor<KeyguardStateController.Callback>
            mKeyguardStateControllerCallback;
            mKeyguardStateControllerCallback;
@@ -249,6 +251,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
                mScreenOffAnimationController,
                mScreenOffAnimationController,
                mAuthController,
                mAuthController,
                mShadeExpansionStateManager,
                mShadeExpansionStateManager,
                () -> mShadeInteractor,
                mShadeWindowLogger);
                mShadeWindowLogger);
        mFeatureFlags = new FakeFeatureFlags();
        mFeatureFlags = new FakeFeatureFlags();
        mFeatureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false);
        mFeatureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false);
+40 −4
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
@@ -46,22 +47,34 @@ import android.view.WindowManager;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.systemui.res.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
import com.android.systemui.scene.FakeWindowRootViewComponent;
import com.android.systemui.scene.FakeWindowRootViewComponent;
import com.android.systemui.scene.SceneTestUtils;
import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository;
import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepository;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController;
import com.android.systemui.user.domain.interactor.UserInteractor;


import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.MoreExecutors;


@@ -77,8 +90,10 @@ import org.mockito.Spy;
import java.util.List;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;


import kotlinx.coroutines.test.TestScope;

@RunWith(AndroidTestingRunner.class)
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@RunWithLooper(setAsMainLooper = true)
@SmallTest
@SmallTest
public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {


@@ -102,6 +117,9 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
    @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
    @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
    @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
    @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
    private final Executor mBackgroundExecutor = MoreExecutors.directExecutor();
    private final Executor mBackgroundExecutor = MoreExecutors.directExecutor();
    private SceneTestUtils mUtils = new SceneTestUtils(this);
    private TestScope mTestScope = mUtils.getTestScope();
    private ShadeInteractor mShadeInteractor;


    private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
    private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
    private float mPreferredRefreshRate = -1;
    private float mPreferredRefreshRate = -1;
@@ -119,6 +137,23 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);


        mShadeInteractor =
                new ShadeInteractor(
                        mTestScope.getBackgroundScope(),
                        new FakeDisableFlagsRepository(),
                        new FakeSceneContainerFlags(),
                        mUtils::sceneInteractor,
                        new FakeKeyguardRepository(),
                        new FakeUserSetupRepository(),
                        mock(DeviceProvisionedController.class),
                        mock(UserInteractor.class),
                        new SharedNotificationContainerInteractor(
                                new FakeConfigurationRepository(),
                                mContext,
                                new ResourcesSplitShadeStateController()),
                        new FakeShadeRepository()
                );

        mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(
        mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(
                mContext,
                mContext,
                new FakeWindowRootViewComponent.Factory(mNotificationShadeWindowView),
                new FakeWindowRootViewComponent.Factory(mNotificationShadeWindowView),
@@ -136,6 +171,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
                mScreenOffAnimationController,
                mScreenOffAnimationController,
                mAuthController,
                mAuthController,
                mShadeExpansionStateManager,
                mShadeExpansionStateManager,
                () -> mShadeInteractor,
                mShadeWindowLogger) {
                mShadeWindowLogger) {
                    @Override
                    @Override
                    protected boolean isDebuggable() {
                    protected boolean isDebuggable() {
@@ -272,9 +308,9 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {


    @Test
    @Test
    public void setPanelExpanded_notFocusable_altFocusable_whenPanelIsOpen() {
    public void setPanelExpanded_notFocusable_altFocusable_whenPanelIsOpen() {
        mNotificationShadeWindowController.onShadeExpansionFullyChanged(true);
        mNotificationShadeWindowController.onShadeOrQsExpanded(true);
        clearInvocations(mWindowManager);
        clearInvocations(mWindowManager);
        mNotificationShadeWindowController.onShadeExpansionFullyChanged(true);
        mNotificationShadeWindowController.onShadeOrQsExpanded(true);
        verifyNoMoreInteractions(mWindowManager);
        verifyNoMoreInteractions(mWindowManager);
        mNotificationShadeWindowController.setNotificationShadeFocusable(true);
        mNotificationShadeWindowController.setNotificationShadeFocusable(true);


Loading