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 2725a329f6e05..5512993e10e7a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -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 { 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 { 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 { .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 { } }; + 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 mVisibleOrder = new LinkedHashMap<>();