diff options
| -rw-r--r-- | core/java/android/app/MediaRouteButton.java | 3 | ||||
| -rw-r--r-- | core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java | 25 | ||||
| -rw-r--r-- | media/java/android/media/MediaRouter.java | 16 |
3 files changed, 32 insertions, 12 deletions
diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java index 3ecafc3bc9b9..a1a147a5f48b 100644 --- a/core/java/android/app/MediaRouteButton.java +++ b/core/java/android/app/MediaRouteButton.java @@ -217,7 +217,8 @@ public class MediaRouteButton extends View { void updateRemoteIndicator() { final RouteInfo selected = mRouter.getSelectedRoute(mRouteTypes); final boolean isRemote = selected != mRouter.getSystemAudioRoute(); - final boolean isConnecting = selected.getStatusCode() == RouteInfo.STATUS_CONNECTING; + final boolean isConnecting = selected != null && + selected.getStatusCode() == RouteInfo.STATUS_CONNECTING; boolean needsRefresh = false; if (mRemoteActive != isRemote) { diff --git a/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java b/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java index 386f38779ef5..2bc80ff717a3 100644 --- a/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java +++ b/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java @@ -136,13 +136,14 @@ public class MediaRouteChooserDialogFragment extends DialogFragment { if (mRouter == null) return; final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes); - mVolumeIcon.setImageResource( + mVolumeIcon.setImageResource(selectedRoute == null || selectedRoute.getPlaybackType() == RouteInfo.PLAYBACK_TYPE_LOCAL ? R.drawable.ic_audio_vol : R.drawable.ic_media_route_on_holo_dark); mIgnoreSliderVolumeChanges = true; - if (selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_FIXED) { + if (selectedRoute == null || + selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_FIXED) { // Disable the slider and show it at max volume. mVolumeSlider.setMax(1); mVolumeSlider.setProgress(1); @@ -160,7 +161,8 @@ public class MediaRouteChooserDialogFragment extends DialogFragment { if (mIgnoreSliderVolumeChanges) return; final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes); - if (selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_VARIABLE) { + if (selectedRoute != null && + selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_VARIABLE) { final int maxVolume = selectedRoute.getVolumeMax(); newValue = Math.max(0, Math.min(newValue, maxVolume)); selectedRoute.requestSetVolume(newValue); @@ -652,14 +654,19 @@ public class MediaRouteChooserDialogFragment extends DialogFragment { public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN && mVolumeSlider.isEnabled()) { - mRouter.getSelectedRoute(mRouteTypes).requestUpdateVolume(-1); - return true; + final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes); + if (selectedRoute != null) { + selectedRoute.requestUpdateVolume(-1); + return true; + } } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mVolumeSlider.isEnabled()) { - mRouter.getSelectedRoute(mRouteTypes).requestUpdateVolume(1); - return true; - } else { - return super.onKeyDown(keyCode, event); + final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes); + if (selectedRoute != null) { + mRouter.getSelectedRoute(mRouteTypes).requestUpdateVolume(1); + return true; + } } + return super.onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode, KeyEvent event) { diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 8701f3662605..8b489b1c25b9 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -313,13 +313,25 @@ public class MediaRouter { } /** - * Return the currently selected route for the given types + * Return the currently selected route for any of the given types * * @param type route types * @return the selected route */ public RouteInfo getSelectedRoute(int type) { - return sStatic.mSelectedRoute; + if (sStatic.mSelectedRoute != null && + (sStatic.mSelectedRoute.mSupportedTypes & type) != 0) { + // If the selected route supports any of the types supplied, it's still considered + // 'selected' for that type. + return sStatic.mSelectedRoute; + } else if (type == ROUTE_TYPE_USER) { + // The caller specifically asked for a user route and the currently selected route + // doesn't qualify. + return null; + } + // If the above didn't match and we're not specifically asking for a user route, + // consider the default selected. + return sStatic.mDefaultAudioVideo; } /** |