diff options
9 files changed, 67 insertions, 8 deletions
diff --git a/packages/SystemUI/res/drawable/qs_background_primary.xml b/packages/SystemUI/res/drawable/qs_background_primary.xml new file mode 100644 index 000000000000..0a3afc575c4a --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_background_primary.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +  ~ Copyright (C) 2021 The Android Open Source Project +  ~ +  ~ Licensed under the Apache License, Version 2.0 (the "License"); +  ~ you may not use this file except in compliance with the License. +  ~ You may obtain a copy of the License at +  ~ +  ~      http://www.apache.org/licenses/LICENSE-2.0 +  ~ +  ~ Unless required by applicable law or agreed to in writing, software +  ~ distributed under the License is distributed on an "AS IS" BASIS, +  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +  ~ See the License for the specific language governing permissions and +  ~ limitations under the License. +  --> +<inset xmlns:android="http://schemas.android.com/apk/res/android"> +    <shape> +        <solid android:color="?android:attr/colorBackground"/> +        <corners android:radius="@dimen/notification_corner_radius" /> +    </shape> +</inset>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 387f2f2ccfc7..77f17439c487 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -25,7 +25,8 @@      <View          android:id="@+id/quick_settings_background"          android:layout_width="match_parent" -        android:layout_height="0dp" /> +        android:layout_height="0dp" +        android:background="@drawable/qs_background_primary" />      <com.android.systemui.qs.NonInterceptingScrollView          android:id="@+id/expanded_qs_scroll_view" diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml index db8bfec2bac5..de2db9867de9 100644 --- a/packages/SystemUI/res/values/flags.xml +++ b/packages/SystemUI/res/values/flags.xml @@ -20,6 +20,7 @@      <bool name="flag_notification_pipeline2">false</bool>      <bool name="flag_notification_pipeline2_rendering">false</bool> +    <bool name="flag_shade_is_opaque">true</bool>      <!-- b/171917882 -->      <bool name="flag_notification_twocolumn">false</bool> diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 16e95900052f..e8976d379fef 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -67,6 +67,7 @@ public class QSContainerImpl extends FrameLayout {      private int mSideMargins;      private boolean mQsDisabled; +    private boolean mBackgroundVisible;      private int mContentPadding = -1;      private boolean mAnimateBottomOnNextLayout; @@ -122,6 +123,14 @@ public class QSContainerImpl extends FrameLayout {          return true;      } +    /** +     * If QS should have a solid or transparent background. +     */ +    public void setBackgroundVisible(boolean visible) { +        mBackgroundVisible = visible; +        updateBackgroundVisibility(); +    } +      @Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {          // QSPanel will show as many rows as it can (up to TileLayout.MAX_ROWS) such that the @@ -174,7 +183,11 @@ public class QSContainerImpl extends FrameLayout {          final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;          if (disabled == mQsDisabled) return;          mQsDisabled = disabled; -        mBackground.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE); +        updateBackgroundVisibility(); +    } + +    private void updateBackgroundVisibility() { +        mBackground.setVisibility(mQsDisabled || !mBackgroundVisible ? GONE : VISIBLE);      }      void updateResources(QSPanelController qsPanelController, diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index dbdd04a1e3ba..ed308ae1ac6c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -44,6 +44,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;  import com.android.systemui.qs.customize.QSCustomizerController;  import com.android.systemui.qs.dagger.QSFragmentComponent;  import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.FeatureFlags;  import com.android.systemui.statusbar.StatusBarState;  import com.android.systemui.statusbar.notification.stack.StackStateAnimator;  import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; @@ -105,6 +106,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca      private QSPanelController mQSPanelController;      private QuickQSPanelController mQuickQSPanelController;      private QSCustomizerController mQSCustomizerController; +    private FeatureFlags mFeatureFlags;      @Inject      public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler, @@ -112,7 +114,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca              StatusBarStateController statusBarStateController, CommandQueue commandQueue,              QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,              @Named(QUICK_QS_PANEL) MediaHost qqsMediaHost, -            QSFragmentComponent.Factory qsComponentFactory) { +            QSFragmentComponent.Factory qsComponentFactory, FeatureFlags featureFlags) {          mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;          mInjectionInflater = injectionInflater;          mCommandQueue = commandQueue; @@ -122,6 +124,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca          mQsComponentFactory = qsComponentFactory;          commandQueue.observe(getLifecycle(), this);          mHost = qsTileHost; +        mFeatureFlags = featureFlags;          mStatusBarStateController = statusBarStateController;      } @@ -163,6 +166,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca          mQSContainerImplController = qsFragmentComponent.getQSContainerImplController();          mQSContainerImplController.init();          mContainer = mQSContainerImplController.getView(); +        mContainer.setBackgroundVisible(!mFeatureFlags.isShadeOpaque());          mQSDetail.setQsPanel(mQSPanelController, mHeader, mFooter);          mQSAnimator = qsFragmentComponent.getQSAnimator(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java index 964c499e4b42..d6db7360fb21 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java @@ -44,6 +44,10 @@ public class FeatureFlags {          return mFlagReader.isEnabled(R.bool.flag_notification_pipeline2_rendering);      } +    public boolean isShadeOpaque() { +        return mFlagReader.isEnabled(R.bool.flag_shade_is_opaque); +    } +      /** b/171917882 */      public boolean isTwoColumnNotificationShadeEnabled() {          return mFlagReader.isEnabled(R.bool.flag_notification_twocolumn); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index fc1811b11d73..146314877cb7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -49,6 +49,7 @@ import com.android.systemui.R;  import com.android.systemui.dagger.SysUISingleton;  import com.android.systemui.dock.DockManager;  import com.android.systemui.statusbar.BlurUtils; +import com.android.systemui.statusbar.FeatureFlags;  import com.android.systemui.statusbar.ScrimView;  import com.android.systemui.statusbar.notification.stack.ViewState;  import com.android.systemui.statusbar.policy.ConfigurationController; @@ -125,6 +126,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump       */      public static final float BUSY_SCRIM_ALPHA = 1f; +    /** +     * Scrim opacity that can have text on top. +     */ +    public static final float GAR_SCRIM_ALPHA = 0.6f; +      static final int TAG_KEY_ANIM = R.id.scrim;      private static final int TAG_START_ALPHA = R.id.scrim_alpha_start;      private static final int TAG_END_ALPHA = R.id.scrim_alpha_end; @@ -199,10 +205,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump              AlarmManager alarmManager, KeyguardStateController keyguardStateController,              DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,              KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, -            BlurUtils blurUtils, ConfigurationController configurationController) { +            BlurUtils blurUtils, ConfigurationController configurationController, +            FeatureFlags featureFlags) {          mScrimStateListener = lightBarController::setScrimState; -        mDefaultScrimAlpha = BUSY_SCRIM_ALPHA; +        mDefaultScrimAlpha = featureFlags.isShadeOpaque() ? BUSY_SCRIM_ALPHA : GAR_SCRIM_ALPHA;          mBlurUtils = blurUtils;          mKeyguardStateController = keyguardStateController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index a6b0330743b3..1260eaf23c52 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -51,6 +51,7 @@ import com.android.systemui.qs.tileimpl.QSFactoryImpl;  import com.android.systemui.settings.UserTracker;  import com.android.systemui.shared.plugins.PluginManager;  import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.FeatureFlags;  import com.android.systemui.statusbar.phone.AutoTileManager;  import com.android.systemui.statusbar.phone.StatusBar;  import com.android.systemui.statusbar.phone.StatusBarIconController; @@ -87,6 +88,8 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {      private MediaHost mQSMediaHost;      @Mock      private MediaHost mQQSMediaHost; +    @Mock +    private FeatureFlags mFeatureFlags;      public QSFragmentTest() {          super(QSFragment.class); @@ -175,6 +178,7 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {                  new QSDetailDisplayer(),                  mQSMediaHost,                  mQQSMediaHost, -                mQsComponentFactory); +                mQsComponentFactory, +                mFeatureFlags);      }  } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 342b2f57396e..30c3e6d85875 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -50,6 +50,7 @@ import com.android.systemui.DejankUtils;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.dock.DockManager;  import com.android.systemui.statusbar.BlurUtils; +import com.android.systemui.statusbar.FeatureFlags;  import com.android.systemui.statusbar.ScrimView;  import com.android.systemui.statusbar.policy.ConfigurationController;  import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -104,6 +105,8 @@ public class ScrimControllerTest extends SysuiTestCase {      private BlurUtils mBlurUtils;      @Mock      private ConfigurationController mConfigurationController; +    @Mock +    private FeatureFlags mFeatureFlags;      private static class AnimatorListener implements Animator.AnimatorListener { @@ -211,13 +214,13 @@ public class ScrimControllerTest extends SysuiTestCase {          when(mDelayedWakeLockBuilder.setTag(any(String.class)))                  .thenReturn(mDelayedWakeLockBuilder);          when(mDelayedWakeLockBuilder.build()).thenReturn(mWakeLock); - +        when(mFeatureFlags.isShadeOpaque()).thenReturn(true);          when(mDockManager.isDocked()).thenReturn(false);          mScrimController = new ScrimController(mLightBarController,                  mDozeParamenters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder,                  new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor, -                mDockManager, mBlurUtils, mConfigurationController); +                mDockManager, mBlurUtils, mConfigurationController, mFeatureFlags);          mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);          mScrimController.attachViews(mScrimBehind, mScrimInFront, mScrimForBubble);          mScrimController.setAnimatorListener(mAnimatorListener);  |