Loading services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +36 −90 Original line number Diff line number Diff line Loading @@ -89,7 +89,6 @@ import com.android.server.pm.UserManagerInternal; import com.android.server.statusbar.StatusBarManagerInternal; import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; Loading Loading @@ -2344,11 +2343,7 @@ class MediaRouter2ServiceImpl { UserRecord(int userId, @NonNull Looper looper) { mUserId = userId; mHandler = new UserHandler( /* service= */ MediaRouter2ServiceImpl.this, /* userRecord= */ this, looper); mHandler = new UserHandler(/* userRecord= */ this, looper); } void init() { Loading Loading @@ -2967,11 +2962,8 @@ class MediaRouter2ServiceImpl { } } static final class UserHandler extends Handler implements MediaRoute2ProviderWatcher.Callback, MediaRoute2Provider.Callback { private final WeakReference<MediaRouter2ServiceImpl> mServiceRef; private final class UserHandler extends Handler implements MediaRoute2ProviderWatcher.Callback, MediaRoute2Provider.Callback { private final UserRecord mUserRecord; private final MediaRoute2ProviderWatcher mWatcher; Loading Loading @@ -3025,22 +3017,17 @@ class MediaRouter2ServiceImpl { } // TODO: (In Android S+) Pull out SystemMediaRoute2Provider out of UserHandler. UserHandler( @NonNull MediaRouter2ServiceImpl service, @NonNull UserRecord userRecord, @NonNull Looper looper) { UserHandler(@NonNull UserRecord userRecord, @NonNull Looper looper) { super(looper, /* callback= */ null, /* async= */ true); mServiceRef = new WeakReference<>(service); mUserRecord = userRecord; mSystemProvider = Flags.enableMirroringInMediaRouter2() ? SystemMediaRoute2Provider2.create( service.mContext, UserHandle.of(userRecord.mUserId), looper) mContext, UserHandle.of(userRecord.mUserId), looper) : SystemMediaRoute2Provider.create( service.mContext, UserHandle.of(userRecord.mUserId), looper); mContext, UserHandle.of(userRecord.mUserId), looper); mRouteProviders.add(getSystemProvider()); mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this, this, mUserRecord.mUserId); mWatcher = new MediaRoute2ProviderWatcher(mContext, this, this, mUserRecord.mUserId); } void init() { Loading Loading @@ -3142,12 +3129,8 @@ class MediaRouter2ServiceImpl { } public void maybeUpdateDiscoveryPreferenceForUid(int uid) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } boolean isUidRelevant; synchronized (service.mLock) { synchronized (mLock) { isUidRelevant = mUserRecord.mRouterRecords.stream().anyMatch(router -> router.mUid == uid) | mUserRecord.mManagerRecords.stream() Loading Loading @@ -3710,9 +3693,6 @@ class MediaRouter2ServiceImpl { // For system provider, notify all routers. if (provider == getSystemProvider()) { if (mServiceRef.get() == null) { return; } notifySessionInfoChangedToRouters(getRouterRecords(true), sessionInfo); notifySessionInfoChangedToRouters( getRouterRecords(false), getSystemProvider().getDefaultSessionInfo()); Loading Loading @@ -3833,22 +3813,14 @@ class MediaRouter2ServiceImpl { } private List<RouterRecord> getRouterRecords() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return Collections.emptyList(); } synchronized (service.mLock) { synchronized (mLock) { return new ArrayList<>(mUserRecord.mRouterRecords); } } private List<RouterRecord> getRouterRecords(boolean hasSystemRoutingPermission) { MediaRouter2ServiceImpl service = mServiceRef.get(); List<RouterRecord> routerRecords = new ArrayList<>(); if (service == null) { return routerRecords; } synchronized (service.mLock) { synchronized (mLock) { for (RouterRecord routerRecord : mUserRecord.mRouterRecords) { if (hasSystemRoutingPermission == routerRecord.hasSystemRoutingPermission()) { Loading @@ -3860,11 +3832,7 @@ class MediaRouter2ServiceImpl { } private List<ManagerRecord> getManagerRecords() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return Collections.emptyList(); } synchronized (service.mLock) { synchronized (mLock) { return new ArrayList<>(mUserRecord.mManagerRecords); } } Loading Loading @@ -3949,12 +3917,8 @@ class MediaRouter2ServiceImpl { private void notifyDiscoveryPreferenceChangedToManagers(@NonNull String routerPackageName, @Nullable RouteDiscoveryPreference discoveryPreference) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { managers.add(managerRecord.mManager); } Loading @@ -3972,12 +3936,8 @@ class MediaRouter2ServiceImpl { private void notifyRouteListingPreferenceChangeToManagers( String routerPackageName, @Nullable RouteListingPreference routeListingPreference) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { managers.add(managerRecord.mManager); } Loading @@ -4002,12 +3962,7 @@ class MediaRouter2ServiceImpl { String routerPackageName, String suggestingPackageName, @Nullable List<SuggestedDeviceInfo> suggestedDeviceInfo) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { if (TextUtils.equals(managerRecord.mTargetPackageName, routerPackageName)) { managerRecord.notifyDeviceSuggestionsUpdated( Loading @@ -4024,11 +3979,7 @@ class MediaRouter2ServiceImpl { } private void notifyDeviceSuggestionRequestedOnHandler(String routerPackageName) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { if (TextUtils.equals(managerRecord.mTargetPackageName, routerPackageName)) { managerRecord.notifyDeviceSuggestionRequested(); Loading @@ -4043,19 +3994,15 @@ class MediaRouter2ServiceImpl { } private void updateDiscoveryPreferenceOnHandler() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<RouterRecord> activeRouterRecords; List<RouterRecord> allRouterRecords = getRouterRecords(); boolean areManagersScanning = areManagersScanning(service, getManagerRecords()); boolean areManagersScanning = areManagersScanning(getManagerRecords()); if (areManagersScanning) { activeRouterRecords = allRouterRecords; } else { activeRouterRecords = getIndividuallyActiveRouters(service, allRouterRecords); activeRouterRecords = getIndividuallyActiveRouters(allRouterRecords); } Set<String> activelyScanningPackages = new HashSet<>(); Loading @@ -4074,8 +4021,8 @@ class MediaRouter2ServiceImpl { for (RouterRecord record : activeRouterRecords) { perAppPreferences.put(record.mPackageName, record.mDiscoveryPreference); } if (updateScanningOnUserRecord(service, activelyScanningPackages, newPreference, perAppPreferences)) { if (updateScanningOnUserRecord( activelyScanningPackages, newPreference, perAppPreferences)) { updateDiscoveryPreferenceForProviders(activelyScanningPackages); } } Loading @@ -4089,11 +4036,10 @@ class MediaRouter2ServiceImpl { } private boolean updateScanningOnUserRecord( MediaRouter2ServiceImpl service, Set<String> activelyScanningPackages, RouteDiscoveryPreference newPreference, Map<String, RouteDiscoveryPreference> perAppPreferences) { synchronized (service.mLock) { synchronized (mLock) { if (newPreference.equals(mUserRecord.mCompositeDiscoveryPreference) && perAppPreferences.equals(mUserRecord.mPerAppPreferences) && activelyScanningPackages.equals(mUserRecord.mActivelyScanningPackages)) { Loading Loading @@ -4154,38 +4100,38 @@ class MediaRouter2ServiceImpl { } @NonNull private static List<RouterRecord> getIndividuallyActiveRouters( MediaRouter2ServiceImpl service, List<RouterRecord> allRouterRecords) { if (!service.mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { private List<RouterRecord> getIndividuallyActiveRouters( List<RouterRecord> allRouterRecords) { if (!mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { return Collections.emptyList(); } return allRouterRecords.stream() .filter( record -> isPackageImportanceSufficientForScanning( service, record.mPackageName) isPackageImportanceSufficientForScanning(record.mPackageName) || record.mScanningState == SCANNING_STATE_SCANNING_FULL) .collect(Collectors.toList()); } private static boolean areManagersScanning( MediaRouter2ServiceImpl service, List<ManagerRecord> managerRecords) { if (!service.mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { private boolean areManagersScanning(List<ManagerRecord> managerRecords) { if (!mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { return false; } return managerRecords.stream().anyMatch(manager -> return managerRecords.stream() .anyMatch( manager -> (manager.mScanningState == SCANNING_STATE_WHILE_INTERACTIVE && isPackageImportanceSufficientForScanning(service, && isPackageImportanceSufficientForScanning( manager.mOwnerPackageName)) || manager.mScanningState == SCANNING_STATE_SCANNING_FULL); || manager.mScanningState == SCANNING_STATE_SCANNING_FULL); } private static boolean isPackageImportanceSufficientForScanning( MediaRouter2ServiceImpl service, String packageName) { return service.mActivityManager.getPackageImportance(packageName) private boolean isPackageImportanceSufficientForScanning(String packageName) { return mActivityManager.getPackageImportance(packageName) <= REQUIRED_PACKAGE_IMPORTANCE_FOR_SCANNING; } Loading Loading
services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +36 −90 Original line number Diff line number Diff line Loading @@ -89,7 +89,6 @@ import com.android.server.pm.UserManagerInternal; import com.android.server.statusbar.StatusBarManagerInternal; import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; Loading Loading @@ -2344,11 +2343,7 @@ class MediaRouter2ServiceImpl { UserRecord(int userId, @NonNull Looper looper) { mUserId = userId; mHandler = new UserHandler( /* service= */ MediaRouter2ServiceImpl.this, /* userRecord= */ this, looper); mHandler = new UserHandler(/* userRecord= */ this, looper); } void init() { Loading Loading @@ -2967,11 +2962,8 @@ class MediaRouter2ServiceImpl { } } static final class UserHandler extends Handler implements MediaRoute2ProviderWatcher.Callback, MediaRoute2Provider.Callback { private final WeakReference<MediaRouter2ServiceImpl> mServiceRef; private final class UserHandler extends Handler implements MediaRoute2ProviderWatcher.Callback, MediaRoute2Provider.Callback { private final UserRecord mUserRecord; private final MediaRoute2ProviderWatcher mWatcher; Loading Loading @@ -3025,22 +3017,17 @@ class MediaRouter2ServiceImpl { } // TODO: (In Android S+) Pull out SystemMediaRoute2Provider out of UserHandler. UserHandler( @NonNull MediaRouter2ServiceImpl service, @NonNull UserRecord userRecord, @NonNull Looper looper) { UserHandler(@NonNull UserRecord userRecord, @NonNull Looper looper) { super(looper, /* callback= */ null, /* async= */ true); mServiceRef = new WeakReference<>(service); mUserRecord = userRecord; mSystemProvider = Flags.enableMirroringInMediaRouter2() ? SystemMediaRoute2Provider2.create( service.mContext, UserHandle.of(userRecord.mUserId), looper) mContext, UserHandle.of(userRecord.mUserId), looper) : SystemMediaRoute2Provider.create( service.mContext, UserHandle.of(userRecord.mUserId), looper); mContext, UserHandle.of(userRecord.mUserId), looper); mRouteProviders.add(getSystemProvider()); mWatcher = new MediaRoute2ProviderWatcher(service.mContext, this, this, mUserRecord.mUserId); mWatcher = new MediaRoute2ProviderWatcher(mContext, this, this, mUserRecord.mUserId); } void init() { Loading Loading @@ -3142,12 +3129,8 @@ class MediaRouter2ServiceImpl { } public void maybeUpdateDiscoveryPreferenceForUid(int uid) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } boolean isUidRelevant; synchronized (service.mLock) { synchronized (mLock) { isUidRelevant = mUserRecord.mRouterRecords.stream().anyMatch(router -> router.mUid == uid) | mUserRecord.mManagerRecords.stream() Loading Loading @@ -3710,9 +3693,6 @@ class MediaRouter2ServiceImpl { // For system provider, notify all routers. if (provider == getSystemProvider()) { if (mServiceRef.get() == null) { return; } notifySessionInfoChangedToRouters(getRouterRecords(true), sessionInfo); notifySessionInfoChangedToRouters( getRouterRecords(false), getSystemProvider().getDefaultSessionInfo()); Loading Loading @@ -3833,22 +3813,14 @@ class MediaRouter2ServiceImpl { } private List<RouterRecord> getRouterRecords() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return Collections.emptyList(); } synchronized (service.mLock) { synchronized (mLock) { return new ArrayList<>(mUserRecord.mRouterRecords); } } private List<RouterRecord> getRouterRecords(boolean hasSystemRoutingPermission) { MediaRouter2ServiceImpl service = mServiceRef.get(); List<RouterRecord> routerRecords = new ArrayList<>(); if (service == null) { return routerRecords; } synchronized (service.mLock) { synchronized (mLock) { for (RouterRecord routerRecord : mUserRecord.mRouterRecords) { if (hasSystemRoutingPermission == routerRecord.hasSystemRoutingPermission()) { Loading @@ -3860,11 +3832,7 @@ class MediaRouter2ServiceImpl { } private List<ManagerRecord> getManagerRecords() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return Collections.emptyList(); } synchronized (service.mLock) { synchronized (mLock) { return new ArrayList<>(mUserRecord.mManagerRecords); } } Loading Loading @@ -3949,12 +3917,8 @@ class MediaRouter2ServiceImpl { private void notifyDiscoveryPreferenceChangedToManagers(@NonNull String routerPackageName, @Nullable RouteDiscoveryPreference discoveryPreference) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { managers.add(managerRecord.mManager); } Loading @@ -3972,12 +3936,8 @@ class MediaRouter2ServiceImpl { private void notifyRouteListingPreferenceChangeToManagers( String routerPackageName, @Nullable RouteListingPreference routeListingPreference) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { managers.add(managerRecord.mManager); } Loading @@ -4002,12 +3962,7 @@ class MediaRouter2ServiceImpl { String routerPackageName, String suggestingPackageName, @Nullable List<SuggestedDeviceInfo> suggestedDeviceInfo) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<IMediaRouter2Manager> managers = new ArrayList<>(); synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { if (TextUtils.equals(managerRecord.mTargetPackageName, routerPackageName)) { managerRecord.notifyDeviceSuggestionsUpdated( Loading @@ -4024,11 +3979,7 @@ class MediaRouter2ServiceImpl { } private void notifyDeviceSuggestionRequestedOnHandler(String routerPackageName) { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } synchronized (service.mLock) { synchronized (mLock) { for (ManagerRecord managerRecord : mUserRecord.mManagerRecords) { if (TextUtils.equals(managerRecord.mTargetPackageName, routerPackageName)) { managerRecord.notifyDeviceSuggestionRequested(); Loading @@ -4043,19 +3994,15 @@ class MediaRouter2ServiceImpl { } private void updateDiscoveryPreferenceOnHandler() { MediaRouter2ServiceImpl service = mServiceRef.get(); if (service == null) { return; } List<RouterRecord> activeRouterRecords; List<RouterRecord> allRouterRecords = getRouterRecords(); boolean areManagersScanning = areManagersScanning(service, getManagerRecords()); boolean areManagersScanning = areManagersScanning(getManagerRecords()); if (areManagersScanning) { activeRouterRecords = allRouterRecords; } else { activeRouterRecords = getIndividuallyActiveRouters(service, allRouterRecords); activeRouterRecords = getIndividuallyActiveRouters(allRouterRecords); } Set<String> activelyScanningPackages = new HashSet<>(); Loading @@ -4074,8 +4021,8 @@ class MediaRouter2ServiceImpl { for (RouterRecord record : activeRouterRecords) { perAppPreferences.put(record.mPackageName, record.mDiscoveryPreference); } if (updateScanningOnUserRecord(service, activelyScanningPackages, newPreference, perAppPreferences)) { if (updateScanningOnUserRecord( activelyScanningPackages, newPreference, perAppPreferences)) { updateDiscoveryPreferenceForProviders(activelyScanningPackages); } } Loading @@ -4089,11 +4036,10 @@ class MediaRouter2ServiceImpl { } private boolean updateScanningOnUserRecord( MediaRouter2ServiceImpl service, Set<String> activelyScanningPackages, RouteDiscoveryPreference newPreference, Map<String, RouteDiscoveryPreference> perAppPreferences) { synchronized (service.mLock) { synchronized (mLock) { if (newPreference.equals(mUserRecord.mCompositeDiscoveryPreference) && perAppPreferences.equals(mUserRecord.mPerAppPreferences) && activelyScanningPackages.equals(mUserRecord.mActivelyScanningPackages)) { Loading Loading @@ -4154,38 +4100,38 @@ class MediaRouter2ServiceImpl { } @NonNull private static List<RouterRecord> getIndividuallyActiveRouters( MediaRouter2ServiceImpl service, List<RouterRecord> allRouterRecords) { if (!service.mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { private List<RouterRecord> getIndividuallyActiveRouters( List<RouterRecord> allRouterRecords) { if (!mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { return Collections.emptyList(); } return allRouterRecords.stream() .filter( record -> isPackageImportanceSufficientForScanning( service, record.mPackageName) isPackageImportanceSufficientForScanning(record.mPackageName) || record.mScanningState == SCANNING_STATE_SCANNING_FULL) .collect(Collectors.toList()); } private static boolean areManagersScanning( MediaRouter2ServiceImpl service, List<ManagerRecord> managerRecords) { if (!service.mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { private boolean areManagersScanning(List<ManagerRecord> managerRecords) { if (!mPowerManager.isInteractive() && !Flags.enableScreenOffScanning()) { return false; } return managerRecords.stream().anyMatch(manager -> return managerRecords.stream() .anyMatch( manager -> (manager.mScanningState == SCANNING_STATE_WHILE_INTERACTIVE && isPackageImportanceSufficientForScanning(service, && isPackageImportanceSufficientForScanning( manager.mOwnerPackageName)) || manager.mScanningState == SCANNING_STATE_SCANNING_FULL); || manager.mScanningState == SCANNING_STATE_SCANNING_FULL); } private static boolean isPackageImportanceSufficientForScanning( MediaRouter2ServiceImpl service, String packageName) { return service.mActivityManager.getPackageImportance(packageName) private boolean isPackageImportanceSufficientForScanning(String packageName) { return mActivityManager.getPackageImportance(packageName) <= REQUIRED_PACKAGE_IMPORTANCE_FOR_SCANNING; } Loading