Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7456e46 authored by Matthew Williams's avatar Matthew Williams
Browse files

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
parent c641de01
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -54,6 +54,14 @@ public class SyncInfo implements Parcelable {
        this.startTime = startTime;
    }

    /** @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;
+1 −1
Original line number Diff line number Diff line
@@ -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);
        }
+28 −8
Original line number Diff line number Diff line
@@ -1295,11 +1295,32 @@ 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) {
            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 syncsCopy;
        }
    }

    private List<SyncInfo> getCurrentSyncsLocked(int userId) {
        ArrayList<SyncInfo> syncs = mCurrentSyncs.get(userId);
        if (syncs == null) {
            syncs = new ArrayList<SyncInfo>();
@@ -1307,7 +1328,6 @@ public class SyncStorageEngine extends Handler {
        }
        return syncs;
    }
    }

    /**
     * Return an array of the current sync status for all authorities.  Note