Make the app single process only, including the following fixes:

1) Simplify SharedPreferences management
2) Shut down signalManager/splitManager to avoid random crashes
3) Get rid of sharedPreferencesChanged from the service interface

All tests pass.
This commit is contained in:
Bartlomiej Niechwiej
2010-11-17 22:18:50 -08:00
parent 9cf51de3f7
commit 7a693a90f7
8 changed files with 58 additions and 219 deletions
@@ -20,7 +20,7 @@ import com.google.android.apps.mytracks.MyTracksSettings;
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;
/**
@@ -28,8 +28,9 @@ import android.util.Log;
*
* @author Sandor Dornbush
*/
public class PreferenceManager {
public class PreferenceManager implements OnSharedPreferenceChangeListener {
private TrackRecordingService service;
private SharedPreferences sharedPreferences;
private final String announcementFrequencyKey;
private final String autoResumeTrackCurrentRetryKey;
private final String autoResumeTrackTimeoutKey;
@@ -44,11 +45,14 @@ public class PreferenceManager {
public PreferenceManager(TrackRecordingService service) {
this.service = service;
if (getSharedPreferences() == null) {
this.sharedPreferences = service.getSharedPreferences(
MyTracksSettings.SETTINGS_NAME, 0);
if (sharedPreferences == null) {
Log.w(MyTracksConstants.TAG,
"TrackRecordingService: Couldn't get shared preferences.");
throw new IllegalStateException("Couldn't get shared preferences");
}
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
announcementFrequencyKey =
service.getString(R.string.announcement_frequency_key);
@@ -72,6 +76,9 @@ public class PreferenceManager {
service.getString(R.string.signal_sampling_frequency_key);
splitFrequencyKey =
service.getString(R.string.split_frequency_key);
// Refresh all properties.
onSharedPreferenceChanged(sharedPreferences, null);
}
/**
@@ -80,8 +87,9 @@ public class PreferenceManager {
*
* @param key the key that changed (may be null to update all preferences)
*/
public void onSharedPreferenceChanged(String key) {
SharedPreferences sharedPreferences = getSharedPreferences();
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key == null || key.equals(minRecordingDistanceKey)) {
service.setMinRecordingDistance(
sharedPreferences.getInt(
@@ -160,18 +168,16 @@ public class PreferenceManager {
}
public void setAutoResumeTrackCurrentRetry(int retryAttempts) {
SharedPreferences.Editor editor = getSharedPreferences().edit();
editor.putInt(autoResumeTrackCurrentRetryKey, retryAttempts);
editor.commit();
sharedPreferences
.edit()
.putInt(autoResumeTrackCurrentRetryKey, retryAttempts)
.commit();
}
public void setRecordingTrack(long id) {
Editor editor = getSharedPreferences().edit();
editor.putLong(recordingTrackKey, id);
editor.commit();
}
private SharedPreferences getSharedPreferences() {
return service.getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0);
sharedPreferences
.edit()
.putLong(recordingTrackKey, id)
.commit();
}
}