diff options
| author | 2021-02-05 16:48:36 +0000 | |
|---|---|---|
| committer | 2021-02-10 15:45:12 +0000 | |
| commit | bc24cc59445d32c2400e40363b58addea7601d45 (patch) | |
| tree | fe2a693f6f996e983a161225b67abc4fe0453a13 | |
| parent | 5d3e81d377af17962e6a83a229da0432270d4eec (diff) | |
Don't use horizontal layout for quicksettings when using 2-column shade
Bug: 171917882
Test: atest SystemUITests + manual
Change-Id: Ic059840244585a1f2989bdcd09d792d0968e53d1
8 files changed, 90 insertions, 22 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index f56a890c54d4..782092161418 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -40,6 +40,7 @@ import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.brightness.BrightnessController; import com.android.systemui.settings.brightness.BrightnessSlider; +import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.tuner.TunerService; @@ -92,9 +93,10 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> { DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory, BrightnessSlider.Factory brightnessSliderFactory, - @Named(QS_LABELS_FLAG) boolean qsLabelsFlag) { + @Named(QS_LABELS_FLAG) boolean qsLabelsFlag, + FeatureFlags featureFlags) { super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost, - metricsLogger, uiEventLogger, qsLogger, dumpManager); + metricsLogger, uiEventLogger, qsLogger, dumpManager, featureFlags); mQsSecurityFooter = qsSecurityFooter; mTunerService = tunerService; mQsCustomizerController = qsCustomizerController; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java index b02799f49660..9426e7122c1c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java @@ -34,6 +34,8 @@ import com.android.systemui.plugins.qs.QSTileView; import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.logging.QSLogger; +import com.android.systemui.statusbar.FeatureFlags; +import com.android.systemui.util.Utils; import com.android.systemui.util.ViewController; import com.android.systemui.util.animation.DisappearParameters; @@ -63,6 +65,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr private final UiEventLogger mUiEventLogger; private final QSLogger mQSLogger; private final DumpManager mDumpManager; + private final FeatureFlags mFeatureFlags; protected final ArrayList<TileRecord> mRecords = new ArrayList<>(); private int mLastOrientation; @@ -93,11 +96,18 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr private boolean mUsingHorizontalLayout; - protected QSPanelControllerBase(T view, QSTileHost host, + protected QSPanelControllerBase( + T view, + QSTileHost host, QSCustomizerController qsCustomizerController, - @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, MediaHost mediaHost, - MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, - DumpManager dumpManager) { + @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, + MediaHost mediaHost, + MetricsLogger metricsLogger, + UiEventLogger uiEventLogger, + QSLogger qsLogger, + DumpManager dumpManager, + FeatureFlags featureFlags + ) { super(view); mHost = host; mQsCustomizerController = qsCustomizerController; @@ -107,6 +117,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr mUiEventLogger = uiEventLogger; mQSLogger = qsLogger; mDumpManager = dumpManager; + mFeatureFlags = featureFlags; } @Override @@ -334,9 +345,12 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr } boolean shouldUseHorizontalLayout() { + if (Utils.shouldUseSplitNotificationShade(mFeatureFlags, getResources())) { + return false; + } return mUsingMediaPlayer && mMediaHost.getVisible() - && getResources().getConfiguration().orientation - == Configuration.ORIENTATION_LANDSCAPE; + && getResources().getConfiguration().orientation + == Configuration.ORIENTATION_LANDSCAPE; } private void logTiles() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java index a0db2000cb4d..383e932a6955 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java @@ -30,6 +30,7 @@ import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.qs.logging.QSLogger; +import com.android.systemui.statusbar.FeatureFlags; import java.util.ArrayList; import java.util.List; @@ -57,9 +58,11 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel> @Named(QS_USING_MEDIA_PLAYER) boolean usingMediaPlayer, @Named(QUICK_QS_PANEL) MediaHost mediaHost, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, - DumpManager dumpManager, @Named(QS_LABELS_FLAG) boolean qsLabelsFlag) { + DumpManager dumpManager, @Named(QS_LABELS_FLAG) boolean qsLabelsFlag, + FeatureFlags featureFlags + ) { super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, - uiEventLogger, qsLogger, dumpManager); + uiEventLogger, qsLogger, dumpManager, featureFlags); mUseSideLabels = qsLabelsFlag; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index e0ef3b6483a5..0e40cc0de914 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -134,6 +134,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcher; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; +import com.android.systemui.util.Utils; import com.android.wm.shell.animation.FlingAnimationUtils; import java.io.FileDescriptor; @@ -783,18 +784,13 @@ public class NotificationPanelViewController extends PanelViewController { mNotificationStackScrollLayoutController.setLayoutParams(lp); } - if (shouldUseSplitNotificationShade()) { + if (Utils.shouldUseSplitNotificationShade(mFeatureFlags, mResources)) { // In order to change the constraints at runtime, all children of the Constraint Layout // must have ids. ensureAllViewsHaveIds(mNotificationContainerParent); } } - private boolean shouldUseSplitNotificationShade() { - return mFeatureFlags.isTwoColumnNotificationShadeEnabled() - && mResources.getBoolean(R.bool.config_use_split_notification_shade); - } - private static void ensureAllViewsHaveIds(ViewGroup parentView) { for (int i = 0; i < parentView.getChildCount(); i++) { View childView = parentView.getChildAt(i); diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java index 72f1f22c0ba1..fd3641cfdaa0 100644 --- a/packages/SystemUI/src/com/android/systemui/util/Utils.java +++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java @@ -20,12 +20,15 @@ import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.provider.Settings; import android.text.TextUtils; import android.view.View; +import com.android.systemui.R; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.FeatureFlags; import java.util.HashSet; import java.util.List; @@ -163,4 +166,15 @@ public class Utils { } return apps; } + + /** + * Returns true if the device should use the split notification shade, based on feature flags, + * orientation and screen width. + */ + public static boolean shouldUseSplitNotificationShade(FeatureFlags featureFlags, + Resources resources) { + return featureFlags.isTwoColumnNotificationShadeEnabled() + && resources.getBoolean(R.bool.config_use_split_notification_shade); + } + } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java index 0dc268a3c186..fb817eac3e10 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java @@ -16,6 +16,8 @@ package com.android.systemui.qs; +import static com.google.common.truth.Truth.assertThat; + import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -28,6 +30,8 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.content.res.Configuration; +import android.content.res.Resources; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; @@ -37,6 +41,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.testing.UiEventLoggerFake; +import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.media.MediaHost; @@ -44,6 +49,7 @@ 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.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.util.animation.DisappearParameters; import org.junit.Before; @@ -86,17 +92,25 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { QSTileView mQSTileView; @Mock PagedTileLayout mPagedTileLayout; + @Mock + FeatureFlags mFeatureFlags; + @Mock + Resources mResources; + @Mock + Configuration mConfiguration; private QSPanelControllerBase<QSPanel> mController; + + /** Implementation needed to ensure we have a reflectively-available class name. */ private class TestableQSPanelControllerBase extends QSPanelControllerBase<QSPanel> { protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host, QSCustomizerController qsCustomizerController, MediaHost mediaHost, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, - DumpManager dumpManager) { + DumpManager dumpManager, FeatureFlags featureFlags) { super(view, host, qsCustomizerController, true, mediaHost, metricsLogger, uiEventLogger, - qsLogger, dumpManager); + qsLogger, dumpManager, featureFlags); } @Override @@ -121,10 +135,12 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { when(mQSTileRevealControllerFactory.create(any(), any())) .thenReturn(mQSTileRevealController); when(mMediaHost.getDisappearParameters()).thenReturn(new DisappearParameters()); + when(mQSPanel.getResources()).thenReturn(mResources); + when(mResources.getConfiguration()).thenReturn(mConfiguration); mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost, mQSCustomizerController, mMediaHost, - mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager); + mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mFeatureFlags); mController.init(); reset(mQSTileRevealController); @@ -136,7 +152,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { QSPanelControllerBase<QSPanel> controller = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost, mQSCustomizerController, mMediaHost, - mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager) { + mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager, mFeatureFlags) { @Override protected QSTileRevealController createTileRevealController() { return mQSTileRevealController; @@ -218,4 +234,18 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { verify(mQSLogger).logAllTilesChangeListening(false, "QSPanel", "dnd"); verify(mPagedTileLayout).setListening(false, mUiEventLogger); } + + + @Test + public void testShouldUzeHorizontalLayout_falseForSplitShade() { + mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; + when(mMediaHost.getVisible()).thenReturn(true); + + when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(false); + assertThat(mController.shouldUseHorizontalLayout()).isTrue(); + + when(mFeatureFlags.isTwoColumnNotificationShadeEnabled()).thenReturn(true); + when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(true); + assertThat(mController.shouldUseHorizontalLayout()).isFalse(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java index 4381158c3415..0dfebab59feb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java @@ -41,6 +41,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.settings.brightness.BrightnessController; import com.android.systemui.settings.brightness.BrightnessSlider; import com.android.systemui.settings.brightness.ToggleSlider; +import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.animation.DisappearParameters; @@ -93,6 +94,8 @@ public class QSPanelControllerTest extends SysuiTestCase { QSTileView mQSTileView; @Mock PagedTileLayout mPagedTileLayout; + @Mock + FeatureFlags mFeatureFlags; private QSPanelController mController; @@ -118,7 +121,9 @@ public class QSPanelControllerTest extends SysuiTestCase { mQSTileHost, mQSCustomizerController, true, mMediaHost, mQSTileRevealControllerFactory, mDumpManager, mMetricsLogger, mUiEventLogger, mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory, - /* labelsFlag */ false); + /* labelsFlag */ false, + mFeatureFlags + ); mController.init(); } 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 107160f47f02..587020090433 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt @@ -27,6 +27,7 @@ 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.statusbar.FeatureFlags import org.junit.After import org.junit.Before import org.junit.Test @@ -63,6 +64,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() { private lateinit var tileLayout: TileLayout @Mock private lateinit var tileView: QSTileView + @Mock + private lateinit var featureFlags: FeatureFlags private lateinit var controller: QuickQSPanelController @@ -84,7 +87,8 @@ class QuickQSPanelControllerTest : SysuiTestCase() { uiEventLogger, qsLogger, dumpManager, - false + false, + featureFlags ) controller.init() |