OSDN Git Service

MediaRouter work
authorAdam Powell <adamp@google.com>
Tue, 12 Jun 2012 18:25:54 +0000 (11:25 -0700)
committerAdam Powell <adamp@google.com>
Tue, 12 Jun 2012 18:26:39 +0000 (11:26 -0700)
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

api/current.txt
core/java/android/app/MediaRouteActionProvider.java
core/java/android/app/MediaRouteButton.java
media/java/android/media/MediaRouter.java

index dcf4bf2..55c9e28 100644 (file)
@@ -3679,6 +3679,7 @@ package android.app {
   public class MediaRouteActionProvider extends android.view.ActionProvider {
     ctor public MediaRouteActionProvider(android.content.Context);
     method public android.view.View onCreateActionView();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
     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, int);
     method public int getRouteTypes();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
     method public void setRouteTypes(int);
   }
 
index 7764ac6..5fe08ec 100644 (file)
@@ -33,11 +33,12 @@ public class MediaRouteActionProvider extends ActionProvider {
     private MediaRouteButton mView;
     private int mRouteTypes;
     private final RouterCallback mRouterCallback = new RouterCallback();
+    private View.OnClickListener mExtendedSettingsListener;
 
     public MediaRouteActionProvider(Context context) {
         super(context);
         mContext = context;
-        mRouter = (MediaRouter)context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
+        mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
 
         // Start with live audio by default.
         // TODO Update this when new route types are added; segment by API level
@@ -76,6 +77,7 @@ public class MediaRouteActionProvider extends ActionProvider {
         mView = new MediaRouteButton(mContext);
         mMenuItem.setVisible(mRouter.getRouteCount() > 1);
         mView.setRouteTypes(mRouteTypes);
+        mView.setExtendedSettingsClickListener(mExtendedSettingsListener);
         return mView;
     }
 
@@ -85,6 +87,13 @@ public class MediaRouteActionProvider extends ActionProvider {
         return true;
     }
 
+    public void setExtendedSettingsClickListener(View.OnClickListener listener) {
+        mExtendedSettingsListener = listener;
+        if (mView != null) {
+            mView.setExtendedSettingsClickListener(listener);
+        }
+    }
+
     private class RouterCallback extends MediaRouter.SimpleCallback {
         @Override
         public void onRouteAdded(MediaRouter router, RouteInfo info) {
index 8f9379a..385241c 100644 (file)
@@ -43,6 +43,8 @@ public class MediaRouteButton extends View {
     private int mMinWidth;
     private int mMinHeight;
 
+    private OnClickListener mExtendedSettingsClickListener;
+
     private static final int[] ACTIVATED_STATE_SET = {
         R.attr.state_activated
     };
@@ -260,6 +262,11 @@ public class MediaRouteButton extends View {
         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 {
         @Override
         public void onRouteSelected(MediaRouter router, int type, RouteInfo info) {
index 7c74f0a..38fe363 100644 (file)
@@ -45,21 +45,21 @@ public class MediaRouter {
     private static final String TAG = "MediaRouter";
 
     static class Static {
-        private final Resources mResources;
-        private final AudioManager mAudioManager;
-        private final Handler mHandler;
-        private final ArrayList<CallbackInfo> mCallbacks = new ArrayList<CallbackInfo>();
+        final Resources mResources;
+        final AudioManager mAudioManager;
+        final Handler mHandler;
+        final ArrayList<CallbackInfo> mCallbacks = new ArrayList<CallbackInfo>();
 
-        private final ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>();
-        private final ArrayList<RouteCategory> mCategories = new ArrayList<RouteCategory>();
+        final ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>();
+        final ArrayList<RouteCategory> mCategories = new ArrayList<RouteCategory>();
 
-        private final RouteCategory mSystemCategory;
-        private final HeadphoneChangedBroadcastReceiver mHeadphoneChangedReceiver;
+        final RouteCategory mSystemCategory;
+        final HeadphoneChangedBroadcastReceiver mHeadphoneChangedReceiver;
 
-        private RouteInfo mDefaultAudio;
-        private RouteInfo mBluetoothA2dpRoute;
+        RouteInfo mDefaultAudio;
+        RouteInfo mBluetoothA2dpRoute;
 
-        private RouteInfo mSelectedRoute;
+        RouteInfo mSelectedRoute;
 
         Static(Context appContext) {
             mResources = Resources.getSystem();
@@ -78,7 +78,10 @@ public class MediaRouter {
             speakerFilter.addAction(Intent.ACTION_HDMI_AUDIO_PLUG);
             mHeadphoneChangedReceiver = new HeadphoneChangedBroadcastReceiver();
             appContext.registerReceiver(mHeadphoneChangedReceiver, speakerFilter);
+        }
 
+        // Called after sStatic is initialized
+        void initDefaultRoutes() {
             mDefaultAudio = new RouteInfo(mSystemCategory);
             mDefaultAudio.mName = mResources.getText(
                     com.android.internal.R.string.default_audio_route_name);
@@ -130,6 +133,7 @@ public class MediaRouter {
         synchronized (Static.class) {
             if (sStatic == null) {
                 sStatic = new Static(context.getApplicationContext());
+                sStatic.initDefaultRoutes();
             }
         }
     }