Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bce7f1da authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Cleanup QS dialogs" into oc-dr1-dev am: cb5e0e63 am:...

Merge "Merge "Cleanup QS dialogs" into oc-dr1-dev am: cb5e0e63 am: 41f4ab44" into oc-mr1-dev-plus-aosp
parents e93209ba 39b68995
Loading
Loading
Loading
Loading
+6 −23
Original line number Diff line number Diff line
@@ -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<>();

+13 −7
Original line number Diff line number Diff line
@@ -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
+39 −1
Original line number Diff line number Diff line
@@ -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;
            }
        });
    }
}