Clear preferred feature when unregistering MediaRouter2
MediaRouter2Managers' preferred feature didn't get cleared even when the
MediaRouter2 is unregistered/died. As a result, when an app is
reinstalled/relaunched, the routes for the previous process are still
shown in the MediaRouter2Manager.
This CL fixes the problem.
Bug: 158824569
Test: Passed CTS and mediaroutertest
Also tested with reinstalling support7Demos.
Change-Id: Ib5d84c41862177af32931e0d69b02f461105bba6
This commit is contained in:
@@ -576,6 +576,10 @@ public final class MediaRouter2Manager {
|
||||
}
|
||||
|
||||
void updatePreferredFeatures(String packageName, List<String> preferredFeatures) {
|
||||
if (preferredFeatures == null) {
|
||||
mPreferredFeaturesMap.remove(packageName);
|
||||
return;
|
||||
}
|
||||
List<String> prevFeatures = mPreferredFeaturesMap.put(packageName, preferredFeatures);
|
||||
if ((prevFeatures == null && preferredFeatures.size() == 0)
|
||||
|| Objects.equals(preferredFeatures, prevFeatures)) {
|
||||
|
||||
@@ -598,6 +598,10 @@ class MediaRouter2ServiceImpl {
|
||||
|
||||
UserRecord userRecord = routerRecord.mUserRecord;
|
||||
userRecord.mRouterRecords.remove(routerRecord);
|
||||
routerRecord.mUserRecord.mHandler.sendMessage(
|
||||
obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
|
||||
routerRecord.mUserRecord.mHandler,
|
||||
routerRecord.mPackageName, /* preferredFeatures=*/ null));
|
||||
userRecord.mHandler.sendMessage(
|
||||
obtainMessage(UserHandler::updateDiscoveryPreferenceOnHandler,
|
||||
userRecord.mHandler));
|
||||
@@ -613,7 +617,9 @@ class MediaRouter2ServiceImpl {
|
||||
routerRecord.mDiscoveryPreference = discoveryRequest;
|
||||
routerRecord.mUserRecord.mHandler.sendMessage(
|
||||
obtainMessage(UserHandler::notifyPreferredFeaturesChangedToManagers,
|
||||
routerRecord.mUserRecord.mHandler, routerRecord));
|
||||
routerRecord.mUserRecord.mHandler,
|
||||
routerRecord.mPackageName,
|
||||
routerRecord.mDiscoveryPreference.getPreferredFeatures()));
|
||||
routerRecord.mUserRecord.mHandler.sendMessage(
|
||||
obtainMessage(UserHandler::updateDiscoveryPreferenceOnHandler,
|
||||
routerRecord.mUserRecord.mHandler));
|
||||
@@ -1954,7 +1960,8 @@ class MediaRouter2ServiceImpl {
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyPreferredFeaturesChangedToManagers(@NonNull RouterRecord routerRecord) {
|
||||
private void notifyPreferredFeaturesChangedToManagers(@NonNull String routerPackageName,
|
||||
@Nullable List<String> preferredFeatures) {
|
||||
MediaRouter2ServiceImpl service = mServiceRef.get();
|
||||
if (service == null) {
|
||||
return;
|
||||
@@ -1967,8 +1974,7 @@ class MediaRouter2ServiceImpl {
|
||||
}
|
||||
for (IMediaRouter2Manager manager : managers) {
|
||||
try {
|
||||
manager.notifyPreferredFeaturesChanged(routerRecord.mPackageName,
|
||||
routerRecord.mDiscoveryPreference.getPreferredFeatures());
|
||||
manager.notifyPreferredFeaturesChanged(routerPackageName, preferredFeatures);
|
||||
} catch (RemoteException ex) {
|
||||
Slog.w(TAG, "Failed to notify preferred features changed."
|
||||
+ " Manager probably died.", ex);
|
||||
|
||||
Reference in New Issue
Block a user