Make SharePreferenceListener instance variables so they do not get

garbage collected early.
This commit is contained in:
Jimmy Shih
2012-09-11 14:56:17 -07:00
parent 32da1cd84d
commit 0ef7713433
4 changed files with 92 additions and 76 deletions
@@ -56,7 +56,17 @@ import java.util.concurrent.BlockingQueue;
* *
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
*/ */
public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListener { public class MapOverlay extends Overlay {
private final OnSharedPreferenceChangeListener
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_key).equals(key)) {
trackPathPainter = TrackPathPainterFactory.getTrackPathPainter(context);
}
}
};
private final Context context; private final Context context;
private final List<Waypoint> waypoints; private final List<Waypoint> waypoints;
@@ -181,7 +191,7 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe
trackPathPainter = TrackPathPainterFactory.getTrackPathPainter(context); trackPathPainter = TrackPathPainterFactory.getTrackPathPainter(context);
context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this); .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
} }
/** /**
@@ -366,13 +376,6 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe
return super.onTap(geoPoint, mapView); return super.onTap(geoPoint, mapView);
} }
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_key).equals(key)) {
trackPathPainter = TrackPathPainterFactory.getTrackPathPainter(context);
}
}
/** /**
* Gets the points. * Gets the points.
*/ */
@@ -37,8 +37,19 @@ import android.util.Log;
* *
* @author Vangelis S. * @author Vangelis S.
*/ */
public class DynamicSpeedTrackPathDescriptor public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor {
implements TrackPathDescriptor, OnSharedPreferenceChangeListener {
private final OnSharedPreferenceChangeListener
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_percentage_key)
.equals(key)) {
speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key,
PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT);
}
}
};
private final Context context; private final Context context;
private int speedMargin; private int speedMargin;
@@ -54,7 +65,7 @@ public class DynamicSpeedTrackPathDescriptor
speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key, speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key,
PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT); PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT);
context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this); .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
} }
@Override @Override
@@ -93,14 +104,6 @@ public class DynamicSpeedTrackPathDescriptor
} }
} }
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_percentage_key).equals(key)) {
speedMargin = PreferencesUtils.getInt(context, R.string.track_color_mode_percentage_key,
PreferencesUtils.TRACK_COLOR_MODE_PERCENTAGE_DEFAULT);
}
}
/** /**
* Returns true if the average moving speed and the new average moving speed * Returns true if the average moving speed and the new average moving speed
* are significantly different. * are significantly different.
@@ -29,8 +29,23 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
* *
* @author Vangelis S. * @author Vangelis S.
*/ */
public class FixedSpeedTrackPathDescriptor public class FixedSpeedTrackPathDescriptor implements TrackPathDescriptor {
implements TrackPathDescriptor, OnSharedPreferenceChangeListener {
private final OnSharedPreferenceChangeListener
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_slow_key).equals(key)) {
slowSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_slow_key,
PreferencesUtils.TRACK_COLOR_MODE_SLOW_DEFAULT);
} else if (PreferencesUtils.getKey(context, R.string.track_color_mode_medium_key)
.equals(key)) {
normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key,
PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT);
}
}
};
private final Context context; private final Context context;
private int slowSpeed; private int slowSpeed;
private int normalSpeed; private int normalSpeed;
@@ -43,7 +58,7 @@ public class FixedSpeedTrackPathDescriptor
normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key, normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key,
PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT); PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT);
context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE) context.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this); .registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
} }
@Override @Override
@@ -60,15 +75,4 @@ public class FixedSpeedTrackPathDescriptor
public boolean updateState() { public boolean updateState() {
return false; return false;
} }
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.getKey(context, R.string.track_color_mode_slow_key).equals(key)) {
slowSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_slow_key,
PreferencesUtils.TRACK_COLOR_MODE_SLOW_DEFAULT);
} else if (PreferencesUtils.getKey(context, R.string.track_color_mode_medium_key).equals(key)) {
normalSpeed = PreferencesUtils.getInt(context, R.string.track_color_mode_medium_key,
PreferencesUtils.TRACK_COLOR_MODE_MEDIUM_DEFAULT);
}
}
} }
@@ -52,8 +52,7 @@ import android.widget.RemoteViews;
* @author Sandor Dornbush * @author Sandor Dornbush
* @author Paul R. Saxman * @author Paul R. Saxman
*/ */
public class TrackWidgetProvider extends AppWidgetProvider public class TrackWidgetProvider extends AppWidgetProvider {
implements OnSharedPreferenceChangeListener {
/** /**
* Observer for track content. * Observer for track content.
@@ -99,43 +98,50 @@ public class TrackWidgetProvider extends AppWidgetProvider
handler = new Handler(); handler = new Handler();
} }
@Override private final OnSharedPreferenceChangeListener
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
if (key == null @Override
|| key.equals(PreferencesUtils.getKey(context, R.string.selected_track_id_key))) { public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
selectedTrackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key); if (key == null
} || key.equals(PreferencesUtils.getKey(context, R.string.selected_track_id_key))) {
if (key == null selectedTrackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key);
|| key.equals(PreferencesUtils.getKey(context, R.string.recording_track_id_key))) { }
long oldValue = recordingTrackId; if (key == null
recordingTrackId = PreferencesUtils.getLong(context, R.string.recording_track_id_key); || key.equals(PreferencesUtils.getKey(context, R.string.recording_track_id_key))) {
if (oldValue == PreferencesUtils.RECORDING_TRACK_ID_DEFAULT long oldValue = recordingTrackId;
&& recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) { recordingTrackId = PreferencesUtils.getLong(context, R.string.recording_track_id_key);
recordingtrackPaused = false; if (oldValue == PreferencesUtils.RECORDING_TRACK_ID_DEFAULT
} && recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) {
} recordingtrackPaused = false;
if (key == null }
|| key.equals(PreferencesUtils.getKey(context, R.string.recording_track_paused_key))) { }
recordingtrackPaused = PreferencesUtils.getBoolean(context, if (key == null || key.equals(
R.string.recording_track_paused_key, PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT); PreferencesUtils.getKey(context, R.string.recording_track_paused_key))) {
} recordingtrackPaused = PreferencesUtils.getBoolean(context,
if (key == null || key.equals(PreferencesUtils.getKey(context, R.string.metric_units_key))) { R.string.recording_track_paused_key,
metricUnits = PreferencesUtils.getBoolean( PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT);
context, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); }
} if (key == null
if (key == null || key.equals(PreferencesUtils.getKey(context, R.string.report_speed_key))) { || key.equals(PreferencesUtils.getKey(context, R.string.metric_units_key))) {
reportSpeed = PreferencesUtils.getBoolean( metricUnits = PreferencesUtils.getBoolean(
context, R.string.report_speed_key, PreferencesUtils.REPORT_SPEED_DEFAULT); context, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT);
} }
if (key == null if (key == null
|| key.equals(PreferencesUtils.getKey(context, R.string.stats_show_moving_time_key))) { || key.equals(PreferencesUtils.getKey(context, R.string.report_speed_key))) {
showMovingTime = PreferencesUtils.getBoolean(context, R.string.stats_show_moving_time_key, reportSpeed = PreferencesUtils.getBoolean(
PreferencesUtils.STATS_SHOW_MOVING_TIME_DEFAULT); context, R.string.report_speed_key, PreferencesUtils.REPORT_SPEED_DEFAULT);
} }
if (key != null) { if (key == null || key.equals(
update(); PreferencesUtils.getKey(context, R.string.stats_show_moving_time_key))) {
} showMovingTime = PreferencesUtils.getBoolean(context,
} R.string.stats_show_moving_time_key,
PreferencesUtils.STATS_SHOW_MOVING_TIME_DEFAULT);
}
if (key != null) {
update();
}
}
};
@Override @Override
public void onReceive(Context aContext, Intent intent) { public void onReceive(Context aContext, Intent intent) {
@@ -150,8 +156,8 @@ public class TrackWidgetProvider extends AppWidgetProvider
unknown = context.getString(R.string.value_unknown); unknown = context.getString(R.string.value_unknown);
sharedPreferences = context.getSharedPreferences(SETTINGS_NAME, Context.MODE_PRIVATE); sharedPreferences = context.getSharedPreferences(SETTINGS_NAME, Context.MODE_PRIVATE);
sharedPreferences.registerOnSharedPreferenceChangeListener(this); sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
onSharedPreferenceChanged(sharedPreferences, null); sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
context.getContentResolver() context.getContentResolver()
.registerContentObserver(TracksColumns.CONTENT_URI, true, trackObserver); .registerContentObserver(TracksColumns.CONTENT_URI, true, trackObserver);
} }
@@ -165,7 +171,7 @@ public class TrackWidgetProvider extends AppWidgetProvider
@Override @Override
public void onDisabled(Context aContext) { public void onDisabled(Context aContext) {
if (sharedPreferences != null) { if (sharedPreferences != null) {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
} }
if (trackObserver != null) { if (trackObserver != null) {
aContext.getContentResolver().unregisterContentObserver(trackObserver); aContext.getContentResolver().unregisterContentObserver(trackObserver);