Merge "Make shade transparent under a flag"
This commit is contained in:
22
packages/SystemUI/res/drawable/qs_background_primary.xml
Normal file
22
packages/SystemUI/res/drawable/qs_background_primary.xml
Normal file
@@ -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>
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user