From c472cb5eb6cb0f11c41cc07af09be51f5f04a6d9 Mon Sep 17 00:00:00 2001 From: Bishoy Gendy Date: Thu, 17 Nov 2022 16:13:56 +0000 Subject: [PATCH] Fix propagation of RouteDiscoveryPreferences active scan flag - This caused provider apps to be always scanning to make sure the UI has up to date information. This can result in unnecessary network scans, which can impact other devices on the network's ability to enter sleep mode for power savings, which is a critical issue, especially in European markets where regulations are strict around requirements for TV sleep modes. - The solution was to propagate the flag through the framework as for providers (isActiveScan = isAnyRouterScanning || isManagerScanning); Bug: 250024338 Test: manually by adding logs in onDiscoveryRequestChanged in the MediaRouting Androidx demo Change-Id: I8dece5f5792dccb8df3db497b3b5bdceedede6a3 --- .../android/server/media/MediaRouter2ServiceImpl.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index f5ec880ed2356..11e27049d2b62 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -2443,10 +2443,9 @@ class MediaRouter2ServiceImpl { List routerRecords = getRouterRecords(); List managerRecords = getManagerRecords(); - boolean shouldBindProviders = false; - + boolean isManagerScanning = false; if (service.mPowerManager.isInteractive()) { - boolean isManagerScanning = managerRecords.stream().anyMatch(manager -> + isManagerScanning = managerRecords.stream().anyMatch(manager -> manager.mIsScanning && service.mActivityManager .getPackageImportance(manager.mPackageName) <= PACKAGE_IMPORTANCE_FOR_DISCOVERY); @@ -2455,7 +2454,6 @@ class MediaRouter2ServiceImpl { discoveryPreferences = routerRecords.stream() .map(record -> record.mDiscoveryPreference) .collect(Collectors.toList()); - shouldBindProviders = true; } else { discoveryPreferences = routerRecords.stream().filter(record -> service.mActivityManager.getPackageImportance(record.mPackageName) @@ -2468,7 +2466,7 @@ class MediaRouter2ServiceImpl { for (MediaRoute2Provider provider : mRouteProviders) { if (provider instanceof MediaRoute2ProviderServiceProxy) { ((MediaRoute2ProviderServiceProxy) provider) - .setManagerScanning(shouldBindProviders); + .setManagerScanning(isManagerScanning); } } @@ -2484,7 +2482,7 @@ class MediaRouter2ServiceImpl { activeScan |= preference.shouldPerformActiveScan(); } RouteDiscoveryPreference newPreference = new RouteDiscoveryPreference.Builder( - List.copyOf(preferredFeatures), activeScan).build(); + List.copyOf(preferredFeatures), activeScan || isManagerScanning).build(); synchronized (service.mLock) { if (newPreference.equals(mUserRecord.mCompositeDiscoveryPreference)) {