From dfafaf7bf9475ae98dbe02c3711067d9c82637f0 Mon Sep 17 00:00:00 2001 From: Sungsoo Lim Date: Tue, 7 Jan 2020 13:04:05 +0900 Subject: [PATCH] Refactor code for initializing UserRecord Test: atest mediaroutertest Change-Id: Ib874f4e92c79b28a75721f456451e7775e0bafae --- .../server/media/MediaRouter2ServiceImpl.java | 61 ++++++++----------- 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 22ba1bf1a8515..562a7200fb38f 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -79,7 +79,6 @@ class MediaRouter2ServiceImpl { @GuardedBy("mLock") private int mCurrentUserId = -1; - MediaRouter2ServiceImpl(Context context) { mContext = context; } @@ -89,17 +88,23 @@ class MediaRouter2ServiceImpl { final int uid = Binder.getCallingUid(); final int userId = UserHandle.getUserId(uid); - Collection systemRoutes; - synchronized (mLock) { - UserRecord userRecord = mUserRecords.get(userId); - if (userRecord == null) { - userRecord = new UserRecord(userId); - mUserRecords.put(userId, userRecord); - initializeUserLocked(userRecord); + final long token = Binder.clearCallingIdentity(); + try { + Collection systemRoutes; + synchronized (mLock) { + UserRecord userRecord = getOrCreateUserRecordLocked(userId); + MediaRoute2ProviderInfo providerInfo = + userRecord.mHandler.mSystemProvider.getProviderInfo(); + if (providerInfo != null) { + systemRoutes = providerInfo.getRoutes(); + } else { + systemRoutes = Collections.emptyList(); + } } - systemRoutes = userRecord.mHandler.mSystemProvider.getProviderInfo().getRoutes(); + return new ArrayList<>(systemRoutes); + } finally { + Binder.restoreCallingIdentity(token); } - return new ArrayList<>(systemRoutes); } public void registerClient(@NonNull IMediaRouter2Client client, @@ -400,12 +405,7 @@ class MediaRouter2ServiceImpl { int uid, int pid, String packageName, int userId, boolean trusted) { final IBinder binder = client.asBinder(); if (mAllClientRecords.get(binder) == null) { - UserRecord userRecord = mUserRecords.get(userId); - if (userRecord == null) { - userRecord = new UserRecord(userId); - mUserRecords.put(userId, userRecord); - initializeUserLocked(userRecord); - } + UserRecord userRecord = getOrCreateUserRecordLocked(userId); Client2Record clientRecord = new Client2Record(userRecord, client, uid, pid, packageName, trusted); try { @@ -556,12 +556,7 @@ class MediaRouter2ServiceImpl { final IBinder binder = manager.asBinder(); ManagerRecord managerRecord = mAllManagerRecords.get(binder); if (managerRecord == null) { - boolean newUser = false; - UserRecord userRecord = mUserRecords.get(userId); - if (userRecord == null) { - userRecord = new UserRecord(userId); - newUser = true; - } + UserRecord userRecord = getOrCreateUserRecordLocked(userId); managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName, trusted); try { binder.linkToDeath(managerRecord, 0); @@ -569,11 +564,6 @@ class MediaRouter2ServiceImpl { throw new RuntimeException("Media router manager died prematurely.", ex); } - if (newUser) { - mUserRecords.put(userId, userRecord); - initializeUserLocked(userRecord); - } - userRecord.mManagerRecords.add(managerRecord); mAllManagerRecords.put(binder, managerRecord); @@ -661,14 +651,17 @@ class MediaRouter2ServiceImpl { return sessionInfos; } - private void initializeUserLocked(UserRecord userRecord) { - if (DEBUG) { - Slog.d(TAG, userRecord + ": Initialized"); - } - if (userRecord.mUserId == mCurrentUserId) { - userRecord.mHandler.sendMessage( - obtainMessage(UserHandler::start, userRecord.mHandler)); + private UserRecord getOrCreateUserRecordLocked(int userId) { + UserRecord userRecord = mUserRecords.get(userId); + if (userRecord == null) { + userRecord = new UserRecord(userId); + mUserRecords.put(userId, userRecord); + if (userId == mCurrentUserId) { + userRecord.mHandler.sendMessage( + obtainMessage(UserHandler::start, userRecord.mHandler)); + } } + return userRecord; } private void disposeUserIfNeededLocked(UserRecord userRecord) {