diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java index 06d10d70..3e534fce 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java @@ -160,7 +160,7 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen Util.registerMediaButtonEventReceiver(this); // Lifecycle support's constructor registers some event receivers so it should be created early - lifecycleSupport.getValue(); + lifecycleSupport.getValue().onCreate(); // Make sure to update theme if (theme != null && !theme.equals(Util.getTheme(this))) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java index f0e70c4c..f47adad9 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java @@ -54,6 +54,7 @@ public class MediaPlayerControllerImpl implements MediaPlayerController { private static final String TAG = MediaPlayerControllerImpl.class.getSimpleName(); + private boolean created = false; private String suggestedPlaylistName; private boolean keepScreenOn; @@ -79,6 +80,12 @@ public class MediaPlayerControllerImpl implements MediaPlayerController this.shufflePlayBuffer = shufflePlayBuffer; this.localMediaPlayer = localMediaPlayer; + Log.i(TAG, "MediaPlayerControllerImpl constructed"); + } + + public void onCreate() + { + if (created) return; this.externalStorageMonitor.onCreate(new Runnable() { @Override public void run() { @@ -88,15 +95,18 @@ public class MediaPlayerControllerImpl implements MediaPlayerController int instance = Util.getActiveServer(context); setJukeboxEnabled(Util.getJukeboxEnabled(context, instance)); + created = true; Log.i(TAG, "MediaPlayerControllerImpl created"); } public void onDestroy() { + if (!created) return; externalStorageMonitor.onDestroy(); context.stopService(new Intent(context, MediaPlayerService.class)); downloader.onDestroy(); + created = false; Log.i(TAG, "MediaPlayerControllerImpl destroyed"); } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java index a616b6a6..77ccf2bc 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java @@ -44,6 +44,7 @@ public class MediaPlayerLifecycleSupport { private static final String TAG = MediaPlayerLifecycleSupport.class.getSimpleName(); + private boolean created = false; private DownloadQueueSerializer downloadQueueSerializer; // From DI private final MediaPlayerControllerImpl mediaPlayerController; // From DI private final Downloader downloader; // From DI @@ -59,6 +60,12 @@ public class MediaPlayerLifecycleSupport this.context = context; this.downloader = downloader; + Log.i(TAG, "LifecycleSupport constructed"); + } + + public void onCreate() + { + if (created) return; registerHeadsetReceiver(); // React to media buttons. @@ -75,6 +82,7 @@ public class MediaPlayerLifecycleSupport commandFilter.addAction(Constants.CMD_PROCESS_KEYCODE); context.registerReceiver(intentReceiver, commandFilter); + mediaPlayerController.onCreate(); this.downloadQueueSerializer.deserializeDownloadQueue(new Consumer() { @Override public void accept(State state) { @@ -88,15 +96,20 @@ public class MediaPlayerLifecycleSupport }); new CacheCleaner(context).clean(); + created = true; Log.i(TAG, "LifecycleSupport created"); } public void onDestroy() { + if (!created) return; + downloadQueueSerializer.serializeDownloadQueueNow(downloader.downloadList, + downloader.getCurrentPlayingIndex(), mediaPlayerController.getPlayerPosition()); mediaPlayerController.clear(false); context.unregisterReceiver(headsetEventReceiver); context.unregisterReceiver(intentReceiver); mediaPlayerController.onDestroy(); + created = false; Log.i(TAG, "LifecycleSupport destroyed"); } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java index 04393095..5cd9e008 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java @@ -191,8 +191,6 @@ public class MediaPlayerService extends Service instance = null; try { - downloadQueueSerializer.serializeDownloadQueueNow(downloader.downloadList, - downloader.getCurrentPlayingIndex(), getPlayerPosition()); localMediaPlayer.onDestroy(); downloader.stop(); shufflePlayBuffer.onDestroy();