For shared preferences, use apply (asynchronous)

by calling ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges.

The only exception is using commit (synchronous) when resetting all settings.
This commit is contained in:
Jimmy Shih
2011-11-21 15:17:26 -08:00
parent 3566645643
commit a59cc3a6a2
13 changed files with 56 additions and 53 deletions
@@ -31,6 +31,7 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
@@ -618,7 +619,9 @@ public class SettingsActivity extends PreferenceActivity {
Log.i(TAG, "Resetting all settings");
// Actually wipe preferences (and save synchronously).
preferences.edit().clear().commit();
Editor editor = preferences.edit();
editor.clear();
editor.commit();
// Give UI feedback in the UI thread.
runOnUiThread(new Runnable() {
@@ -682,7 +685,9 @@ public class SettingsActivity extends PreferenceActivity {
metricspeed = newValue;
}
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
prefs.edit().putString(getString(id), metricspeed).commit();
Editor editor = prefs.edit();
editor.putString(getString(id), metricspeed);
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
/**
@@ -16,6 +16,7 @@
package com.google.android.apps.mytracks.io.backup;
import com.google.android.apps.mytracks.content.ContentTypeIds;
import com.google.android.apps.mytracks.util.ApiFeatures;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
@@ -77,15 +78,14 @@ class PreferenceBackupHelper {
*
* @param data the byte array to read preferences from
* @param preferences the shared preferences to edit
* @return whether the preference change was successful
* @throws IOException if there are any errors while reading
*/
public boolean importPreferences(byte[] data, SharedPreferences preferences)
public void importPreferences(byte[] data, SharedPreferences preferences)
throws IOException {
ByteArrayInputStream bufStream = new ByteArrayInputStream(data);
DataInputStream reader = new DataInputStream(bufStream);
return importPreferences(reader, preferences);
importPreferences(reader, preferences);
}
/**
@@ -93,10 +93,9 @@ class PreferenceBackupHelper {
*
* @param reader the stream to read from
* @param preferences the shared preferences to edit
* @return whether the preference change was successful
* @throws IOException if there are any errors while reading
*/
public boolean importPreferences(DataInputStream reader,
public void importPreferences(DataInputStream reader,
SharedPreferences preferences) throws IOException {
Editor editor = preferences.edit();
editor.clear();
@@ -107,8 +106,7 @@ class PreferenceBackupHelper {
byte typeId = reader.readByte();
readAndSetPreference(name, typeId, reader, editor);
}
return editor.commit();
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
/**
@@ -16,9 +16,11 @@
package com.google.android.apps.mytracks.services;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.maps.mytracks.R;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.util.Log;
@@ -169,24 +171,21 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
}
public void setAutoResumeTrackCurrentRetry(int retryAttempts) {
sharedPreferences
.edit()
.putInt(autoResumeTrackCurrentRetryKey, retryAttempts)
.commit();
Editor editor = sharedPreferences.edit();
editor.putInt(autoResumeTrackCurrentRetryKey, retryAttempts);
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
public void setRecordingTrack(long id) {
sharedPreferences
.edit()
.putLong(recordingTrackKey, id)
.commit();
Editor editor = sharedPreferences.edit();
editor.putLong(recordingTrackKey, id);
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
public void setSelectedTrack(long id) {
sharedPreferences
.edit()
.putLong(selectedTrackKey, id)
.commit();
Editor editor = sharedPreferences.edit();
editor.putLong(selectedTrackKey, id);
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
public void shutdown() {
@@ -17,13 +17,13 @@ package com.google.android.apps.mytracks.services.sensors.ant;
import static com.google.android.apps.mytracks.Constants.TAG;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.maps.mytracks.R;
import com.dsi.ant.AntDefine;
import com.dsi.ant.AntMesg;
import com.dsi.ant.exception.AntInterfaceException;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.maps.mytracks.R;
import android.content.Context;
import android.content.SharedPreferences;
@@ -135,7 +135,7 @@ public class AntDirectSensorManager extends AntSensorManager {
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(context.getString(R.string.ant_heart_rate_sensor_id_key), deviceNumberHRM);
editor.commit();
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
private void handleMessageResponse(byte[] rawMessage) {
@@ -23,6 +23,7 @@ import com.dsi.ant.exception.AntInterfaceException;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.apps.mytracks.services.sensors.SensorUtils;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -135,7 +136,7 @@ public class AntSRMSensorManager extends AntSensorManager {
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(context.getString(R.string.ant_srm_bridge_sensor_id_key), deviceId);
editor.commit();
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
private void handleMessageResponse(byte[] antMessage) {
@@ -22,6 +22,7 @@ import com.dsi.ant.AntMesg;
import com.dsi.ant.exception.AntInterfaceException;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.apps.mytracks.util.SystemUtils;
import com.google.android.maps.mytracks.R;
@@ -197,7 +198,7 @@ public class AntSrmBridgeSensorManager extends AntSensorManager {
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(context.getString(R.string.ant_srm_bridge_sensor_id_key), deviceNumber);
editor.commit();
ApiFeatures.getInstance().getApiAdapter().applyPreferenceChanges(editor);
}
private void handleMessageResponse(byte[] rawMessage) {
@@ -223,7 +223,7 @@ public class MyTracksTest extends ActivityInstrumentationTestCase2<MyTracks>{
editor.putLong(getActivity().getString(R.string.recording_track_key), -1);
editor.clear();
editor.commit();
editor.apply();
}
/**
@@ -138,7 +138,7 @@ public class TrackDataHubTest extends AndroidTestCase {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
Track track = new Track();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expect(providerUtils.getTrack(TRACK_ID)).andStubReturn(track);
expectStart();
dataSources.registerContentObserver(
@@ -297,7 +297,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testWaypointListen() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
Waypoint wpt1 = new Waypoint(),
wpt2 = new Waypoint(),
@@ -411,7 +411,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -498,7 +498,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_reRegister() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -570,7 +570,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_reRegisterTrackChanged() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -628,7 +628,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_largeTrackSampling() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -661,7 +661,7 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_resampling() {
Capture<ContentObserver> observerCapture = new Capture<ContentObserver>();
prefs.edit().putLong("recordingTrack", TRACK_ID)
.putLong("selectedTrack", TRACK_ID).commit();
.putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -814,7 +814,7 @@ public class TrackDataHubTest extends AndroidTestCase {
prefs.edit()
.putBoolean(metricUnitsKey, true)
.putBoolean(speedKey, true)
.commit();
.apply();
Capture<OnSharedPreferenceChangeListener> listenerCapture =
new Capture<OnSharedPreferenceChangeListener>();
@@ -840,7 +840,7 @@ public class TrackDataHubTest extends AndroidTestCase {
prefs.edit()
.putBoolean(speedKey, false)
.commit();
.apply();
OnSharedPreferenceChangeListener listener = listenerCapture.getValue();
listener.onSharedPreferenceChanged(prefs, speedKey);
@@ -854,7 +854,7 @@ public class TrackDataHubTest extends AndroidTestCase {
prefs.edit()
.putBoolean(metricUnitsKey, false)
.commit();
.apply();
listener.onSharedPreferenceChanged(prefs, metricUnitsKey);
verifyAndReset();
@@ -48,13 +48,13 @@ public class PreferenceBackupHelperTest extends TestCase {
@Override
public boolean commit() {
preferenceValues = newPreferences;
apply();
return true;
}
@Override
public void apply() {
commit();
preferenceValues = newPreferences;
}
@Override
@@ -185,7 +185,7 @@ public class PreferenceBackupHelperTest extends TestCase {
editor.putInt("int1", 42);
editor.putLong("long1", 123456789L);
editor.putString("str1", "lolcat");
editor.commit();
editor.apply();
// Export it
byte[] exported = preferenceBackupHelper.exportPreferences(preferences);
@@ -195,7 +195,7 @@ public class PreferenceBackupHelperTest extends TestCase {
editor.clear();
editor.putString("str2", "Shouldn't be there after restore");
editor.putBoolean("bool2", true);
editor.commit();
editor.apply();
// Import it back
preferenceBackupHelper.importPreferences(exported, preferences);
@@ -57,7 +57,7 @@ public class TrackPathPainterFactoryTest extends TrackPathPainterTestCase {
private <T> void testTrackPathPainterFactorySpecific(Context context, SharedPreferences prefs,
int track_color_mode, Class <?> c) {
prefs.edit().putString(context.getString(R.string.track_color_mode_key),
context.getString(track_color_mode)).commit();
context.getString(track_color_mode)).apply();
int startLocationIdx = 0;
Boolean alwaysVisible = true;
@@ -154,14 +154,14 @@ public class TrackRecordingServiceTest
sharedPreferences = context.getSharedPreferences(
Constants.SETTINGS_NAME, 0);
// Let's use default values.
sharedPreferences.edit().clear().commit();
sharedPreferences.edit().clear().apply();
// Disable auto resume by default.
updateAutoResumePrefs(0, -1);
// No recording track.
Editor editor = sharedPreferences.edit();
editor.putLong(context.getString(R.string.recording_track_key), -1);
editor.commit();
editor.apply();
}
@SmallTest
@@ -654,7 +654,7 @@ public class TrackRecordingServiceTest
R.string.auto_resume_track_current_retry_key), attempts);
editor.putInt(context.getString(
R.string.auto_resume_track_timeout_key), timeoutMins);
editor.commit();
editor.apply();
}
private Intent createStartIntent() {
@@ -673,7 +673,7 @@ public class TrackRecordingServiceTest
private void setRecordingTrack(long id) {
Editor editor = sharedPreferences.edit();
editor.putLong(context.getString(R.string.recording_track_key), id);
editor.commit();
editor.apply();
}
// TODO: We support multiple values for readability, however this test's
@@ -697,7 +697,7 @@ public class TrackRecordingServiceTest
} else if (value == null) {
// Do nothing, as clear above has already removed this property.
}
editor.commit();
editor.apply();
fullRecordingSession();
}
@@ -20,7 +20,7 @@ public class SensorManagerFactoryTest extends AndroidTestCase {
sharedPreferences = getContext().getSharedPreferences(
Constants.SETTINGS_NAME, 0);
// Let's use default values.
sharedPreferences.edit().clear().commit();
sharedPreferences.edit().clear().apply();
}
@SmallTest
@@ -47,7 +47,7 @@ public class SensorManagerFactoryTest extends AndroidTestCase {
sharedPreferences.edit()
.putString(getContext().getString(R.string.sensor_type_key),
getContext().getString(i))
.commit();
.apply();
SensorManager sm = SensorManagerFactory.getSensorManager(getContext());
assertNotNull(sm);
assertTrue(c.isInstance(sm));
@@ -18,7 +18,6 @@ package com.google.android.apps.mytracks.services.sensors.ant;
import com.dsi.ant.AntMesg;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.Sensor;
import com.google.android.apps.mytracks.services.sensors.ant.AntDirectSensorManager;
import com.google.android.maps.mytracks.R;
import android.content.SharedPreferences;
@@ -34,7 +33,7 @@ public class AntDirectSensorManagerTest extends AndroidTestCase {
sharedPreferences = getContext().getSharedPreferences(
Constants.SETTINGS_NAME, 0);
// Let's use default values.
sharedPreferences.edit().clear().commit();
sharedPreferences.edit().clear().apply();
manager = new AntDirectSensorManager(getContext());
}