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

Commit c6bc9857 authored by android-build-team Robot's avatar android-build-team Robot Committed by android-build-merger
Browse files

Merge "Dismiss systemui QS dialogs on screen off." into pi-dev

am: 31919fb2

Change-Id: I65b9b897d09955d0d96f19e6fb5bde9c617a5fd5
parents d48aca89 31919fb2
Loading
Loading
Loading
Loading
+38 −20
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
@@ -30,6 +31,7 @@ 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.
 */
@@ -99,24 +101,40 @@ public class SystemUIDialog extends AlertDialog {
    }

    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();
        DismissReceiver dismissReceiver = new DismissReceiver(dialog);
        dismissReceiver.register();
    }

    private static class DismissReceiver extends BroadcastReceiver implements OnDismissListener {
        private static final IntentFilter INTENT_FILTER = new IntentFilter();
        static {
            INTENT_FILTER.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
            INTENT_FILTER.addAction(Intent.ACTION_SCREEN_OFF);
        }

        private final Dialog mDialog;
        private boolean mRegistered;

        DismissReceiver(Dialog dialog) {
            mDialog = dialog;
        }

        void register() {
            mDialog.getContext()
                    .registerReceiverAsUser(this, UserHandle.CURRENT, INTENT_FILTER, null, null);
            mRegistered = true;
        }
        };
        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;

        @Override
        public void onReceive(Context context, Intent intent) {
            mDialog.dismiss();
        }
        });

        @Override
        public void onDismiss(DialogInterface dialog) {
            if (mRegistered) {
                mDialog.getContext().unregisterReceiver(this);
                mRegistered = false;
            }
        }
    }}