Loading packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +11 −9 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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() { Loading Loading @@ -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); Loading Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java +21 −10 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); } } } } Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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, Loading Loading @@ -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); } } } } Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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, Loading Loading @@ -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(), Loading Loading @@ -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 Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +40 −4 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading @@ -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; Loading @@ -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), Loading @@ -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() { Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +11 −9 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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() { Loading Loading @@ -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); Loading Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java +21 −10 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); } } } } Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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, Loading Loading @@ -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); } } } } Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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, Loading Loading @@ -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(), Loading Loading @@ -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 Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading
packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +40 −4 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading @@ -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; Loading @@ -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), Loading @@ -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() { Loading Loading @@ -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