Loading packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +6 −23 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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<>(); Loading packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +13 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +39 −1 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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; Loading @@ -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; } }); } } Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +6 −23 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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<>(); Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +13 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +39 −1 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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; Loading @@ -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; } }); } }