Merge "Parameterize looper in routing framework" into main
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index ec15ff3..aa71e05 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 @@
};
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 @@
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 @@
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 @@
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 @@
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 76b8db6..4bdca29 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 @@
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 @@
@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 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 @@
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 67bc61c..802acba 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 @@
@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);