diff --git a/packages/SystemUI/res/layout/qs_paged_page_side_labels.xml b/packages/SystemUI/res/layout/qs_paged_page_side_labels.xml index c83077371bb06..ee54f1da88976 100644 --- a/packages/SystemUI/res/layout/qs_paged_page_side_labels.xml +++ b/packages/SystemUI/res/layout/qs_paged_page_side_labels.xml @@ -14,10 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. --> - + diff --git a/packages/SystemUI/res/layout/qs_tile_label_divider.xml b/packages/SystemUI/res/layout/qs_tile_label_divider.xml index 0d6460c22f0f1..150a5b8bfef1a 100644 --- a/packages/SystemUI/res/layout/qs_tile_label_divider.xml +++ b/packages/SystemUI/res/layout/qs_tile_label_divider.xml @@ -15,13 +15,4 @@ ~ limitations under the License. --> - \ No newline at end of file + \ No newline at end of file diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml index de2db9867de90..861e650fea127 100644 --- a/packages/SystemUI/res/values/flags.xml +++ b/packages/SystemUI/res/values/flags.xml @@ -24,4 +24,6 @@ false + + false diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 6e9c5dcde95be..e247d5136e642 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2808,4 +2808,7 @@ Tap for more information + + + diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 9e7ed0f6e3658..d0601f00b937b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -26,7 +26,6 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.provider.Settings; import android.util.AttributeSet; import android.util.Pair; import android.view.Gravity; @@ -113,7 +112,7 @@ public class QSPanel extends LinearLayout implements Tunable { private int mMediaTotalBottomMargin; private int mFooterMarginStartHorizontal; private Consumer mMediaVisibilityChangedListener; - private final boolean mSideLabels; + private boolean mSideLabels; public QSPanel(Context context, AttributeSet attrs) { super(context, attrs); @@ -121,12 +120,15 @@ public class QSPanel extends LinearLayout implements Tunable { mMediaTotalBottomMargin = getResources().getDimensionPixelSize( R.dimen.quick_settings_bottom_margin_media); mContext = context; - mSideLabels = Settings.Secure.getInt( - mContext.getContentResolver(), "sysui_side_labels", 0) != 0; setOrientation(VERTICAL); mMovableContentStartIndex = getChildCount(); + + } + + void initialize(boolean sideLabels) { + mSideLabels = sideLabels; mRegularTileLayout = createRegularTileLayout(); mTileLayout = mRegularTileLayout; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index d3adc9b13fe0a..30774be0491bb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -18,6 +18,8 @@ package com.android.systemui.qs; import static com.android.systemui.media.dagger.MediaModule.QS_PANEL; import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS; +import static com.android.systemui.qs.dagger.QSFlagsModule.QS_LABELS_FLAG; +import static com.android.systemui.qs.dagger.QSFlagsModule.QS_SIDE_LABELS; import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_MEDIA_PLAYER; import android.annotation.NonNull; @@ -64,6 +66,7 @@ public class QSPanelController extends QSPanelControllerBase { private BrightnessMirrorController mBrightnessMirrorController; private boolean mGridContentVisible = true; + private boolean mQsLabelsFlag; private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener = new QSPanel.OnConfigurationChangedListener() { @@ -89,7 +92,9 @@ public class QSPanelController extends QSPanelControllerBase { QSTileRevealController.Factory qsTileRevealControllerFactory, DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory, - BrightnessSlider.Factory brightnessSliderFactory) { + BrightnessSlider.Factory brightnessSliderFactory, + @Named(QS_LABELS_FLAG) boolean qsLabelsFlag, + @Named(QS_SIDE_LABELS) boolean useSideLabels) { super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, uiEventLogger, qsLogger, dumpManager); mQsSecurityFooter = qsSecurityFooter; @@ -103,6 +108,9 @@ public class QSPanelController extends QSPanelControllerBase { mView.setBrightnessView(mBrightnessSlider.getRootView()); mBrightnessController = brightnessControllerFactory.create(mBrightnessSlider); + + mQsLabelsFlag = qsLabelsFlag; + mSideLabels = useSideLabels; } @Override @@ -321,6 +329,7 @@ public class QSPanelController extends QSPanelControllerBase { @Override public void onTuningChanged(String key, String newValue) { if (QS_REMOVE_LABELS.equals(key)) { + if (!mQsLabelsFlag) return; boolean newShowLabels = newValue == null || "0".equals(newValue); if (mShowLabels == newShowLabels) return; mShowLabels = newShowLabels; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java index 5282f08efacbb..b02799f496601 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java @@ -72,6 +72,7 @@ public abstract class QSPanelControllerBase extends ViewContr private final QSHost.Callback mQSHostCallback = this::setTiles; protected boolean mShowLabels = true; + protected boolean mSideLabels; private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener = new QSPanel.OnConfigurationChangedListener() { @@ -110,6 +111,7 @@ public abstract class QSPanelControllerBase extends ViewContr @Override protected void onInit() { + mView.initialize(mSideLabels); mQSLogger.logAllTilesChangeListening(mView.isListening(), mView.getDumpableTag(), ""); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 6074ef6156c3c..a29ac3bb77e94 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -47,6 +47,11 @@ public class QuickQSPanel extends QSPanel { super(context, attrs); mMaxTiles = Math.min(DEFAULT_MAX_TILES, getResources().getInteger(R.integer.quick_qs_panel_max_columns)); + } + + @Override + void initialize(boolean sideLabels) { + super.initialize(sideLabels); applyBottomMargin((View) mRegularTileLayout); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 911261a011438..d559e07f3ff63 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -36,7 +36,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { private int mCellMarginTop; protected boolean mListening; protected int mMaxAllowedRows = 3; - private boolean mShowLabels; + private boolean mShowLabels = true; // Prototyping with less rows private final boolean mLessRows; @@ -51,8 +51,6 @@ public class TileLayout extends ViewGroup implements QSTileLayout { public TileLayout(Context context, AttributeSet attrs) { super(context, attrs); setFocusableInTouchMode(true); - mShowLabels = Settings.Secure.getInt(context.getContentResolver(), - QSPanelController.QS_REMOVE_LABELS, 0) == 0; mLessRows = ((Settings.System.getInt(context.getContentResolver(), "qs_less_rows", 0) != 0) || useQsMediaPlayer(context)); updateResources(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index 73ab9b037385b..9fe949b159339 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -20,12 +20,12 @@ import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; -import android.os.Build; import android.util.AttributeSet; import android.util.TypedValue; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.Toolbar; @@ -79,9 +79,8 @@ public class QSCustomizer extends LinearLayout { mContext.getString(com.android.internal.R.string.reset)); // Prototype menu item toolbar.getMenu() - .add(Menu.NONE, MENU_REMOVE_LABELS, Menu.NONE, "Remove labels") - .setCheckable(true) - .setVisible(Build.IS_ENG || Build.IS_USERDEBUG); + .add(Menu.NONE, MENU_REMOVE_LABELS, Menu.NONE, R.string.qs_remove_labels) + .setCheckable(true); toolbar.setTitle(R.string.qs_edit); mRecyclerView = findViewById(android.R.id.list); mTransparentView = findViewById(R.id.customizer_transparent_view); @@ -90,6 +89,11 @@ public class QSCustomizer extends LinearLayout { mRecyclerView.setItemAnimator(animator); } + MenuItem getRemoveItem() { + return ((Toolbar) findViewById(com.android.internal.R.id.action_bar)) + .getMenu().findItem(MENU_REMOVE_LABELS); + } + void updateResources() { LayoutParams lp = (LayoutParams) mTransparentView.getLayoutParams(); lp.height = mContext.getResources().getDimensionPixelSize( diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java index fa1f7c4e22f95..abf230e31e93a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizerController.java @@ -19,6 +19,7 @@ package com.android.systemui.qs.customize; import static com.android.systemui.qs.customize.QSCustomizer.EXTRA_QS_CUSTOMIZING; import static com.android.systemui.qs.customize.QSCustomizer.MENU_REMOVE_LABELS; import static com.android.systemui.qs.customize.QSCustomizer.MENU_RESET; +import static com.android.systemui.qs.dagger.QSFlagsModule.QS_LABELS_FLAG; import android.content.res.Configuration; import android.os.Bundle; @@ -52,6 +53,7 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; /** {@link ViewController} for {@link QSCustomizer}. */ @QSScope @@ -66,6 +68,7 @@ public class QSCustomizerController extends ViewController { private final UiEventLogger mUiEventLogger; private final Toolbar mToolbar; private final TunerService mTunerService; + private final boolean mQsLabelsFlag; private final OnMenuItemClickListener mOnMenuItemClickListener = new OnMenuItemClickListener() { @Override @@ -115,7 +118,7 @@ public class QSCustomizerController extends ViewController { QSTileHost qsTileHost, TileAdapter tileAdapter, ScreenLifecycle screenLifecycle, KeyguardStateController keyguardStateController, LightBarController lightBarController, ConfigurationController configurationController, UiEventLogger uiEventLogger, - TunerService tunerService) { + TunerService tunerService, @Named(QS_LABELS_FLAG) boolean qsLabelsFlag) { super(view); mTileQueryHelper = tileQueryHelper; mQsTileHost = qsTileHost; @@ -127,10 +130,17 @@ public class QSCustomizerController extends ViewController { mUiEventLogger = uiEventLogger; mToolbar = mView.findViewById(com.android.internal.R.id.action_bar); + mQsLabelsFlag = qsLabelsFlag; mTunerService = tunerService; } + @Override + protected void onInit() { + super.onInit(); + mView.getRemoveItem().setVisible(mQsLabelsFlag); + } + @Override protected void onViewAttached() { mView.updateNavBackDrop(getResources().getConfiguration(), mLightBarController); diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFlagsModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFlagsModule.java new file mode 100644 index 0000000000000..ad4c8bb410215 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFlagsModule.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package com.android.systemui.qs.dagger; + +import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.statusbar.FeatureFlags; +import com.android.systemui.util.settings.SecureSettings; + +import javax.inject.Named; + +import dagger.Module; +import dagger.Provides; + +@Module +public interface QSFlagsModule { + String QS_LABELS_FLAG = "qs_labels_flag"; + String QS_SIDE_LABELS = "qs_side_labels"; + + @Provides + @SysUISingleton + @Named(QS_LABELS_FLAG) + static boolean provideQSFlag(FeatureFlags featureFlags) { + return featureFlags.isQSLabelsEnabled(); + } + + @Provides + @SysUISingleton + @Named(QS_SIDE_LABELS) + static boolean provideSideLabels(SecureSettings secureSettings, + @Named(QS_LABELS_FLAG) boolean qsLabels) { + return qsLabels && secureSettings.getInt("sysui_side_labels", 0) != 0; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java index cfc81eee9b3cc..33713f3724c7f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java @@ -40,7 +40,7 @@ import dagger.Provides; * Module for QS dependencies */ @Module(subcomponents = {QSFragmentComponent.class}, - includes = {MediaModule.class}) + includes = {MediaModule.class, QSFlagsModule.class}) public interface QSModule { @Provides @@ -74,4 +74,5 @@ public interface QSModule { /** */ @Binds QSHost provideQsHost(QSTileHost controllerImpl); + } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java index 9b3775e72f9a5..9e582dd2fd819 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java @@ -14,6 +14,8 @@ package com.android.systemui.qs.tileimpl; +import static com.android.systemui.qs.dagger.QSFlagsModule.QS_SIDE_LABELS; + import android.content.Context; import android.os.Build; import android.util.Log; @@ -51,9 +53,9 @@ import com.android.systemui.qs.tiles.UserTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.qs.tiles.WorkModeTile; import com.android.systemui.util.leak.GarbageMonitor; -import com.android.systemui.util.settings.SecureSettings; import javax.inject.Inject; +import javax.inject.Named; import javax.inject.Provider; import dagger.Lazy; @@ -96,7 +98,7 @@ public class QSFactoryImpl implements QSFactory { @Inject public QSFactoryImpl( Lazy qsHostLazy, - SecureSettings settings, + @Named(QS_SIDE_LABELS) boolean useSideLabels, Provider customTileBuilderProvider, Provider wifiTileProvider, Provider internetTileProvider, @@ -125,7 +127,7 @@ public class QSFactoryImpl implements QSFactory { mQsHostLazy = qsHostLazy; mCustomTileBuilderProvider = customTileBuilderProvider; - mSideLabels = settings.getInt("sysui_side_labels", 0) != 0; + mSideLabels = useSideLabels; mWifiTileProvider = wifiTileProvider; mInternetTileProvider = internetTileProvider; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java index d6db7360fb21c..53ef0d7269b8a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java @@ -52,4 +52,9 @@ public class FeatureFlags { public boolean isTwoColumnNotificationShadeEnabled() { return mFlagReader.isEnabled(R.bool.flag_notification_twocolumn); } + + // Does not support runtime changes + public boolean isQSLabelsEnabled() { + return mFlagReader.isEnabled(R.bool.flag_qs_labels); + } } 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 14de7aa94d69f..c6f97fa01deee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java @@ -117,7 +117,8 @@ public class QSPanelControllerTest extends SysuiTestCase { mController = new QSPanelController(mQSPanel, mQSSecurityFooter, mTunerService, mQSTileHost, mQSCustomizerController, true, mMediaHost, mQSTileRevealControllerFactory, mDumpManager, mMetricsLogger, mUiEventLogger, - mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory); + mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory, + /* labelsFlag */ false, /* sideLabels */ false); mController.init(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index a726181fc702f..3e12c89f71969 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -81,6 +81,7 @@ public class QSPanelTest extends SysuiTestCase { mTestableLooper.runWithLooper(() -> { mQsPanel = new QSPanel(mContext, null); + mQsPanel.initialize(false); mQsPanel.onFinishInflate(); // Provides a parent with non-zero size for QSPanel mParentView = new FrameLayout(mContext);