diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java index 7c50337a780fe..5142d3cd2b992 100644 --- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java +++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java @@ -50,10 +50,19 @@ public final class SystemUiDeviceConfigFlags { // Flags related to controls /** - * (boolean) Wether to have split behavior when opening QS + * (boolean) Whether to have split behavior when opening QS */ public static final String QS_SPLIT_ENABLED = "qs_split_enabled"; + /** + * (int) Open settings panels for WiFi and BT tiles + * 0 - default behavior, link to settings + * 1 - open panel on long press, click remains the same + * 2 - open panel on click, long press remains the same + * 3 - use details on long press + */ + public static final String QS_USE_SETTINGS_PANELS = "qs_use_settings_panels"; + // Flags related to Smart Suggestions - these are read in SmartReplyConstants. /** (boolean) Whether to enable smart suggestions in notifications. */ diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 37113cfac2f3d..1211e135d1b77 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -106,11 +106,6 @@ public class QuickQSPanel extends QSPanel { mFullPanel = fullPanel; } - @Override - protected boolean shouldShowDetail() { - return !mExpanded; - } - @Override protected void drawTile(TileRecord r, State state) { if (state instanceof SignalState) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index 90455395db45f..3d6ee4cf96176 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -63,6 +63,8 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.PagedTileLayout.TilePage; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QuickStatusBarHeader; +import com.android.systemui.qs.tiles.QSSettingsControllerKt; +import com.android.systemui.qs.tiles.QSSettingsPanel; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -121,9 +123,16 @@ public abstract class QSTileImpl implements QSTile, Lifecy */ abstract public int getMetricsCategory(); + /** + * Experimental option on whether to use settings panels. Only loaded on creation, so the tile + * needs to be removed and added for this to take effect. + */ + protected final QSSettingsPanel mQSSettingsPanelOption; + protected QSTileImpl(QSHost host) { mHost = host; mContext = host.getContext(); + mQSSettingsPanelOption = QSSettingsControllerKt.getQSSettingsPanelOption(); } @NonNull @@ -288,6 +297,10 @@ public abstract class QSTileImpl implements QSTile, Lifecy } protected void handleLongClick() { + if (mQSSettingsPanelOption == QSSettingsPanel.USE_DETAIL) { + showDetail(true); + return; + } Dependency.get(ActivityStarter.class).postStartActivityDismissingKeyguard( getLongClickIntent(), 0); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QSSettingsController.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/QSSettingsController.kt new file mode 100644 index 0000000000000..c7ef0be508aab --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QSSettingsController.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 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.tiles + +import android.provider.DeviceConfig +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags + +enum class QSSettingsPanel { + DEFAULT, + OPEN_LONG_PRESS, + OPEN_CLICK, + USE_DETAIL +} + +fun getQSSettingsPanelOption(): QSSettingsPanel = + when (DeviceConfig.getInt(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.QS_USE_SETTINGS_PANELS, 0)) { + 1 -> QSSettingsPanel.OPEN_LONG_PRESS + 2 -> QSSettingsPanel.OPEN_CLICK + 3 -> QSSettingsPanel.USE_DETAIL + else -> QSSettingsPanel.DEFAULT + } \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 0e7362c3d0816..b79b662a2bd73 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -56,6 +56,7 @@ import javax.inject.Inject; /** Quick settings tile: Wifi **/ public class WifiTile extends QSTileImpl { private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS); + private static final Intent WIFI_PANEL = new Intent(Settings.Panel.ACTION_WIFI); protected final NetworkController mController; private final AccessPointController mWifiController; @@ -112,11 +113,16 @@ public class WifiTile extends QSTileImpl { @Override public Intent getLongClickIntent() { - return WIFI_SETTINGS; + if (mQSSettingsPanelOption == QSSettingsPanel.OPEN_LONG_PRESS) return WIFI_PANEL; + else return WIFI_SETTINGS; } @Override protected void handleClick() { + if (mQSSettingsPanelOption == QSSettingsPanel.OPEN_CLICK) { + mActivityStarter.postStartActivityDismissingKeyguard(WIFI_PANEL, 0); + return; + } // Secondary clicks are header clicks, just toggle. mState.copyTo(mStateBeforeClick); boolean wifiEnabled = mState.value;