diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 7eabf3995042b..6202d130df7d6 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2046,4 +2046,7 @@ been identified for them as running). [CHAR LIMIT=NONE] --> Tap for details on battery and data usage + + Turn off mobile data? + diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 81ec6a7c72a9e..272380ba6c3a2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; +import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -38,8 +39,9 @@ import com.android.systemui.plugins.qs.QSTile.SignalState; import com.android.systemui.qs.CellTileView; import com.android.systemui.qs.CellTileView.SignalIcon; import com.android.systemui.qs.QSHost; -import com.android.systemui.qs.SignalTileView; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.phone.SystemUIDialog; +import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; @@ -55,11 +57,13 @@ public class CellularTile extends QSTileImpl { private final CellSignalCallback mSignalCallback = new CellSignalCallback(); private final ActivityStarter mActivityStarter; + private final KeyguardMonitor mKeyguardMonitor; public CellularTile(QSHost host) { super(host); mController = Dependency.get(NetworkController.class); mActivityStarter = Dependency.get(ActivityStarter.class); + mKeyguardMonitor = Dependency.get(KeyguardMonitor.class); mDataController = mController.getMobileDataController(); mDetailAdapter = new CellularDetailAdapter(); } @@ -95,7 +99,28 @@ public class CellularTile extends QSTileImpl { @Override protected void handleClick() { - mDataController.setMobileDataEnabled(!mDataController.isMobileDataEnabled()); + if (mDataController.isMobileDataEnabled()) { + if (mKeyguardMonitor.isSecure() && !mKeyguardMonitor.canSkipBouncer()) { + mActivityStarter.postQSRunnableDismissingKeyguard(() -> { + showDisableDialog(); + }); + } else { + showDisableDialog(); + } + } else { + mDataController.setMobileDataEnabled(true); + } + } + + private void showDisableDialog() { + mHost.collapsePanels(); + SystemUIDialog.applyFlags(new AlertDialog.Builder(mContext) + .setMessage(R.string.data_usage_disable_mobile) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton( + com.android.internal.R.string.alert_windows_notification_turn_off_action, + (d, w) -> mDataController.setMobileDataEnabled(false)) + .create()).show(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java index 2783ec5d04920..7b6725bfa3927 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java @@ -69,9 +69,10 @@ public class SystemUIDialog extends AlertDialog { } } - public static void applyFlags(AlertDialog dialog) { + public static AlertDialog applyFlags(AlertDialog dialog) { dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + return dialog; } }