Merge "Use AlertDialog for MediaRouteControllerDialog"
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index b0e0373..5ce3e54 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -18,19 +18,23 @@
import com.android.internal.R;
-import android.app.Dialog;
+import android.app.AlertDialog;
import android.app.MediaRouteActionProvider;
import android.app.MediaRouteButton;
import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
import android.media.MediaRouter;
import android.media.MediaRouter.RouteGroup;
import android.media.MediaRouter.RouteInfo;
import android.os.Bundle;
+import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
-import android.view.Window;
-import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.SeekBar;
@@ -46,7 +50,7 @@
*
* TODO: Move this back into the API, as in the support library media router.
*/
-public class MediaRouteControllerDialog extends Dialog {
+public class MediaRouteControllerDialog extends AlertDialog {
// Time to wait before updating the volume when the user lets go of the seek bar
// to allow the route provider time to propagate the change and publish a new
// route descriptor.
@@ -57,8 +61,9 @@
private final MediaRouter.RouteInfo mRoute;
private boolean mCreated;
- private Drawable mMediaRouteConnectingDrawable;
- private Drawable mMediaRouteOnDrawable;
+ private Drawable mMediaRouteButtonDrawable;
+ private int[] mMediaRouteConnectingState = { R.attr.state_checked, R.attr.state_enabled };
+ private int[] mMediaRouteOnState = { R.attr.state_activated, R.attr.state_enabled };
private Drawable mCurrentIconDrawable;
private boolean mVolumeControlEnabled = true;
@@ -68,8 +73,6 @@
private View mControlView;
- private Button mDisconnectButton;
-
public MediaRouteControllerDialog(Context context, int theme) {
super(context, theme);
@@ -132,14 +135,28 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
+ setTitle(mRoute.getName());
+ Resources res = getContext().getResources();
+ setButton(BUTTON_NEGATIVE, res.getString(R.string.media_route_controller_disconnect),
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int id) {
+ if (mRoute.isSelected()) {
+ mRouter.getDefaultRoute().select();
+ }
+ dismiss();
+ }
+ });
+ View customView = getLayoutInflater().inflate(R.layout.media_route_controller_dialog, null);
+ setView(customView, 0, 0, 0, 0);
super.onCreate(savedInstanceState);
- getWindow().requestFeature(Window.FEATURE_LEFT_ICON);
-
- setContentView(R.layout.media_route_controller_dialog);
-
- mVolumeLayout = (LinearLayout)findViewById(R.id.media_route_volume_layout);
- mVolumeSlider = (SeekBar)findViewById(R.id.media_route_volume_slider);
+ View customPanelView = getWindow().findViewById(R.id.customPanel);
+ if (customPanelView != null) {
+ customPanelView.setMinimumHeight(0);
+ }
+ mVolumeLayout = (LinearLayout) customView.findViewById(R.id.media_route_volume_layout);
+ mVolumeSlider = (SeekBar) customView.findViewById(R.id.media_route_volume_slider);
mVolumeSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
private final Runnable mStopTrackingTouch = new Runnable() {
@Override
@@ -176,22 +193,12 @@
}
});
- mDisconnectButton = (Button)findViewById(R.id.media_route_disconnect_button);
- mDisconnectButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mRoute.isSelected()) {
- mRouter.getDefaultRoute().select();
- }
- dismiss();
- }
- });
-
+ mMediaRouteButtonDrawable = obtainMediaRouteButtonDrawable();
mCreated = true;
if (update()) {
mControlView = onCreateMediaControlView(savedInstanceState);
FrameLayout controlFrame =
- (FrameLayout)findViewById(R.id.media_route_control_frame);
+ (FrameLayout) customView.findViewById(R.id.media_route_control_frame);
if (mControlView != null) {
controlFrame.addView(mControlView);
controlFrame.setVisibility(View.VISIBLE);
@@ -201,7 +208,6 @@
}
}
-
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
@@ -248,24 +254,41 @@
Drawable icon = getIconDrawable();
if (icon != mCurrentIconDrawable) {
mCurrentIconDrawable = icon;
- getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, icon);
+ if (icon instanceof AnimationDrawable) {
+ AnimationDrawable animDrawable = (AnimationDrawable) icon;
+ if (!animDrawable.isRunning()) {
+ animDrawable.start();
+ }
+ }
+ setIcon(icon);
}
return true;
}
+ private Drawable obtainMediaRouteButtonDrawable() {
+ Context context = getContext();
+ TypedValue value = new TypedValue();
+ if (!context.getTheme().resolveAttribute(R.attr.mediaRouteButtonStyle, value, true)) {
+ return null;
+ }
+ int[] drawableAttrs = new int[] { R.attr.externalRouteEnabledDrawable };
+ TypedArray a = context.obtainStyledAttributes(value.data, drawableAttrs);
+ Drawable drawable = a.getDrawable(0);
+ a.recycle();
+ return drawable;
+ }
+
private Drawable getIconDrawable() {
- if (mRoute.isConnecting()) {
- if (mMediaRouteConnectingDrawable == null) {
- mMediaRouteConnectingDrawable = getContext().getDrawable(
- R.drawable.ic_media_route_connecting_holo_dark);
- }
- return mMediaRouteConnectingDrawable;
+ if (!(mMediaRouteButtonDrawable instanceof StateListDrawable)) {
+ return mMediaRouteButtonDrawable;
+ } else if (mRoute.isConnecting()) {
+ StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
+ stateListDrawable.setState(mMediaRouteConnectingState);
+ return stateListDrawable.getCurrent();
} else {
- if (mMediaRouteOnDrawable == null) {
- mMediaRouteOnDrawable = getContext().getDrawable(
- R.drawable.ic_media_route_on_holo_dark);
- }
- return mMediaRouteOnDrawable;
+ StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
+ stateListDrawable.setState(mMediaRouteOnState);
+ return stateListDrawable.getCurrent();
}
}
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialogFragment.java b/core/java/com/android/internal/app/MediaRouteControllerDialogFragment.java
index 466c015..4c30501 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialogFragment.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialogFragment.java
@@ -39,7 +39,6 @@
*/
public MediaRouteControllerDialogFragment() {
setCancelable(true);
- setStyle(STYLE_NORMAL, android.R.style.Theme_DeviceDefault_Dialog);
}
/**
diff --git a/core/res/res/layout/media_route_controller_dialog.xml b/core/res/res/layout/media_route_controller_dialog.xml
index 0bf70da..24a2535 100644
--- a/core/res/res/layout/media_route_controller_dialog.xml
+++ b/core/res/res/layout/media_route_controller_dialog.xml
@@ -47,17 +47,5 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
-
- <!-- Disconnect button. -->
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="?attr/buttonBarStyle">
- <Button android:id="@+id/media_route_disconnect_button"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- style="?attr/buttonBarButtonStyle"
- android:gravity="center"
- android:text="@string/media_route_controller_disconnect" />
- </LinearLayout>
</LinearLayout>
-</ScrollView>
\ No newline at end of file
+</ScrollView>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 989a79d..d02e156 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1482,10 +1482,10 @@
<java-symbol type="id" name="media_route_volume_layout" />
<java-symbol type="id" name="media_route_volume_slider" />
<java-symbol type="id" name="media_route_control_frame" />
- <java-symbol type="id" name="media_route_disconnect_button" />
<java-symbol type="id" name="media_route_extended_settings_button" />
<java-symbol type="string" name="media_route_chooser_title" />
<java-symbol type="string" name="media_route_chooser_title_for_remote_display" />
+ <java-symbol type="string" name="media_route_controller_disconnect" />
<java-symbol type="string" name="bluetooth_a2dp_audio_route_name" />
<java-symbol type="dimen" name="config_minScalingSpan" />