Merge "Optimistic fix for tile not getting redistributed in split shade" into tm-qpr-dev

This commit is contained in:
Michał Brzeziński
2022-12-13 18:07:42 +00:00
committed by Android (Google) Code Review
4 changed files with 41 additions and 10 deletions

View File

@@ -741,6 +741,14 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
} }
}; };
/**
* Force all tiles to be redistributed across pages.
* Should be called when one of the following changes: rows, columns, number of tiles.
*/
public void forceTilesRedistribution() {
mDistributeTiles = true;
}
public interface PageListener { public interface PageListener {
int INVALID_PAGE = -1; int INVALID_PAGE = -1;

View File

@@ -148,6 +148,11 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
} }
} }
@Override
protected void onSplitShadeChanged() {
((PagedTileLayout) mView.getOrCreateTileLayout()).forceTilesRedistribution();
}
/** */ /** */
public void setVisibility(int visibility) { public void setVisibility(int visibility) {
mView.setVisibility(visibility); mView.setVisibility(visibility);

View File

@@ -96,17 +96,23 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
/* newOrientation= */ newConfig.orientation, /* newOrientation= */ newConfig.orientation,
/* containerName= */ mView.getDumpableTag()); /* containerName= */ mView.getDumpableTag());
boolean previousSplitShadeState = mShouldUseSplitNotificationShade;
mShouldUseSplitNotificationShade = mShouldUseSplitNotificationShade =
LargeScreenUtils.shouldUseSplitNotificationShade(getResources()); LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
mLastOrientation = newConfig.orientation; mLastOrientation = newConfig.orientation;
switchTileLayoutIfNeeded(); switchTileLayoutIfNeeded();
onConfigurationChanged(); onConfigurationChanged();
if (previousSplitShadeState != mShouldUseSplitNotificationShade) {
onSplitShadeChanged();
}
} }
}; };
protected void onConfigurationChanged() { } protected void onConfigurationChanged() { }
protected void onSplitShadeChanged() { }
private final Function1<Boolean, Unit> mMediaHostVisibilityListener = (visible) -> { private final Function1<Boolean, Unit> mMediaHostVisibilityListener = (visible) -> {
if (mMediaVisibilityChangedListener != null) { if (mMediaVisibilityChangedListener != null) {
mMediaVisibilityChangedListener.accept(visible); mMediaVisibilityChangedListener.accept(visible);
@@ -264,14 +270,6 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
} }
} }
} }
protected QSTile getTile(String subPanel) {
for (int i = 0; i < mRecords.size(); i++) {
if (subPanel.equals(mRecords.get(i).tile.getTileSpec())) {
return mRecords.get(i).tile;
}
}
return mHost.createTile(subPanel);
}
boolean areThereTiles() { boolean areThereTiles() {
return !mRecords.isEmpty(); return !mRecords.isEmpty();

View File

@@ -1,9 +1,12 @@
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 android.testing.TestableResources
import com.android.internal.logging.MetricsLogger import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger import com.android.internal.logging.UiEventLogger
import com.android.systemui.R
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.FeatureFlags
@@ -26,10 +29,11 @@ import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito import org.mockito.Mockito
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.never
import org.mockito.Mockito.reset import org.mockito.Mockito.reset
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
@SmallTest @SmallTest
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@@ -54,8 +58,11 @@ class QSPanelControllerTest : SysuiTestCase() {
@Mock private lateinit var otherTile: QSTile @Mock private lateinit var otherTile: QSTile
@Mock private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager @Mock private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager
@Mock private lateinit var featureFlags: FeatureFlags @Mock private lateinit var featureFlags: FeatureFlags
@Mock private lateinit var configuration: Configuration
@Mock private lateinit var pagedTileLayout: PagedTileLayout
private lateinit var controller: QSPanelController private lateinit var controller: QSPanelController
private val testableResources: TestableResources = mContext.orCreateTestableResources
@Before @Before
fun setUp() { fun setUp() {
@@ -63,7 +70,9 @@ class QSPanelControllerTest : SysuiTestCase() {
whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider) whenever(brightnessSliderFactory.create(any(), any())).thenReturn(brightnessSlider)
whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController) whenever(brightnessControllerFactory.create(any())).thenReturn(brightnessController)
whenever(qsPanel.resources).thenReturn(mContext.orCreateTestableResources.resources) testableResources.addOverride(R.bool.config_use_split_notification_shade, false)
whenever(qsPanel.resources).thenReturn(testableResources.resources)
whenever(qsPanel.getOrCreateTileLayout()).thenReturn(pagedTileLayout)
whenever(statusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false) whenever(statusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false)
whenever(qsPanel.setListening(anyBoolean())).then { whenever(qsPanel.setListening(anyBoolean())).then {
whenever(qsPanel.isListening).thenReturn(it.getArgument(0)) whenever(qsPanel.isListening).thenReturn(it.getArgument(0))
@@ -121,4 +130,15 @@ class QSPanelControllerTest : SysuiTestCase() {
whenever(statusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false) whenever(statusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false)
assertThat(controller.isBouncerInTransit()).isEqualTo(false) assertThat(controller.isBouncerInTransit()).isEqualTo(false)
} }
@Test
fun configurationChange_onlySplitShadeConfigChanges_tileAreRedistributed() {
testableResources.addOverride(R.bool.config_use_split_notification_shade, false)
controller.mOnConfigurationChangedListener.onConfigurationChange(configuration)
verify(pagedTileLayout, never()).forceTilesRedistribution()
testableResources.addOverride(R.bool.config_use_split_notification_shade, true)
controller.mOnConfigurationChangedListener.onConfigurationChange(configuration)
verify(pagedTileLayout).forceTilesRedistribution()
}
} }