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);