| Index: sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java
|
| diff --git a/sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java b/sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java
|
| index 2b212066c32792727342dc23632dbca91b19f9ad..612a470a899bd161390a0568f4013ea7de26c687 100644
|
| --- a/sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java
|
| +++ b/sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java
|
| @@ -13,6 +13,7 @@ import android.util.Log;
|
|
|
| import com.google.common.annotations.VisibleForTesting;
|
| import com.google.common.base.Preconditions;
|
| +import com.google.ipc.invalidation.external.client.types.ObjectId;
|
|
|
| import java.util.Collection;
|
| import java.util.HashSet;
|
| @@ -55,6 +56,13 @@ public class InvalidationPreferences {
|
| @VisibleForTesting
|
| public static final String SYNC_TANGO_TYPES = "sync_tango_types";
|
|
|
| + /**
|
| + * Shared preference key to store tango object ids for additional objects that we want to
|
| + * register for.
|
| + */
|
| + @VisibleForTesting
|
| + public static final String TANGO_OBJECT_IDS = "tango_object_ids";
|
| +
|
| /** Shared preference key to store the name of the account in use. */
|
| @VisibleForTesting
|
| public static final String SYNC_ACCT_NAME = "sync_acct_name";
|
| @@ -106,6 +114,34 @@ public class InvalidationPreferences {
|
| editContext.editor.putStringSet(PrefKeys.SYNC_TANGO_TYPES, selectedTypesSet);
|
| }
|
|
|
| + /** Returns the saved non-sync object ids, or {@code null} if none exist. */
|
| + @Nullable
|
| + public Set<ObjectId> getSavedObjectIds() {
|
| + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
| + Set<String> objectIdStrings = preferences.getStringSet(PrefKeys.TANGO_OBJECT_IDS, null);
|
| + if (objectIdStrings == null) {
|
| + return null;
|
| + }
|
| + Set<ObjectId> objectIds = new HashSet<ObjectId>(objectIdStrings.size());
|
| + for (String objectIdString : objectIdStrings) {
|
| + ObjectId objectId = getObjectId(objectIdString);
|
| + if (objectId != null) {
|
| + objectIds.add(objectId);
|
| + }
|
| + }
|
| + return objectIds;
|
| + }
|
| +
|
| + /** Sets the saved non-sync object ids */
|
| + public void setObjectIds(EditContext editContext, Collection<ObjectId> objectIds) {
|
| + Preconditions.checkNotNull(objectIds);
|
| + Set<String> objectIdStrings = new HashSet<String>(objectIds.size());
|
| + for (ObjectId objectId : objectIds) {
|
| + objectIdStrings.add(getObjectIdString(objectId));
|
| + }
|
| + editContext.editor.putStringSet(PrefKeys.TANGO_OBJECT_IDS, objectIdStrings);
|
| + }
|
| +
|
| /** Returns the saved account, or {@code null} if none exists. */
|
| @Nullable public Account getSavedSyncedAccount() {
|
| SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
| @@ -138,4 +174,29 @@ public class InvalidationPreferences {
|
| editContext.editor.putString(PrefKeys.SYNC_TANGO_INTERNAL_STATE,
|
| Base64.encodeToString(state, Base64.DEFAULT));
|
| }
|
| +
|
| + /** Converts the given object id to a string for storage in preferences. */
|
| + private String getObjectIdString(ObjectId objectId) {
|
| + return objectId.getSource() + ":" + new String(objectId.getName());
|
| + }
|
| +
|
| + /**
|
| + * Converts the given object id string stored in preferences to an object id.
|
| + * Returns null if the string does not represent a valid object id.
|
| + */
|
| + private ObjectId getObjectId(String objectIdString) {
|
| + int separatorPos = objectIdString.indexOf(':');
|
| + // Ensure that the separator is surrounded by at least one character on each side.
|
| + if (separatorPos < 1 || separatorPos == objectIdString.length() - 1) {
|
| + return null;
|
| + }
|
| + int objectSource;
|
| + try {
|
| + objectSource = Integer.parseInt(objectIdString.substring(0, separatorPos));
|
| + } catch (NumberFormatException e) {
|
| + return null;
|
| + }
|
| + byte[] objectName = objectIdString.substring(separatorPos + 1).getBytes();
|
| + return ObjectId.newInstance(objectSource, objectName);
|
| + }
|
| }
|
|
|