summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matthew Williams <mjwilliams@google.com> 2013-11-12 14:41:02 -0800
committer Matthew Williams <mjwilliams@google.com> 2013-11-13 18:17:54 -0800
commita7456e46f4cb64524386b22e2596ea93c244c16f (patch)
treed9aabcce03de71591a2c0ab50447bd9eeb4a9cb8
parentc641de017ae0b15bbc13f43fd14fca6b1523ec02 (diff)
SyncManager now returns copy on getCurrentSyncs()
Bug:11559103 Added a new getCurrentSyncsCopy() that is public. The other version is needed for internal SSE calls. Change-Id: I0287f039a6f75abf04b65b85cb30f78353aeef4f
-rw-r--r--core/java/android/content/SyncInfo.java8
-rw-r--r--services/java/com/android/server/content/ContentService.java2
-rw-r--r--services/java/com/android/server/content/SyncStorageEngine.java36
3 files changed, 37 insertions, 9 deletions
diff --git a/core/java/android/content/SyncInfo.java b/core/java/android/content/SyncInfo.java
index 0284882963c7..cffc653e44ef 100644
--- a/core/java/android/content/SyncInfo.java
+++ b/core/java/android/content/SyncInfo.java
@@ -55,6 +55,14 @@ public class SyncInfo implements Parcelable {
}
/** @hide */
+ public SyncInfo(SyncInfo other) {
+ this.authorityId = other.authorityId;
+ this.account = new Account(other.account.name, other.account.type);
+ this.authority = other.authority;
+ this.startTime = other.startTime;
+ }
+
+ /** @hide */
public int describeContents() {
return 0;
}
diff --git a/services/java/com/android/server/content/ContentService.java b/services/java/com/android/server/content/ContentService.java
index cb35ef11c6f6..023bf2b20614 100644
--- a/services/java/com/android/server/content/ContentService.java
+++ b/services/java/com/android/server/content/ContentService.java
@@ -660,7 +660,7 @@ public final class ContentService extends IContentService.Stub {
int userId = UserHandle.getCallingUserId();
long identityToken = clearCallingIdentity();
try {
- return getSyncManager().getSyncStorageEngine().getCurrentSyncs(userId);
+ return getSyncManager().getSyncStorageEngine().getCurrentSyncsCopy(userId);
} finally {
restoreCallingIdentity(identityToken);
}
diff --git a/services/java/com/android/server/content/SyncStorageEngine.java b/services/java/com/android/server/content/SyncStorageEngine.java
index 41ef22959be5..5ebf9ea9ba5e 100644
--- a/services/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/java/com/android/server/content/SyncStorageEngine.java
@@ -1295,20 +1295,40 @@ public class SyncStorageEngine extends Handler {
}
/**
- * Return a list of the currently active syncs. Note that the returned items are the
- * real, live active sync objects, so be careful what you do with it.
+ * Return a list of the currently active syncs. Note that the returned
+ * items are the real, live active sync objects, so be careful what you do
+ * with it.
*/
- public List<SyncInfo> getCurrentSyncs(int userId) {
+ private List<SyncInfo> getCurrentSyncs(int userId) {
synchronized (mAuthorities) {
- ArrayList<SyncInfo> syncs = mCurrentSyncs.get(userId);
- if (syncs == null) {
- syncs = new ArrayList<SyncInfo>();
- mCurrentSyncs.put(userId, syncs);
+ return getCurrentSyncsLocked(userId);
+ }
+ }
+
+ /**
+ * @return a copy of the current syncs data structure. Will not return
+ * null.
+ */
+ public List<SyncInfo> getCurrentSyncsCopy(int userId) {
+ synchronized (mAuthorities) {
+ final List<SyncInfo> syncs = getCurrentSyncsLocked(userId);
+ final List<SyncInfo> syncsCopy = new ArrayList<SyncInfo>();
+ for (SyncInfo sync : syncs) {
+ syncsCopy.add(new SyncInfo(sync));
}
- return syncs;
+ return syncsCopy;
}
}
+ private List<SyncInfo> getCurrentSyncsLocked(int userId) {
+ ArrayList<SyncInfo> syncs = mCurrentSyncs.get(userId);
+ if (syncs == null) {
+ syncs = new ArrayList<SyncInfo>();
+ mCurrentSyncs.put(userId, syncs);
+ }
+ return syncs;
+ }
+
/**
* Return an array of the current sync status for all authorities. Note
* that the objects inside the array are the real, live status objects,