summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-11-04 18:45:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-04 18:45:14 +0000
commit39d2a64be47bdecaedc52e4b7a86f2e445863275 (patch)
tree109e723e9fd2729eaba68ae67b96b2b02ff624d3
parent48cba7c99a5eb2de425f4713e366e37bf0c8eee5 (diff)
parent44ff13e4e951478fcd4450761298ad24580a10e0 (diff)
Merge "Do not forget to sendToTarget() in StorageMS"
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java32
1 files 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 fcfee5b702ac..6b6351f9b909 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();
}
}
}