MediaRouter2: Enhance readability of MediaRouter2ServiceImpl
This CL introduces following changes:
- Renamed methods by adding 'Router2' or 'Manager',
in order to easily distinguish the type of the caller.
- Rename and reordered MediaRouter2ServiceImpl methods
- Add missing @NonNull/@Nullable
Bug: 149642195
Test: CTS and atest mediaroutertest
Change-Id: I82758c1bb54e70b699e06fa46fa3a97462e41bc1
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java b/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
index efb9515..fe118e5 100644
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderWatcher.java
@@ -16,6 +16,7 @@
package com.android.server.media;
+import android.annotation.NonNull;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -171,7 +172,7 @@
};
public interface Callback {
- void onAddProviderService(MediaRoute2ProviderServiceProxy proxy);
- void onRemoveProviderService(MediaRoute2ProviderServiceProxy proxy);
+ void onAddProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy);
+ void onRemoveProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy);
}
}
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index a268720..3588916 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -87,6 +87,11 @@
mContext = context;
}
+ ////////////////////////////////////////////////////////////////
+ //// Calls from MediaRouter2
+ //// - Should not have @NonNull/@Nullable on any arguments
+ ////////////////////////////////////////////////////////////////
+
@NonNull
public List<MediaRoute2Info> getSystemRoutes() {
final int uid = Binder.getCallingUid();
@@ -135,9 +140,11 @@
}
}
- public void registerRouter2(@NonNull IMediaRouter2 router,
- @NonNull String packageName) {
+ public void registerRouter2(IMediaRouter2 router, String packageName) {
Objects.requireNonNull(router, "router must not be null");
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName must not be empty");
+ }
final int uid = Binder.getCallingUid();
final int pid = Binder.getCallingPid();
@@ -155,7 +162,7 @@
}
}
- public void unregisterRouter2(@NonNull IMediaRouter2 router) {
+ public void unregisterRouter2(IMediaRouter2 router) {
Objects.requireNonNull(router, "router must not be null");
final long token = Binder.clearCallingIdentity();
@@ -168,33 +175,35 @@
}
}
- public void registerManager(@NonNull IMediaRouter2Manager manager,
- @NonNull String packageName) {
- Objects.requireNonNull(manager, "manager must not be null");
- //TODO: should check permission
- final boolean trusted = true;
-
- final int uid = Binder.getCallingUid();
- final int pid = Binder.getCallingPid();
- final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
+ public void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
+ RouteDiscoveryPreference preference) {
+ Objects.requireNonNull(router, "router must not be null");
+ Objects.requireNonNull(preference, "preference must not be null");
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- registerManagerLocked(manager, uid, pid, packageName, userId, trusted);
+ RouterRecord routerRecord = mAllRouterRecords.get(router.asBinder());
+ if (routerRecord == null) {
+ Slog.w(TAG, "Ignoring updating discoveryRequest of null routerRecord.");
+ return;
+ }
+ setDiscoveryRequestWithRouter2Locked(routerRecord, preference);
}
} finally {
Binder.restoreCallingIdentity(token);
}
}
- public void unregisterManager(@NonNull IMediaRouter2Manager manager) {
- Objects.requireNonNull(manager, "manager must not be null");
+ public void setRouteVolumeWithRouter2(IMediaRouter2 router,
+ MediaRoute2Info route, int volume) {
+ Objects.requireNonNull(router, "router must not be null");
+ Objects.requireNonNull(route, "route must not be null");
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- unregisterManagerLocked(manager, false);
+ setRouteVolumeWithRouter2Locked(router, route, volume);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -209,7 +218,7 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- requestCreateSessionLocked(router, route, requestId, sessionHints);
+ requestCreateSessionWithRouter2Locked(router, route, requestId, sessionHints);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -227,7 +236,7 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- selectRouteLocked(router, uniqueSessionId, route);
+ selectRouteWithRouter2Locked(router, uniqueSessionId, route);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -246,7 +255,7 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- deselectRouteLocked(router, uniqueSessionId, route);
+ deselectRouteWithRouter2Locked(router, uniqueSessionId, route);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -271,6 +280,21 @@
}
}
+ public void setSessionVolumeWithRouter2(IMediaRouter2 router, String uniqueSessionId,
+ int volume) {
+ Objects.requireNonNull(router, "router must not be null");
+ Objects.requireNonNull(uniqueSessionId, "uniqueSessionId must not be null");
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ setSessionVolumeWithRouter2Locked(router, uniqueSessionId, volume);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
public void releaseSessionWithRouter2(IMediaRouter2 router, String uniqueSessionId) {
Objects.requireNonNull(router, "router must not be null");
if (TextUtils.isEmpty(uniqueSessionId)) {
@@ -280,64 +304,60 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- releaseSessionLocked(router, uniqueSessionId);
+ releaseSessionWithRouter2Locked(router, uniqueSessionId);
}
} finally {
Binder.restoreCallingIdentity(token);
}
}
- public void setDiscoveryRequestWithRouter2(IMediaRouter2 router,
- RouteDiscoveryPreference preference) {
- Objects.requireNonNull(router, "router must not be null");
- Objects.requireNonNull(preference, "preference must not be null");
+ ////////////////////////////////////////////////////////////////
+ //// Calls from MediaRouter2Manager
+ //// - Should not have @NonNull/@Nullable on any arguments
+ ////////////////////////////////////////////////////////////////
+ @NonNull
+ public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
+ Objects.requireNonNull(manager, "manager must not be null");
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- RouterRecord routerRecord = mAllRouterRecords.get(router.asBinder());
- setDiscoveryRequestLocked(routerRecord, preference);
+ return getActiveSessionsLocked(manager);
}
} finally {
Binder.restoreCallingIdentity(token);
}
}
- public void setRouteVolumeWithRouter2(IMediaRouter2 router,
- MediaRoute2Info route, int volume) {
- Objects.requireNonNull(router, "router must not be null");
- Objects.requireNonNull(route, "route must not be null");
+ public void registerManager(IMediaRouter2Manager manager, String packageName) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName must not be empty");
+ }
+
+ final boolean trusted = true;
+
+ final int uid = Binder.getCallingUid();
+ final int pid = Binder.getCallingPid();
+ final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- setRouteVolumeLocked(router, route, volume);
+ registerManagerLocked(manager, uid, pid, packageName, userId, trusted);
}
} finally {
Binder.restoreCallingIdentity(token);
}
}
- public void setSessionVolumeWithRouter2(IMediaRouter2 router, String sessionId, int volume) {
- Objects.requireNonNull(router, "router must not be null");
- Objects.requireNonNull(sessionId, "sessionId must not be null");
+ public void unregisterManager(IMediaRouter2Manager manager) {
+ Objects.requireNonNull(manager, "manager must not be null");
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- setSessionVolumeLocked(router, sessionId, volume);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
- MediaRoute2Info route, int requestId) {
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- requestClientCreateSessionLocked(manager, packageName, route, requestId);
+ unregisterManagerLocked(manager, false);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -352,7 +372,78 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- setRouteVolumeLocked(manager, route, volume);
+ setRouteVolumeWithManagerLocked(manager, route, volume);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ public void requestCreateSessionWithManager(IMediaRouter2Manager manager, String packageName,
+ MediaRoute2Info route, int requestId) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName must not be empty");
+ }
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ requestCreateSessionWithManagerLocked(manager, packageName, route, requestId);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ public void selectRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
+ MediaRoute2Info route) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(uniqueSessionId)) {
+ throw new IllegalArgumentException("uniqueSessionId must not be empty");
+ }
+ Objects.requireNonNull(route, "route must not be null");
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ selectRouteWithManagerLocked(manager, uniqueSessionId, route);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ public void deselectRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
+ MediaRoute2Info route) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(uniqueSessionId)) {
+ throw new IllegalArgumentException("uniqueSessionId must not be empty");
+ }
+ Objects.requireNonNull(route, "route must not be null");
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ deselectRouteWithManagerLocked(manager, uniqueSessionId, route);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ public void transferToRouteWithManager(IMediaRouter2Manager manager, String uniqueSessionId,
+ MediaRoute2Info route) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(uniqueSessionId)) {
+ throw new IllegalArgumentException("uniqueSessionId must not be empty");
+ }
+ Objects.requireNonNull(route, "route must not be null");
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ synchronized (mLock) {
+ transferToRouteWithManagerLocked(manager, uniqueSessionId, route);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -360,73 +451,32 @@
}
public void setSessionVolumeWithManager(IMediaRouter2Manager manager,
- String sessionId, int volume) {
+ String uniqueSessionId, int volume) {
Objects.requireNonNull(manager, "manager must not be null");
- Objects.requireNonNull(sessionId, "sessionId must not be null");
+ if (TextUtils.isEmpty(uniqueSessionId)) {
+ throw new IllegalArgumentException("uniqueSessionId must not be empty");
+ }
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- setSessionVolumeLocked(manager, sessionId, volume);
+ setSessionVolumeWithManagerLocked(manager, uniqueSessionId, volume);
}
} finally {
Binder.restoreCallingIdentity(token);
}
}
- @NonNull
- public List<RoutingSessionInfo> getActiveSessions(IMediaRouter2Manager manager) {
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- return getActiveSessionsLocked(manager);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
+ public void releaseSessionWithManager(IMediaRouter2Manager manager, String uniqueSessionId) {
+ Objects.requireNonNull(manager, "manager must not be null");
+ if (TextUtils.isEmpty(uniqueSessionId)) {
+ throw new IllegalArgumentException("uniqueSessionId must not be empty");
}
- }
- public void selectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
final long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
- selectRouteWithManagerLocked(manager, sessionId, route);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void deselectRouteWithManager(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- deselectRouteWithManagerLocked(manager, sessionId, route);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void transferToRouteWithManager(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- transferToRouteWithManagerLocked(manager, sessionId, route);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- public void releaseSessionWithManager(IMediaRouter2Manager manager, String sessionId) {
- final long token = Binder.clearCallingIdentity();
- try {
- synchronized (mLock) {
- releaseSessionWithManagerLocked(manager, sessionId);
+ releaseSessionWithManagerLocked(manager, uniqueSessionId);
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -457,247 +507,180 @@
}
}
- void routerDied(RouterRecord routerRecord) {
+ void routerDied(@NonNull RouterRecord routerRecord) {
synchronized (mLock) {
unregisterRouter2Locked(routerRecord.mRouter, true);
}
}
- void managerDied(ManagerRecord managerRecord) {
+ void managerDied(@NonNull ManagerRecord managerRecord) {
synchronized (mLock) {
unregisterManagerLocked(managerRecord.mManager, true);
}
}
- private void registerRouter2Locked(IMediaRouter2 router,
- int uid, int pid, String packageName, int userId, boolean trusted) {
+ ////////////////////////////////////////////////////////////////
+ //// ***Locked methods related to MediaRouter2
+ //// - Should have @NonNull/@Nullable on all arguments
+ ////////////////////////////////////////////////////////////////
+
+ private void registerRouter2Locked(@NonNull IMediaRouter2 router, int uid, int pid,
+ @NonNull String packageName, int userId, boolean trusted) {
final IBinder binder = router.asBinder();
- if (mAllRouterRecords.get(binder) == null) {
-
- UserRecord userRecord = getOrCreateUserRecordLocked(userId);
- RouterRecord routerRecord = new RouterRecord(userRecord, router, uid, pid,
- packageName, trusted);
- try {
- binder.linkToDeath(routerRecord, 0);
- } catch (RemoteException ex) {
- throw new RuntimeException("NediaRouter2 died prematurely.", ex);
- }
-
- userRecord.mRouterRecords.add(routerRecord);
- mAllRouterRecords.put(binder, routerRecord);
-
- userRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::notifyRoutesToRouter, userRecord.mHandler, router));
+ if (mAllRouterRecords.get(binder) != null) {
+ Slog.w(TAG, "Same router already exists. packageName=" + packageName);
+ return;
}
+
+ UserRecord userRecord = getOrCreateUserRecordLocked(userId);
+ RouterRecord routerRecord = new RouterRecord(
+ userRecord, router, uid, pid, packageName, trusted);
+ try {
+ binder.linkToDeath(routerRecord, 0);
+ } catch (RemoteException ex) {
+ throw new RuntimeException("MediaRouter2 died prematurely.", ex);
+ }
+
+ userRecord.mRouterRecords.add(routerRecord);
+ mAllRouterRecords.put(binder, routerRecord);
+
+ userRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::notifyRoutesToRouter, userRecord.mHandler, router));
}
- private void unregisterRouter2Locked(IMediaRouter2 router, boolean died) {
+ private void unregisterRouter2Locked(@NonNull IMediaRouter2 router, boolean died) {
RouterRecord routerRecord = mAllRouterRecords.remove(router.asBinder());
- if (routerRecord != null) {
- UserRecord userRecord = routerRecord.mUserRecord;
- userRecord.mRouterRecords.remove(routerRecord);
- //TODO: update discovery request
- routerRecord.dispose();
- disposeUserIfNeededLocked(userRecord); // since router removed from user
+ if (routerRecord == null) {
+ Slog.w(TAG, "Ignoring unregistering unknown router2");
+ return;
}
+
+ UserRecord userRecord = routerRecord.mUserRecord;
+ userRecord.mRouterRecords.remove(routerRecord);
+ //TODO: update discovery request
+ routerRecord.dispose();
+ disposeUserIfNeededLocked(userRecord); // since router removed from user
}
- private void requestCreateSessionLocked(@NonNull IMediaRouter2 router,
- @NonNull MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
- final IBinder binder = router.asBinder();
- final RouterRecord routerRecord = mAllRouterRecords.get(binder);
-
- // router id is not assigned yet
- if (toRouterOrManagerId(requestId) == 0) {
- requestId = toUniqueRequestId(routerRecord.mRouterId, toOriginalRequestId(requestId));
+ private void setDiscoveryRequestWithRouter2Locked(@NonNull RouterRecord routerRecord,
+ @NonNull RouteDiscoveryPreference discoveryRequest) {
+ if (routerRecord.mDiscoveryPreference.equals(discoveryRequest)) {
+ return;
}
-
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::requestCreateSessionOnHandler,
- routerRecord.mUserRecord.mHandler,
- routerRecord, route, requestId, sessionHints));
- }
+ routerRecord.mDiscoveryPreference = discoveryRequest;
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
+ routerRecord.mUserRecord.mHandler, routerRecord));
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::updateDiscoveryPreference,
+ routerRecord.mUserRecord.mHandler));
}
- private void selectRouteLocked(@NonNull IMediaRouter2 router, String uniqueSessionId,
- @NonNull MediaRoute2Info route) {
- final IBinder binder = router.asBinder();
- final RouterRecord routerRecord = mAllRouterRecords.get(binder);
-
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::selectRouteOnHandler,
- routerRecord.mUserRecord.mHandler,
- routerRecord, uniqueSessionId, route));
- }
- }
-
- private void deselectRouteLocked(@NonNull IMediaRouter2 router, String uniqueSessionId,
- @NonNull MediaRoute2Info route) {
- final IBinder binder = router.asBinder();
- final RouterRecord routerRecord = mAllRouterRecords.get(binder);
-
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::deselectRouteOnHandler,
- routerRecord.mUserRecord.mHandler,
- routerRecord, uniqueSessionId, route));
- }
- }
-
- private void transferToRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
- String uniqueSessionId, @NonNull MediaRoute2Info route) {
- final IBinder binder = router.asBinder();
- final RouterRecord routerRecord = mAllRouterRecords.get(binder);
-
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::transferToRouteOnHandler,
- routerRecord.mUserRecord.mHandler,
- routerRecord, uniqueSessionId, route));
- }
- }
-
- private void releaseSessionLocked(@NonNull IMediaRouter2 router, String uniqueSessionId) {
- final IBinder binder = router.asBinder();
- final RouterRecord routerRecord = mAllRouterRecords.get(binder);
-
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::releaseSessionOnHandler,
- routerRecord.mUserRecord.mHandler,
- routerRecord, uniqueSessionId));
- }
- }
-
- private void setDiscoveryRequestLocked(RouterRecord routerRecord,
- RouteDiscoveryPreference discoveryRequest) {
- if (routerRecord != null) {
- if (routerRecord.mDiscoveryPreference.equals(discoveryRequest)) {
- return;
- }
-
- routerRecord.mDiscoveryPreference = discoveryRequest;
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
- routerRecord.mUserRecord.mHandler, routerRecord));
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::updateDiscoveryPreference,
- routerRecord.mUserRecord.mHandler));
- }
- }
-
- private void setRouteVolumeLocked(IMediaRouter2 router, MediaRoute2Info route,
- int volume) {
+ private void setRouteVolumeWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull MediaRoute2Info route, int volume) {
final IBinder binder = router.asBinder();
RouterRecord routerRecord = mAllRouterRecords.get(binder);
if (routerRecord != null) {
routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::setRouteVolume,
+ obtainMessage(UserHandler::setRouteVolumeOnHandler,
routerRecord.mUserRecord.mHandler, route, volume));
}
}
- private void setSessionVolumeLocked(IMediaRouter2 router, String sessionId,
- int volume) {
+ private void requestCreateSessionWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull MediaRoute2Info route, int requestId, @Nullable Bundle sessionHints) {
+ final IBinder binder = router.asBinder();
+ final RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+ if (routerRecord == null) {
+ return;
+ }
+
+ long uniqueRequestId = toUniqueRequestId(routerRecord.mRouterId, requestId);
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::requestCreateSessionOnHandler,
+ routerRecord.mUserRecord.mHandler,
+ routerRecord, route, uniqueRequestId, sessionHints));
+ }
+
+ private void selectRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = router.asBinder();
+ final RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+ if (routerRecord == null) {
+ return;
+ }
+
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::selectRouteOnHandler,
+ routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void deselectRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = router.asBinder();
+ final RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+ if (routerRecord == null) {
+ return;
+ }
+
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::deselectRouteOnHandler,
+ routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void transferToRouteWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = router.asBinder();
+ final RouterRecord routerRecord = mAllRouterRecords.get(binder);
+
+ if (routerRecord == null) {
+ return;
+ }
+
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::transferToRouteOnHandler,
+ routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void setSessionVolumeWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull String uniqueSessionId, int volume) {
final IBinder binder = router.asBinder();
RouterRecord routerRecord = mAllRouterRecords.get(binder);
- if (routerRecord != null) {
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::setSessionVolume,
- routerRecord.mUserRecord.mHandler, sessionId, volume));
+ if (routerRecord == null) {
+ return;
}
+
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::setSessionVolumeOnHandler,
+ routerRecord.mUserRecord.mHandler, uniqueSessionId, volume));
}
- private void registerManagerLocked(IMediaRouter2Manager manager,
- int uid, int pid, String packageName, int userId, boolean trusted) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
- if (managerRecord == null) {
- UserRecord userRecord = getOrCreateUserRecordLocked(userId);
- managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName, trusted);
- try {
- binder.linkToDeath(managerRecord, 0);
- } catch (RemoteException ex) {
- throw new RuntimeException("Media router manager died prematurely.", ex);
- }
+ private void releaseSessionWithRouter2Locked(@NonNull IMediaRouter2 router,
+ @NonNull String uniqueSessionId) {
+ final IBinder binder = router.asBinder();
+ final RouterRecord routerRecord = mAllRouterRecords.get(binder);
- userRecord.mManagerRecords.add(managerRecord);
- mAllManagerRecords.put(binder, managerRecord);
-
- userRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::notifyRoutesToManager,
- userRecord.mHandler, manager));
-
- for (RouterRecord routerRecord : userRecord.mRouterRecords) {
- // TODO: Do not use notifyPreferredFeaturesChangedToManagers since it updates all
- // managers. Instead, Notify only to the manager that is currently being registered.
-
- // TODO: UserRecord <-> routerRecord, why do they reference each other?
- // How about removing mUserRecord from routerRecord?
- routerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
- routerRecord.mUserRecord.mHandler, routerRecord));
- }
+ if (routerRecord == null) {
+ return;
}
+
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::releaseSessionOnHandler,
+ routerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId));
}
- private void unregisterManagerLocked(IMediaRouter2Manager manager, boolean died) {
- ManagerRecord managerRecord = mAllManagerRecords.remove(manager.asBinder());
- if (managerRecord != null) {
- UserRecord userRecord = managerRecord.mUserRecord;
- userRecord.mManagerRecords.remove(managerRecord);
- managerRecord.dispose();
- disposeUserIfNeededLocked(userRecord); // since manager removed from user
- }
- }
+ ////////////////////////////////////////////////////////////
+ //// ***Locked methods related to MediaRouter2Manager
+ //// - Should have @NonNull/@Nullable on all arguments
+ ////////////////////////////////////////////////////////////
- private void requestClientCreateSessionLocked(IMediaRouter2Manager manager,
- String packageName, MediaRoute2Info route, int requestId) {
- ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder());
- if (managerRecord != null) {
- RouterRecord routerRecord =
- managerRecord.mUserRecord.findRouterRecordLocked(packageName);
- if (routerRecord == null) {
- Slog.w(TAG, "Ignoring session creation for unknown router.");
- }
- long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId);
- if (routerRecord != null && managerRecord.mTrusted) {
- //TODO: Use MediaRouter2's OnCreateSessionListener to send proper session hints.
- requestCreateSessionLocked(routerRecord.mRouter, route,
- uniqueRequestId, null /* sessionHints */);
- }
- }
- }
-
- private void setRouteVolumeLocked(IMediaRouter2Manager manager, MediaRoute2Info route,
- int volume) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord != null) {
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::setRouteVolume,
- managerRecord.mUserRecord.mHandler, route, volume));
- }
- }
-
- private void setSessionVolumeLocked(IMediaRouter2Manager manager, String sessionId,
- int volume) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord != null) {
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::setSessionVolume,
- managerRecord.mUserRecord.mHandler, sessionId, volume));
- }
- }
-
- private List<RoutingSessionInfo> getActiveSessionsLocked(IMediaRouter2Manager manager) {
+ private List<RoutingSessionInfo> getActiveSessionsLocked(
+ @NonNull IMediaRouter2Manager manager) {
final IBinder binder = manager.asBinder();
ManagerRecord managerRecord = mAllManagerRecords.get(binder);
@@ -713,6 +696,177 @@
return sessionInfos;
}
+ private void registerManagerLocked(@NonNull IMediaRouter2Manager manager,
+ int uid, int pid, @NonNull String packageName, int userId, boolean trusted) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord != null) {
+ Slog.w(TAG, "Same manager already exists. packageName=" + packageName);
+ return;
+ }
+
+ UserRecord userRecord = getOrCreateUserRecordLocked(userId);
+ managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName, trusted);
+ try {
+ binder.linkToDeath(managerRecord, 0);
+ } catch (RemoteException ex) {
+ throw new RuntimeException("Media router manager died prematurely.", ex);
+ }
+
+ userRecord.mManagerRecords.add(managerRecord);
+ mAllManagerRecords.put(binder, managerRecord);
+
+ userRecord.mHandler.sendMessage(obtainMessage(UserHandler::notifyRoutesToManager,
+ userRecord.mHandler, manager));
+
+ for (RouterRecord routerRecord : userRecord.mRouterRecords) {
+ // TODO: Do not use notifyPreferredFeaturesChangedToManagers since it updates all
+ // managers. Instead, Notify only to the manager that is currently being registered.
+
+ // TODO: UserRecord <-> routerRecord, why do they reference each other?
+ // How about removing mUserRecord from routerRecord?
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
+ routerRecord.mUserRecord.mHandler, routerRecord));
+ }
+ }
+
+ private void unregisterManagerLocked(@NonNull IMediaRouter2Manager manager, boolean died) {
+ ManagerRecord managerRecord = mAllManagerRecords.remove(manager.asBinder());
+ if (managerRecord == null) {
+ return;
+ }
+ UserRecord userRecord = managerRecord.mUserRecord;
+ userRecord.mManagerRecords.remove(managerRecord);
+ managerRecord.dispose();
+ disposeUserIfNeededLocked(userRecord); // since manager removed from user
+ }
+
+ private void setRouteVolumeWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull MediaRoute2Info route, int volume) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::setRouteVolumeOnHandler,
+ managerRecord.mUserRecord.mHandler, route, volume));
+ }
+
+ private void requestCreateSessionWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String packageName, @NonNull MediaRoute2Info route, int requestId) {
+ ManagerRecord managerRecord = mAllManagerRecords.get(manager.asBinder());
+ if (managerRecord == null || !managerRecord.mTrusted) {
+ return;
+ }
+
+ RouterRecord routerRecord = managerRecord.mUserRecord.findRouterRecordLocked(packageName);
+ if (routerRecord == null) {
+ Slog.w(TAG, "Ignoring session creation for unknown router.");
+ return;
+ }
+
+ long uniqueRequestId = toUniqueRequestId(managerRecord.mManagerId, requestId);
+ //TODO: Use MediaRouter2's OnCreateSessionListener to send proper session hints.
+ routerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::requestCreateSessionOnHandler,
+ routerRecord.mUserRecord.mHandler,
+ routerRecord, route, uniqueRequestId, null /* sessionHints */));
+ }
+
+ private void selectRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+
+ // Can be null if the session is system's.
+ RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+ .findRouterforSessionLocked(uniqueSessionId);
+
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::selectRouteOnHandler,
+ managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void deselectRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+
+ // Can be null if the session is system's.
+ RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+ .findRouterforSessionLocked(uniqueSessionId);
+
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::deselectRouteOnHandler,
+ managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void transferToRouteWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+
+ // Can be null if the session is system's.
+ RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+ .findRouterforSessionLocked(uniqueSessionId);
+
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::transferToRouteOnHandler,
+ managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId, route));
+ }
+
+ private void setSessionVolumeWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String uniqueSessionId, int volume) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::setSessionVolumeOnHandler,
+ managerRecord.mUserRecord.mHandler, uniqueSessionId, volume));
+ }
+
+ private void releaseSessionWithManagerLocked(@NonNull IMediaRouter2Manager manager,
+ @NonNull String uniqueSessionId) {
+ final IBinder binder = manager.asBinder();
+ ManagerRecord managerRecord = mAllManagerRecords.get(binder);
+
+ if (managerRecord == null) {
+ return;
+ }
+
+ RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
+ .findRouterforSessionLocked(uniqueSessionId);
+
+ managerRecord.mUserRecord.mHandler.sendMessage(
+ obtainMessage(UserHandler::releaseSessionOnHandler,
+ managerRecord.mUserRecord.mHandler, routerRecord, uniqueSessionId));
+ }
+
+ ////////////////////////////////////////////////////////////
+ //// ***Locked methods used by both router2 and manager
+ //// - Should have @NonNull/@Nullable on all arguments
+ ////////////////////////////////////////////////////////////
+
private UserRecord getOrCreateUserRecordLocked(int userId) {
UserRecord userRecord = mUserRecords.get(userId);
if (userRecord == null) {
@@ -726,79 +880,7 @@
return userRecord;
}
- private void selectRouteWithManagerLocked(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord == null) {
- Slog.w(TAG, "selectRouteWithManagerLocked: Ignoring unknown manager.");
- return;
- }
- RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
- .findRouterforSessionLocked(sessionId);
-
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::selectRouteOnHandler,
- managerRecord.mUserRecord.mHandler,
- routerRecord, sessionId, route));
- }
-
- private void deselectRouteWithManagerLocked(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord == null) {
- Slog.w(TAG, "deselectRouteWithManagerLocked: Ignoring unknown manager.");
- return;
- }
- RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
- .findRouterforSessionLocked(sessionId);
-
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::deselectRouteOnHandler,
- managerRecord.mUserRecord.mHandler,
- routerRecord, sessionId, route));
- }
-
- private void transferToRouteWithManagerLocked(IMediaRouter2Manager manager, String sessionId,
- MediaRoute2Info route) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord == null) {
- Slog.w(TAG, "transferClientRouteLocked: Ignoring unknown manager.");
- return;
- }
- RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
- .findRouterforSessionLocked(sessionId);
-
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::transferToRouteOnHandler,
- managerRecord.mUserRecord.mHandler,
- routerRecord, sessionId, route));
- }
-
- private void releaseSessionWithManagerLocked(IMediaRouter2Manager manager, String sessionId) {
- final IBinder binder = manager.asBinder();
- ManagerRecord managerRecord = mAllManagerRecords.get(binder);
-
- if (managerRecord == null) {
- Slog.w(TAG, "releaseSessionWithManagerLocked: Ignoring unknown manager.");
- return;
- }
-
- RouterRecord routerRecord = managerRecord.mUserRecord.mHandler
- .findRouterforSessionLocked(sessionId);
-
- managerRecord.mUserRecord.mHandler.sendMessage(
- obtainMessage(UserHandler::releaseSessionOnHandler,
- managerRecord.mUserRecord.mHandler,
- routerRecord, sessionId));
- }
-
- private void disposeUserIfNeededLocked(UserRecord userRecord) {
+ private void disposeUserIfNeededLocked(@NonNull UserRecord userRecord) {
// If there are no records left and the user is no longer current then go ahead
// and purge the user record and all of its associated state. If the user is current
// then leave it alone since we might be connected to a route or want to query
@@ -948,7 +1030,7 @@
private boolean mRunning;
- UserHandler(MediaRouter2ServiceImpl service, UserRecord userRecord) {
+ UserHandler(@NonNull MediaRouter2ServiceImpl service, @NonNull UserRecord userRecord) {
super(Looper.getMainLooper(), null, true);
mServiceRef = new WeakReference<>(service);
mUserRecord = userRecord;
@@ -974,14 +1056,14 @@
}
@Override
- public void onAddProviderService(MediaRoute2ProviderServiceProxy proxy) {
+ public void onAddProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy) {
proxy.setCallback(this);
mMediaProviders.add(proxy);
proxy.updateDiscoveryPreference(mUserRecord.mCompositeDiscoveryPreference);
}
@Override
- public void onRemoveProviderService(MediaRoute2ProviderServiceProxy proxy) {
+ public void onRemoveProviderService(@NonNull MediaRoute2ProviderServiceProxy proxy) {
mMediaProviders.remove(proxy);
}
@@ -1012,19 +1094,19 @@
}
@Override
- public void onSessionReleased(MediaRoute2Provider provider,
- RoutingSessionInfo sessionInfo) {
+ public void onSessionReleased(@NonNull MediaRoute2Provider provider,
+ @NonNull RoutingSessionInfo sessionInfo) {
sendMessage(PooledLambda.obtainMessage(UserHandler::onSessionReleasedOnHandler,
this, provider, sessionInfo));
}
@Nullable
- public RouterRecord findRouterforSessionLocked(@NonNull String sessionId) {
- return mSessionToRouterMap.get(sessionId);
+ public RouterRecord findRouterforSessionLocked(@NonNull String uniqueSessionId) {
+ return mSessionToRouterMap.get(uniqueSessionId);
}
//TODO: notify session info updates
- private void onProviderStateChangedOnHandler(MediaRoute2Provider provider) {
+ private void onProviderStateChangedOnHandler(@NonNull MediaRoute2Provider provider) {
int providerIndex = getProviderInfoIndex(provider.getUniqueId());
MediaRoute2ProviderInfo providerInfo = provider.getProviderInfo();
MediaRoute2ProviderInfo prevInfo =
@@ -1096,7 +1178,7 @@
}
}
- private int getProviderInfoIndex(String providerId) {
+ private int getProviderInfoIndex(@NonNull String providerId) {
for (int i = 0; i < mLastProviderInfos.size(); i++) {
MediaRoute2ProviderInfo providerInfo = mLastProviderInfos.get(i);
if (TextUtils.equals(providerInfo.getUniqueId(), providerId)) {
@@ -1106,8 +1188,8 @@
return -1;
}
- private void requestCreateSessionOnHandler(RouterRecord routerRecord,
- MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
+ private void requestCreateSessionOnHandler(@NonNull RouterRecord routerRecord,
+ @NonNull MediaRoute2Info route, long requestId, @Nullable Bundle sessionHints) {
final MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider == null) {
@@ -1126,8 +1208,9 @@
requestId, sessionHints);
}
+ // routerRecord can be null if the session is system's.
private void selectRouteOnHandler(@Nullable RouterRecord routerRecord,
- String uniqueSessionId, MediaRoute2Info route) {
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
"selecting")) {
return;
@@ -1142,8 +1225,9 @@
provider.selectRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
}
+ // routerRecord can be null if the session is system's.
private void deselectRouteOnHandler(@Nullable RouterRecord routerRecord,
- String uniqueSessionId, MediaRoute2Info route) {
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
"deselecting")) {
return;
@@ -1158,8 +1242,9 @@
provider.deselectRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
}
- private void transferToRouteOnHandler(RouterRecord routerRecord,
- String uniqueSessionId, MediaRoute2Info route) {
+ // routerRecord can be null if the session is system's.
+ private void transferToRouteOnHandler(@Nullable RouterRecord routerRecord,
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route) {
if (!checkArgumentsForSessionControl(routerRecord, uniqueSessionId, route,
"transferring to")) {
return;
@@ -1171,17 +1256,12 @@
if (provider == null) {
return;
}
- provider.transferToRoute(getOriginalId(uniqueSessionId),
- route.getOriginalId());
+ provider.transferToRoute(getOriginalId(uniqueSessionId), route.getOriginalId());
}
private boolean checkArgumentsForSessionControl(@Nullable RouterRecord routerRecord,
- String uniqueSessionId, MediaRoute2Info route, @NonNull String description) {
- if (route == null) {
- Slog.w(TAG, "Ignoring " + description + " null route");
- return false;
- }
-
+ @NonNull String uniqueSessionId, @NonNull MediaRoute2Info route,
+ @NonNull String description) {
final String providerId = route.getProviderId();
final MediaRoute2Provider provider = findProvider(providerId);
if (provider == null) {
@@ -1190,12 +1270,6 @@
return false;
}
- if (TextUtils.isEmpty(uniqueSessionId)) {
- Slog.w(TAG, "Ignoring " + description + " route with empty unique session ID. "
- + "route=" + route);
- return false;
- }
-
// Bypass checking router if it's the system session (routerRecord should be null)
if (TextUtils.equals(getProviderId(uniqueSessionId), mSystemProvider.getUniqueId())) {
return true;
@@ -1225,12 +1299,7 @@
}
private void releaseSessionOnHandler(@NonNull RouterRecord routerRecord,
- String uniqueSessionId) {
- if (TextUtils.isEmpty(uniqueSessionId)) {
- Slog.w(TAG, "Ignoring releasing session with empty unique session ID.");
- return;
- }
-
+ @NonNull String uniqueSessionId) {
final RouterRecord matchingRecord = mSessionToRouterMap.get(uniqueSessionId);
if (matchingRecord != routerRecord) {
Slog.w(TAG, "Ignoring releasing session from non-matching router."
@@ -1265,7 +1334,6 @@
private void onSessionCreatedOnHandler(@NonNull MediaRoute2Provider provider,
@NonNull RoutingSessionInfo sessionInfo, long requestId) {
-
notifySessionCreatedToManagers(getManagers(), sessionInfo);
if (requestId == MediaRoute2ProviderService.REQUEST_ID_UNKNOWN) {
@@ -1377,8 +1445,8 @@
notifySessionReleased(routerRecord, sessionInfo);
}
- private void notifySessionCreated(RouterRecord routerRecord,
- RoutingSessionInfo sessionInfo, int requestId) {
+ private void notifySessionCreated(@NonNull RouterRecord routerRecord,
+ @NonNull RoutingSessionInfo sessionInfo, int requestId) {
try {
routerRecord.mRouter.notifySessionCreated(sessionInfo, requestId);
} catch (RemoteException ex) {
@@ -1387,7 +1455,8 @@
}
}
- private void notifySessionCreationFailed(RouterRecord routerRecord, int requestId) {
+ private void notifySessionCreationFailed(@NonNull RouterRecord routerRecord,
+ int requestId) {
try {
routerRecord.mRouter.notifySessionCreated(/* sessionInfo= */ null, requestId);
} catch (RemoteException ex) {
@@ -1396,8 +1465,8 @@
}
}
- private void notifySessionInfoChanged(RouterRecord routerRecord,
- RoutingSessionInfo sessionInfo) {
+ private void notifySessionInfoChanged(@NonNull RouterRecord routerRecord,
+ @NonNull RoutingSessionInfo sessionInfo) {
try {
routerRecord.mRouter.notifySessionInfoChanged(sessionInfo);
} catch (RemoteException ex) {
@@ -1406,8 +1475,8 @@
}
}
- private void notifySessionReleased(RouterRecord routerRecord,
- RoutingSessionInfo sessionInfo) {
+ private void notifySessionReleased(@NonNull RouterRecord routerRecord,
+ @NonNull RoutingSessionInfo sessionInfo) {
try {
routerRecord.mRouter.notifySessionReleased(sessionInfo);
} catch (RemoteException ex) {
@@ -1416,21 +1485,21 @@
}
}
- private void setRouteVolume(MediaRoute2Info route, int volume) {
+ private void setRouteVolumeOnHandler(@NonNull MediaRoute2Info route, int volume) {
final MediaRoute2Provider provider = findProvider(route.getProviderId());
if (provider != null) {
provider.setRouteVolume(route.getOriginalId(), volume);
}
}
- private void setSessionVolume(String sessionId, int volume) {
- final MediaRoute2Provider provider = findProvider(getProviderId(sessionId));
+ private void setSessionVolumeOnHandler(@NonNull String uniqueSessionId, int volume) {
+ final MediaRoute2Provider provider = findProvider(getProviderId(uniqueSessionId));
if (provider == null) {
Slog.w(TAG, "setSessionVolume: couldn't find provider for session "
- + "id=" + sessionId);
+ + "id=" + uniqueSessionId);
return;
}
- provider.setSessionVolume(getOriginalId(sessionId), volume);
+ provider.setSessionVolume(getOriginalId(uniqueSessionId), volume);
}
private List<IMediaRouter2> getRouters() {
@@ -1461,7 +1530,7 @@
return managers;
}
- private void notifyRoutesToRouter(IMediaRouter2 router) {
+ private void notifyRoutesToRouter(@NonNull IMediaRouter2 router) {
List<MediaRoute2Info> routes = new ArrayList<>();
for (MediaRoute2ProviderInfo providerInfo : mLastProviderInfos) {
routes.addAll(providerInfo.getRoutes());
@@ -1476,8 +1545,8 @@
}
}
- private void notifyRoutesAddedToRouters(List<IMediaRouter2> routers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesAddedToRouters(@NonNull List<IMediaRouter2> routers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2 router : routers) {
try {
router.notifyRoutesAdded(routes);
@@ -1487,8 +1556,8 @@
}
}
- private void notifyRoutesRemovedToRouters(List<IMediaRouter2> routers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesRemovedToRouters(@NonNull List<IMediaRouter2> routers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2 router : routers) {
try {
router.notifyRoutesRemoved(routes);
@@ -1498,8 +1567,8 @@
}
}
- private void notifyRoutesChangedToRouters(List<IMediaRouter2> routers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesChangedToRouters(@NonNull List<IMediaRouter2> routers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2 router : routers) {
try {
router.notifyRoutesChanged(routes);
@@ -1509,8 +1578,8 @@
}
}
- private void notifySessionInfoChangedToRouters(List<IMediaRouter2> routers,
- RoutingSessionInfo sessionInfo) {
+ private void notifySessionInfoChangedToRouters(@NonNull List<IMediaRouter2> routers,
+ @NonNull RoutingSessionInfo sessionInfo) {
for (IMediaRouter2 router : routers) {
try {
router.notifySessionInfoChanged(sessionInfo);
@@ -1520,7 +1589,7 @@
}
}
- private void notifyRoutesToManager(IMediaRouter2Manager manager) {
+ private void notifyRoutesToManager(@NonNull IMediaRouter2Manager manager) {
List<MediaRoute2Info> routes = new ArrayList<>();
for (MediaRoute2ProviderInfo providerInfo : mLastProviderInfos) {
routes.addAll(providerInfo.getRoutes());
@@ -1535,8 +1604,8 @@
}
}
- private void notifyRoutesAddedToManagers(List<IMediaRouter2Manager> managers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesAddedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2Manager manager : managers) {
try {
manager.notifyRoutesAdded(routes);
@@ -1546,8 +1615,8 @@
}
}
- private void notifyRoutesRemovedToManagers(List<IMediaRouter2Manager> managers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesRemovedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2Manager manager : managers) {
try {
manager.notifyRoutesRemoved(routes);
@@ -1557,8 +1626,8 @@
}
}
- private void notifyRoutesChangedToManagers(List<IMediaRouter2Manager> managers,
- List<MediaRoute2Info> routes) {
+ private void notifyRoutesChangedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+ @NonNull List<MediaRoute2Info> routes) {
for (IMediaRouter2Manager manager : managers) {
try {
manager.notifyRoutesChanged(routes);
@@ -1568,8 +1637,8 @@
}
}
- private void notifySessionCreatedToManagers(List<IMediaRouter2Manager> managers,
- RoutingSessionInfo sessionInfo) {
+ private void notifySessionCreatedToManagers(@NonNull List<IMediaRouter2Manager> managers,
+ @NonNull RoutingSessionInfo sessionInfo) {
for (IMediaRouter2Manager manager : managers) {
try {
manager.notifySessionCreated(sessionInfo);
@@ -1580,7 +1649,8 @@
}
}
- private void notifySessionInfosChangedToManagers(List<IMediaRouter2Manager> managers) {
+ private void notifySessionInfosChangedToManagers(
+ @NonNull List<IMediaRouter2Manager> managers) {
for (IMediaRouter2Manager manager : managers) {
try {
manager.notifySessionsUpdated();
@@ -1591,7 +1661,7 @@
}
}
- private void notifyPreferredFeaturesChangedToManagers(RouterRecord routerRecord) {
+ private void notifyPreferredFeaturesChangedToManagers(@NonNull RouterRecord routerRecord) {
MediaRouter2ServiceImpl service = mServiceRef.get();
if (service == null) {
return;
@@ -1632,7 +1702,7 @@
}
}
- private MediaRoute2Provider findProvider(String providerId) {
+ private MediaRoute2Provider findProvider(@Nullable String providerId) {
for (MediaRoute2Provider provider : mMediaProviders) {
if (TextUtils.equals(provider.getUniqueId(), providerId)) {
return provider;