summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java40
3 files changed, 58 insertions, 31 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index f0d7d6c87833..2fc9fc7b09b0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -34,6 +34,7 @@ import android.view.View.OnAttachStateChangeListener;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import com.android.internal.app.MediaRouteChooserDialog;
@@ -50,6 +51,7 @@ import com.android.systemui.qs.QSDetailItems;
import com.android.systemui.qs.QSDetailItems.Item;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
@@ -139,25 +141,15 @@ public class CastTile extends QSTileImpl<BooleanState> {
Dependency.get(ActivityStarter.class)
.postStartActivityDismissingKeyguard(getLongClickIntent(), 0);
});
- mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL);
+ mDialog.getWindow().setType(LayoutParams.TYPE_KEYGUARD_DIALOG);
+ SystemUIDialog.setShowForAllUsers(mDialog, true);
+ SystemUIDialog.registerDismissListener(mDialog);
+ SystemUIDialog.setWindowOnTop(mDialog);
mUiHandler.post(() -> mDialog.show());
- registerReceiver();
mHost.collapsePanels();
});
}
- private void registerReceiver() {
- mContext.registerReceiverAsUser(mReceiver, UserHandle.CURRENT,
- new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), null, null);
- mRegistered = true;
- mDialog.setOnDismissListener(dialog -> {
- if (mRegistered) {
- mContext.unregisterReceiver(mReceiver);
- mRegistered = false;
- }
- });
- }
-
@Override
public CharSequence getTileLabel() {
return mContext.getString(R.string.quick_settings_cast_title);
@@ -223,15 +215,6 @@ public class CastTile extends QSTileImpl<BooleanState> {
}
};
- private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (mDialog != null) {
- mDialog.dismiss();
- }
- }
- };
-
private final class CastDetailAdapter implements DetailAdapter, QSDetailItems.Callback {
private final LinkedHashMap<String, CastDevice> mVisibleOrder = new LinkedHashMap<>();
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 1e78e650bbf9..0e0f949ce42f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -17,6 +17,7 @@
package com.android.systemui.qs.tiles;
import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -27,12 +28,14 @@ import android.service.quicksettings.Tile;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager.LayoutParams;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.R.string;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSIconView;
@@ -111,11 +114,9 @@ public class CellularTile extends QSTileImpl<SignalState> {
protected void handleClick() {
if (mDataController.isMobileDataEnabled()) {
if (mKeyguardMonitor.isSecure() && !mKeyguardMonitor.canSkipBouncer()) {
- mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
- showDisableDialog();
- });
+ mActivityStarter.postQSRunnableDismissingKeyguard(this::showDisableDialog);
} else {
- showDisableDialog();
+ mUiHandler.post(this::showDisableDialog);
}
} else {
mDataController.setMobileDataEnabled(true);
@@ -124,13 +125,18 @@ public class CellularTile extends QSTileImpl<SignalState> {
private void showDisableDialog() {
mHost.collapsePanels();
- SystemUIDialog.applyFlags(new AlertDialog.Builder(mContext)
- .setMessage(R.string.data_usage_disable_mobile)
+ AlertDialog dialog = new Builder(mContext)
+ .setMessage(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();
+ .create();
+ dialog.getWindow().setType(LayoutParams.TYPE_KEYGUARD_DIALOG);
+ SystemUIDialog.setShowForAllUsers(dialog, true);
+ SystemUIDialog.registerDismissListener(dialog);
+ SystemUIDialog.setWindowOnTop(dialog);
+ dialog.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 7b6725bfa392..9b0179dc4552 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
@@ -17,10 +17,18 @@
package com.android.systemui.statusbar.phone;
import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.UserHandle;
import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
/**
* Base class for dialogs that should appear over panels and keyguard.
@@ -59,7 +67,7 @@ public class SystemUIDialog extends AlertDialog {
setButton(BUTTON_NEGATIVE, mContext.getString(resId), onClick);
}
- public static void setShowForAllUsers(AlertDialog dialog, boolean show) {
+ public static void setShowForAllUsers(Dialog dialog, boolean show) {
if (show) {
dialog.getWindow().getAttributes().privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
@@ -69,10 +77,40 @@ public class SystemUIDialog extends AlertDialog {
}
}
+ public static void setWindowOnTop(Dialog dialog) {
+ if (Dependency.get(KeyguardMonitor.class).isShowing()) {
+ dialog.getWindow().setType(LayoutParams.TYPE_STATUS_BAR_PANEL);
+ } else {
+ dialog.getWindow().setType(LayoutParams.TYPE_STATUS_BAR_SUB_PANEL);
+ }
+ }
+
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;
}
+
+ public static void registerDismissListener(Dialog dialog) {
+ boolean[] registered = new boolean[1];
+ Context context = dialog.getContext();
+ final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ }
+ };
+ context.registerReceiverAsUser(mReceiver, UserHandle.CURRENT,
+ new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), null, null);
+ registered[0] = true;
+ dialog.setOnDismissListener(d -> {
+ if (registered[0]) {
+ context.unregisterReceiver(mReceiver);
+ registered[0] = false;
+ }
+ });
+ }
}