From 1c26dd109a9ba1e1acb673b63033475dd787f7db Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 25 Jun 2019 05:40:55 +0200 Subject: [PATCH] Removed old-school key/value backup. --- .../io/backup/PreferenceBackupHelperTest.java | 210 ----------------- myTracks/src/main/AndroidManifest.xml | 1 - .../io/backup/BackupPreferencesListener.java | 40 ---- .../io/backup/MyTracksBackupAgent.java | 102 -------- .../io/backup/PreferenceBackupHelper.java | 219 ------------------ .../settings/AbstractSettingsActivity.java | 18 -- 6 files changed, 590 deletions(-) delete mode 100644 myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java delete mode 100644 myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/BackupPreferencesListener.java delete mode 100644 myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/MyTracksBackupAgent.java delete mode 100644 myTracks/src/main/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelper.java diff --git a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java b/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java deleted file mode 100644 index bd8f9f8d5..000000000 --- a/myTracks/src/androidTest/java/com/google/android/apps/mytracks/io/backup/PreferenceBackupHelperTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.android.apps.mytracks.io.backup; - -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.test.AndroidTestCase; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * Tests for {@link PreferenceBackupHelper}. - * - * @author Rodrigo Damazio - */ -public class PreferenceBackupHelperTest extends AndroidTestCase { - private Map preferenceValues; - private SharedPreferences preferences; - private PreferenceBackupHelper preferenceBackupHelper; - - /** - * Mock shared preferences editor which does not persist state. - */ - private class MockPreferenceEditor implements SharedPreferences.Editor { - private Map newPreferences = new HashMap(preferenceValues); - - @Override - public Editor clear() { - newPreferences.clear(); - return this; - } - - @Override - public boolean commit() { - apply(); - return true; - } - - @Override - public void apply() { - preferenceValues = newPreferences; - } - - @Override - public Editor putBoolean(String key, boolean value) { - return put(key, value); - } - - @Override - public Editor putFloat(String key, float value) { - return put(key, value); - } - - @Override - public Editor putInt(String key, int value) { - return put(key, value); - } - - @Override - public Editor putLong(String key, long value) { - return put(key, value); - } - - @Override - public Editor putString(String key, String value) { - return put(key, value); - } - - public Editor putStringSet(String key, Set value) { - return put(key, value); - } - - private Editor put(String key, T value) { - newPreferences.put(key, value); - return this; - } - - @Override - public Editor remove(String key) { - newPreferences.remove(key); - return this; - } - } - - /** - * Mock shared preferences which does not persist state. - */ - private class MockPreferences implements SharedPreferences { - @Override - public boolean contains(String key) { - return preferenceValues.containsKey(key); - } - - @Override - public Editor edit() { - return new MockPreferenceEditor(); - } - - @Override - public Map getAll() { - return preferenceValues; - } - - @Override - public boolean getBoolean(String key, boolean defValue) { - return get(key, defValue); - } - - @Override - public float getFloat(String key, float defValue) { - return get(key, defValue); - } - - @Override - public int getInt(String key, int defValue) { - return get(key, defValue); - } - - @Override - public long getLong(String key, long defValue) { - return get(key, defValue); - } - - @Override - public String getString(String key, String defValue) { - return get(key, defValue); - } - - public Set getStringSet(String key, Set defValue) { - return get(key, defValue); - } - - @Override - public void registerOnSharedPreferenceChangeListener( - OnSharedPreferenceChangeListener listener) { - throw new UnsupportedOperationException(); - } - - @Override - public void unregisterOnSharedPreferenceChangeListener( - OnSharedPreferenceChangeListener listener) { - throw new UnsupportedOperationException(); - } - - @SuppressWarnings("unchecked") - private T get(String key, T defValue) { - Object value = preferenceValues.get(key); - if (value == null) return defValue; - return (T) value; - } - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - - preferenceValues = new HashMap(); - preferences = new MockPreferences(); - preferenceBackupHelper = new PreferenceBackupHelper(getContext()); - } - - public void testExportImportPreferences() throws Exception { - // Populate with some initial values - Editor editor = preferences.edit(); - editor.clear(); - editor.putBoolean("bool1", true); - editor.putBoolean("bool2", false); - editor.putFloat("flt1", 3.14f); - editor.putInt("int1", 42); - editor.putLong("long1", 123456789L); - editor.putString("str1", "lolcat"); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); - - // Export it - byte[] exported = preferenceBackupHelper.exportPreferences(preferences); - - // Mess with the previous values - editor = preferences.edit(); - editor.clear(); - editor.putString("str2", "Shouldn't be there after restore"); - editor.putBoolean("bool2", true); - ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor); - - // Import it back - preferenceBackupHelper.importPreferences(exported, preferences); - - assertFalse(preferences.contains("str2")); - assertTrue(preferences.getBoolean("bool1", false)); - assertFalse(preferences.getBoolean("bool2", true)); - assertEquals(3.14f, preferences.getFloat("flt1", 0.0f)); - assertEquals(42, preferences.getInt("int1", 0)); - assertEquals(123456789L, preferences.getLong("long1", 0)); - assertEquals("lolcat", preferences.getString("str1", "")); - } -} diff --git a/myTracks/src/main/AndroidManifest.xml b/myTracks/src/main/AndroidManifest.xml index 1d2caf8fc..704d94c73 100644 --- a/myTracks/src/main/AndroidManifest.xml +++ b/myTracks/src/main/AndroidManifest.xml @@ -128,7 +128,6 @@ limitations under the License. android:xlargeScreens="true" /> doNotBackup; - - public PreferenceBackupHelper(Context context) { - doNotBackup = new HashSet(); - doNotBackup.add(context.getString(R.string.activity_recognition_type_key)); - doNotBackup.add(context.getString(R.string.ant_bike_cadence_sensor_id_key)); - doNotBackup.add(context.getString(R.string.ant_combined_bike_sensor_id_key)); - doNotBackup.add(context.getString(R.string.ant_heart_rate_monitor_id_key)); - doNotBackup.add(context.getString(R.string.ant_speed_distance_monitor_id_key)); - doNotBackup.add(context.getString(R.string.auto_resume_track_current_retry_key)); - doNotBackup.add(context.getString(R.string.bluetooth_sensor_key)); - doNotBackup.add(context.getString(R.string.drive_deleted_list_key)); - doNotBackup.add(context.getString(R.string.drive_edited_list_key)); - doNotBackup.add(context.getString(R.string.drive_largest_change_id_key)); - doNotBackup.add(context.getString(R.string.drive_sync_key)); - doNotBackup.add(context.getString(R.string.google_account_key)); - doNotBackup.add(context.getString(R.string.recording_track_id_key)); - doNotBackup.add(context.getString(R.string.recording_track_paused_key)); - doNotBackup.add(context.getString(R.string.share_track_account_key)); - doNotBackup.add(context.getString(R.string.weight_key)); - } - - /** - * Exports all shared preferences from the given object as a byte array. - * - * @param preferences the preferences to export - * @return the corresponding byte array - * @throws IOException if there are any errors while writing to the byte array - */ - public byte[] exportPreferences(SharedPreferences preferences) throws IOException { - ByteArrayOutputStream bufStream = new ByteArrayOutputStream(BUFFER_SIZE); - DataOutputStream outWriter = new DataOutputStream(bufStream); - exportPreferences(preferences, outWriter); - - return bufStream.toByteArray(); - } - - /** - * Exports all shared preferences from the given object into the given output - * stream. - * - * @param preferences the preferences to export - * @param outWriter the stream to write them to - * @throws IOException if there are any errors while writing the output - */ - public void exportPreferences(SharedPreferences preferences, DataOutputStream outWriter) - throws IOException { - Map values = preferences.getAll(); - - for (String name : doNotBackup) { - values.remove(name); - } - outWriter.writeInt(values.size()); - for (Map.Entry entry : values.entrySet()) { - writePreference(entry.getKey(), entry.getValue(), outWriter); - } - outWriter.flush(); - } - - /** - * Imports all preferences from the given byte array. - * - * @param data the byte array to read preferences from - * @param preferences the shared preferences to edit - * @throws IOException if there are any errors while reading - */ - public void importPreferences(byte[] data, SharedPreferences preferences) throws IOException { - ByteArrayInputStream bufStream = new ByteArrayInputStream(data); - DataInputStream reader = new DataInputStream(bufStream); - - importPreferences(reader, preferences); - } - - /** - * Imports all preferences from the given stream. - * - * @param reader the stream to read from - * @param preferences the shared preferences to edit - * @throws IOException if there are any errors while reading - */ - @SuppressLint("CommitPrefEdits") - public void importPreferences(DataInputStream reader, SharedPreferences preferences) - throws IOException { - Editor editor = preferences.edit(); - editor.clear(); - - int numPreferences = reader.readInt(); - for (int i = 0; i < numPreferences; i++) { - String name = reader.readUTF(); - byte typeId = reader.readByte(); - readAndSetPreference(name, typeId, reader, editor); - } - editor.apply(); - } - - /** - * Reads a single preference and sets it into the given editor. - * - * @param name the name of the preference to read - * @param typeId the type ID of the preference to read - * @param reader the reader to read from - * @param editor the editor to set the preference in - * @throws IOException if there are errors while reading - */ - private void readAndSetPreference(String name, byte typeId, DataInputStream reader, Editor editor) - throws IOException { - - boolean save = true; - if (doNotBackup.contains(name)) { - save = false; - } - switch (typeId) { - case ContentTypeIds.BOOLEAN_TYPE_ID: - boolean booleanValue = reader.readBoolean(); - if (save) { - editor.putBoolean(name, booleanValue); - } - return; - case ContentTypeIds.LONG_TYPE_ID: - long longValue = reader.readLong(); - if (save) { - editor.putLong(name, longValue); - } - return; - case ContentTypeIds.FLOAT_TYPE_ID: - float floatValue = reader.readFloat(); - if (save) { - editor.putFloat(name, floatValue); - } - return; - case ContentTypeIds.INT_TYPE_ID: - int intValue = reader.readInt(); - if (save) { - editor.putInt(name, intValue); - } - return; - case ContentTypeIds.STRING_TYPE_ID: - String utfValue = reader.readUTF(); - if (save) { - editor.putString(name, utfValue); - } - return; - } - } - - /** - * Writes a single preference. - * - * @param name the name of the preference to write - * @param value the correctly-typed value of the preference - * @param writer the writer to write to - * @throws IOException if there are errors while writing - */ - private void writePreference(String name, Object value, DataOutputStream writer) - throws IOException { - writer.writeUTF(name); - - if (value instanceof Boolean) { - writer.writeByte(ContentTypeIds.BOOLEAN_TYPE_ID); - writer.writeBoolean((Boolean) value); - } else if (value instanceof Integer) { - writer.writeByte(ContentTypeIds.INT_TYPE_ID); - writer.writeInt((Integer) value); - } else if (value instanceof Long) { - writer.writeByte(ContentTypeIds.LONG_TYPE_ID); - writer.writeLong((Long) value); - } else if (value instanceof Float) { - writer.writeByte(ContentTypeIds.FLOAT_TYPE_ID); - writer.writeFloat((Float) value); - } else if (value instanceof String) { - writer.writeByte(ContentTypeIds.STRING_TYPE_ID); - writer.writeUTF((String) value); - } else { - throw new IllegalArgumentException("Type " + value.getClass().getName() + " not supported"); - } - } -} diff --git a/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java b/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java index f4e5f6b2a..911bf4403 100644 --- a/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java +++ b/myTracks/src/main/java/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java @@ -17,7 +17,6 @@ package com.google.android.apps.mytracks.settings; import com.google.android.apps.mytracks.Constants; -import com.google.android.apps.mytracks.io.backup.BackupPreferencesListener; import com.google.android.maps.mytracks.R; import android.app.ActionBar; @@ -38,8 +37,6 @@ import android.view.MenuItem; */ public class AbstractSettingsActivity extends PreferenceActivity { - private BackupPreferencesListener backupPreferencesListener; - @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle bundle) { @@ -55,12 +52,6 @@ public class AbstractSettingsActivity extends PreferenceActivity { PreferenceManager preferenceManager = getPreferenceManager(); preferenceManager.setSharedPreferencesName(Constants.SETTINGS_NAME); preferenceManager.setSharedPreferencesMode(Context.MODE_PRIVATE); - - // Set up automatic preferences backup - backupPreferencesListener = new BackupPreferencesListener(this); - - preferenceManager.getSharedPreferences() - .registerOnSharedPreferenceChangeListener(backupPreferencesListener); } @Override @@ -72,15 +63,6 @@ public class AbstractSettingsActivity extends PreferenceActivity { return true; } - @SuppressWarnings("deprecation") - @Override - protected void onDestroy() { - super.onDestroy(); - PreferenceManager preferenceManager = getPreferenceManager(); - preferenceManager.getSharedPreferences() - .unregisterOnSharedPreferenceChangeListener(backupPreferencesListener); - } - /** * Configures a list preference. *