MediaRouter work

Fix a bug where MediaRouter would crash on creation

Add click listener for app-supplied extended settings on the route
selection dialog.

Change-Id: I2991db1720b5c574148e250526984592f4dc3c44
This commit is contained in:
Adam Powell
2012-06-12 11:25:54 -07:00
parent f958732bd3
commit b35c445f34
4 changed files with 34 additions and 12 deletions

View File

@ -3679,6 +3679,7 @@ package android.app {
public class MediaRouteActionProvider extends android.view.ActionProvider { public class MediaRouteActionProvider extends android.view.ActionProvider {
ctor public MediaRouteActionProvider(android.content.Context); ctor public MediaRouteActionProvider(android.content.Context);
method public android.view.View onCreateActionView(); method public android.view.View onCreateActionView();
method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
method public void setRouteTypes(int); method public void setRouteTypes(int);
} }
@ -3687,6 +3688,7 @@ package android.app {
ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet); ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int); ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
method public int getRouteTypes(); method public int getRouteTypes();
method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
method public void setRouteTypes(int); method public void setRouteTypes(int);
} }

View File

@ -33,6 +33,7 @@ public class MediaRouteActionProvider extends ActionProvider {
private MediaRouteButton mView; private MediaRouteButton mView;
private int mRouteTypes; private int mRouteTypes;
private final RouterCallback mRouterCallback = new RouterCallback(); private final RouterCallback mRouterCallback = new RouterCallback();
private View.OnClickListener mExtendedSettingsListener;
public MediaRouteActionProvider(Context context) { public MediaRouteActionProvider(Context context) {
super(context); super(context);
@ -76,6 +77,7 @@ public class MediaRouteActionProvider extends ActionProvider {
mView = new MediaRouteButton(mContext); mView = new MediaRouteButton(mContext);
mMenuItem.setVisible(mRouter.getRouteCount() > 1); mMenuItem.setVisible(mRouter.getRouteCount() > 1);
mView.setRouteTypes(mRouteTypes); mView.setRouteTypes(mRouteTypes);
mView.setExtendedSettingsClickListener(mExtendedSettingsListener);
return mView; return mView;
} }
@ -85,6 +87,13 @@ public class MediaRouteActionProvider extends ActionProvider {
return true; return true;
} }
public void setExtendedSettingsClickListener(View.OnClickListener listener) {
mExtendedSettingsListener = listener;
if (mView != null) {
mView.setExtendedSettingsClickListener(listener);
}
}
private class RouterCallback extends MediaRouter.SimpleCallback { private class RouterCallback extends MediaRouter.SimpleCallback {
@Override @Override
public void onRouteAdded(MediaRouter router, RouteInfo info) { public void onRouteAdded(MediaRouter router, RouteInfo info) {

View File

@ -43,6 +43,8 @@ public class MediaRouteButton extends View {
private int mMinWidth; private int mMinWidth;
private int mMinHeight; private int mMinHeight;
private OnClickListener mExtendedSettingsClickListener;
private static final int[] ACTIVATED_STATE_SET = { private static final int[] ACTIVATED_STATE_SET = {
R.attr.state_activated R.attr.state_activated
}; };
@ -260,6 +262,11 @@ public class MediaRouteButton extends View {
mRemoteIndicator.draw(canvas); mRemoteIndicator.draw(canvas);
} }
public void setExtendedSettingsClickListener(OnClickListener listener) {
// TODO: if dialog is already open, propagate so that it updates live.
mExtendedSettingsClickListener = listener;
}
private class MediaRouteCallback extends MediaRouter.SimpleCallback { private class MediaRouteCallback extends MediaRouter.SimpleCallback {
@Override @Override
public void onRouteSelected(MediaRouter router, int type, RouteInfo info) { public void onRouteSelected(MediaRouter router, int type, RouteInfo info) {

View File

@ -45,21 +45,21 @@ public class MediaRouter {
private static final String TAG = "MediaRouter"; private static final String TAG = "MediaRouter";
static class Static { static class Static {
private final Resources mResources; final Resources mResources;
private final AudioManager mAudioManager; final AudioManager mAudioManager;
private final Handler mHandler; final Handler mHandler;
private final ArrayList<CallbackInfo> mCallbacks = new ArrayList<CallbackInfo>(); final ArrayList<CallbackInfo> mCallbacks = new ArrayList<CallbackInfo>();
private final ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>(); final ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>();
private final ArrayList<RouteCategory> mCategories = new ArrayList<RouteCategory>(); final ArrayList<RouteCategory> mCategories = new ArrayList<RouteCategory>();
private final RouteCategory mSystemCategory; final RouteCategory mSystemCategory;
private final HeadphoneChangedBroadcastReceiver mHeadphoneChangedReceiver; final HeadphoneChangedBroadcastReceiver mHeadphoneChangedReceiver;
private RouteInfo mDefaultAudio; RouteInfo mDefaultAudio;
private RouteInfo mBluetoothA2dpRoute; RouteInfo mBluetoothA2dpRoute;
private RouteInfo mSelectedRoute; RouteInfo mSelectedRoute;
Static(Context appContext) { Static(Context appContext) {
mResources = Resources.getSystem(); mResources = Resources.getSystem();
@ -78,7 +78,10 @@ public class MediaRouter {
speakerFilter.addAction(Intent.ACTION_HDMI_AUDIO_PLUG); speakerFilter.addAction(Intent.ACTION_HDMI_AUDIO_PLUG);
mHeadphoneChangedReceiver = new HeadphoneChangedBroadcastReceiver(); mHeadphoneChangedReceiver = new HeadphoneChangedBroadcastReceiver();
appContext.registerReceiver(mHeadphoneChangedReceiver, speakerFilter); appContext.registerReceiver(mHeadphoneChangedReceiver, speakerFilter);
}
// Called after sStatic is initialized
void initDefaultRoutes() {
mDefaultAudio = new RouteInfo(mSystemCategory); mDefaultAudio = new RouteInfo(mSystemCategory);
mDefaultAudio.mName = mResources.getText( mDefaultAudio.mName = mResources.getText(
com.android.internal.R.string.default_audio_route_name); com.android.internal.R.string.default_audio_route_name);
@ -130,6 +133,7 @@ public class MediaRouter {
synchronized (Static.class) { synchronized (Static.class) {
if (sStatic == null) { if (sStatic == null) {
sStatic = new Static(context.getApplicationContext()); sStatic = new Static(context.getApplicationContext());
sStatic.initDefaultRoutes();
} }
} }
} }