summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/IMediaRouterService.aidl3
-rw-r--r--media/java/android/media/MediaRouter.java30
-rw-r--r--media/java/android/media/MediaRouter2.java20
-rw-r--r--services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java163
-rw-r--r--services/core/java/com/android/server/media/MediaRouterService.java13
5 files changed, 41 insertions, 188 deletions
diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl
index 81a7ee28c425..d803f04839b1 100644
--- a/media/java/android/media/IMediaRouterService.aidl
+++ b/media/java/android/media/IMediaRouterService.aidl
@@ -40,7 +40,6 @@ interface IMediaRouterService {
void setSelectedRoute(IMediaRouterClient client, String routeId, boolean explicit);
void requestSetVolume(IMediaRouterClient client, String routeId, int volume);
void requestUpdateVolume(IMediaRouterClient client, String routeId, int direction);
- void setControlCategories(IMediaRouterClient client, in List<String> categories);
// Methods for media router 2
List<MediaRoute2Info> getSystemRoutes();
@@ -56,7 +55,7 @@ interface IMediaRouterService {
* @param route the route to be selected
*/
void requestSelectRoute2(IMediaRouter2Client client, in @nullable MediaRoute2Info route);
- void setControlCategories2(IMediaRouter2Client client, in List<String> categories);
+ void setControlCategories(IMediaRouter2Client client, in List<String> categories);
void registerManager(IMediaRouter2Manager manager, String packageName);
void unregisterManager(IMediaRouter2Manager manager);
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 7b15d9554534..d72231f40dcf 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -49,8 +49,6 @@ import android.view.Display;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
@@ -84,7 +82,6 @@ public class MediaRouter {
final ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>();
final ArrayList<RouteCategory> mCategories = new ArrayList<RouteCategory>();
- List<String> mControlCategories = Collections.emptyList();
final RouteCategory mSystemCategory;
@@ -361,18 +358,6 @@ public class MediaRouter {
return mDisplayService.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
}
- public void setControlCategories(Collection<String> controlCategories) {
- List<String> newControlCategories = new ArrayList<>(controlCategories);
- mControlCategories = newControlCategories;
- if (mClient != null) {
- try {
- mMediaRouterService.setControlCategories(mClient, newControlCategories);
- } catch (RemoteException ex) {
- Log.e(TAG, "Unable to set control categories.", ex);
- }
- }
- }
-
private void updatePresentationDisplays(int changedDisplayId) {
final int count = mRoutes.size();
for (int i = 0; i < count; i++) {
@@ -421,7 +406,6 @@ public class MediaRouter {
try {
Client client = new Client();
mMediaRouterService.registerClientAsUser(client, mPackageName, userId);
- mMediaRouterService.setControlCategories(client, mControlCategories);
mClient = client;
} catch (RemoteException ex) {
Log.e(TAG, "Unable to register media router client.", ex);
@@ -1318,20 +1302,6 @@ public class MediaRouter {
sStatic.rebindAsUser(userId);
}
- //TODO: remove this and Client1Record in MediaRouter2ServiceImpl.
- /**
- * Sets the control categories of the application.
- * Routes that support at least one of the given control categories only exists and are handled
- * by the media router.
- *
- * @hide
- */
- public void setControlCategories(@NonNull Collection<String> controlCategories) {
- Objects.requireNonNull(controlCategories, "control categories must not be null");
-
- sStatic.setControlCategories(controlCategories);
- }
-
static void updateRoute(final RouteInfo info) {
dispatchRouteChanged(info);
}
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index 35cb066f9790..3e6f4c01873c 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -114,7 +114,7 @@ public class MediaRouter2 {
@GuardedBy("sLock")
private MediaRoute2Info mSelectingRoute;
@GuardedBy("sLock")
- private Client mClient;
+ private Client2 mClient;
final Handler mHandler;
volatile List<MediaRoute2Info> mFilteredRoutes = Collections.emptyList();
@@ -196,10 +196,10 @@ public class MediaRouter2 {
synchronized (sLock) {
if (mClient == null) {
- Client client = new Client();
+ Client2 client = new Client2();
try {
mMediaRouterService.registerClient2(client, mPackageName);
- mMediaRouterService.setControlCategories2(client, mControlCategories);
+ mMediaRouterService.setControlCategories(client, mControlCategories);
mClient = client;
} catch (RemoteException ex) {
Log.e(TAG, "Unable to register media router.", ex);
@@ -288,7 +288,7 @@ public class MediaRouter2 {
public void requestSelectRoute(@NonNull MediaRoute2Info route) {
Objects.requireNonNull(route, "route must not be null");
- Client client;
+ Client2 client;
synchronized (sLock) {
if (mSelectingRoute == route) {
Log.w(TAG, "The route selection request is already sent.");
@@ -318,7 +318,7 @@ public class MediaRouter2 {
Objects.requireNonNull(route, "route must not be null");
Objects.requireNonNull(request, "request must not be null");
- Client client;
+ Client2 client;
synchronized (sLock) {
client = mClient;
}
@@ -342,7 +342,7 @@ public class MediaRouter2 {
public void requestSetVolume(@NonNull MediaRoute2Info route, int volume) {
Objects.requireNonNull(route, "route must not be null");
- Client client;
+ Client2 client;
synchronized (sLock) {
client = mClient;
}
@@ -366,7 +366,7 @@ public class MediaRouter2 {
public void requestUpdateVolume(@NonNull MediaRoute2Info route, int delta) {
Objects.requireNonNull(route, "route must not be null");
- Client client;
+ Client2 client;
synchronized (sLock) {
client = mClient;
}
@@ -398,13 +398,13 @@ public class MediaRouter2 {
List<MediaRoute2Info> filteredRoutes = new ArrayList<>();
mControlCategories = newControlCategories;
- Client client;
+ Client2 client;
synchronized (sLock) {
client = mClient;
}
if (client != null) {
try {
- mMediaRouterService.setControlCategories2(client, mControlCategories);
+ mMediaRouterService.setControlCategories(client, mControlCategories);
} catch (RemoteException ex) {
Log.e(TAG, "Unable to set control categories.", ex);
}
@@ -600,7 +600,7 @@ public class MediaRouter2 {
}
}
- class Client extends IMediaRouter2Client.Stub {
+ class Client2 extends IMediaRouter2Client.Stub {
@Override
public void notifyRestoreRoute() throws RemoteException {}
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 2c478dff4679..9fcee50d7037 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -26,7 +26,6 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.IMediaRouter2Client;
import android.media.IMediaRouter2Manager;
-import android.media.IMediaRouterClient;
import android.media.MediaRoute2Info;
import android.media.MediaRoute2ProviderInfo;
import android.media.MediaRouter2;
@@ -71,7 +70,7 @@ class MediaRouter2ServiceImpl {
@GuardedBy("mLock")
private final SparseArray<UserRecord> mUserRecords = new SparseArray<>();
@GuardedBy("mLock")
- private final ArrayMap<IBinder, ClientRecord> mAllClientRecords = new ArrayMap<>();
+ private final ArrayMap<IBinder, Client2Record> mAllClientRecords = new ArrayMap<>();
@GuardedBy("mLock")
private final ArrayMap<IBinder, ManagerRecord> mAllManagerRecords = new ArrayMap<>();
@GuardedBy("mLock")
@@ -183,29 +182,14 @@ class MediaRouter2ServiceImpl {
}
}
- //TODO: What would happen if a media app used MediaRouter and MediaRouter2 simultaneously?
- public void setControlCategories(@NonNull IMediaRouterClient client,
- @Nullable List<String> categories) {
- Objects.requireNonNull(client, "client must not be null");
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- ClientRecord clientRecord = mAllClientRecords.get(client.asBinder());
- setControlCategoriesLocked(clientRecord, categories);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void setControlCategories2(@NonNull IMediaRouter2Client client,
+ public void setControlCategories(@NonNull IMediaRouter2Client client,
@Nullable List<String> categories) {
Objects.requireNonNull(client, "client must not be null");
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- ClientRecord clientRecord = mAllClientRecords.get(client.asBinder());
+ Client2Record clientRecord = mAllClientRecords.get(client.asBinder());
setControlCategoriesLocked(clientRecord, categories);
}
} finally {
@@ -295,37 +279,6 @@ class MediaRouter2ServiceImpl {
}
}
-
- public void registerClient(@NonNull IMediaRouterClient client, @NonNull String packageName) {
- Objects.requireNonNull(client, "client must not be null");
-
- final int uid = Binder.getCallingUid();
- final int pid = Binder.getCallingPid();
- final int userId = UserHandle.getUserId(uid);
-
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- registerClient1Locked(client, packageName, userId);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void unregisterClient(@NonNull IMediaRouterClient client) {
- Objects.requireNonNull(client, "client must not be null");
-
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- unregisterClient1Locked(client);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
//TODO: Review this is handling multi-user properly.
void switchUser() {
synchronized (mLock) {
@@ -389,7 +342,7 @@ class MediaRouter2ServiceImpl {
}
private void unregisterClient2Locked(IMediaRouter2Client client, boolean died) {
- Client2Record clientRecord = (Client2Record) mAllClientRecords.remove(client.asBinder());
+ Client2Record clientRecord = mAllClientRecords.remove(client.asBinder());
if (clientRecord != null) {
UserRecord userRecord = clientRecord.mUserRecord;
userRecord.mClientRecords.remove(clientRecord);
@@ -399,7 +352,7 @@ class MediaRouter2ServiceImpl {
}
}
- private void requestSelectRoute2Locked(ClientRecord clientRecord, boolean selectedByManager,
+ private void requestSelectRoute2Locked(Client2Record clientRecord, boolean selectedByManager,
MediaRoute2Info route) {
if (clientRecord != null) {
MediaRoute2Info oldRoute = clientRecord.mSelectedRoute;
@@ -435,7 +388,7 @@ class MediaRouter2ServiceImpl {
}
}
- private void setControlCategoriesLocked(ClientRecord clientRecord, List<String> categories) {
+ private void setControlCategoriesLocked(Client2Record clientRecord, List<String> categories) {
if (clientRecord != null) {
clientRecord.mControlCategories = categories;
@@ -448,7 +401,7 @@ class MediaRouter2ServiceImpl {
private void sendControlRequestLocked(IMediaRouter2Client client, MediaRoute2Info route,
Intent request) {
final IBinder binder = client.asBinder();
- ClientRecord clientRecord = mAllClientRecords.get(binder);
+ Client2Record clientRecord = mAllClientRecords.get(binder);
if (clientRecord != null) {
clientRecord.mUserRecord.mHandler.sendMessage(
@@ -460,7 +413,7 @@ class MediaRouter2ServiceImpl {
private void requestSetVolumeLocked(IMediaRouter2Client client, MediaRoute2Info route,
int volume) {
final IBinder binder = client.asBinder();
- ClientRecord clientRecord = mAllClientRecords.get(binder);
+ Client2Record clientRecord = mAllClientRecords.get(binder);
if (clientRecord != null) {
clientRecord.mUserRecord.mHandler.sendMessage(
@@ -472,7 +425,7 @@ class MediaRouter2ServiceImpl {
private void requestUpdateVolumeLocked(IMediaRouter2Client client, MediaRoute2Info route,
int delta) {
final IBinder binder = client.asBinder();
- ClientRecord clientRecord = mAllClientRecords.get(binder);
+ Client2Record clientRecord = mAllClientRecords.get(binder);
if (clientRecord != null) {
clientRecord.mUserRecord.mHandler.sendMessage(
@@ -511,7 +464,7 @@ class MediaRouter2ServiceImpl {
obtainMessage(UserHandler::notifyRoutesToManager,
userRecord.mHandler, manager));
- for (ClientRecord clientRecord : userRecord.mClientRecords) {
+ for (Client2Record clientRecord : userRecord.mClientRecords) {
// TODO: Do not use updateClientUsage since it updates all managers.
// Instead, Notify only to the manager that is currently being registered.
@@ -538,7 +491,7 @@ class MediaRouter2ServiceImpl {
String packageName, MediaRoute2Info route) {
ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder());
if (managerRecord != null) {
- ClientRecord clientRecord =
+ Client2Record clientRecord =
managerRecord.mUserRecord.findClientRecordLocked(packageName);
if (clientRecord == null) {
Slog.w(TAG, "Ignoring route selection for unknown client.");
@@ -600,41 +553,10 @@ class MediaRouter2ServiceImpl {
}
}
- private void registerClient1Locked(IMediaRouterClient client, String packageName,
- int userId) {
- final IBinder binder = client.asBinder();
- if (mAllClientRecords.get(binder) == null) {
- boolean newUser = false;
- UserRecord userRecord = mUserRecords.get(userId);
- if (userRecord == null) {
- userRecord = new UserRecord(userId);
- newUser = true;
- }
- ClientRecord clientRecord = new Client1Record(userRecord, client, packageName);
-
- if (newUser) {
- mUserRecords.put(userId, userRecord);
- initializeUserLocked(userRecord);
- }
-
- userRecord.mClientRecords.add(clientRecord);
- mAllClientRecords.put(binder, clientRecord);
- }
- }
-
- private void unregisterClient1Locked(IMediaRouterClient client) {
- ClientRecord clientRecord = mAllClientRecords.remove(client.asBinder());
- if (clientRecord != null) {
- UserRecord userRecord = clientRecord.mUserRecord;
- userRecord.mClientRecords.remove(clientRecord);
- disposeUserIfNeededLocked(userRecord);
- }
- }
-
final class UserRecord {
public final int mUserId;
//TODO: make records private for thread-safety
- final ArrayList<ClientRecord> mClientRecords = new ArrayList<>();
+ final ArrayList<Client2Record> mClientRecords = new ArrayList<>();
final ArrayList<ManagerRecord> mManagerRecords = new ArrayList<>();
final UserHandler mHandler;
@@ -643,8 +565,8 @@ class MediaRouter2ServiceImpl {
mHandler = new UserHandler(MediaRouter2ServiceImpl.this, this);
}
- ClientRecord findClientRecordLocked(String packageName) {
- for (ClientRecord clientRecord : mClientRecords) {
+ Client2Record findClientRecordLocked(String packageName) {
+ for (Client2Record clientRecord : mClientRecords) {
if (TextUtils.equals(clientRecord.mPackageName, packageName)) {
return clientRecord;
}
@@ -653,44 +575,26 @@ class MediaRouter2ServiceImpl {
}
}
- class ClientRecord {
+ final class Client2Record implements IBinder.DeathRecipient {
public final UserRecord mUserRecord;
public final String mPackageName;
public final List<Integer> mSelectRouteSequenceNumbers;
+ public final IMediaRouter2Client mClient;
+ public final int mUid;
+ public final int mPid;
+ public final boolean mTrusted;
public List<String> mControlCategories;
public boolean mIsManagerSelecting;
public MediaRoute2Info mSelectingRoute;
public MediaRoute2Info mSelectedRoute;
- ClientRecord(UserRecord userRecord, String packageName) {
+ Client2Record(UserRecord userRecord, IMediaRouter2Client client,
+ int uid, int pid, String packageName, boolean trusted) {
mUserRecord = userRecord;
mPackageName = packageName;
mSelectRouteSequenceNumbers = new ArrayList<>();
mControlCategories = Collections.emptyList();
- }
- }
-
- final class Client1Record extends ClientRecord {
- public final IMediaRouterClient mClient;
-
- Client1Record(UserRecord userRecord, IMediaRouterClient client,
- String packageName) {
- super(userRecord, packageName);
- mClient = client;
- }
- }
-
- final class Client2Record extends ClientRecord
- implements IBinder.DeathRecipient {
- public final IMediaRouter2Client mClient;
- public final int mUid;
- public final int mPid;
- public final boolean mTrusted;
-
- Client2Record(UserRecord userRecord, IMediaRouter2Client client,
- int uid, int pid, String packageName, boolean trusted) {
- super(userRecord, packageName);
mClient = client;
mUid = uid;
mPid = pid;
@@ -909,15 +813,10 @@ class MediaRouter2ServiceImpl {
return;
}
- ClientRecord clientRecord;
+ Client2Record clientRecord;
synchronized (service.mLock) {
clientRecord = mUserRecord.findClientRecordLocked(clientPackageName);
}
- if (!(clientRecord instanceof Client2Record)) {
- Log.w(TAG, "Ignoring route selection for unknown client.");
- unselectRoute(clientPackageName, selectedRoute);
- return;
- }
//TODO: handle a case such that controlHints is null. (How should we notify MR2?)
@@ -931,7 +830,7 @@ class MediaRouter2ServiceImpl {
clientRecord.mSelectingRoute = null;
clientRecord.mSelectedRoute = selectedRoute;
- notifyRouteSelectedToClient(((Client2Record) clientRecord).mClient,
+ notifyRouteSelectedToClient(clientRecord.mClient,
selectedRoute,
clientRecord.mIsManagerSelecting
? MediaRouter2.SELECT_REASON_SYSTEM_SELECTED :
@@ -950,14 +849,10 @@ class MediaRouter2ServiceImpl {
return;
}
- ClientRecord clientRecord;
+ Client2Record clientRecord;
synchronized (service.mLock) {
clientRecord = mUserRecord.findClientRecordLocked(clientPackageName);
}
- if (!(clientRecord instanceof Client2Record)) {
- Log.w(TAG, "Ignoring fallback route selection for unknown client.");
- return;
- }
if (clientRecord.mSelectingRoute == null || !TextUtils.equals(
clientRecord.mSelectingRoute.getUniqueId(), selectingRoute.getUniqueId())) {
@@ -972,7 +867,7 @@ class MediaRouter2ServiceImpl {
MediaRoute2Info fallbackRoute = null;
clientRecord.mSelectedRoute = fallbackRoute;
- notifyRouteSelectedToClient(((Client2Record) clientRecord).mClient,
+ notifyRouteSelectedToClient(clientRecord.mClient,
fallbackRoute,
MediaRouter2.SELECT_REASON_FALLBACK,
Bundle.EMPTY /* controlHints */);
@@ -1029,10 +924,8 @@ class MediaRouter2ServiceImpl {
return clients;
}
synchronized (service.mLock) {
- for (ClientRecord clientRecord : mUserRecord.mClientRecords) {
- if (clientRecord instanceof Client2Record) {
- clients.add(((Client2Record) clientRecord).mClient);
- }
+ for (Client2Record clientRecord : mUserRecord.mClientRecords) {
+ clients.add(clientRecord.mClient);
}
}
return clients;
@@ -1157,7 +1050,7 @@ class MediaRouter2ServiceImpl {
}
}
- private void updateClientUsage(ClientRecord clientRecord) {
+ private void updateClientUsage(Client2Record clientRecord) {
MediaRouter2ServiceImpl service = mServiceRef.get();
if (service == null) {
return;
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index 9336af427452..9c99e8f43639 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -249,7 +249,6 @@ public final class MediaRouterService extends IMediaRouterService.Stub
synchronized (mLock) {
registerClientLocked(client, uid, pid, packageName, resolvedUserId, trusted);
}
- mService2.registerClient(client, packageName);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -290,7 +289,6 @@ public final class MediaRouterService extends IMediaRouterService.Stub
synchronized (mLock) {
unregisterClientLocked(client, false);
}
- mService2.unregisterClient(client);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -397,12 +395,6 @@ public final class MediaRouterService extends IMediaRouterService.Stub
// Binder call
@Override
- public void setControlCategories(IMediaRouterClient client, List<String> controlCategories) {
- mService2.setControlCategories(client, controlCategories);
- }
-
- // Binder call
- @Override
public void requestUpdateVolume(IMediaRouterClient client, String routeId, int direction) {
if (client == null) {
throw new IllegalArgumentException("client must not be null");
@@ -501,8 +493,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub
// Binder call
@Override
- public void setControlCategories2(IMediaRouter2Client client, List<String> categories) {
- mService2.setControlCategories2(client, categories);
+ public void setControlCategories(IMediaRouter2Client client, List<String> categories) {
+ mService2.setControlCategories(client, categories);
}
// Binder call
@@ -601,7 +593,6 @@ public final class MediaRouterService extends IMediaRouterService.Stub
synchronized (mLock) {
unregisterClientLocked(clientRecord.mClient, true);
}
- mService2.unregisterClient(clientRecord.mClient);
}
private void registerClientLocked(IMediaRouterClient client,