Skip to content

Commit 09829b7

Browse files
adampAndroid (Google) Code Review
authored andcommitted
Merge "Expand volume APIs for MediaRouter" into jb-dev
2 parents fc32ec9 + 8e37a85 commit 09829b7

File tree

3 files changed

+238
-47
lines changed

3 files changed

+238
-47
lines changed

api/current.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11538,6 +11538,7 @@ package android.media {
1153811538
method public abstract void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
1153911539
method public abstract void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
1154011540
method public abstract void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
11541+
method public abstract void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
1154111542
}
1154211543

1154311544
public static class MediaRouter.RouteCategory {
@@ -11573,6 +11574,8 @@ package android.media {
1157311574
method public int getVolume();
1157411575
method public int getVolumeHandling();
1157511576
method public int getVolumeMax();
11577+
method public void requestSetVolume(int);
11578+
method public void requestUpdateVolume(int);
1157611579
method public void setTag(java.lang.Object);
1157711580
field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
1157811581
field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
@@ -11589,6 +11592,7 @@ package android.media {
1158911592
method public void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
1159011593
method public void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
1159111594
method public void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
11595+
method public void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
1159211596
}
1159311597

1159411598
public static class MediaRouter.UserRouteInfo extends android.media.MediaRouter.RouteInfo {

core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
import android.media.MediaRouter.RouteCategory;
3131
import android.media.MediaRouter.RouteGroup;
3232
import android.media.MediaRouter.RouteInfo;
33-
import android.media.MediaRouter.UserRouteInfo;
34-
import android.media.RemoteControlClient;
3533
import android.os.Bundle;
3634
import android.text.TextUtils;
3735
import android.view.KeyEvent;
@@ -85,7 +83,8 @@ public class MediaRouteChooserDialogFragment extends DialogFragment {
8583

8684
final RouteComparator mComparator = new RouteComparator();
8785
final MediaRouterCallback mCallback = new MediaRouterCallback();
88-
private boolean mIgnoreVolumeChanges;
86+
private boolean mIgnoreSliderVolumeChanges;
87+
private boolean mIgnoreCallbackVolumeChanges;
8988

9089
public MediaRouteChooserDialogFragment() {
9190
setStyle(STYLE_NO_TITLE, R.style.Theme_DeviceDefault_Dialog);
@@ -126,52 +125,34 @@ public void setRouteTypes(int types) {
126125

127126
void updateVolume() {
128127
final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes);
129-
final boolean defaultAudioSelected = selectedRoute == mRouter.getSystemAudioRoute();
130-
final boolean selectedSystemRoute =
131-
selectedRoute.getCategory() == mRouter.getSystemAudioCategory();
132-
mVolumeIcon.setImageResource(defaultAudioSelected ?
128+
mVolumeIcon.setImageResource(
129+
selectedRoute.getPlaybackType() == RouteInfo.PLAYBACK_TYPE_LOCAL ?
133130
R.drawable.ic_audio_vol : R.drawable.ic_media_route_on_holo_dark);
134131

135-
mIgnoreVolumeChanges = true;
136-
mVolumeSlider.setEnabled(true);
137-
if (selectedSystemRoute) {
138-
// Use the standard media audio stream
139-
mVolumeSlider.setMax(mAudio.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
140-
mVolumeSlider.setProgress(mAudio.getStreamVolume(AudioManager.STREAM_MUSIC));
141-
} else {
142-
final RouteInfo firstSelected;
143-
if (selectedRoute instanceof RouteGroup) {
144-
firstSelected = ((RouteGroup) selectedRoute).getRouteAt(0);
145-
} else {
146-
firstSelected = selectedRoute;
147-
}
132+
mIgnoreSliderVolumeChanges = true;
148133

149-
RemoteControlClient rcc = null;
150-
if (firstSelected instanceof UserRouteInfo) {
151-
rcc = ((UserRouteInfo) firstSelected).getRemoteControlClient();
152-
}
153-
154-
if (rcc == null) {
155-
// No RemoteControlClient? Assume volume can't be controlled.
156-
// Disable the slider and show it at max volume.
157-
mVolumeSlider.setMax(1);
158-
mVolumeSlider.setProgress(1);
159-
mVolumeSlider.setEnabled(false);
160-
} else {
161-
// TODO: Connect this to the remote control volume
162-
}
134+
if (selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_FIXED) {
135+
// Disable the slider and show it at max volume.
136+
mVolumeSlider.setMax(1);
137+
mVolumeSlider.setProgress(1);
138+
mVolumeSlider.setEnabled(false);
139+
} else {
140+
mVolumeSlider.setEnabled(true);
141+
mVolumeSlider.setMax(selectedRoute.getVolumeMax());
142+
mVolumeSlider.setProgress(selectedRoute.getVolume());
163143
}
164-
mIgnoreVolumeChanges = false;
144+
145+
mIgnoreSliderVolumeChanges = false;
165146
}
166147

167148
void changeVolume(int newValue) {
168-
if (mIgnoreVolumeChanges) return;
149+
if (mIgnoreSliderVolumeChanges) return;
169150

170-
RouteCategory selectedCategory = mRouter.getSelectedRoute(mRouteTypes).getCategory();
171-
if (selectedCategory == mRouter.getSystemAudioCategory()) {
151+
final RouteInfo selectedRoute = mRouter.getSelectedRoute(mRouteTypes);
152+
if (selectedRoute.getVolumeHandling() == RouteInfo.PLAYBACK_VOLUME_VARIABLE) {
172153
final int maxVolume = mAudio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
173154
newValue = Math.max(0, Math.min(newValue, maxVolume));
174-
mAudio.setStreamVolume(AudioManager.STREAM_MUSIC, newValue, 0);
155+
selectedRoute.requestSetVolume(newValue);
175156
}
176157
}
177158

@@ -595,7 +576,6 @@ public void onRouteUnselected(MediaRouter router, int type, RouteInfo info) {
595576
@Override
596577
public void onRouteAdded(MediaRouter router, RouteInfo info) {
597578
mAdapter.update();
598-
updateVolume();
599579
}
600580

601581
@Override
@@ -604,7 +584,6 @@ public void onRouteRemoved(MediaRouter router, RouteInfo info) {
604584
mAdapter.finishGrouping();
605585
}
606586
mAdapter.update();
607-
updateVolume();
608587
}
609588

610589
@Override
@@ -622,6 +601,13 @@ public void onRouteGrouped(MediaRouter router, RouteInfo info,
622601
public void onRouteUngrouped(MediaRouter router, RouteInfo info, RouteGroup group) {
623602
mAdapter.update();
624603
}
604+
605+
@Override
606+
public void onRouteVolumeChanged(MediaRouter router, RouteInfo info) {
607+
if (!mIgnoreCallbackVolumeChanges) {
608+
updateVolume();
609+
}
610+
}
625611
}
626612

627613
class RouteComparator implements Comparator<RouteInfo> {
@@ -648,15 +634,25 @@ public void onBackPressed() {
648634

649635
public boolean onKeyDown(int keyCode, KeyEvent event) {
650636
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN && mVolumeSlider.isEnabled()) {
651-
mVolumeSlider.incrementProgressBy(-1);
637+
mRouter.getSelectedRoute(mRouteTypes).requestUpdateVolume(-1);
652638
return true;
653639
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mVolumeSlider.isEnabled()) {
654-
mVolumeSlider.incrementProgressBy(1);
640+
mRouter.getSelectedRoute(mRouteTypes).requestUpdateVolume(1);
655641
return true;
656642
} else {
657643
return super.onKeyDown(keyCode, event);
658644
}
659645
}
646+
647+
public boolean onKeyUp(int keyCode, KeyEvent event) {
648+
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN && mVolumeSlider.isEnabled()) {
649+
return true;
650+
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && mVolumeSlider.isEnabled()) {
651+
return true;
652+
} else {
653+
return super.onKeyUp(keyCode, event);
654+
}
655+
}
660656
}
661657

662658
/**
@@ -675,10 +671,13 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
675671

676672
@Override
677673
public void onStartTrackingTouch(SeekBar seekBar) {
674+
mIgnoreCallbackVolumeChanges = true;
678675
}
679676

680677
@Override
681678
public void onStopTrackingTouch(SeekBar seekBar) {
679+
mIgnoreCallbackVolumeChanges = false;
680+
updateVolume();
682681
}
683682

684683
}

0 commit comments

Comments
 (0)