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 |
deleted file mode 100644 |
index 2255cff917ffad0e0c1b95eb88fef83996325ddb..0000000000000000000000000000000000000000 |
--- a/sync/android/java/src/org/chromium/sync/notifier/InvalidationPreferences.java |
+++ /dev/null |
@@ -1,206 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.sync.notifier; |
- |
-import android.accounts.Account; |
-import android.content.SharedPreferences; |
-import android.util.Base64; |
- |
-import com.google.ipc.invalidation.external.client.types.ObjectId; |
- |
-import org.chromium.base.ContextUtils; |
-import org.chromium.base.Log; |
-import org.chromium.base.VisibleForTesting; |
- |
-import java.util.Collection; |
-import java.util.Collections; |
-import java.util.HashSet; |
-import java.util.Set; |
- |
-import javax.annotation.Nullable; |
- |
-/** |
- * Class to manage the preferences used by the invalidation client. |
- * <p> |
- * This class provides methods to read and write the preferences used by the invalidation client. |
- * <p> |
- * To read a preference, call the appropriate {@code get...} method. |
- * <p> |
- * To write a preference, first call {@link #edit} to obtain a {@link EditContext}. Then, make |
- * one or more calls to a {@code set...} method, providing the same edit context to each call. |
- * Finally, call {@link #commit(EditContext)} to save the changes to stable storage. |
- * |
- * @author dsmyers@google.com (Daniel Myers) |
- */ |
-public class InvalidationPreferences { |
- /** |
- * Wrapper around a {@link android.content.SharedPreferences.Editor} for the preferences. |
- * Used to avoid exposing raw preference objects to users of this class. |
- */ |
- public static class EditContext { |
- private final SharedPreferences.Editor mEditor; |
- |
- EditContext() { |
- mEditor = ContextUtils.getAppSharedPreferences().edit(); |
- } |
- } |
- |
- /** |
- * Internal class to wrap constants for preference keys. |
- */ |
- @VisibleForTesting |
- public static class PrefKeys { |
- /** |
- * Shared preference key to store the invalidation types that we want to register |
- * for. |
- */ |
- @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"; |
- |
- /** Shared preference key to store the type of account in use. */ |
- static final String SYNC_ACCT_TYPE = "sync_acct_type"; |
- |
- /** Shared preference key to store internal notification client library state. */ |
- static final String SYNC_TANGO_INTERNAL_STATE = "sync_tango_internal_state"; |
- } |
- |
- private static final String TAG = "InvalidationPreferences"; |
- |
- // Only one commit call can be in progress at a time. |
- private static final Object sCommitLock = new Object(); |
- |
- /** Returns a new {@link EditContext} to modify the preferences managed by this class. */ |
- public EditContext edit() { |
- return new EditContext(); |
- } |
- |
- /** |
- * Applies the changes accumulated in {@code editContext}. Returns whether they were |
- * successfully written. |
- * <p> |
- * NOTE: this method performs blocking I/O and must not be called from the UI thread. |
- */ |
- public boolean commit(EditContext editContext) { |
- synchronized (sCommitLock) { |
- if (!editContext.mEditor.commit()) { |
- Log.w(TAG, "Failed to commit invalidation preferences"); |
- return false; |
- } |
- return true; |
- } |
- } |
- |
- /** Returns the saved sync types, or {@code null} if none exist. */ |
- @Nullable public Set<String> getSavedSyncedTypes() { |
- SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
- Set<String> syncedTypes = preferences.getStringSet(PrefKeys.SYNC_TANGO_TYPES, null); |
- // Wrap with unmodifiableSet to ensure it's never modified. See crbug.com/568369. |
- return syncedTypes == null ? null : Collections.unmodifiableSet(syncedTypes); |
- } |
- |
- /** Sets the saved sync types to {@code syncTypes} in {@code editContext}. */ |
- public void setSyncTypes(EditContext editContext, Collection<String> syncTypes) { |
- if (syncTypes == null) throw new NullPointerException("syncTypes is null."); |
- Set<String> selectedTypesSet = new HashSet<String>(syncTypes); |
- editContext.mEditor.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 = ContextUtils.getAppSharedPreferences(); |
- 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) { |
- if (objectIds == null) throw new NullPointerException("objectIds is null."); |
- Set<String> objectIdStrings = new HashSet<String>(objectIds.size()); |
- for (ObjectId objectId : objectIds) { |
- objectIdStrings.add(getObjectIdString(objectId)); |
- } |
- editContext.mEditor.putStringSet(PrefKeys.TANGO_OBJECT_IDS, objectIdStrings); |
- } |
- |
- /** Returns the saved account, or {@code null} if none exists. */ |
- @Nullable public Account getSavedSyncedAccount() { |
- SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
- String accountName = preferences.getString(PrefKeys.SYNC_ACCT_NAME, null); |
- String accountType = preferences.getString(PrefKeys.SYNC_ACCT_TYPE, null); |
- if (accountName == null || accountType == null) { |
- return null; |
- } |
- return new Account(accountName, accountType); |
- } |
- |
- /** Sets the saved account to {@code account} in {@code editContext}. */ |
- public void setAccount(EditContext editContext, Account account) { |
- editContext.mEditor.putString(PrefKeys.SYNC_ACCT_NAME, account.name); |
- editContext.mEditor.putString(PrefKeys.SYNC_ACCT_TYPE, account.type); |
- } |
- |
- /** Returns the notification client internal state. */ |
- @Nullable public byte[] getInternalNotificationClientState() { |
- SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
- String base64State = preferences.getString(PrefKeys.SYNC_TANGO_INTERNAL_STATE, null); |
- if (base64State == null) { |
- return null; |
- } |
- return Base64.decode(base64State, Base64.DEFAULT); |
- } |
- |
- /** Sets the notification client internal state to {@code state}. */ |
- public void setInternalNotificationClientState(EditContext editContext, byte[] state) { |
- editContext.mEditor.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); |
- } |
-} |