summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/MediaRouter.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 3de2db23ed11..fe261cf8d59f 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -1033,6 +1033,9 @@ public class MediaRouter {
mVolume = volume;
setPlaybackInfoOnRcc(RemoteControlClient.PLAYBACKINFO_VOLUME, volume);
dispatchRouteVolumeChanged(this);
+ if (mGroup != null) {
+ mGroup.memberVolumeChanged(this);
+ }
}
}
@@ -1148,6 +1151,7 @@ public class MediaRouter {
mRoutes.add(route);
route.mGroup = this;
mUpdateName = true;
+ updateVolume();
dispatchRouteGrouped(route, this, at);
routeUpdated();
}
@@ -1171,6 +1175,7 @@ public class MediaRouter {
mRoutes.add(insertAt, route);
route.mGroup = this;
mUpdateName = true;
+ updateVolume();
dispatchRouteGrouped(route, this, insertAt);
routeUpdated();
}
@@ -1188,6 +1193,7 @@ public class MediaRouter {
mRoutes.remove(route);
route.mGroup = null;
mUpdateName = true;
+ updateVolume();
dispatchRouteUngrouped(route, this);
routeUpdated();
}
@@ -1201,6 +1207,7 @@ public class MediaRouter {
RouteInfo route = mRoutes.remove(index);
route.mGroup = null;
mUpdateName = true;
+ updateVolume();
dispatchRouteUngrouped(route, this);
routeUpdated();
}
@@ -1270,11 +1277,15 @@ public class MediaRouter {
}
final int routeCount = getRouteCount();
+ int volume = 0;
for (int i = 0; i < routeCount; i++) {
final RouteInfo route = getRouteAt(i);
route.requestUpdateVolume(direction);
+ final int routeVol = route.getVolume();
+ if (routeVol > volume) {
+ volume = routeVol;
+ }
}
- final int volume = Math.max(0, Math.min(mVolume + direction, maxVol));
if (volume != mVolume) {
mVolume = volume;
dispatchRouteVolumeChanged(this);
@@ -1290,6 +1301,26 @@ public class MediaRouter {
setStatusInt(status);
}
+ void memberVolumeChanged(RouteInfo info) {
+ updateVolume();
+ }
+
+ void updateVolume() {
+ // A group always represents the highest component volume value.
+ final int routeCount = getRouteCount();
+ int volume = 0;
+ for (int i = 0; i < routeCount; i++) {
+ final int routeVol = getRouteAt(i).getVolume();
+ if (routeVol > volume) {
+ volume = routeVol;
+ }
+ }
+ if (volume != mVolume) {
+ mVolume = volume;
+ dispatchRouteVolumeChanged(this);
+ }
+ }
+
@Override
void routeUpdated() {
int types = 0;