summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java12
-rw-r--r--services/core/java/com/android/server/media/SystemMediaRoute2Provider.java15
2 files changed, 23 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 93a27f2d17a9..72d296fc5f6b 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -985,6 +985,7 @@ class MediaRouter2ServiceImpl {
if (userRecord == null) {
userRecord = new UserRecord(userId);
mUserRecords.put(userId, userRecord);
+ userRecord.init();
if (userId == mCurrentUserId) {
userRecord.mHandler.sendMessage(
obtainMessage(UserHandler::start, userRecord.mHandler));
@@ -1034,6 +1035,10 @@ class MediaRouter2ServiceImpl {
mHandler = new UserHandler(MediaRouter2ServiceImpl.this, this);
}
+ void init() {
+ mHandler.init();
+ }
+
// TODO: This assumes that only one router exists in a package.
// Do this in Android S or later.
RouterRecord findRouterRecordLocked(String packageName) {
@@ -1141,16 +1146,21 @@ class MediaRouter2ServiceImpl {
private boolean mRunning;
+ // TODO: (In Android S+) Pull out SystemMediaRoute2Provider out of UserHandler.
UserHandler(@NonNull MediaRouter2ServiceImpl service, @NonNull UserRecord userRecord) {
super(Looper.getMainLooper(), null, true);
mServiceRef = new WeakReference<>(service);
mUserRecord = userRecord;
- mSystemProvider = new SystemMediaRoute2Provider(service.mContext, this);
+ mSystemProvider = new SystemMediaRoute2Provider(service.mContext);
mRouteProviders.add(mSystemProvider);
mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this,
this, mUserRecord.mUserId);
}
+ void init() {
+ mSystemProvider.setCallback(this);
+ }
+
private void start() {
if (!mRunning) {
mRunning = true;
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
index d7e724780c94..bd39caa86338 100644
--- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
@@ -98,12 +98,10 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
}
};
- SystemMediaRoute2Provider(Context context, Callback callback) {
+ SystemMediaRoute2Provider(Context context) {
super(sComponentName);
- setCallback(callback);
mIsSystemRouteProvider = true;
-
mContext = context;
mHandler = new Handler(Looper.getMainLooper());
@@ -143,6 +141,13 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
}
@Override
+ public void setCallback(Callback callback) {
+ super.setCallback(callback);
+ notifyProviderState();
+ notifySessionInfoUpdated();
+ }
+
+ @Override
public void requestCreateSession(long requestId, String packageName, String routeId,
Bundle sessionHints) {
// Assume a router without MODIFY_AUDIO_ROUTING permission can't request with
@@ -354,6 +359,10 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider {
}
void notifySessionInfoUpdated() {
+ if (mCallback == null) {
+ return;
+ }
+
RoutingSessionInfo sessionInfo;
synchronized (mLock) {
sessionInfo = mSessionInfos.get(0);