diff options
| -rw-r--r-- | services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/media/SystemMediaRoute2Provider.java | 15 |
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); |