Merge "Refreshing visibility of QS elements whenever configuration changes" into sc-v2-dev am: 2907230d91
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15674796 Change-Id: I5c61e6fa2932e9714dc4460f9530bc4f4551433c
This commit is contained in:
@@ -213,5 +213,13 @@ class FooterActionsController @Inject constructor(
|
|||||||
mView.setKeyguardShowing()
|
mView.setKeyguardShowing()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun refreshVisibility(shouldBeVisible: Boolean) {
|
||||||
|
if (shouldBeVisible) {
|
||||||
|
showFooter()
|
||||||
|
} else {
|
||||||
|
hideFooter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun isTunerEnabled() = tunerService.isTunerEnabled
|
private fun isTunerEnabled() = tunerService.isTunerEnabled
|
||||||
}
|
}
|
||||||
@@ -84,15 +84,15 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
|
|||||||
public void onConfigurationChange(Configuration newConfig) {
|
public void onConfigurationChange(Configuration newConfig) {
|
||||||
mShouldUseSplitNotificationShade =
|
mShouldUseSplitNotificationShade =
|
||||||
Utils.shouldUseSplitNotificationShade(getResources());
|
Utils.shouldUseSplitNotificationShade(getResources());
|
||||||
|
onConfigurationChanged();
|
||||||
if (newConfig.orientation != mLastOrientation) {
|
if (newConfig.orientation != mLastOrientation) {
|
||||||
mLastOrientation = newConfig.orientation;
|
mLastOrientation = newConfig.orientation;
|
||||||
onScreenRotated();
|
|
||||||
switchTileLayout(false);
|
switchTileLayout(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
protected void onScreenRotated() { }
|
protected void onConfigurationChanged() { }
|
||||||
|
|
||||||
private final Function1<Boolean, Unit> mMediaHostVisibilityListener = (visible) -> {
|
private final Function1<Boolean, Unit> mMediaHostVisibilityListener = (visible) -> {
|
||||||
if (mMediaVisibilityChangedListener != null) {
|
if (mMediaVisibilityChangedListener != null) {
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
|
mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
|
||||||
mBrightnessController.init(mShouldUseSplitNotificationShade);
|
mBrightnessController.init(mShouldUseSplitNotificationShade);
|
||||||
mFooterActionsController.init();
|
mFooterActionsController.init();
|
||||||
refreshFooterVisibility();
|
mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -109,14 +109,6 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
return mView.isListening();
|
return mView.isListening();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshFooterVisibility() {
|
|
||||||
if (mShouldUseSplitNotificationShade) {
|
|
||||||
mFooterActionsController.showFooter();
|
|
||||||
} else {
|
|
||||||
mFooterActionsController.hideFooter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setMaxTiles(int parseNumTiles) {
|
private void setMaxTiles(int parseNumTiles) {
|
||||||
mView.setMaxTiles(parseNumTiles);
|
mView.setMaxTiles(parseNumTiles);
|
||||||
setTiles();
|
setTiles();
|
||||||
@@ -129,9 +121,9 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onScreenRotated() {
|
protected void onConfigurationChanged() {
|
||||||
mBrightnessController.refreshVisibility(mShouldUseSplitNotificationShade);
|
mBrightnessController.refreshVisibility(mShouldUseSplitNotificationShade);
|
||||||
refreshFooterVisibility();
|
mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.qs
|
package com.android.systemui.qs
|
||||||
|
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.test.suitebuilder.annotation.SmallTest
|
import android.test.suitebuilder.annotation.SmallTest
|
||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
import com.android.internal.logging.MetricsLogger
|
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.plugins.qs.QSTileView
|
||||||
import com.android.systemui.qs.customize.QSCustomizerController
|
import com.android.systemui.qs.customize.QSCustomizerController
|
||||||
import com.android.systemui.qs.logging.QSLogger
|
import com.android.systemui.qs.logging.QSLogger
|
||||||
import com.android.systemui.flags.FeatureFlags
|
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.ArgumentCaptor
|
||||||
import org.mockito.ArgumentMatchers.anyBoolean
|
import org.mockito.ArgumentMatchers.anyBoolean
|
||||||
|
import org.mockito.Captor
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.Mockito.`when`
|
import org.mockito.Mockito.`when`
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
@@ -65,11 +67,11 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var tileView: QSTileView
|
private lateinit var tileView: QSTileView
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var featureFlags: FeatureFlags
|
|
||||||
@Mock
|
|
||||||
private lateinit var quickQsBrightnessController: QuickQSBrightnessController
|
private lateinit var quickQsBrightnessController: QuickQSBrightnessController
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var footerActionsController: FooterActionsController
|
private lateinit var footerActionsController: FooterActionsController
|
||||||
|
@Captor
|
||||||
|
private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
||||||
|
|
||||||
private lateinit var controller: QuickQSPanelController
|
private lateinit var controller: QuickQSPanelController
|
||||||
|
|
||||||
@@ -78,6 +80,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
|
||||||
`when`(quickQSPanel.tileLayout).thenReturn(tileLayout)
|
`when`(quickQSPanel.tileLayout).thenReturn(tileLayout)
|
||||||
|
`when`(quickQSPanel.isAttachedToWindow).thenReturn(true)
|
||||||
`when`(quickQSPanel.dumpableTag).thenReturn("")
|
`when`(quickQSPanel.dumpableTag).thenReturn("")
|
||||||
`when`(quickQSPanel.resources).thenReturn(mContext.resources)
|
`when`(quickQSPanel.resources).thenReturn(mContext.resources)
|
||||||
`when`(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView)
|
`when`(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView)
|
||||||
@@ -123,4 +126,16 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
verify(quickQSPanel, times(limit)).addTile(any())
|
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())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user