diff --git a/core/java/com/android/internal/app/MediaRouteChooserDialog.java b/core/java/com/android/internal/app/MediaRouteChooserDialog.java index 7108d1443d3a5..23d966fdbc0d9 100644 --- a/core/java/com/android/internal/app/MediaRouteChooserDialog.java +++ b/core/java/com/android/internal/app/MediaRouteChooserDialog.java @@ -16,25 +16,26 @@ package com.android.internal.app; -import com.android.internal.R; - -import android.app.Dialog; +import android.app.AlertDialog; import android.content.Context; import android.media.MediaRouter; import android.media.MediaRouter.RouteInfo; import android.os.Bundle; import android.text.TextUtils; import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.Window; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; +import com.android.internal.R; + import java.util.Comparator; /** @@ -48,9 +49,10 @@ import java.util.Comparator; * * TODO: Move this back into the API, as in the support library media router. */ -public class MediaRouteChooserDialog extends Dialog { +public class MediaRouteChooserDialog extends AlertDialog { private final MediaRouter mRouter; private final MediaRouterCallback mCallback; + private final boolean mShowProgressBarWhenEmpty; private int mRouteTypes; private View.OnClickListener mExtendedSettingsClickListener; @@ -60,10 +62,15 @@ public class MediaRouteChooserDialog extends Dialog { private boolean mAttachedToWindow; public MediaRouteChooserDialog(Context context, int theme) { + this(context, theme, true); + } + + public MediaRouteChooserDialog(Context context, int theme, boolean showProgressBarWhenEmpty) { super(context, theme); mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); mCallback = new MediaRouterCallback(); + mShowProgressBarWhenEmpty = showProgressBarWhenEmpty; } /** @@ -120,28 +127,38 @@ public class MediaRouteChooserDialog extends Dialog { @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + // Note: setView must be called before super.onCreate(). + setView(LayoutInflater.from(getContext()).inflate(R.layout.media_route_chooser_dialog, + null)); - getWindow().requestFeature(Window.FEATURE_LEFT_ICON); - - setContentView(R.layout.media_route_chooser_dialog); setTitle(mRouteTypes == MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY ? R.string.media_route_chooser_title_for_remote_display : R.string.media_route_chooser_title); - // Must be called after setContentView. - getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, - isLightTheme(getContext()) ? R.drawable.ic_media_route_off_holo_light - : R.drawable.ic_media_route_off_holo_dark); + setIcon(isLightTheme(getContext()) ? R.drawable.ic_media_route_off_holo_light + : R.drawable.ic_media_route_off_holo_dark); + super.onCreate(savedInstanceState); + + View emptyView = findViewById(android.R.id.empty); mAdapter = new RouteAdapter(getContext()); - mListView = (ListView)findViewById(R.id.media_route_list); + mListView = (ListView) findViewById(R.id.media_route_list); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(mAdapter); - mListView.setEmptyView(findViewById(android.R.id.empty)); + mListView.setEmptyView(emptyView); - mExtendedSettingsButton = (Button)findViewById(R.id.media_route_extended_settings_button); + mExtendedSettingsButton = (Button) findViewById(R.id.media_route_extended_settings_button); updateExtendedSettingsButton(); + + if (!mShowProgressBarWhenEmpty) { + findViewById(R.id.media_route_progress_bar).setVisibility(View.GONE); + + // Center the empty view when the progress bar is not shown. + LinearLayout.LayoutParams params = + (LinearLayout.LayoutParams) emptyView.getLayoutParams(); + params.gravity = Gravity.CENTER; + emptyView.setLayoutParams(params); + } } private void updateExtendedSettingsButton() { diff --git a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java index bb2d7fab9cc11..5628b7ed9d156 100644 --- a/core/java/com/android/internal/app/MediaRouteDialogPresenter.java +++ b/core/java/com/android/internal/app/MediaRouteDialogPresenter.java @@ -66,24 +66,37 @@ public abstract class MediaRouteDialogPresenter { } } + /** Create a media route dialog as appropriate. */ public static Dialog createDialog(Context context, int routeTypes, View.OnClickListener extendedSettingsClickListener) { - final MediaRouter router = (MediaRouter)context.getSystemService( - Context.MEDIA_ROUTER_SERVICE); - int theme = MediaRouteChooserDialog.isLightTheme(context) ? android.R.style.Theme_DeviceDefault_Light_Dialog : android.R.style.Theme_DeviceDefault_Dialog; + return createDialog(context, routeTypes, extendedSettingsClickListener, theme); + } + + /** Create a media route dialog as appropriate. */ + public static Dialog createDialog(Context context, + int routeTypes, View.OnClickListener extendedSettingsClickListener, int theme) { + return createDialog(context, routeTypes, extendedSettingsClickListener, theme, + true /* showProgressBarWhenEmpty */); + } + + /** Create a media route dialog as appropriate. */ + public static Dialog createDialog(Context context, int routeTypes, + View.OnClickListener extendedSettingsClickListener, int theme, + boolean showProgressBarWhenEmpty) { + final MediaRouter router = context.getSystemService(MediaRouter.class); MediaRouter.RouteInfo route = router.getSelectedRoute(); if (route.isDefault() || !route.matchesTypes(routeTypes)) { - final MediaRouteChooserDialog d = new MediaRouteChooserDialog(context, theme); + final MediaRouteChooserDialog d = new MediaRouteChooserDialog(context, theme, + showProgressBarWhenEmpty); d.setRouteTypes(routeTypes); d.setExtendedSettingsClickListener(extendedSettingsClickListener); return d; } else { - MediaRouteControllerDialog d = new MediaRouteControllerDialog(context, theme); - return d; + return new MediaRouteControllerDialog(context, theme); } } } diff --git a/core/res/res/layout/media_route_chooser_dialog.xml b/core/res/res/layout/media_route_chooser_dialog.xml index cd1c74fd7d7df..bf73f4b26c9cd 100644 --- a/core/res/res/layout/media_route_chooser_dialog.xml +++ b/core/res/res/layout/media_route_chooser_dialog.xml @@ -28,20 +28,21 @@ - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:visibility="gone"> + + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingStart="16dp" + android:text="@string/media_route_chooser_searching" /> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index ff1c70a273dcd..cf05fd3c7dc4a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1671,6 +1671,7 @@ + diff --git a/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml b/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml new file mode 100644 index 0000000000000..0544b871fa063 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_dialog_btn_filled_large.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml b/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml index a3e289a42d052..e06bfdc500dae 100644 --- a/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml +++ b/packages/SystemUI/res/layout/alert_dialog_button_bar_systemui.xml @@ -22,10 +22,6 @@ android:scrollbarAlwaysDrawVerticalTrack="true" android:scrollIndicators="top|bottom" android:fillViewport="true" - android:paddingTop="@dimen/dialog_button_bar_top_padding" - android:paddingStart="@dimen/dialog_side_padding" - android:paddingEnd="@dimen/dialog_side_padding" - android:paddingBottom="@dimen/dialog_bottom_padding" style="?android:attr/buttonBarStyle"> - + android:paddingStart="@dimen/dialog_side_padding" + android:paddingEnd="@dimen/dialog_side_padding"> + + \ No newline at end of file diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index b98354523e942..a6c4441484fde 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -381,12 +381,19 @@ @style/Widget.Dialog.Button.BorderButton ?androidprv:attr/colorSurface @style/AlertDialogStyle + @style/ButtonBarStyle + @style/Widget.Dialog.Button.Large + + + + 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 bcc02b497f00e..209336c17e813 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -202,11 +202,12 @@ public class CastTile extends QSTileImpl { mActivityStarter .postStartActivityDismissingKeyguard(getLongClickIntent(), 0, controller); - }); + }, R.style.Theme_SystemUI_Dialog, false /* showProgressBarWhenEmpty */); holder.init(dialog); SystemUIDialog.setShowForAllUsers(dialog, true); SystemUIDialog.registerDismissListener(dialog); SystemUIDialog.setWindowOnTop(dialog, mKeyguard.isShowing()); + SystemUIDialog.setDialogSize(dialog); mUiHandler.post(() -> { if (view != null) {