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

Commit ee1f6e2d authored by Jason Monk's avatar Jason Monk
Browse files

Fix cast dialog dismiss on home/recents

Listen for ACTION_CLOSE_SYSTEM_DIALOGS and dismiss.

Test: manual
Change-Id: I5b4c8f54e451d0042dc498a24bc329d536692a92
Fixes: 37517281
parent 38323f50
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -16,8 +16,14 @@

package com.android.systemui.qs.tiles;

import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.support.v7.app.MediaRouteChooserDialog;
@@ -61,6 +67,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
    private final KeyguardMonitor mKeyguard;
    private final Callback mCallback = new Callback();
    private final ActivityStarter mActivityStarter;
    private Dialog mDialog;

    public CastTile(QSHost host) {
        super(host);
@@ -128,9 +135,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
            Context context = new ContextThemeWrapper(mContext,
                    R.style.Theme_AppCompat_Light_Dialog_Alert);
            if (mState.value) {
                MediaRouteControllerDialog dialog = new MediaRouteControllerDialog(context);
                dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL);
                dialog.show();
                mDialog = new MediaRouteControllerDialog(context);
            } else {
                // Instead of showing detail, show standard media routing UI.
                MediaRouteChooserDialog dialog = new MediaRouteChooserDialog(context);
@@ -138,13 +143,21 @@ public class CastTile extends QSTileImpl<BooleanState> {
                        .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
                        .build();
                dialog.setRouteSelector(selector);
                dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL);
                dialog.show();
                mDialog = dialog;
            }
            mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL);
            mDialog.show();
            registerReceiver();
            mHost.collapsePanels();
        });
    }

    private void registerReceiver() {
        mContext.registerReceiverAsUser(mReceiver, UserHandle.CURRENT,
                new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), null, null);
        mDialog.setOnDismissListener(dialog -> mContext.unregisterReceiver(mReceiver));
    }

    @Override
    public CharSequence getTileLabel() {
        return mContext.getString(R.string.quick_settings_cast_title);
@@ -210,6 +223,15 @@ 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<>();