diff options
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()  |