From 44ff13e4e951478fcd4450761298ad24580a10e0 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Fri, 4 Nov 2022 14:29:27 +0100 Subject: [PATCH] Do not forget to sendToTarget() in StorageMS Add missing sendToTarget() call in StorageMananagerService#registerCloudProviderChangeListener Bug: 218361620 Test: atest CtsPhotoPickerTest Change-Id: I7e893cb0e71bf0a2a2ec411f4e90a616a941a714 --- .../android/server/StorageManagerService.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index fcfee5b702acd..6b6351f9b9092 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -802,12 +802,20 @@ class StorageManagerService extends IStorageManager.Stub break; } case H_CLOUD_MEDIA_PROVIDER_CHANGED: { - final Object listener = msg.obj; - if (listener instanceof StorageManagerInternal.CloudProviderChangeListener) { - notifyCloudMediaProviderChangedAsync( - (StorageManagerInternal.CloudProviderChangeListener) listener); + // We send this message in two cases: + // 1. After the cloud provider has been set/updated for a user. + // In this case Message's #arg1 is set to UserId, and #obj is set to the + // authority of the new cloud provider. + // 2. After a new CloudProviderChangeListener is registered. + // In this case Message's #obj is set to the CloudProviderChangeListener. + if (msg.obj instanceof StorageManagerInternal.CloudProviderChangeListener) { + final StorageManagerInternal.CloudProviderChangeListener listener = + (StorageManagerInternal.CloudProviderChangeListener) msg.obj; + notifyCloudMediaProviderChangedAsync(listener); } else { - onCloudMediaProviderChangedAsync(msg.arg1); + final int userId = msg.arg1; + final String authority = (String) msg.obj; + onCloudMediaProviderChangedAsync(userId, authority); } break; } @@ -1686,17 +1694,15 @@ class StorageManagerService extends IStorageManager.Stub @NonNull StorageManagerInternal.CloudProviderChangeListener listener) { synchronized (mCloudMediaProviders) { for (int i = mCloudMediaProviders.size() - 1; i >= 0; --i) { - listener.onCloudProviderChanged( - mCloudMediaProviders.keyAt(i), mCloudMediaProviders.valueAt(i)); + final int userId = mCloudMediaProviders.keyAt(i); + final String authority = mCloudMediaProviders.valueAt(i); + listener.onCloudProviderChanged(userId, authority); } } } - private void onCloudMediaProviderChangedAsync(int userId) { - final String authority; - synchronized (mCloudMediaProviders) { - authority = mCloudMediaProviders.get(userId); - } + private void onCloudMediaProviderChangedAsync( + @UserIdInt int userId, @Nullable String authority) { for (StorageManagerInternal.CloudProviderChangeListener listener : mStorageManagerInternal.mCloudProviderChangeListeners) { listener.onCloudProviderChanged(userId, authority); @@ -4831,7 +4837,7 @@ class StorageManagerService extends IStorageManager.Stub public void registerCloudProviderChangeListener( @NonNull StorageManagerInternal.CloudProviderChangeListener listener) { mCloudProviderChangeListeners.add(listener); - mHandler.obtainMessage(H_CLOUD_MEDIA_PROVIDER_CHANGED, listener); + mHandler.obtainMessage(H_CLOUD_MEDIA_PROVIDER_CHANGED, listener).sendToTarget(); } } }