From 53ab72bbab0ffc01f226f8bab5b126ec6c10b04a Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Wed, 25 Aug 2021 12:43:22 +0100 Subject: [PATCH] Refreshing visibility of QS elements whenever configuration changes Previously visibility was refreshed only when rotation happened but we want to handle other cases as well, e.g. switching screens. Also unifying refreshVisibility methods for both footer and brightness slider. Fixes: 195922194 Test: manual Change-Id: I05a8ac29df117a0d7b2e6df22ccd62cea80bb12b --- .../systemui/qs/FooterActionsController.kt | 8 +++++++ .../systemui/qs/QSPanelControllerBase.java | 4 ++-- .../systemui/qs/QuickQSPanelController.java | 14 +++---------- .../systemui/qs/QuickQSPanelControllerTest.kt | 21 ++++++++++++++++--- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt index bedb330381340..4f87cad225c74 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt @@ -213,5 +213,13 @@ class FooterActionsController @Inject constructor( mView.setKeyguardShowing() } + fun refreshVisibility(shouldBeVisible: Boolean) { + if (shouldBeVisible) { + showFooter() + } else { + hideFooter() + } + } + private fun isTunerEnabled() = tunerService.isTunerEnabled } \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java index 0da4814f8e3ef..42323e30a084d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java @@ -84,15 +84,15 @@ public abstract class QSPanelControllerBase extends ViewContr public void onConfigurationChange(Configuration newConfig) { mShouldUseSplitNotificationShade = Utils.shouldUseSplitNotificationShade(getResources()); + onConfigurationChanged(); if (newConfig.orientation != mLastOrientation) { mLastOrientation = newConfig.orientation; - onScreenRotated(); switchTileLayout(false); } } }; - protected void onScreenRotated() { } + protected void onConfigurationChanged() { } private final Function1 mMediaHostVisibilityListener = (visible) -> { if (mMediaVisibilityChangedListener != null) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java index 921ee35e38905..92690c7d12025 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java @@ -81,7 +81,7 @@ public class QuickQSPanelController extends QSPanelControllerBase mMediaHost.init(MediaHierarchyManager.LOCATION_QQS); mBrightnessController.init(mShouldUseSplitNotificationShade); mFooterActionsController.init(); - refreshFooterVisibility(); + mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade); } @Override @@ -109,14 +109,6 @@ public class QuickQSPanelController extends QSPanelControllerBase return mView.isListening(); } - private void refreshFooterVisibility() { - if (mShouldUseSplitNotificationShade) { - mFooterActionsController.showFooter(); - } else { - mFooterActionsController.hideFooter(); - } - } - private void setMaxTiles(int parseNumTiles) { mView.setMaxTiles(parseNumTiles); setTiles(); @@ -129,9 +121,9 @@ public class QuickQSPanelController extends QSPanelControllerBase } @Override - protected void onScreenRotated() { + protected void onConfigurationChanged() { mBrightnessController.refreshVisibility(mShouldUseSplitNotificationShade); - refreshFooterVisibility(); + mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt index 912bea2f4c970..59948d310b4ff 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt @@ -16,6 +16,7 @@ package com.android.systemui.qs +import android.content.res.Configuration import android.test.suitebuilder.annotation.SmallTest import android.testing.AndroidTestingRunner import com.android.internal.logging.MetricsLogger @@ -27,12 +28,13 @@ import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTileView import com.android.systemui.qs.customize.QSCustomizerController import com.android.systemui.qs.logging.QSLogger -import com.android.systemui.flags.FeatureFlags import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.anyBoolean +import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.any @@ -65,11 +67,11 @@ class QuickQSPanelControllerTest : SysuiTestCase() { @Mock private lateinit var tileView: QSTileView @Mock - private lateinit var featureFlags: FeatureFlags - @Mock private lateinit var quickQsBrightnessController: QuickQSBrightnessController @Mock private lateinit var footerActionsController: FooterActionsController + @Captor + private lateinit var captor: ArgumentCaptor private lateinit var controller: QuickQSPanelController @@ -78,6 +80,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() { MockitoAnnotations.initMocks(this) `when`(quickQSPanel.tileLayout).thenReturn(tileLayout) + `when`(quickQSPanel.isAttachedToWindow).thenReturn(true) `when`(quickQSPanel.dumpableTag).thenReturn("") `when`(quickQSPanel.resources).thenReturn(mContext.resources) `when`(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView) @@ -123,4 +126,16 @@ class QuickQSPanelControllerTest : SysuiTestCase() { verify(quickQSPanel, times(limit)).addTile(any()) } + + @Test + fun testBrightnessAndFooterVisibilityRefreshedWhenConfigurationChanged() { + // times(2) because both controller and base controller are registering their listeners + verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture()) + + captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) } + + verify(quickQsBrightnessController).refreshVisibility(anyBoolean()) + // times(2) because footer visibility is also refreshed on controller init + verify(footerActionsController, times(2)).refreshVisibility(anyBoolean()) + } }