Merging Bart's fixes.

This commit is contained in:
Rodrigo Damazio
2010-11-21 21:11:35 -08:00
3 changed files with 34 additions and 13 deletions
@@ -90,6 +90,12 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
@Override @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) { String key) {
if (service == null) {
Log.w(MyTracksConstants.TAG,
"onSharedPreferenceChanged: a preference change (key = " + key
+ ") after a call to shutdown()");
return;
}
if (key == null || key.equals(minRecordingDistanceKey)) { if (key == null || key.equals(minRecordingDistanceKey)) {
service.setMinRecordingDistance( service.setMinRecordingDistance(
sharedPreferences.getInt( sharedPreferences.getInt(
@@ -180,4 +186,9 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
.putLong(recordingTrackKey, id) .putLong(recordingTrackKey, id)
.commit(); .commit();
} }
public void shutdown() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
service = null;
}
} }
@@ -130,7 +130,7 @@ public class TrackRecordingService extends Service implements LocationListener {
* Task invoked by a timer periodically to make sure the location listener is * Task invoked by a timer periodically to make sure the location listener is
* still registered. * still registered.
*/ */
private final TimerTask checkLocationListener = new TimerTask() { private TimerTask checkLocationListener = new TimerTask() {
@Override @Override
public void run() { public void run() {
// It's always safe to assume that if isRecording() is true, it implies // It's always safe to assume that if isRecording() is true, it implies
@@ -705,15 +705,24 @@ public class TrackRecordingService extends Service implements LocationListener {
@Override @Override
public void onDestroy() { public void onDestroy() {
Log.d(MyTracksConstants.TAG, "TrackRecordingService.onDestroy"); Log.d(MyTracksConstants.TAG, "TrackRecordingService.onDestroy");
checkLocationListener.cancel();
timer.cancel();
isRecording = false; isRecording = false;
showNotification(); showNotification();
prefManager.shutdown();
prefManager = null;
binder = null;
checkLocationListener.cancel();
checkLocationListener = null;
timer.cancel();
timer.purge();
unregisterLocationListener(); unregisterLocationListener();
shutdownAnnouncer(); shutdownAnnouncer();
signalManager.shutdown(); signalManager.shutdown();
signalManager = null;
splitManager.shutdown(); splitManager.shutdown();
splitManager = null;
releaseWakeLock(); releaseWakeLock();
super.onDestroy(); super.onDestroy();
} }
@@ -891,7 +900,7 @@ public class TrackRecordingService extends Service implements LocationListener {
/** /**
* The ITrackRecordingService is defined through IDL. * The ITrackRecordingService is defined through IDL.
*/ */
private final ITrackRecordingService.Stub binder = private ITrackRecordingService.Stub binder =
new ITrackRecordingService.Stub() { new ITrackRecordingService.Stub() {
@Override @Override
public boolean isRecording() { public boolean isRecording() {
@@ -188,9 +188,15 @@ public class TrackRecordingServiceTest
ITrackRecordingService service = bindAndGetService(createStartIntent()); ITrackRecordingService service = bindAndGetService(createStartIntent());
assertEquals(123, service.getRecordingTrackId()); assertEquals(123, service.getRecordingTrackId());
} }
// TODO: shutdownService() has a bug and doesn't set mServiceCreated
// to false, thus preventing from a second call to onCreate().
// Report the bug to Android team. Until then, the following tests
// and checks must be commented out.
//
// TODO: If fixed, remove "disabled" prefix from the test name.
@MediumTest @MediumTest
public void testResumeAfterReboot_simulateReboot() throws Exception { public void disabledTestResumeAfterReboot_simulateReboot() throws Exception {
updateAutoResumePrefs(0, 10); updateAutoResumePrefs(0, 10);
ITrackRecordingService service = bindAndGetService(createStartIntent()); ITrackRecordingService service = bindAndGetService(createStartIntent());
assertFalse(service.isRecording()); assertFalse(service.isRecording());
@@ -201,7 +207,7 @@ public class TrackRecordingServiceTest
assertEquals(id, service.getRecordingTrackId()); assertEquals(id, service.getRecordingTrackId());
shutdownService(); shutdownService();
assertEquals(id, sharedPreferences.getLong( assertEquals(id, sharedPreferences.getLong(
context.getString(R.string.recording_track_key), -1)); context.getString(R.string.recording_track_key), -1));
// Start the service in "resume" mode (simulates the on-reboot action). // Start the service in "resume" mode (simulates the on-reboot action).
Intent startIntent = createStartIntent(); Intent startIntent = createStartIntent();
@@ -209,12 +215,7 @@ public class TrackRecordingServiceTest
startService(startIntent); startService(startIntent);
assertNotNull(getService()); assertNotNull(getService());
// TODO: shutdownService() has a bug and doesn't set mServiceCreated assertTrue(getService().isRecording());
// to false, thus preventing from a second call to onCreate().
// Report the bug to Android team. Until then, the following check
// must be commented out.
// assertTrue(getService().isRecording());
} }
@MediumTest @MediumTest