From 1e343b0d12b795a9d45a19212e120fc8a97de933 Mon Sep 17 00:00:00 2001 From: Bartlomiej Niechwiej Date: Mon, 4 Oct 2010 21:17:56 -0700 Subject: [PATCH] Limit the maximum number of auto-resume retry attempts to 3. --- MyTracks/res/values/keys.xml | 1 + .../mytracks/services/PreferenceManager.java | 21 +++++----- .../services/TrackRecordingService.java | 40 ++++++++++++++++++- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml index 74b14b50a..66c4ae207 100644 --- a/MyTracks/res/values/keys.xml +++ b/MyTracks/res/values/keys.xml @@ -41,6 +41,7 @@ limitations under the License. debugDrawBounds + autoResumeTrackCurrentRetry recordingTrack selectedTrack diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java b/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java index d7e300bd9..9d4af469f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java @@ -46,7 +46,7 @@ public class PreferenceManager { announcementFrequencyKey = service.getString(R.string.announcement_frequency_key); autoResumeTrackTimeoutKey = - service.getString(R.string.auto_resume_track_timeout_key); + service.getString(R.string.auto_resume_track_timeout_key); maxRecordingDistanceKey = service.getString(R.string.max_recording_distance_key); metricUnitsKey = @@ -90,10 +90,9 @@ public class PreferenceManager { + service.getMinRecordingDistance()); } if (key == null || key.equals(maxRecordingDistanceKey)) { - service.setMaxRecordingDistance( - sharedPreferences.getInt( - maxRecordingDistanceKey, - MyTracksSettings.DEFAULT_MAX_RECORDING_DISTANCE)); + service.setMaxRecordingDistance(sharedPreferences.getInt( + maxRecordingDistanceKey, + MyTracksSettings.DEFAULT_MAX_RECORDING_DISTANCE)); } if (key == null || key.equals(minRecordingIntervalKey)) { int minRecordingInterval = sharedPreferences.getInt( @@ -122,18 +121,18 @@ public class PreferenceManager { } } if (key == null || key.equals(minRequiredAccuracyKey)) { - service.setMinRequiredAccuracy( - sharedPreferences.getInt( - minRequiredAccuracyKey, - MyTracksSettings.DEFAULT_MIN_REQUIRED_ACCURACY)); + service.setMinRequiredAccuracy(sharedPreferences.getInt( + minRequiredAccuracyKey, + MyTracksSettings.DEFAULT_MIN_REQUIRED_ACCURACY)); } if (key == null || key.equals(announcementFrequencyKey)) { service.setAnnouncementFrequency( sharedPreferences.getInt(announcementFrequencyKey, -1)); } if (key == null || key.equals(autoResumeTrackTimeoutKey)) { - service.setAutoResumeTrackTimeout( - sharedPreferences.getInt(autoResumeTrackTimeoutKey, -1)); + service.setAutoResumeTrackTimeout(sharedPreferences.getInt( + autoResumeTrackTimeoutKey, + MyTracksSettings.DEFAULT_AUTO_RESUME_TRACK_TIMEOUT)); } if (key == null || key.equals(recordingTrackKey)) { service.setRecordingTrackId( diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 2c72e14f7..39739669e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -38,6 +38,7 @@ import android.app.Service; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.location.Location; @@ -65,6 +66,8 @@ public class TrackRecordingService extends Service implements LocationListener { private static final String STATISTICS_ICON_URL = "http://maps.google.com/mapfiles/ms/micons/ylw-pushpin.png"; + private static final int MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS = 3; + private NotificationManager notificationManager; private LocationManager locationManager; private WakeLock wakeLock; @@ -298,6 +301,17 @@ public class TrackRecordingService extends Service implements LocationListener { } } + private void setAutoResumeTrackRetries( + SharedPreferences sharedPreferences, int retryAttempts) { + Log.d(MyTracksConstants.TAG, + "Updating auto-resume retry attempts to: " + retryAttempts); + + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putInt( + getString(R.string.auto_resume_track_current_retry_key), retryAttempts); + editor.commit(); + } + /** * Tries to acquire a partial wake lock if not already acquired. Logs errors * and gives up trying in case the wake lock cannot be acquired. @@ -744,8 +758,27 @@ public class TrackRecordingService extends Service implements LocationListener { if (intent != null && intent.getBooleanExtra(RESUME_TRACK_EXTRA_NAME, false)) { Log.d(MyTracksConstants.TAG, "TrackRecordingService: requested resume"); + + // Check if we haven't exceeded the maximum number of retry attempts. + SharedPreferences sharedPreferences = + getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0); + int retries = sharedPreferences.getInt( + getString(R.string.auto_resume_track_current_retry_key), 0); + Log.d(MyTracksConstants.TAG, + "TrackRecordingService: Attempting to auto-resume the track (" + + (retries + 1) + "/" + MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS + ")"); + if (retries >= MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS) { + Log.i(MyTracksConstants.TAG, + "TrackRecordingService: Not resuming because exceeded the maximum " + + "number of auto-resume retries"); + stopSelfResult(startId); + return; + } + + // Increase number of retry attempts. + setAutoResumeTrackRetries(sharedPreferences, retries + 1); + // Make sure that the current track exists and is fresh enough. - // Note: Sometimes we may get null intent, so avoid a NPE. if (recordingTrack == null || !shouldResumeTrack(recordingTrack)) { Log.i(MyTracksConstants.TAG, "TrackRecordingService: Not resuming because the previous track " @@ -753,6 +786,7 @@ public class TrackRecordingService extends Service implements LocationListener { stopSelfResult(startId); return; } + Log.i(MyTracksConstants.TAG, "TrackRecordingService: resuming"); } } @@ -880,6 +914,10 @@ public class TrackRecordingService extends Service implements LocationListener { registerLocationListener(); splitManager.restore(); signalManager.restore(); + // Reset the number of auto-resume retries. + SharedPreferences sharedPreferences = + getSharedPreferences(MyTracksSettings.SETTINGS_NAME, 0); + setAutoResumeTrackRetries(sharedPreferences, 0); return trackId; }