Skip to content

Commit 4b4a947

Browse files
adampAndroid (Google) Code Review
authored andcommitted
Merge "MediaRouter dialog" into jb-dev
2 parents 82134f7 + 70e11e5 commit 4b4a947

File tree

11 files changed

+635
-9
lines changed

11 files changed

+635
-9
lines changed

api/current.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3690,6 +3690,7 @@ package android.app {
36903690
method public int getRouteTypes();
36913691
method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
36923692
method public void setRouteTypes(int);
3693+
method public void showDialog();
36933694
}
36943695

36953696
public class NativeActivity extends android.app.Activity implements android.view.InputQueue.Callback android.view.SurfaceHolder.Callback2 android.view.ViewTreeObserver.OnGlobalLayoutListener {
@@ -11575,11 +11576,13 @@ package android.media {
1157511576
}
1157611577

1157711578
public static class MediaRouter.UserRouteInfo extends android.media.MediaRouter.RouteInfo {
11579+
method public java.lang.Object getTag();
1157811580
method public void setIconDrawable(android.graphics.drawable.Drawable);
1157911581
method public void setIconResource(int);
1158011582
method public void setName(java.lang.CharSequence);
1158111583
method public void setRemoteControlClient(android.media.RemoteControlClient);
1158211584
method public void setStatus(java.lang.CharSequence);
11585+
method public void setTag(java.lang.Object);
1158311586
}
1158411587

1158511588
public class MediaScannerConnection implements android.content.ServiceConnection {

core/java/android/app/MediaRouteActionProvider.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package android.app;
1818

19+
import com.android.internal.app.MediaRouteChooserDialogFragment;
20+
1921
import android.content.Context;
22+
import android.content.ContextWrapper;
2023
import android.media.MediaRouter;
2124
import android.media.MediaRouter.RouteInfo;
2225
import android.util.Log;
@@ -83,10 +86,37 @@ public View onCreateActionView(MenuItem item) {
8386

8487
@Override
8588
public boolean onPerformDefaultAction() {
86-
// Show routing dialog
89+
final FragmentManager fm = getActivity().getFragmentManager();
90+
// See if one is already attached to this activity.
91+
MediaRouteChooserDialogFragment dialogFragment =
92+
(MediaRouteChooserDialogFragment) fm.findFragmentByTag(
93+
MediaRouteChooserDialogFragment.FRAGMENT_TAG);
94+
if (dialogFragment != null) {
95+
Log.w(TAG, "onPerformDefaultAction(): Chooser dialog already showing!");
96+
return false;
97+
}
98+
99+
dialogFragment = new MediaRouteChooserDialogFragment();
100+
dialogFragment.setExtendedSettingsClickListener(mExtendedSettingsListener);
101+
dialogFragment.setRouteTypes(mRouteTypes);
102+
dialogFragment.show(fm, MediaRouteChooserDialogFragment.FRAGMENT_TAG);
87103
return true;
88104
}
89105

106+
private Activity getActivity() {
107+
// Gross way of unwrapping the Activity so we can get the FragmentManager
108+
Context context = mContext;
109+
while (context instanceof ContextWrapper && !(context instanceof Activity)) {
110+
context = ((ContextWrapper) context).getBaseContext();
111+
}
112+
if (!(context instanceof Activity)) {
113+
throw new IllegalStateException("The MediaRouteActionProvider's Context " +
114+
"is not an Activity.");
115+
}
116+
117+
return (Activity) context;
118+
}
119+
90120
public void setExtendedSettingsClickListener(View.OnClickListener listener) {
91121
mExtendedSettingsListener = listener;
92122
if (mView != null) {

core/java/android/app/MediaRouteButton.java

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package android.app;
1818

1919
import com.android.internal.R;
20+
import com.android.internal.app.MediaRouteChooserDialogFragment;
2021

2122
import android.content.Context;
23+
import android.content.ContextWrapper;
2224
import android.content.res.TypedArray;
2325
import android.graphics.Canvas;
2426
import android.graphics.drawable.Drawable;
@@ -44,6 +46,7 @@ public class MediaRouteButton extends View {
4446
private int mMinHeight;
4547

4648
private OnClickListener mExtendedSettingsClickListener;
49+
private MediaRouteChooserDialogFragment mDialogFragment;
4750

4851
private static final int[] ACTIVATED_STATE_SET = {
4952
R.attr.state_activated
@@ -112,7 +115,7 @@ public boolean performClick() {
112115
}
113116
}
114117
} else {
115-
Log.d(TAG, "TODO: Implement the dialog!");
118+
showDialog();
116119
}
117120

118121
return handled;
@@ -263,8 +266,51 @@ protected void onDraw(Canvas canvas) {
263266
}
264267

265268
public void setExtendedSettingsClickListener(OnClickListener listener) {
266-
// TODO: if dialog is already open, propagate so that it updates live.
267269
mExtendedSettingsClickListener = listener;
270+
if (mDialogFragment != null) {
271+
mDialogFragment.setExtendedSettingsClickListener(listener);
272+
}
273+
}
274+
275+
/**
276+
* Asynchronously show the route chooser dialog.
277+
* This will attach a {@link DialogFragment} to the containing Activity.
278+
*/
279+
public void showDialog() {
280+
final FragmentManager fm = getActivity().getFragmentManager();
281+
if (mDialogFragment == null) {
282+
// See if one is already attached to this activity.
283+
mDialogFragment = (MediaRouteChooserDialogFragment) fm.findFragmentByTag(
284+
MediaRouteChooserDialogFragment.FRAGMENT_TAG);
285+
}
286+
if (mDialogFragment != null) {
287+
Log.w(TAG, "showDialog(): Already showing!");
288+
return;
289+
}
290+
291+
mDialogFragment = new MediaRouteChooserDialogFragment();
292+
mDialogFragment.setExtendedSettingsClickListener(mExtendedSettingsClickListener);
293+
mDialogFragment.setLauncherListener(new MediaRouteChooserDialogFragment.LauncherListener() {
294+
@Override
295+
public void onDetached(MediaRouteChooserDialogFragment detachedFragment) {
296+
mDialogFragment = null;
297+
}
298+
});
299+
mDialogFragment.setRouteTypes(mRouteTypes);
300+
mDialogFragment.show(fm, MediaRouteChooserDialogFragment.FRAGMENT_TAG);
301+
}
302+
303+
private Activity getActivity() {
304+
// Gross way of unwrapping the Activity so we can get the FragmentManager
305+
Context context = getContext();
306+
while (context instanceof ContextWrapper && !(context instanceof Activity)) {
307+
context = ((ContextWrapper) context).getBaseContext();
308+
}
309+
if (!(context instanceof Activity)) {
310+
throw new IllegalStateException("The MediaRouteButton's Context is not an Activity.");
311+
}
312+
313+
return (Activity) context;
268314
}
269315

270316
private class MediaRouteCallback extends MediaRouter.SimpleCallback {

0 commit comments

Comments
 (0)