diff options
3 files changed, 25 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index ec15ff35676c..aa71e054ddee 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -114,6 +114,7 @@ class MediaRouter2ServiceImpl { }; private final Context mContext; + private final Looper mLooper; private final UserManagerInternal mUserManagerInternal; private final Object mLock = new Object(); private final AppOpsManager mAppOpsManager; @@ -178,8 +179,9 @@ class MediaRouter2ServiceImpl { Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS, Manifest.permission.WATCH_APPOPS }) - /* package */ MediaRouter2ServiceImpl(Context context) { + /* package */ MediaRouter2ServiceImpl(@NonNull Context context, @NonNull Looper looper) { mContext = context; + mLooper = looper; mActivityManager = mContext.getSystemService(ActivityManager.class); mActivityManager.addOnUidImportanceListener(mOnUidImportanceListener, REQUIRED_PACKAGE_IMPORTANCE_FOR_SCANNING); @@ -1891,7 +1893,7 @@ class MediaRouter2ServiceImpl { private UserRecord getOrCreateUserRecordLocked(int userId) { UserRecord userRecord = mUserRecords.get(userId); if (userRecord == null) { - userRecord = new UserRecord(userId); + userRecord = new UserRecord(userId, mLooper); mUserRecords.put(userId, userRecord); userRecord.init(); if (isUserActiveLocked(userId)) { @@ -1962,9 +1964,13 @@ class MediaRouter2ServiceImpl { Set<String> mActivelyScanningPackages = Set.of(); final UserHandler mHandler; - UserRecord(int userId) { + UserRecord(int userId, @NonNull Looper looper) { mUserId = userId; - mHandler = new UserHandler(MediaRouter2ServiceImpl.this, this); + mHandler = + new UserHandler( + /* service= */ MediaRouter2ServiceImpl.this, + /* userRecord= */ this, + looper); } void init() { @@ -2365,12 +2371,16 @@ 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); + UserHandler( + @NonNull MediaRouter2ServiceImpl service, + @NonNull UserRecord userRecord, + @NonNull Looper looper) { + super(looper, /* callback= */ null, /* async= */ true); mServiceRef = new WeakReference<>(service); mUserRecord = userRecord; - mSystemProvider = new SystemMediaRoute2Provider(service.mContext, - UserHandle.of(userRecord.mUserId)); + mSystemProvider = + new SystemMediaRoute2Provider( + service.mContext, UserHandle.of(userRecord.mUserId), looper); mRouteProviders.add(mSystemProvider); mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this, this, mUserRecord.mUserId); diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java index 76b8db685f52..4bdca29d3bd0 100644 --- a/services/core/java/com/android/server/media/MediaRouterService.java +++ b/services/core/java/com/android/server/media/MediaRouterService.java @@ -110,6 +110,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub private static final long CONNECTED_TIMEOUT = 60000; private final Context mContext; + private final Looper mLooper; // State guarded by mLock. private final Object mLock = new Object(); @@ -141,7 +142,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) public MediaRouterService(Context context) { - mService2 = new MediaRouter2ServiceImpl(context); + mLooper = Looper.getMainLooper(); + mService2 = new MediaRouter2ServiceImpl(context, mLooper); mContext = context; Watchdog.getInstance().addMonitor(this); Resources res = context.getResources(); @@ -1104,7 +1106,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub public UserRecord(int userId) { mUserId = userId; - mHandler = new UserHandler(MediaRouterService.this, this); + mHandler = new UserHandler(MediaRouterService.this, this, mLooper); } public void dump(final PrintWriter pw, String prefix) { @@ -1212,8 +1214,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub private long mConnectionTimeoutStartTime; private boolean mClientStateUpdateScheduled; - public UserHandler(MediaRouterService service, UserRecord userRecord) { - super(Looper.getMainLooper(), null, true); + private UserHandler(MediaRouterService service, UserRecord userRecord, Looper looper) { + super(looper, null, true); mService = service; mUserRecord = userRecord; mWatcher = new RemoteDisplayProviderWatcher(service.mContext, this, diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java index 67bc61c3b9f6..802acba2e412 100644 --- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java +++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java @@ -86,12 +86,11 @@ class SystemMediaRoute2Provider extends MediaRoute2Provider { @GuardedBy("mTransferLock") @Nullable private volatile SessionCreationRequest mPendingTransferRequest; - SystemMediaRoute2Provider(Context context, UserHandle user) { + SystemMediaRoute2Provider(Context context, UserHandle user, Looper looper) { super(COMPONENT_NAME); mIsSystemRouteProvider = true; mContext = context; mUser = user; - Looper looper = Looper.getMainLooper(); mHandler = new Handler(looper); mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); |