diff --git a/ultrasonic/lint-baseline.xml b/ultrasonic/lint-baseline.xml index fc439fa2..9a3a6166 100644 --- a/ultrasonic/lint-baseline.xml +++ b/ultrasonic/lint-baseline.xml @@ -960,7 +960,7 @@ songs) { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -356,7 +356,7 @@ public class BookmarkActivity extends SubsonicTabActivity public void run() { warnIfNetworkOrStorageUnavailable(); - getDownloadService().downloadBackground(songs, save); + getMediaPlayerController().downloadBackground(songs, save); if (save) { @@ -382,19 +382,19 @@ public class BookmarkActivity extends SubsonicTabActivity songs = getSelectedSongs(albumListView); } - if (getDownloadService() != null) + if (getMediaPlayerController() != null) { - getDownloadService().delete(songs); + getMediaPlayerController().delete(songs); } } private void unpin() { - if (getDownloadService() != null) + if (getMediaPlayerController() != null) { List songs = getSelectedSongs(albumListView); Util.toast(BookmarkActivity.this, getResources().getQuantityString(R.plurals.select_album_n_songs_unpinned, songs.size(), songs.size())); - getDownloadService().unpin(songs); + getMediaPlayerController().unpin(songs); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/DownloadActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/DownloadActivity.java index 2cc55a02..f03c005d 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/DownloadActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/DownloadActivity.java @@ -60,7 +60,7 @@ import org.moire.ultrasonic.domain.RepeatMode; import org.moire.ultrasonic.featureflags.Feature; import org.moire.ultrasonic.featureflags.FeatureStorage; import org.moire.ultrasonic.service.DownloadFile; -import org.moire.ultrasonic.service.DownloadService; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.service.MusicService; import org.moire.ultrasonic.service.MusicServiceFactory; import org.moire.ultrasonic.util.Constants; @@ -257,7 +257,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - getDownloadService().previous(); + getMediaPlayerController().previous(); return null; } @@ -295,7 +295,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi { if (downloader.getValue().getCurrentPlayingIndex() < downloader.getValue().downloadList.size() - 1) { - getDownloadService().next(); + getMediaPlayerController().next(); return true; } else @@ -337,7 +337,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - getDownloadService().pause(); + getMediaPlayerController().pause(); return null; } @@ -361,7 +361,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - getDownloadService().reset(); + getMediaPlayerController().reset(); return null; } @@ -406,7 +406,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override public void onClick(final View view) { - getDownloadService().shuffle(); + getMediaPlayerController().shuffle(); Util.toast(DownloadActivity.this, R.string.download_menu_shuffle_notification); } }); @@ -416,9 +416,9 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override public void onClick(final View view) { - final RepeatMode repeatMode = getDownloadService().getRepeatMode().next(); + final RepeatMode repeatMode = getMediaPlayerController().getRepeatMode().next(); - getDownloadService().setRepeatMode(repeatMode); + getMediaPlayerController().setRepeatMode(repeatMode); onDownloadListChanged(); switch (repeatMode) @@ -448,7 +448,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - getDownloadService().seekTo(getProgressBar().getProgress()); + getMediaPlayerController().seekTo(getProgressBar().getProgress()); return null; } @@ -483,7 +483,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - getDownloadService().play(position); + getMediaPlayerController().play(position); return null; } @@ -499,15 +499,15 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi registerForContextMenu(playlistView); - final DownloadService downloadService = getDownloadService(); - if (downloadService != null && getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_SHUFFLE, false)) + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); + if (mediaPlayerController != null && getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_SHUFFLE, false)) { warnIfNetworkOrStorageUnavailable(); - downloadService.setShufflePlayEnabled(true); + mediaPlayerController.setShufflePlayEnabled(true); } - visualizerAvailable = (downloadService != null) && (downloadService.getVisualizerController() != null); - equalizerAvailable = (downloadService != null) && (downloadService.getEqualizerController() != null); + visualizerAvailable = (mediaPlayerController != null) && (mediaPlayerController.getVisualizerController() != null); + equalizerAvailable = (mediaPlayerController != null) && (mediaPlayerController.getEqualizerController() != null); new Thread(new Runnable() { @@ -516,8 +516,8 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi { try { - DownloadService downloadService = getDownloadService(); - jukeboxAvailable = (downloadService != null) && (downloadService.isJukeboxAvailable()); + MediaPlayerController mediaPlayerController = getMediaPlayerController(); + jukeboxAvailable = (mediaPlayerController != null) && (mediaPlayerController.isJukeboxAvailable()); } catch (Exception e) { @@ -549,7 +549,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi public boolean onTouch(final View view, final MotionEvent motionEvent) { visualizerView.setActive(!visualizerView.isActive()); - getDownloadService().setShowVisualization(visualizerView.isActive()); + getMediaPlayerController().setShowVisualization(visualizerView.isActive()); return true; } }); @@ -565,9 +565,9 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi { super.onResume(); - final DownloadService downloadService = getDownloadService(); + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService == null || player.getValue().currentPlaying == null) + if (mediaPlayerController == null || localMediaPlayer.getValue().currentPlaying == null) { playlistFlipper.setDisplayedChild(1); } @@ -592,7 +592,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleWithFixedDelay(runnable, 0L, 250L, TimeUnit.MILLISECONDS); - if (downloadService != null && downloadService.getKeepScreenOn()) + if (mediaPlayerController != null && mediaPlayerController.getKeepScreenOn()) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @@ -603,7 +603,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi if (visualizerView != null) { - visualizerView.setActive(downloadService != null && downloadService.getShowVisualization()); + visualizerView.setActive(mediaPlayerController != null && mediaPlayerController.getShowVisualization()); } invalidateOptionsMenu(); @@ -612,7 +612,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi // Scroll to current playing/downloading. private void scrollToCurrent() { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -706,7 +706,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi { if (id == DIALOG_SAVE_PLAYLIST) { - final String playlistName = (getDownloadService() != null) ? getDownloadService().getSuggestedPlaylistName() : null; + final String playlistName = (getMediaPlayerController() != null) ? getMediaPlayerController().getSuggestedPlaylistName() : null; if (playlistName != null) { playlistNameView.setText(playlistName); @@ -778,11 +778,11 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi visualizerMenuItem.setVisible(visualizerAvailable); } - final DownloadService downloadService = getDownloadService(); + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService != null) + if (mediaPlayerController != null) { - DownloadFile downloadFile = player.getValue().currentPlaying; + DownloadFile downloadFile = localMediaPlayer.getValue().currentPlaying; if (downloadFile != null) { @@ -807,7 +807,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi } - if (downloadService.getKeepScreenOn()) + if (mediaPlayerController.getKeepScreenOn()) { if (screenOption != null) { @@ -827,7 +827,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi jukeboxOption.setEnabled(jukeboxAvailable); jukeboxOption.setVisible(jukeboxAvailable); - if (downloadService.isJukeboxEnabled()) + if (mediaPlayerController.isJukeboxEnabled()) { jukeboxOption.setTitle(R.string.download_menu_jukebox_off); } @@ -967,23 +967,23 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi startActivityForResultWithoutTransition(this, intent); return true; case R.id.menu_remove: - getDownloadService().remove(song); + getMediaPlayerController().remove(song); onDownloadListChanged(); return true; case R.id.menu_item_screen_on_off: - if (getDownloadService().getKeepScreenOn()) + if (getMediaPlayerController().getKeepScreenOn()) { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - getDownloadService().setKeepScreenOn(false); + getMediaPlayerController().setKeepScreenOn(false); } else { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - getDownloadService().setKeepScreenOn(true); + getMediaPlayerController().setKeepScreenOn(true); } return true; case R.id.menu_shuffle: - getDownloadService().shuffle(); + getMediaPlayerController().shuffle(); Util.toast(this, R.string.download_menu_shuffle_notification); return true; case R.id.menu_item_equalizer: @@ -1002,20 +1002,20 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi visualizerViewLayout.setVisibility(View.VISIBLE); } - getDownloadService().setShowVisualization(visualizerView.isActive()); + getMediaPlayerController().setShowVisualization(visualizerView.isActive()); Util.toast(DownloadActivity.this, active ? R.string.download_visualizer_on : R.string.download_visualizer_off); return true; case R.id.menu_item_jukebox: - final boolean jukeboxEnabled = !getDownloadService().isJukeboxEnabled(); - getDownloadService().setJukeboxEnabled(jukeboxEnabled); + final boolean jukeboxEnabled = !getMediaPlayerController().isJukeboxEnabled(); + getMediaPlayerController().setJukeboxEnabled(jukeboxEnabled); Util.toast(DownloadActivity.this, jukeboxEnabled ? R.string.download_jukebox_on : R.string.download_jukebox_off, false); return true; case R.id.menu_item_toggle_list: toggleFullScreenAlbumArt(); return true; case R.id.menu_item_clear_playlist: - getDownloadService().setShufflePlayEnabled(false); - getDownloadService().clear(); + getMediaPlayerController().setShufflePlayEnabled(false); + getMediaPlayerController().clear(); onDownloadListChanged(); return true; case R.id.menu_item_save_playlist: @@ -1077,7 +1077,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi } final String songId = currentSong.getId(); - final int playerPosition = getDownloadService().getPlayerPosition(); + final int playerPosition = getMediaPlayerController().getPlayerPosition(); currentSong.setBookmarkPosition(playerPosition); @@ -1137,10 +1137,10 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi return true; case R.id.menu_item_share: - DownloadService downloadService = getDownloadService(); + MediaPlayerController mediaPlayerController = getMediaPlayerController(); List entries = new ArrayList(); - if (downloadService != null) + if (mediaPlayerController != null) { List downloadServiceSongs = downloader.getValue().downloadList; @@ -1170,7 +1170,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void update() { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -1180,7 +1180,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi onDownloadListChanged(); } - if (currentPlaying != player.getValue().currentPlaying) + if (currentPlaying != localMediaPlayer.getValue().currentPlaying) { onCurrentChanged(); } @@ -1192,7 +1192,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void savePlaylistInBackground(final String playlistName) { Util.toast(DownloadActivity.this, getResources().getString(R.string.download_playlist_saving, playlistName)); - getDownloadService().setSuggestedPlaylistName(playlistName); + getMediaPlayerController().setSuggestedPlaylistName(playlistName); new SilentBackgroundTask(this) { @Override @@ -1243,7 +1243,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void start() { - final DownloadService service = getDownloadService(); + final MediaPlayerController service = getMediaPlayerController(); final PlayerState state = service.getPlayerState(); if (state == PAUSED || state == COMPLETED || state == STOPPED) @@ -1269,8 +1269,8 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void onDownloadListChanged() { - final DownloadService downloadService = getDownloadService(); - if (downloadService == null) + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); + if (mediaPlayerController == null) { return; } @@ -1306,18 +1306,18 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi public void remove(int which) { DownloadFile item = adapter.getItem(which); - DownloadService downloadService = getDownloadService(); + MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (item == null || downloadService == null) + if (item == null || mediaPlayerController == null) { return; } - DownloadFile currentPlaying = player.getValue().currentPlaying; + DownloadFile currentPlaying = localMediaPlayer.getValue().currentPlaying; if (currentPlaying == item) { - getDownloadService().next(); + getMediaPlayerController().next(); } adapter.remove(item); @@ -1335,7 +1335,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi emptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE); currentRevision = downloader.getValue().getDownloadListUpdateRevision(); - switch (downloadService.getRepeatMode()) + switch (mediaPlayerController.getRepeatMode()) { case OFF: repeatButton.setImageDrawable(Util.getDrawableFromAttribute(this, R.attr.media_repeat_off)); @@ -1353,14 +1353,14 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void onCurrentChanged() { - DownloadService downloadService = getDownloadService(); + MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService == null) + if (mediaPlayerController == null) { return; } - currentPlaying = player.getValue().currentPlaying; + currentPlaying = localMediaPlayer.getValue().currentPlaying; scrollToCurrent(); @@ -1398,16 +1398,16 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void onSliderProgressChanged() { - DownloadService downloadService = getDownloadService(); + MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService == null || onProgressChangedTask != null) + if (mediaPlayerController == null || onProgressChangedTask != null) { return; } onProgressChangedTask = new SilentBackgroundTask(this) { - DownloadService downloadService; + MediaPlayerController mediaPlayerController; boolean isJukeboxEnabled; int millisPlayed; Integer duration; @@ -1416,11 +1416,11 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - downloadService = getDownloadService(); - isJukeboxEnabled = downloadService.isJukeboxEnabled(); - millisPlayed = Math.max(0, downloadService.getPlayerPosition()); - duration = downloadService.getPlayerDuration(); - playerState = getDownloadService().getPlayerState(); + this.mediaPlayerController = getMediaPlayerController(); + isJukeboxEnabled = this.mediaPlayerController.isJukeboxEnabled(); + millisPlayed = Math.max(0, this.mediaPlayerController.getPlayerPosition()); + duration = this.mediaPlayerController.getPlayerDuration(); + playerState = getMediaPlayerController().getPlayerState(); return null; } @@ -1457,9 +1457,9 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi setActionBarSubtitle(R.string.download_playerstate_buffering); break; case STARTED: - final DownloadService downloadService = getDownloadService(); + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService != null && downloadService.isShufflePlayEnabled()) + if (mediaPlayerController != null && mediaPlayerController.isShufflePlayEnabled()) { setActionBarSubtitle(R.string.download_playerstate_playing_shuffle); } @@ -1503,7 +1503,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi break; } - // TODO: It would be a lot nicer if DownloadService would send an event when this is necessary instead of updating every time + // TODO: It would be a lot nicer if MediaPlayerController would send an event when this is necessary instead of updating every time displaySongRating(); onProgressChangedTask = null; @@ -1514,8 +1514,8 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi private void changeProgress(final int ms) { - final DownloadService downloadService = getDownloadService(); - if (downloadService == null) + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); + if (mediaPlayerController == null) { return; } @@ -1529,12 +1529,12 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi @Override protected Void doInBackground() throws Throwable { - msPlayed = Math.max(0, downloadService.getPlayerPosition()); - duration = downloadService.getPlayerDuration(); + msPlayed = Math.max(0, mediaPlayerController.getPlayerPosition()); + duration = mediaPlayerController.getPlayerDuration(); final int msTotal = duration; seekTo = msPlayed + ms > msTotal ? msTotal : msPlayed + ms; - downloadService.seekTo(seekTo); + mediaPlayerController.seekTo(seekTo); return null; } @@ -1562,9 +1562,9 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX, final float velocityY) { - final DownloadService downloadService = getDownloadService(); + final MediaPlayerController mediaPlayerController = getMediaPlayerController(); - if (downloadService == null || e1 == null || e2 == null) + if (mediaPlayerController == null || e1 == null || e2 == null) { return false; } @@ -1582,7 +1582,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi warnIfNetworkOrStorageUnavailable(); if (downloader.getValue().getCurrentPlayingIndex() < downloader.getValue().downloadList.size() - 1) { - downloadService.next(); + mediaPlayerController.next(); onCurrentChanged(); onSliderProgressChanged(); } @@ -1593,7 +1593,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi if (e2X - e1X > swipeDistance && absX > swipeVelocity) { warnIfNetworkOrStorageUnavailable(); - downloadService.previous(); + mediaPlayerController.previous(); onCurrentChanged(); onSliderProgressChanged(); return true; @@ -1603,7 +1603,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi if (e2Y - e1Y > swipeDistance && absY > swipeVelocity) { warnIfNetworkOrStorageUnavailable(); - downloadService.seekTo(downloadService.getPlayerPosition() + 30000); + mediaPlayerController.seekTo(mediaPlayerController.getPlayerPosition() + 30000); onSliderProgressChanged(); return true; } @@ -1612,7 +1612,7 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi if (e1Y - e2Y > swipeDistance && absY > swipeVelocity) { warnIfNetworkOrStorageUnavailable(); - downloadService.seekTo(downloadService.getPlayerPosition() - 8000); + mediaPlayerController.seekTo(mediaPlayerController.getPlayerPosition() - 8000); onSliderProgressChanged(); return true; } @@ -1663,6 +1663,6 @@ public class DownloadActivity extends SubsonicTabActivity implements OnGestureLi return; displaySongRating(); - getDownloadService().setSongRating(rating); + getMediaPlayerController().setSongRating(rating); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/EqualizerActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/EqualizerActivity.java index 329bdf79..07b48a96 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/EqualizerActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/EqualizerActivity.java @@ -32,8 +32,7 @@ import android.widget.TextView; import org.moire.ultrasonic.R; import org.moire.ultrasonic.audiofx.EqualizerController; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; +import org.moire.ultrasonic.service.MediaPlayerController; import java.util.HashMap; import java.util.Map; @@ -56,7 +55,7 @@ public class EqualizerActivity extends ResultActivity private EqualizerController equalizerController; private Equalizer equalizer; - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); @Override public void onCreate(Bundle bundle) @@ -129,7 +128,7 @@ public class EqualizerActivity extends ResultActivity private void setup() { - equalizerController = downloadServiceImpl.getValue().getEqualizerController(); + equalizerController = mediaPlayerControllerLazy.getValue().getEqualizerController(); equalizer = equalizerController.getEqualizer(); initEqualizer(); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/MainActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/MainActivity.java index 1b053e19..f9052ffd 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/MainActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/MainActivity.java @@ -34,11 +34,8 @@ import android.widget.ListView; import android.widget.TextView; import org.moire.ultrasonic.R; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; -import org.moire.ultrasonic.service.DownloadServiceLifecycleSupport; -import org.moire.ultrasonic.service.ExternalStorageMonitor; -import org.moire.ultrasonic.service.MediaPlayerService; +import org.moire.ultrasonic.service.MediaPlayerController; +import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport; import org.moire.ultrasonic.service.MusicService; import org.moire.ultrasonic.service.MusicServiceFactory; import org.moire.ultrasonic.util.Constants; @@ -73,7 +70,7 @@ public class MainActivity extends SubsonicTabActivity private static boolean infoDialogDisplayed; private static boolean shouldUseId3; - private Lazy lifecycleSupport = inject(DownloadServiceLifecycleSupport.class); + private Lazy lifecycleSupport = inject(MediaPlayerLifecycleSupport.class); /** * Called when the activity is first created. @@ -87,9 +84,9 @@ public class MainActivity extends SubsonicTabActivity { setResult(Constants.RESULT_CLOSE_ALL); - if (getDownloadService() != null) + if (getMediaPlayerController() != null) { - getDownloadService().stopJukeboxService(); + getMediaPlayerController().stopJukeboxService(); } if (getImageLoader() != null) @@ -464,7 +461,7 @@ public class MainActivity extends SubsonicTabActivity private void setActiveServer(final int instance) { - final DownloadService service = getDownloadService(); + final MediaPlayerController service = getMediaPlayerController(); if (Util.getActiveServer(this) != instance) { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SearchActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SearchActivity.java index fb0b542b..113449eb 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SearchActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SearchActivity.java @@ -37,7 +37,7 @@ import org.moire.ultrasonic.domain.MusicDirectory; import org.moire.ultrasonic.domain.MusicDirectory.Entry; import org.moire.ultrasonic.domain.SearchCriteria; import org.moire.ultrasonic.domain.SearchResult; -import org.moire.ultrasonic.service.DownloadService; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.service.MusicService; import org.moire.ultrasonic.service.MusicServiceFactory; import org.moire.ultrasonic.util.BackgroundTask; @@ -322,7 +322,7 @@ public class SearchActivity extends SubsonicTabActivity { songs.add(entry); Util.toast(SearchActivity.this, getResources().getQuantityString(R.plurals.select_album_n_songs_unpinned, songs.size(), songs.size())); - getDownloadService().unpin(songs); + getMediaPlayerController().unpin(songs); } break; case R.id.menu_item_share: @@ -341,7 +341,7 @@ public class SearchActivity extends SubsonicTabActivity private void downloadBackground(final boolean save, final List songs) { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -352,7 +352,7 @@ public class SearchActivity extends SubsonicTabActivity public void run() { warnIfNetworkOrStorageUnavailable(); - getDownloadService().downloadBackground(songs, save); + getMediaPlayerController().downloadBackground(songs, save); } }; @@ -508,19 +508,19 @@ public class SearchActivity extends SubsonicTabActivity private void onSongSelected(MusicDirectory.Entry song, boolean save, boolean append, boolean autoplay, boolean playNext) { - DownloadService downloadService = getDownloadService(); - if (downloadService != null) + MediaPlayerController mediaPlayerController = getMediaPlayerController(); + if (mediaPlayerController != null) { if (!append && !playNext) { - downloadService.clear(); + mediaPlayerController.clear(); } - downloadService.download(Collections.singletonList(song), save, false, playNext, false, false); + mediaPlayerController.download(Collections.singletonList(song), save, false, playNext, false, false); if (autoplay) { - downloadService.play(downloader.getValue().downloadList.size() - 1); + mediaPlayerController.play(downloader.getValue().downloadList.size() - 1); } Util.toast(SearchActivity.this, getResources().getQuantityString(R.plurals.select_album_n_songs_added, 1, 1)); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SelectAlbumActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SelectAlbumActivity.java index 76ed4e51..9b13b225 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SelectAlbumActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SelectAlbumActivity.java @@ -1010,7 +1010,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity private void enableButtons() { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -1061,7 +1061,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity private void downloadBackground(final boolean save, final List songs) { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -1072,7 +1072,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity public void run() { warnIfNetworkOrStorageUnavailable(); - getDownloadService().downloadBackground(songs, save); + getMediaPlayerController().downloadBackground(songs, save); if (save) { @@ -1098,19 +1098,19 @@ public class SelectAlbumActivity extends SubsonicTabActivity songs = getSelectedSongs(albumListView); } - if (getDownloadService() != null) + if (getMediaPlayerController() != null) { - getDownloadService().delete(songs); + getMediaPlayerController().delete(songs); } } private void unpin() { - if (getDownloadService() != null) + if (getMediaPlayerController() != null) { List songs = getSelectedSongs(albumListView); Util.toast(SelectAlbumActivity.this, getResources().getQuantityString(R.plurals.select_album_n_songs_unpinned, songs.size(), songs.size())); - getDownloadService().unpin(songs); + getMediaPlayerController().unpin(songs); } } 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 3084b4a6..3a6b5279 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java @@ -76,10 +76,10 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen private static final String STATE_ACTIVE_POSITION = "org.moire.ultrasonic.activePosition"; private static final int DIALOG_ASK_FOR_SHARE_DETAILS = 102; - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); - private Lazy lifecycleSupport = inject(DownloadServiceLifecycleSupport.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); + private Lazy lifecycleSupport = inject(MediaPlayerLifecycleSupport.class); protected Lazy downloader = inject(Downloader.class); - protected Lazy player = inject(Player.class); + protected Lazy localMediaPlayer = inject(LocalMediaPlayer.class); public MenuDrawer menuDrawer; @@ -211,11 +211,11 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen boolean isVolumeDown = keyCode == KeyEvent.KEYCODE_VOLUME_DOWN; boolean isVolumeUp = keyCode == KeyEvent.KEYCODE_VOLUME_UP; boolean isVolumeAdjust = isVolumeDown || isVolumeUp; - boolean isJukebox = getDownloadService() != null && getDownloadService().isJukeboxEnabled(); + boolean isJukebox = getMediaPlayerController() != null && getMediaPlayerController().isJukeboxEnabled(); if (isVolumeAdjust && isJukebox) { - getDownloadService().adjustJukeboxVolume(isVolumeUp); + getMediaPlayerController().adjustJukeboxVolume(isVolumeUp); return true; } @@ -265,16 +265,16 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen if (nowPlayingView != null) { - PlayerState playerState = downloadServiceImpl.getValue().getPlayerState(); + PlayerState playerState = mediaPlayerControllerLazy.getValue().getPlayerState(); if (playerState.equals(PlayerState.PAUSED) || playerState.equals(PlayerState.STARTED)) { - DownloadFile file = player.getValue().currentPlaying; + DownloadFile file = localMediaPlayer.getValue().currentPlaying; if (file != null) { final Entry song = file.getSong(); - showNowPlaying(SubsonicTabActivity.this, downloadServiceImpl.getValue(), song, playerState); + showNowPlaying(SubsonicTabActivity.this, mediaPlayerControllerLazy.getValue(), song, playerState); } } else @@ -309,9 +309,9 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen } } - private void showNowPlaying(final Context context, final DownloadService downloadService, final Entry song, final PlayerState playerState) + private void showNowPlaying(final Context context, final MediaPlayerController mediaPlayerController, final Entry song, final PlayerState playerState) { - if (context == null || downloadService == null || song == null || playerState == null) + if (context == null || mediaPlayerController == null || song == null || playerState == null) { return; } @@ -390,7 +390,7 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen ImageView nowPlayingControlPlay = (ImageView) nowPlayingView.findViewById(R.id.now_playing_control_play); - SwipeDetector swipeDetector = new SwipeDetector(SubsonicTabActivity.this, downloadService); + SwipeDetector swipeDetector = new SwipeDetector(SubsonicTabActivity.this, mediaPlayerController); setOnTouchListenerOnUiThread(nowPlayingView, swipeDetector); setOnClickListenerOnUiThread(nowPlayingView, new OnClickListener() @@ -406,7 +406,7 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen @Override public void onClick(View view) { - downloadService.togglePlayPause(); + mediaPlayerController.togglePlayPause(); } }); @@ -765,9 +765,9 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen } } - public DownloadService getDownloadService() + public MediaPlayerController getMediaPlayerController() { - return downloadServiceImpl.getValue(); + return mediaPlayerControllerLazy.getValue(); } protected void warnIfNetworkOrStorageUnavailable() @@ -818,7 +818,7 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen void download(final boolean append, final boolean save, final boolean autoPlay, final boolean playNext, final boolean shuffle, final List songs) { - if (getDownloadService() == null) + if (getMediaPlayerController() == null) { return; } @@ -830,16 +830,16 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen { if (!append && !playNext) { - getDownloadService().clear(); + getMediaPlayerController().clear(); } warnIfNetworkOrStorageUnavailable(); - getDownloadService().download(songs, save, autoPlay, playNext, shuffle, false); + getMediaPlayerController().download(songs, save, autoPlay, playNext, shuffle, false); String playlistName = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME); if (playlistName != null) { - getDownloadService().setSuggestedPlaylistName(playlistName); + getMediaPlayerController().setSuggestedPlaylistName(playlistName); } if (autoPlay) @@ -994,23 +994,23 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen Collections.sort(songs, new EntryByDiscAndTrackComparator()); } - DownloadService downloadService = getDownloadService(); - if (!songs.isEmpty() && downloadService != null) + MediaPlayerController mediaPlayerController = getMediaPlayerController(); + if (!songs.isEmpty() && mediaPlayerController != null) { if (!append && !playNext && !unpin && !background) { - downloadService.clear(); + mediaPlayerController.clear(); } warnIfNetworkOrStorageUnavailable(); if (!background) { if (unpin) { - downloadService.unpin(songs); + mediaPlayerController.unpin(songs); } else { - downloadService.download(songs, save, autoplay, playNext, shuffle, false); + mediaPlayerController.download(songs, save, autoplay, playNext, shuffle, false); if (!append && Util.getShouldTransitionOnPlaybackPreference(SubsonicTabActivity.this)) { startActivityForResultWithoutTransition(SubsonicTabActivity.this, DownloadActivity.class); @@ -1021,11 +1021,11 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen { if (unpin) { - downloadService.unpin(songs); + mediaPlayerController.unpin(songs); } else { - downloadService.downloadBackground(songs, save); + mediaPlayerController.downloadBackground(songs, save); } } } @@ -1353,15 +1353,15 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen protected class SwipeDetector implements OnTouchListener { - public SwipeDetector(SubsonicTabActivity activity, final DownloadService downloadService) + public SwipeDetector(SubsonicTabActivity activity, final MediaPlayerController mediaPlayerController) { - this.downloadService = downloadService; + this.mediaPlayerController = mediaPlayerController; this.activity = activity; } private static final int MIN_DISTANCE = 30; private float downX, downY, upX, upY; - private DownloadService downloadService; + private MediaPlayerController mediaPlayerController; private SubsonicTabActivity activity; @Override @@ -1388,12 +1388,12 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen // left or right if (deltaX < 0) { - downloadService.previous(); + mediaPlayerController.previous(); return false; } if (deltaX > 0) { - downloadService.next(); + mediaPlayerController.next(); return false; } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java index 57e780ae..abe44f7d 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java @@ -16,8 +16,7 @@ import org.moire.ultrasonic.activity.SubsonicTabActivity; import org.moire.ultrasonic.featureflags.Feature; import org.moire.ultrasonic.featureflags.FeatureStorage; import org.moire.ultrasonic.provider.SearchSuggestionProvider; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.util.*; import java.io.File; @@ -66,7 +65,7 @@ public class SettingsFragment extends PreferenceFragment private SharedPreferences settings; private int activeServers; - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -407,6 +406,6 @@ public class SettingsFragment extends PreferenceFragment } // Clear download queue. - downloadServiceImpl.getValue().clear(); + mediaPlayerControllerLazy.getValue().clear(); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java index e88db061..f710fe8e 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java @@ -17,7 +17,7 @@ import org.moire.ultrasonic.R; import org.moire.ultrasonic.activity.DownloadActivity; import org.moire.ultrasonic.activity.MainActivity; import org.moire.ultrasonic.domain.MusicDirectory; -import org.moire.ultrasonic.service.DownloadService; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.FileUtil; @@ -67,7 +67,7 @@ public class UltraSonicAppWidgetProvider extends AppWidgetProvider } /** - * Handle a change notification coming over from {@link DownloadService} + * Handle a change notification coming over from {@link MediaPlayerController} */ public void notifyChange(Context context, MusicDirectory.Entry currentSong, boolean playing, boolean setAlbum) { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java index 214436c7..0fe2a691 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java @@ -5,9 +5,9 @@ import android.content.Context; import android.content.Intent; import org.moire.ultrasonic.domain.MusicDirectory.Entry; -import org.moire.ultrasonic.service.DownloadServiceImpl; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.service.Downloader; -import org.moire.ultrasonic.service.Player; +import org.moire.ultrasonic.service.LocalMediaPlayer; import kotlin.Lazy; @@ -16,19 +16,19 @@ import static org.koin.java.standalone.KoinJavaComponent.inject; public class A2dpIntentReceiver extends BroadcastReceiver { private static final String PLAYSTATUS_RESPONSE = "com.android.music.playstatusresponse"; - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); private Lazy downloader = inject(Downloader.class); - protected Lazy player = inject(Player.class); + protected Lazy localMediaPlayer = inject(LocalMediaPlayer.class); @Override public void onReceive(Context context, Intent intent) { - if (player.getValue().currentPlaying == null) + if (localMediaPlayer.getValue().currentPlaying == null) { return; } - Entry song = player.getValue().currentPlaying.getSong(); + Entry song = localMediaPlayer.getValue().currentPlaying.getSong(); if (song == null) { @@ -38,7 +38,7 @@ public class A2dpIntentReceiver extends BroadcastReceiver Intent avrcpIntent = new Intent(PLAYSTATUS_RESPONSE); Integer duration = song.getDuration(); - int playerPosition = downloadServiceImpl.getValue().getPlayerPosition(); + int playerPosition = mediaPlayerControllerLazy.getValue().getPlayerPosition(); int listSize = downloader.getValue().getDownloads().size(); if (duration != null) @@ -49,7 +49,7 @@ public class A2dpIntentReceiver extends BroadcastReceiver avrcpIntent.putExtra("position", (long) playerPosition); avrcpIntent.putExtra("ListSize", (long) listSize); - switch (downloadServiceImpl.getValue().getPlayerState()) + switch (mediaPlayerControllerLazy.getValue().getPlayerState()) { case STARTED: avrcpIntent.putExtra("playing", true); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java index 2315dc3e..ee636c40 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java @@ -25,7 +25,7 @@ import android.os.Bundle; import android.os.Parcelable; import android.util.Log; -import org.moire.ultrasonic.service.DownloadServiceLifecycleSupport; +import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport; import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.Util; @@ -39,7 +39,7 @@ import static org.koin.java.standalone.KoinJavaComponent.inject; public class MediaButtonIntentReceiver extends BroadcastReceiver { private static final String TAG = MediaButtonIntentReceiver.class.getSimpleName(); - private Lazy lifecycleSupport = inject(DownloadServiceLifecycleSupport.class); + private Lazy lifecycleSupport = inject(MediaPlayerLifecycleSupport.class); @Override public void onReceive(Context context, Intent intent) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Downloader.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/Downloader.java index f5f18df4..dd22283e 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Downloader.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/Downloader.java @@ -26,29 +26,31 @@ public class Downloader { private static final String TAG = Downloader.class.getSimpleName(); - private final ShufflePlayBuffer shufflePlayBuffer; - private final ExternalStorageMonitor externalStorageMonitor; - private final Player player; - public Lazy jukeboxService = inject(JukeboxService.class); - public final List downloadList = new ArrayList<>(); public final List backgroundDownloadList = new ArrayList<>(); + public DownloadFile currentDownloading; + + private final ShufflePlayBuffer shufflePlayBuffer; + private final ExternalStorageMonitor externalStorageMonitor; + private final LocalMediaPlayer localMediaPlayer; + private final Context context; + + // TODO: This is a circular reference, try to remove + private Lazy jukeboxMediaPlayer = inject(JukeboxMediaPlayer.class); + private final List cleanupCandidates = new ArrayList<>(); private final LRUCache downloadFileCache = new LRUCache<>(100); - - public DownloadFile currentDownloading; - public static long revision; - private ScheduledExecutorService executorService; - private Context context; + private long revision; + public Downloader(Context context, ShufflePlayBuffer shufflePlayBuffer, ExternalStorageMonitor externalStorageMonitor, - Player player) + LocalMediaPlayer localMediaPlayer) { this.context = context; this.shufflePlayBuffer = shufflePlayBuffer; this.externalStorageMonitor = externalStorageMonitor; - this.player = player; + this.localMediaPlayer = localMediaPlayer; } public void onCreate() @@ -78,6 +80,8 @@ public class Downloader public void onDestroy() { executorService.shutdown(); + clear(); + clearBackground(); Log.i(TAG, "Downloader destroyed"); } @@ -93,7 +97,7 @@ public class Downloader checkShufflePlay(context); } - if (jukeboxService.getValue().isEnabled() || !Util.isNetworkConnected(context)) + if (jukeboxMediaPlayer.getValue().isEnabled() || !Util.isNetworkConnected(context)) { return; } @@ -104,7 +108,7 @@ public class Downloader } // Need to download current playing? - if (player.currentPlaying != null && player.currentPlaying != currentDownloading && !player.currentPlaying.isWorkDone()) + if (localMediaPlayer.currentPlaying != null && localMediaPlayer.currentPlaying != currentDownloading && !localMediaPlayer.currentPlaying.isWorkDone()) { // Cancel current download, if necessary. if (currentDownloading != null) @@ -112,7 +116,7 @@ public class Downloader currentDownloading.cancelDownload(); } - currentDownloading = player.currentPlaying; + currentDownloading = localMediaPlayer.currentPlaying; currentDownloading.download(); cleanupCandidates.add(currentDownloading); @@ -138,7 +142,7 @@ public class Downloader if (n != 0) { - int start = player.currentPlaying == null ? 0 : getCurrentPlayingIndex(); + int start = localMediaPlayer.currentPlaying == null ? 0 : getCurrentPlayingIndex(); if (start == -1) start = 0; int i = start; @@ -154,12 +158,12 @@ public class Downloader cleanupCandidates.add(currentDownloading); if (i == (start + 1)) { - player.setNextPlayerState(DOWNLOADING); + localMediaPlayer.setNextPlayerState(DOWNLOADING); } break; } } - else if (player.currentPlaying != downloadFile) + else if (localMediaPlayer.currentPlaying != downloadFile) { preloaded++; } @@ -201,7 +205,7 @@ public class Downloader public synchronized int getCurrentPlayingIndex() { - return downloadList.indexOf(player.currentPlaying); + return downloadList.indexOf(localMediaPlayer.currentPlaying); } public long getDownloadListDuration() @@ -237,11 +241,6 @@ public class Downloader return temp; } - public List getBackgroundDownloads() - { - return backgroundDownloadList; - } - public long getDownloadListUpdateRevision() { return revision; @@ -258,7 +257,7 @@ public class Downloader } } - public synchronized void clearBackground() + private void clearBackground() { if (currentDownloading != null && backgroundDownloadList.contains(currentDownloading)) { @@ -337,25 +336,14 @@ public class Downloader public synchronized void shuffle() { Collections.shuffle(downloadList); - if (player.currentPlaying != null) + if (localMediaPlayer.currentPlaying != null) { downloadList.remove(getCurrentPlayingIndex()); - downloadList.add(0, player.currentPlaying); + downloadList.add(0, localMediaPlayer.currentPlaying); } revision++; } - public synchronized void setFirstPlaying() - { - if (player.currentPlaying == null && downloadList.size() > 0) - { - player.currentPlaying = downloadList.get(0); - player.currentPlaying.setPlaying(true); - } - - checkDownloads(); - } - public synchronized DownloadFile getDownloadFileForSong(MusicDirectory.Entry song) { for (DownloadFile downloadFile : downloadList) @@ -388,7 +376,7 @@ public class Downloader while (iterator.hasNext()) { DownloadFile downloadFile = iterator.next(); - if (downloadFile != player.currentPlaying && downloadFile != currentDownloading) + if (downloadFile != localMediaPlayer.currentPlaying && downloadFile != currentDownloading) { if (downloadFile.cleanup()) { @@ -418,7 +406,7 @@ public class Downloader } } - int currIndex = player.currentPlaying == null ? 0 : getCurrentPlayingIndex(); + int currIndex = localMediaPlayer.currentPlaying == null ? 0 : getCurrentPlayingIndex(); // Only shift playlist if playing song #5 or later. if (currIndex > 4) @@ -435,19 +423,19 @@ public class Downloader if (revisionBefore != revision) { - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); } if (wasEmpty && !downloadList.isEmpty()) { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().skip(0, 0); - player.setPlayerState(STARTED); + jukeboxMediaPlayer.getValue().skip(0, 0); + localMediaPlayer.setPlayerState(STARTED); } else { - player.play(downloadList.get(0)); + localMediaPlayer.play(downloadList.get(0)); } } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java similarity index 93% rename from ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxService.java rename to ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java index 449e6a43..b79a572f 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java @@ -27,6 +27,7 @@ import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; +import org.jetbrains.annotations.NotNull; import org.moire.ultrasonic.R; import org.moire.ultrasonic.api.subsonic.ApiNotSupportedException; import org.moire.ultrasonic.domain.JukeboxStatus; @@ -54,9 +55,9 @@ import static org.koin.java.standalone.KoinJavaComponent.inject; * @author Sindre Mehus * @version $Id$ */ -public class JukeboxService +public class JukeboxMediaPlayer { - private static final String TAG = JukeboxService.class.getSimpleName(); + private static final String TAG = JukeboxMediaPlayer.class.getSimpleName(); private static final long STATUS_UPDATE_INTERVAL_SECONDS = 5L; private final TaskQueue tasks = new TaskQueue(); @@ -72,7 +73,7 @@ public class JukeboxService private Context context; // TODO: These create circular references, try to refactor - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerControllerImpl.class); private final Downloader downloader; // TODO: Report warning if queue fills up. @@ -81,7 +82,7 @@ public class JukeboxService // TODO: Persist RC state? // TODO: Minimize status updates. - public JukeboxService(Context context, Downloader downloader) + public JukeboxMediaPlayer(Context context, Downloader downloader) { this.context = context; this.downloader = downloader; @@ -187,7 +188,7 @@ public class JukeboxService if (index != null && index != -1 && index != downloader.getCurrentPlayingIndex()) { - downloadServiceImpl.getValue().setCurrentPlaying(index); + mediaPlayerControllerLazy.getValue().setCurrentPlaying(index); } } @@ -224,7 +225,7 @@ public class JukeboxService } }); - downloadServiceImpl.getValue().setJukeboxEnabled(false); + mediaPlayerControllerLazy.getValue().setJukeboxEnabled(false); } public void updatePlaylist() @@ -258,7 +259,7 @@ public class JukeboxService } tasks.add(new Skip(index, offsetSeconds)); - downloadServiceImpl.getValue().setPlayerState(PlayerState.STARTED); + mediaPlayerControllerLazy.getValue().setPlayerState(PlayerState.STARTED); } public void stop() @@ -290,10 +291,8 @@ public class JukeboxService tasks.remove(SetGain.class); tasks.add(new SetGain(gain)); - if (volumeToast == null) - { - volumeToast = new VolumeToast(context); - } + if (volumeToast == null) volumeToast = new VolumeToast(context); + volumeToast.setVolume(gain); } @@ -377,10 +376,11 @@ public class JukeboxService } } - private abstract class JukeboxTask + private abstract static class JukeboxTask { abstract JukeboxStatus execute() throws Exception; + @NotNull @Override public String toString() { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Player.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java similarity index 94% rename from ultrasonic/src/main/java/org/moire/ultrasonic/service/Player.java rename to ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java index def1bb07..02659e46 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Player.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/LocalMediaPlayer.java @@ -18,6 +18,7 @@ import android.os.PowerManager; import android.util.Log; import android.widget.SeekBar; +import org.jetbrains.annotations.NotNull; import org.moire.ultrasonic.activity.DownloadActivity; import org.moire.ultrasonic.audiofx.EqualizerController; import org.moire.ultrasonic.audiofx.VisualizerController; @@ -32,6 +33,7 @@ import org.moire.ultrasonic.util.Util; import java.io.File; import java.net.URLEncoder; +import java.util.Locale; import static org.moire.ultrasonic.domain.PlayerState.COMPLETED; import static org.moire.ultrasonic.domain.PlayerState.DOWNLOADING; @@ -41,37 +43,9 @@ import static org.moire.ultrasonic.domain.PlayerState.PREPARED; import static org.moire.ultrasonic.domain.PlayerState.PREPARING; import static org.moire.ultrasonic.domain.PlayerState.STARTED; -public class Player +public class LocalMediaPlayer { - private static final String TAG = Player.class.getSimpleName(); - private final Context context; - - private PowerManager.WakeLock wakeLock; - public DownloadFile currentPlaying; - public DownloadFile nextPlaying; - private static boolean nextSetup; - private static CancellableTask nextPlayingTask; - private MediaPlayer mediaPlayer; - - private MediaPlayer nextMediaPlayer; - private Looper mediaPlayerLooper; - private Handler mediaPlayerHandler; - public static int cachedPosition; - private StreamProxy proxy; - - public PlayerState playerState = IDLE; - public PlayerState nextPlayerState = IDLE; - - private AudioManager audioManager; - public RemoteControlClient remoteControlClient; - - public static boolean equalizerAvailable; - public static boolean visualizerAvailable; - private EqualizerController equalizerController; - private VisualizerController visualizerController; - private CancellableTask bufferTask; - private PositionCache positionCache; - private int secondaryProgress = -1; + private static final String TAG = LocalMediaPlayer.class.getSimpleName(); public Consumer onCurrentPlayingChanged; public Consumer onSongCompleted; @@ -79,6 +53,35 @@ public class Player public Runnable onPrepared; public Runnable onNextSongRequested; + public static boolean equalizerAvailable; + public static boolean visualizerAvailable; + + public PlayerState playerState = IDLE; + public DownloadFile currentPlaying; + public DownloadFile nextPlaying; + private PlayerState nextPlayerState = IDLE; + private boolean nextSetup; + private CancellableTask nextPlayingTask; + private PowerManager.WakeLock wakeLock; + + private MediaPlayer mediaPlayer; + private MediaPlayer nextMediaPlayer; + private Looper mediaPlayerLooper; + private Handler mediaPlayerHandler; + private int cachedPosition; + private StreamProxy proxy; + + private AudioManager audioManager; + private RemoteControlClient remoteControlClient; + + private EqualizerController equalizerController; + private VisualizerController visualizerController; + private CancellableTask bufferTask; + private PositionCache positionCache; + private int secondaryProgress = -1; + + private final Context context; + static { try @@ -105,7 +108,7 @@ public class Player } } - public Player(Context context) + public LocalMediaPlayer(Context context) { this.context = context; } @@ -134,7 +137,7 @@ public class Player @Override public boolean onError(MediaPlayer mediaPlayer, int what, int more) { - handleError(new Exception(String.format("MediaPlayer error: %d (%d)", what, more))); + handleError(new Exception(String.format(Locale.getDefault(), "MediaPlayer error: %d (%d)", what, more))); return false; } }); @@ -187,7 +190,7 @@ public class Player } } - Log.i(TAG, "Player created"); + Log.i(TAG, "LocalMediaPlayer created"); } public void onDestroy() @@ -237,7 +240,7 @@ public class Player { } - Log.i(TAG, "Player destroyed"); + Log.i(TAG, "LocalMediaPlayer destroyed"); } public EqualizerController getEqualizerController() @@ -452,28 +455,18 @@ public class Player Log.i(TAG, String.format("In updateRemoteControl, playerState: %s [%d]", playerState, getPlayerPosition())); - switch (playerState) - { - case STARTED: - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) - { - remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING); - } - else - { - remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING, getPlayerPosition(), 1.0f); - } - break; - default: - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) - { - remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); - } - else - { - remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED, getPlayerPosition(), 1.0f); - } - break; + if (playerState == STARTED) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { + remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING); + } else { + remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING, getPlayerPosition(), 1.0f); + } + } else { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { + remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); + } else { + remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED, getPlayerPosition(), 1.0f); + } } if (currentPlaying != null) @@ -486,7 +479,7 @@ public class Player String album = currentSong.getAlbum(); String title = currentSong.getTitle(); Integer currentSongDuration = currentSong.getDuration(); - Long duration = 0L; + long duration = 0L; if (currentSongDuration != null) duration = (long) currentSongDuration * 1000; @@ -653,7 +646,8 @@ public class Player proxy.start(); } - dataSource = String.format("http://127.0.0.1:%d/%s", proxy.getPort(), URLEncoder.encode(dataSource, Constants.UTF_8)); + dataSource = String.format(Locale.getDefault(), "http://127.0.0.1:%d/%s", + proxy.getPort(), URLEncoder.encode(dataSource, Constants.UTF_8)); Log.i(TAG, String.format("Data Source: %s", dataSource)); } else if (proxy != null) @@ -708,7 +702,7 @@ public class Player DownloadActivity.getProgressBar().setSecondaryProgress(100 * progressBar.getMax()); } - synchronized (Player.this) + synchronized (LocalMediaPlayer.this) { if (position != 0) { @@ -856,15 +850,11 @@ public class Player if (Util.getGaplessPlaybackPreference(context) && nextPlaying != null && nextPlayerState == PlayerState.PREPARED) { - if (!nextSetup) - { - playNext(); - } - else + if (nextSetup) { nextSetup = false; - playNext(); } + playNext(); } else { @@ -978,6 +968,7 @@ public class Player return completeFileAvailable || size >= expectedFileSize; } + @NotNull @Override public String toString() { @@ -1041,6 +1032,7 @@ public class Player return completeFileAvailable && (playerState == PlayerState.STARTED || playerState == PlayerState.PAUSED); } + @NotNull @Override public String toString() { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerController.java similarity index 92% rename from ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadService.java rename to ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerController.java index b11eaaf6..19f15d80 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerController.java @@ -30,7 +30,7 @@ import java.util.List; * @author Sindre Mehus * @version $Id$ */ -public interface DownloadService +public interface MediaPlayerController { void download(List songs, boolean save, boolean autoplay, boolean playNext, boolean shuffle, boolean newPlaylist); @@ -53,10 +53,6 @@ public interface DownloadService boolean getShowVisualization(); - boolean getEqualizerAvailable(); - - boolean getVisualizerAvailable(); - void setShowVisualization(boolean showVisualization); void clear(); @@ -103,8 +99,6 @@ public interface DownloadService boolean isJukeboxAvailable(); - boolean isSharingAvailable(); - void setJukeboxEnabled(boolean b); void adjustJukeboxVolume(boolean up); @@ -113,14 +107,10 @@ public interface DownloadService void setVolume(float volume); - void swap(boolean mainList, int from, int to); - void restore(List songs, int currentPlayingIndex, int currentPlayingPosition, boolean autoPlay, boolean newPlaylist); void stopJukeboxService(); - void startJukeboxService(); - void updateNotification(); void setSongRating(final int rating); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceImpl.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java similarity index 78% rename from ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceImpl.java rename to ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java index 8b7b2795..cd42902f 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceImpl.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerControllerImpl.java @@ -20,7 +20,6 @@ package org.moire.ultrasonic.service; import android.content.Context; import android.content.Intent; -import android.os.Handler; import android.util.Log; import org.koin.java.standalone.KoinJavaComponent; @@ -47,9 +46,9 @@ import static org.koin.java.standalone.KoinJavaComponent.inject; * @author Sindre Mehus, Joshua Bahnsen * @version $Id$ */ -public class DownloadServiceImpl implements DownloadService +public class MediaPlayerControllerImpl implements MediaPlayerController { - private static final String TAG = DownloadServiceImpl.class.getSimpleName(); + private static final String TAG = MediaPlayerControllerImpl.class.getSimpleName(); private String suggestedPlaylistName; private boolean keepScreenOn; @@ -58,20 +57,20 @@ public class DownloadServiceImpl implements DownloadService private boolean autoPlayStart; private Context context; - public Lazy jukeboxService = inject(JukeboxService.class); + private Lazy jukeboxMediaPlayer = inject(JukeboxMediaPlayer.class); private Lazy downloadQueueSerializer = inject(DownloadQueueSerializer.class); private Lazy externalStorageMonitor = inject(ExternalStorageMonitor.class); private final Downloader downloader; private final ShufflePlayBuffer shufflePlayBuffer; - private final Player player; + private final LocalMediaPlayer localMediaPlayer; - public DownloadServiceImpl(Context context, Downloader downloader, ShufflePlayBuffer shufflePlayBuffer, - Player player) + public MediaPlayerControllerImpl(Context context, Downloader downloader, ShufflePlayBuffer shufflePlayBuffer, + LocalMediaPlayer localMediaPlayer) { this.context = context; this.downloader = downloader; this.shufflePlayBuffer = shufflePlayBuffer; - this.player = player; + this.localMediaPlayer = localMediaPlayer; externalStorageMonitor.getValue().onCreate(new Runnable() { @Override @@ -83,14 +82,14 @@ public class DownloadServiceImpl implements DownloadService int instance = Util.getActiveServer(context); setJukeboxEnabled(Util.getJukeboxEnabled(context, instance)); - Log.i(TAG, "DownloadServiceImpl created"); + Log.i(TAG, "MediaPlayerControllerImpl created"); } public void onDestroy() { externalStorageMonitor.getValue().onDestroy(); context.stopService(new Intent(context, MediaPlayerService.class)); - Log.i(TAG, "DownloadServiceImpl destroyed"); + Log.i(TAG, "MediaPlayerControllerImpl destroyed"); } private void executeOnStartedMediaPlayerService(final Consumer taskToExecute) @@ -120,20 +119,20 @@ public class DownloadServiceImpl implements DownloadService } }); - if (player.currentPlaying != null) + if (localMediaPlayer.currentPlaying != null) { - if (autoPlay && jukeboxService.getValue().isEnabled()) + if (autoPlay && jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().skip(downloader.getCurrentPlayingIndex(), currentPlayingPosition / 1000); + jukeboxMediaPlayer.getValue().skip(downloader.getCurrentPlayingIndex(), currentPlayingPosition / 1000); } else { - if (player.currentPlaying.isCompleteFileAvailable()) + if (localMediaPlayer.currentPlaying.isCompleteFileAvailable()) { executeOnStartedMediaPlayerService(new Consumer() { @Override public void accept(MediaPlayerService mediaPlayerService) { - player.doPlay(player.currentPlaying, currentPlayingPosition, autoPlay); + localMediaPlayer.doPlay(localMediaPlayer.currentPlaying, currentPlayingPosition, autoPlay); } }); } @@ -167,7 +166,7 @@ public class DownloadServiceImpl implements DownloadService @Override public synchronized void togglePlayPause() { - if (player.playerState == PlayerState.IDLE) autoPlayStart = true; + if (localMediaPlayer.playerState == PlayerState.IDLE) autoPlayStart = true; executeOnStartedMediaPlayerService(new Consumer() { @Override public void accept(MediaPlayerService mediaPlayerService) { @@ -224,7 +223,7 @@ public class DownloadServiceImpl implements DownloadService public synchronized void download(List songs, boolean save, boolean autoPlay, boolean playNext, boolean shuffle, boolean newPlaylist) { downloader.download(songs, save, autoPlay, playNext, newPlaylist); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); if (shuffle) shuffle(); @@ -240,7 +239,13 @@ public class DownloadServiceImpl implements DownloadService } else { - downloader.setFirstPlaying(); + if (localMediaPlayer.currentPlaying == null && downloader.downloadList.size() > 0) + { + localMediaPlayer.currentPlaying = downloader.downloadList.get(0); + localMediaPlayer.currentPlaying.setPlaying(true); + } + + downloader.checkDownloads(); } downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); @@ -256,7 +261,7 @@ public class DownloadServiceImpl implements DownloadService public synchronized void setCurrentPlaying(DownloadFile currentPlaying) { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) player.setCurrentPlaying(currentPlaying); + if (mediaPlayerService != null) localMediaPlayer.setCurrentPlaying(currentPlaying); } public synchronized void setCurrentPlaying(int index) @@ -268,19 +273,13 @@ public class DownloadServiceImpl implements DownloadService public synchronized void setPlayerState(PlayerState state) { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) player.setPlayerState(state); + if (mediaPlayerService != null) localMediaPlayer.setPlayerState(state); } @Override public void stopJukeboxService() { - jukeboxService.getValue().stopJukeboxService(); - } - - @Override - public void startJukeboxService() - { - jukeboxService.getValue().startJukeboxService(); + jukeboxMediaPlayer.getValue().stopJukeboxService(); } @Override @@ -306,7 +305,7 @@ public class DownloadServiceImpl implements DownloadService downloader.shuffle(); downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); if (mediaPlayerService != null) mediaPlayerService.setNextPlaying(); @@ -361,7 +360,7 @@ public class DownloadServiceImpl implements DownloadService MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); if (mediaPlayerService != null) mediaPlayerService.clear(serialize); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); } @Override @@ -380,13 +379,13 @@ public class DownloadServiceImpl implements DownloadService } downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); } @Override public synchronized void remove(DownloadFile downloadFile) { - if (downloadFile == player.currentPlaying) + if (downloadFile == localMediaPlayer.currentPlaying) { reset(); setCurrentPlaying(null); @@ -395,9 +394,9 @@ public class DownloadServiceImpl implements DownloadService downloader.removeDownloadFile(downloadFile); downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); - if (downloadFile == player.nextPlaying) + if (downloadFile == localMediaPlayer.nextPlaying) { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); if (mediaPlayerService != null) mediaPlayerService.setNextPlaying(); @@ -456,7 +455,7 @@ public class DownloadServiceImpl implements DownloadService public synchronized void reset() { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) player.reset(); + if (mediaPlayerService != null) localMediaPlayer.reset(); } @Override @@ -470,9 +469,9 @@ public class DownloadServiceImpl implements DownloadService @Override public synchronized int getPlayerDuration() { - if (player.currentPlaying != null) + if (localMediaPlayer.currentPlaying != null) { - Integer duration = player.currentPlaying.getSong().getDuration(); + Integer duration = localMediaPlayer.currentPlaying.getSong().getDuration(); if (duration != null) { return duration * 1000; @@ -485,7 +484,7 @@ public class DownloadServiceImpl implements DownloadService } @Override - public PlayerState getPlayerState() { return player.playerState; } + public PlayerState getPlayerState() { return localMediaPlayer.playerState; } @Override public void setSuggestedPlaylistName(String name) @@ -499,21 +498,12 @@ public class DownloadServiceImpl implements DownloadService return suggestedPlaylistName; } - @Override - public boolean getEqualizerAvailable() { return player.equalizerAvailable; } - - @Override - public boolean getVisualizerAvailable() - { - return player.visualizerAvailable; - } - @Override public EqualizerController getEqualizerController() { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); if (mediaPlayerService == null) return null; - return player.getEqualizerController(); + return localMediaPlayer.getEqualizerController(); } @Override @@ -521,13 +511,13 @@ public class DownloadServiceImpl implements DownloadService { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); if (mediaPlayerService == null) return null; - return player.getVisualizerController(); + return localMediaPlayer.getVisualizerController(); } @Override public boolean isJukeboxEnabled() { - return jukeboxService.getValue().isEnabled(); + return jukeboxMediaPlayer.getValue().isEnabled(); } @Override @@ -547,32 +537,15 @@ public class DownloadServiceImpl implements DownloadService return false; } - @Override - public boolean isSharingAvailable() - { - try - { - String username = Util.getUserName(context, Util.getActiveServer(context)); - UserInfo user = MusicServiceFactory.getMusicService(context).getUser(username, context, null); - return user.getShareRole(); - } - catch (Exception e) - { - Log.w(TAG, "Error getting user information", e); - } - - return false; - } - @Override public void setJukeboxEnabled(boolean jukeboxEnabled) { - jukeboxService.getValue().setEnabled(jukeboxEnabled); + jukeboxMediaPlayer.getValue().setEnabled(jukeboxEnabled); setPlayerState(PlayerState.IDLE); if (jukeboxEnabled) { - jukeboxService.getValue().startJukeboxService(); + jukeboxMediaPlayer.getValue().startJukeboxService(); reset(); @@ -584,59 +557,28 @@ public class DownloadServiceImpl implements DownloadService } else { - jukeboxService.getValue().stopJukeboxService(); + jukeboxMediaPlayer.getValue().stopJukeboxService(); } } @Override public void adjustJukeboxVolume(boolean up) { - jukeboxService.getValue().adjustVolume(up); + jukeboxMediaPlayer.getValue().adjustVolume(up); } @Override public void setVolume(float volume) { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) player.setVolume(volume); - } - - @Override - public synchronized void swap(boolean mainList, int from, int to) - { - List list = mainList ? downloader.downloadList : downloader.backgroundDownloadList; - int max = list.size(); - - if (to >= max) - { - to = max - 1; - } - else if (to < 0) - { - to = 0; - } - - int currentPlayingIndex = downloader.getCurrentPlayingIndex(); - DownloadFile movedSong = list.remove(from); - list.add(to, movedSong); - - if (jukeboxService.getValue().isEnabled() && mainList) - { - jukeboxService.getValue().updatePlaylist(); - } - else if (mainList && (movedSong == player.nextPlaying || (currentPlayingIndex + 1) == to)) - { - // Moving next playing or moving a song to be next playing - MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) mediaPlayerService.setNextPlaying(); - } + if (mediaPlayerService != null) localMediaPlayer.setVolume(volume); } @Override public void updateNotification() { MediaPlayerService mediaPlayerService = MediaPlayerService.getRunningInstance(); - if (mediaPlayerService != null) mediaPlayerService.updateNotification(player.playerState, player.currentPlaying); + if (mediaPlayerService != null) mediaPlayerService.updateNotification(localMediaPlayer.playerState, localMediaPlayer.currentPlaying); } public void setSongRating(final int rating) @@ -644,10 +586,10 @@ public class DownloadServiceImpl implements DownloadService if (!KoinJavaComponent.get(FeatureStorage.class).isFeatureEnabled(Feature.FIVE_STAR_RATING)) return; - if (player.currentPlaying == null) + if (localMediaPlayer.currentPlaying == null) return; - final Entry song = player.currentPlaying.getSong(); + final Entry song = localMediaPlayer.currentPlaying.getSong(); song.setUserRating(rating); new Thread(new Runnable() diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java similarity index 72% rename from ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java rename to ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java index a63829a9..15663aa6 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/DownloadServiceLifecycleSupport.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerLifecycleSupport.java @@ -18,7 +18,6 @@ */ package org.moire.ultrasonic.service; -import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -43,20 +42,20 @@ import static org.koin.java.standalone.KoinJavaComponent.inject; /** * @author Sindre Mehus */ -public class DownloadServiceLifecycleSupport +public class MediaPlayerLifecycleSupport { - private static final String TAG = DownloadServiceLifecycleSupport.class.getSimpleName(); + private static final String TAG = MediaPlayerLifecycleSupport.class.getSimpleName(); private Lazy downloadQueueSerializer = inject(DownloadQueueSerializer.class); - private final DownloadServiceImpl downloadService; // From DI + private final MediaPlayerControllerImpl mediaPlayerController; // From DI private final Downloader downloader; // From DI - - private BroadcastReceiver headsetEventReceiver; private Context context; - public DownloadServiceLifecycleSupport(Context context, final DownloadServiceImpl downloadService, final Downloader downloader) + private BroadcastReceiver headsetEventReceiver; + + public MediaPlayerLifecycleSupport(Context context, final MediaPlayerControllerImpl mediaPlayerController, final Downloader downloader) { - this.downloadService = downloadService; + this.mediaPlayerController = mediaPlayerController; this.context = context; this.downloader = downloader; @@ -80,11 +79,11 @@ public class DownloadServiceLifecycleSupport @Override public void accept(State state) { // TODO: here the autoPlay = false creates problems when Ultrasonic is started by a Play MediaButton as the player won't start this way. - downloadService.restore(state.songs, state.currentPlayingIndex, state.currentPlayingPosition, false, false); + mediaPlayerController.restore(state.songs, state.currentPlayingIndex, state.currentPlayingPosition, false, false); // Work-around: Serialize again, as the restore() method creates a serialization without current playing info. downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, - downloader.getCurrentPlayingIndex(), downloadService.getPlayerPosition()); + downloader.getCurrentPlayingIndex(), mediaPlayerController.getPlayerPosition()); } }); @@ -94,13 +93,26 @@ public class DownloadServiceLifecycleSupport public void onDestroy() { - downloadService.clear(false); + mediaPlayerController.clear(false); context.unregisterReceiver(headsetEventReceiver); context.unregisterReceiver(intentReceiver); - downloadService.onDestroy(); + mediaPlayerController.onDestroy(); Log.i(TAG, "LifecycleSupport destroyed"); } + public void receiveIntent(Intent intent) + { + Log.i(TAG, "Received intent"); + if (intent != null && intent.getExtras() != null) + { + KeyEvent event = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT); + if (event != null) + { + handleKeyEvent(event); + } + } + } + private void registerHeadsetReceiver() { // Pause when headset is unplugged. final SharedPreferences sp = Util.getPreferences(context); @@ -119,38 +131,32 @@ public class DownloadServiceLifecycleSupport Log.i(TAG, String.format("Headset event for: %s", extras.get("name"))); final int state = extras.getInt("state"); if (state == 0) { - if (!downloadService.isJukeboxEnabled()) { - downloadService.pause(); + if (!mediaPlayerController.isJukeboxEnabled()) { + mediaPlayerController.pause(); } } else if (state == 1) { - if (!downloadService.isJukeboxEnabled() && + if (!mediaPlayerController.isJukeboxEnabled() && sp.getBoolean(spKey, false) && - downloadService.getPlayerState() == PlayerState.PAUSED) { - downloadService.start(); + mediaPlayerController.getPlayerState() == PlayerState.PAUSED) { + mediaPlayerController.start(); } } } }; - @SuppressLint("InlinedApi") - IntentFilter headsetIntentFilter = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) ? - new IntentFilter(AudioManager.ACTION_HEADSET_PLUG) : - new IntentFilter(Intent.ACTION_HEADSET_PLUG); + + + IntentFilter headsetIntentFilter; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + { + headsetIntentFilter = new IntentFilter(AudioManager.ACTION_HEADSET_PLUG); + } + else + { + headsetIntentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); + } context.registerReceiver(headsetEventReceiver, headsetIntentFilter); } - public void receiveIntent(Intent intent) - { - Log.i(TAG, "Received intent"); - if (intent != null && intent.getExtras() != null) - { - KeyEvent event = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT); - if (event != null) - { - handleKeyEvent(event); - } - } - } - private void handleKeyEvent(KeyEvent event) { if (event.getAction() != KeyEvent.ACTION_DOWN || event.getRepeatCount() > 0) @@ -162,47 +168,47 @@ public class DownloadServiceLifecycleSupport { case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: case KeyEvent.KEYCODE_HEADSETHOOK: - downloadService.togglePlayPause(); + mediaPlayerController.togglePlayPause(); break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: - downloadService.previous(); + mediaPlayerController.previous(); break; case KeyEvent.KEYCODE_MEDIA_NEXT: if (downloader.getCurrentPlayingIndex() < downloader.downloadList.size() - 1) { - downloadService.next(); + mediaPlayerController.next(); } break; case KeyEvent.KEYCODE_MEDIA_STOP: - downloadService.stop(); + mediaPlayerController.stop(); break; case KeyEvent.KEYCODE_MEDIA_PLAY: - if (downloadService.getPlayerState() == PlayerState.IDLE) + if (mediaPlayerController.getPlayerState() == PlayerState.IDLE) { - downloadService.play(); + mediaPlayerController.play(); } - else if (downloadService.getPlayerState() != PlayerState.STARTED) + else if (mediaPlayerController.getPlayerState() != PlayerState.STARTED) { - downloadService.start(); + mediaPlayerController.start(); } break; case KeyEvent.KEYCODE_MEDIA_PAUSE: - downloadService.pause(); + mediaPlayerController.pause(); break; case KeyEvent.KEYCODE_1: - downloadService.setSongRating(1); + mediaPlayerController.setSongRating(1); break; case KeyEvent.KEYCODE_2: - downloadService.setSongRating(2); + mediaPlayerController.setSongRating(2); break; case KeyEvent.KEYCODE_3: - downloadService.setSongRating(3); + mediaPlayerController.setSongRating(3); break; case KeyEvent.KEYCODE_4: - downloadService.setSongRating(4); + mediaPlayerController.setSongRating(4); break; case KeyEvent.KEYCODE_5: - downloadService.setSongRating(5); + mediaPlayerController.setSongRating(5); break; default: break; @@ -224,20 +230,20 @@ public class DownloadServiceLifecycleSupport switch(action) { case Constants.CMD_PLAY: - downloadService.play(); + mediaPlayerController.play(); break; case Constants.CMD_NEXT: - downloadService.next(); + mediaPlayerController.next(); break; case Constants.CMD_PREVIOUS: - downloadService.previous(); + mediaPlayerController.previous(); break; case Constants.CMD_TOGGLEPAUSE: - downloadService.togglePlayPause(); + mediaPlayerController.togglePlayPause(); break; case Constants.CMD_STOP: - downloadService.pause(); - downloadService.seekTo(0); + mediaPlayerController.pause(); + mediaPlayerController.seekTo(0); break; case Constants.CMD_PROCESS_KEYCODE: receiveIntent(intent); 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 3e2b15f2..c57197e0 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java @@ -59,12 +59,12 @@ public class MediaPlayerService extends Service private final IBinder binder = new SimpleServiceBinder<>(this); private final Scrobbler scrobbler = new Scrobbler(); - public Lazy jukeboxService = inject(JukeboxService.class); + public Lazy jukeboxMediaPlayer = inject(JukeboxMediaPlayer.class); private Lazy downloadQueueSerializer = inject(DownloadQueueSerializer.class); private Lazy shufflePlayBufferLazy = inject(ShufflePlayBuffer.class); private Lazy downloaderLazy = inject(Downloader.class); - private Lazy playerLazy = inject(Player.class); - private Player player; + private Lazy localMediaPlayerLazy = inject(LocalMediaPlayer.class); + private LocalMediaPlayer localMediaPlayer; private Downloader downloader; private ShufflePlayBuffer shufflePlayBuffer; @@ -112,24 +112,24 @@ public class MediaPlayerService extends Service super.onCreate(); downloader = downloaderLazy.getValue(); - player = playerLazy.getValue(); + localMediaPlayer = localMediaPlayerLazy.getValue(); shufflePlayBuffer = shufflePlayBufferLazy.getValue(); downloader.onCreate(); shufflePlayBuffer.onCreate(); - player.onCreate(); + localMediaPlayer.onCreate(); setupOnCurrentPlayingChangedHandler(); setupOnPlayerStateChangedHandler(); setupOnSongCompletedHandler(); - player.onPrepared = new Runnable() { + localMediaPlayer.onPrepared = new Runnable() { @Override public void run() { downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); } }; - player.onNextSongRequested = new Runnable() { + localMediaPlayer.onNextSongRequested = new Runnable() { @Override public void run() { setNextPlaying(); @@ -171,7 +171,7 @@ public class MediaPlayerService extends Service try { - player.onDestroy(); + localMediaPlayer.onDestroy(); shufflePlayBuffer.onDestroy(); downloader.onDestroy(); } @@ -184,37 +184,37 @@ public class MediaPlayerService extends Service public synchronized void seekTo(int position) { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().skip(downloader.getCurrentPlayingIndex(), position / 1000); + jukeboxMediaPlayer.getValue().skip(downloader.getCurrentPlayingIndex(), position / 1000); } else { - player.seekTo(position); + localMediaPlayer.seekTo(position); } } public synchronized int getPlayerPosition() { - if (player.playerState == IDLE || player.playerState == DOWNLOADING || player.playerState == PREPARING) + if (localMediaPlayer.playerState == IDLE || localMediaPlayer.playerState == DOWNLOADING || localMediaPlayer.playerState == PREPARING) { return 0; } - return jukeboxService.getValue().isEnabled() ? jukeboxService.getValue().getPositionSeconds() * 1000 : - player.getPlayerPosition(); + return jukeboxMediaPlayer.getValue().isEnabled() ? jukeboxMediaPlayer.getValue().getPositionSeconds() * 1000 : + localMediaPlayer.getPlayerPosition(); } public synchronized int getPlayerDuration() { - return player.getPlayerDuration(); + return localMediaPlayer.getPlayerDuration(); } public synchronized void setCurrentPlaying(int currentPlayingIndex) { try { - player.setCurrentPlaying(downloader.downloadList.get(currentPlayingIndex)); + localMediaPlayer.setCurrentPlaying(downloader.downloadList.get(currentPlayingIndex)); } catch (IndexOutOfBoundsException x) { @@ -224,7 +224,7 @@ public class MediaPlayerService extends Service public void setupOnCurrentPlayingChangedHandler() { - player.onCurrentPlayingChanged = new Consumer() { + localMediaPlayer.onCurrentPlayingChanged = new Consumer() { @Override public void accept(DownloadFile currentPlaying) { if (currentPlaying != null) @@ -241,7 +241,7 @@ public class MediaPlayerService extends Service } // Update widget - PlayerState playerState = player.playerState; + PlayerState playerState = localMediaPlayer.playerState; MusicDirectory.Entry song = currentPlaying == null? null : currentPlaying.getSong(); UltraSonicAppWidgetProvider4x1.getInstance().notifyChange(MediaPlayerService.this, song, playerState == PlayerState.STARTED, false); UltraSonicAppWidgetProvider4x2.getInstance().notifyChange(MediaPlayerService.this, song, playerState == PlayerState.STARTED, true); @@ -253,7 +253,7 @@ public class MediaPlayerService extends Service if (currentPlaying != null) { if (tabInstance != null) { - updateNotification(player.playerState, currentPlaying); + updateNotification(localMediaPlayer.playerState, currentPlaying); tabInstance.showNowPlaying(); } } @@ -263,7 +263,7 @@ public class MediaPlayerService extends Service { tabInstance.hideNowPlaying(); stopForeground(true); - player.clearRemoteControl(); + localMediaPlayer.clearRemoteControl(); isInForeground = false; stopSelf(); } @@ -278,7 +278,7 @@ public class MediaPlayerService extends Service if (!gaplessPlayback) { - player.setNextPlaying(null); + localMediaPlayer.setNextPlaying(null); return; } @@ -295,35 +295,34 @@ public class MediaPlayerService extends Service index = (index + 1) % downloader.downloadList.size(); break; case SINGLE: - break; default: break; } } - player.clearNextPlaying(); + localMediaPlayer.clearNextPlaying(); if (index < downloader.downloadList.size() && index != -1) { - player.setNextPlaying(downloader.downloadList.get(index)); + localMediaPlayer.setNextPlaying(downloader.downloadList.get(index)); } else { - player.setNextPlaying(null); + localMediaPlayer.setNextPlaying(null); } } public synchronized void togglePlayPause() { - if (player.playerState == PAUSED || player.playerState == COMPLETED || player.playerState == STOPPED) + if (localMediaPlayer.playerState == PAUSED || localMediaPlayer.playerState == COMPLETED || localMediaPlayer.playerState == STOPPED) { start(); } - else if (player.playerState == IDLE) + else if (localMediaPlayer.playerState == IDLE) { play(); } - else if (player.playerState == STARTED) + else if (localMediaPlayer.playerState == STARTED) { pause(); } @@ -361,14 +360,14 @@ public class MediaPlayerService extends Service { if (start) { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().skip(index, 0); - player.setPlayerState(STARTED); + jukeboxMediaPlayer.getValue().skip(index, 0); + localMediaPlayer.setPlayerState(STARTED); } else { - player.play(downloader.downloadList.get(index)); + localMediaPlayer.play(downloader.downloadList.get(index)); } } @@ -379,60 +378,60 @@ public class MediaPlayerService extends Service private synchronized void resetPlayback() { - player.reset(); - player.setCurrentPlaying(null); + localMediaPlayer.reset(); + localMediaPlayer.setCurrentPlaying(null); downloadQueueSerializer.getValue().serializeDownloadQueue(downloader.downloadList, downloader.getCurrentPlayingIndex(), getPlayerPosition()); } public synchronized void pause() { - if (player.playerState == STARTED) + if (localMediaPlayer.playerState == STARTED) { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().stop(); + jukeboxMediaPlayer.getValue().stop(); } else { - player.pause(); + localMediaPlayer.pause(); } - player.setPlayerState(PAUSED); + localMediaPlayer.setPlayerState(PAUSED); } } public synchronized void stop() { - if (player.playerState == STARTED) + if (localMediaPlayer.playerState == STARTED) { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().stop(); + jukeboxMediaPlayer.getValue().stop(); } else { - player.pause(); + localMediaPlayer.pause(); } } - player.setPlayerState(STOPPED); + localMediaPlayer.setPlayerState(STOPPED); } public synchronized void start() { - if (jukeboxService.getValue().isEnabled()) + if (jukeboxMediaPlayer.getValue().isEnabled()) { - jukeboxService.getValue().start(); + jukeboxMediaPlayer.getValue().start(); } else { - player.start(); + localMediaPlayer.start(); } - player.setPlayerState(STARTED); + localMediaPlayer.setPlayerState(STARTED); } public void setupOnPlayerStateChangedHandler() { - player.onPlayerStateChanged = new BiConsumer() { + localMediaPlayer.onPlayerStateChanged = new BiConsumer() { @Override public void accept(PlayerState playerState, DownloadFile currentPlaying) { if (playerState == PAUSED) @@ -442,13 +441,13 @@ public class MediaPlayerService extends Service boolean showWhenPaused = (playerState != PlayerState.STOPPED && Util.isNotificationAlwaysEnabled(MediaPlayerService.this)); boolean show = playerState == PlayerState.STARTED || showWhenPaused; + MusicDirectory.Entry song = currentPlaying == null? null : currentPlaying.getSong(); Util.broadcastPlaybackStatusChange(MediaPlayerService.this, playerState); - Util.broadcastA2dpPlayStatusChange(MediaPlayerService.this, playerState, currentPlaying.getSong(), + Util.broadcastA2dpPlayStatusChange(MediaPlayerService.this, playerState, song, downloader.downloadList.size() + downloader.backgroundDownloadList.size(), downloader.downloadList.indexOf(currentPlaying) + 1, getPlayerPosition()); - MusicDirectory.Entry song = currentPlaying.getSong(); // Update widget UltraSonicAppWidgetProvider4x1.getInstance().notifyChange(MediaPlayerService.this, song, playerState == PlayerState.STARTED, false); UltraSonicAppWidgetProvider4x2.getInstance().notifyChange(MediaPlayerService.this, song, playerState == PlayerState.STARTED, true); @@ -460,7 +459,7 @@ public class MediaPlayerService extends Service { if (tabInstance != null) { - // Only update notification is player state is one that will change the icon + // Only update notification is localMediaPlayer state is one that will change the icon if (playerState == PlayerState.STARTED || playerState == PlayerState.PAUSED) { updateNotification(playerState, currentPlaying); @@ -473,7 +472,7 @@ public class MediaPlayerService extends Service if (tabInstance != null) { stopForeground(true); - player.clearRemoteControl(); + localMediaPlayer.clearRemoteControl(); isInForeground = false; tabInstance.hideNowPlaying(); stopSelf(); @@ -494,7 +493,7 @@ public class MediaPlayerService extends Service private void setupOnSongCompletedHandler() { - player.onSongCompleted = new Consumer() { + localMediaPlayer.onSongCompleted = new Consumer() { @Override public void accept(DownloadFile currentPlaying) { int index = downloader.getCurrentPlayingIndex(); @@ -527,7 +526,7 @@ public class MediaPlayerService extends Service if (Util.getShouldClearPlaylist(MediaPlayerService.this)) { clear(true); - jukeboxService.getValue().updatePlaylist(); + jukeboxMediaPlayer.getValue().updatePlaylist(); } resetPlayback(); @@ -552,9 +551,9 @@ public class MediaPlayerService extends Service public synchronized void clear(boolean serialize) { - player.reset(); + localMediaPlayer.reset(); downloader.clear(); - player.setCurrentPlaying(null); + localMediaPlayer.setCurrentPlaying(null); setNextPlaying(); @@ -567,7 +566,7 @@ public class MediaPlayerService extends Service public void updateNotification(PlayerState playerState, DownloadFile currentPlaying) { if (Util.isNotificationEnabled(this)) { - if (isInForeground == true) { + if (isInForeground) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, buildForegroundNotification(playerState, currentPlaying)); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index 1bc31fe3..a64e2a6b 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -54,11 +54,7 @@ import org.moire.ultrasonic.domain.*; import org.moire.ultrasonic.domain.MusicDirectory.Entry; import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver; import org.moire.ultrasonic.service.DownloadFile; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; -import org.moire.ultrasonic.service.DownloadServiceLifecycleSupport; -import org.moire.ultrasonic.service.Downloader; -import org.moire.ultrasonic.service.MediaPlayerService; +import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.service.MusicServiceFactory; import java.io.*; @@ -1183,22 +1179,22 @@ public class Util extends DownloadActivity @Override public void onAudioFocusChange(int focusChange) { - DownloadService downloadService = (DownloadService) context; - if ((focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) && !downloadService.isJukeboxEnabled()) + MediaPlayerController mediaPlayerController = (MediaPlayerController) context; + if ((focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) && !mediaPlayerController.isJukeboxEnabled()) { - if (downloadService.getPlayerState() == PlayerState.STARTED) + if (mediaPlayerController.getPlayerState() == PlayerState.STARTED) { SharedPreferences preferences = getPreferences(context); int lossPref = Integer.parseInt(preferences.getString(Constants.PREFERENCES_KEY_TEMP_LOSS, "1")); if (lossPref == 2 || (lossPref == 1 && focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK)) { lowerFocus = true; - downloadService.setVolume(0.1f); + mediaPlayerController.setVolume(0.1f); } else if (lossPref == 0 || (lossPref == 1)) { pauseFocus = true; - downloadService.pause(); + mediaPlayerController.pause(); } } } @@ -1207,18 +1203,18 @@ public class Util extends DownloadActivity if (pauseFocus) { pauseFocus = false; - downloadService.start(); + mediaPlayerController.start(); } else if (lowerFocus) { lowerFocus = false; - downloadService.setVolume(1.0f); + mediaPlayerController.setVolume(1.0f); } } - else if (focusChange == AudioManager.AUDIOFOCUS_LOSS && !downloadService.isJukeboxEnabled()) + else if (focusChange == AudioManager.AUDIOFOCUS_LOSS && !mediaPlayerController.isJukeboxEnabled()) { hasFocus = false; - downloadService.pause(); + mediaPlayerController.pause(); audioManager.abandonAudioFocus(this); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/VideoPlayerType.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/VideoPlayerType.java index a03036a4..c000f3f8 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/VideoPlayerType.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/VideoPlayerType.java @@ -41,7 +41,7 @@ public enum VideoPlayerType public void playVideo(final Activity activity, MusicDirectory.Entry entry) throws Exception { - // Check if MX Player is installed. + // Check if MX LocalMediaPlayer is installed. boolean installedAd = Util.isPackageInstalled(activity, PACKAGE_NAME_MX_AD); boolean installedPro = Util.isPackageInstalled(activity, PACKAGE_NAME_MX_PRO); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/view/SongView.java b/ultrasonic/src/main/java/org/moire/ultrasonic/view/SongView.java index 5c617dbc..973bf91e 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/view/SongView.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/view/SongView.java @@ -37,12 +37,10 @@ import org.moire.ultrasonic.domain.MusicDirectory.Entry; import org.moire.ultrasonic.featureflags.Feature; import org.moire.ultrasonic.featureflags.FeatureStorage; import org.moire.ultrasonic.service.DownloadFile; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; import org.moire.ultrasonic.service.Downloader; import org.moire.ultrasonic.service.MusicService; import org.moire.ultrasonic.service.MusicServiceFactory; -import org.moire.ultrasonic.service.Player; +import org.moire.ultrasonic.service.LocalMediaPlayer; import org.moire.ultrasonic.util.Util; import org.moire.ultrasonic.util.VideoPlayerType; @@ -85,7 +83,7 @@ public class SongView extends UpdateView implements Checkable private boolean useFiveStarRating; private Lazy downloader = inject(Downloader.class); - protected Lazy player = inject(Player.class); + protected Lazy localMediaPlayer = inject(LocalMediaPlayer.class); public SongView(Context context) { @@ -413,7 +411,7 @@ public class SongView extends UpdateView implements Checkable viewHolder.fiveStar4.setImageDrawable(rating > 3 ? starDrawable : starHollowDrawable); viewHolder.fiveStar5.setImageDrawable(rating > 4 ? starDrawable : starHollowDrawable); - boolean playing = player.getValue().currentPlaying == downloadFile; + boolean playing = localMediaPlayer.getValue().currentPlaying == downloadFile; if (playing) { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/view/VisualizerView.java b/ultrasonic/src/main/java/org/moire/ultrasonic/view/VisualizerView.java index 92332344..d08e062f 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/view/VisualizerView.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/view/VisualizerView.java @@ -27,8 +27,7 @@ import android.view.View; import org.moire.ultrasonic.audiofx.VisualizerController; import org.moire.ultrasonic.domain.PlayerState; -import org.moire.ultrasonic.service.DownloadService; -import org.moire.ultrasonic.service.DownloadServiceImpl; +import org.moire.ultrasonic.service.MediaPlayerController; import kotlin.Lazy; @@ -51,7 +50,7 @@ public class VisualizerView extends View private float[] points; private boolean active; - private Lazy downloadServiceImpl = inject(DownloadServiceImpl.class); + private Lazy mediaPlayerControllerLazy = inject(MediaPlayerController.class); public VisualizerView(Context context) { @@ -104,7 +103,7 @@ public class VisualizerView extends View private Visualizer getVizualizer() { - VisualizerController visualizerController = downloadServiceImpl.getValue().getVisualizerController(); + VisualizerController visualizerController = mediaPlayerControllerLazy.getValue().getVisualizerController(); return visualizerController == null ? null : visualizerController.getVisualizer(); } @@ -124,7 +123,7 @@ public class VisualizerView extends View return; } - if (downloadServiceImpl.getValue().getPlayerState() != PlayerState.STARTED) + if (mediaPlayerControllerLazy.getValue().getPlayerState() != PlayerState.STARTED) { return; } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt index 7072738d..64ae896e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt @@ -113,12 +113,13 @@ val musicServiceModule = module(MUSIC_SERVICE_CONTEXT) { single { SubsonicImageLoader(getProperty(DiProperties.APP_CONTEXT), get()) } - single { DownloadServiceImpl(androidContext(), get(), get(), get()) } - single { JukeboxService(androidContext(), get()) } - single { DownloadServiceLifecycleSupport(androidContext(), get(), get()) } + single { MediaPlayerControllerImpl(androidContext(), get(), get(), get()) } + single { MediaPlayerControllerImpl(androidContext(), get(), get(), get()) } + single { JukeboxMediaPlayer(androidContext(), get()) } + single { MediaPlayerLifecycleSupport(androidContext(), get(), get()) } single { DownloadQueueSerializer(androidContext()) } single { ExternalStorageMonitor(androidContext()) } single { ShufflePlayBuffer(androidContext()) } single { Downloader(androidContext(), get(), get(), get()) } - single { Player(androidContext()) } + single { LocalMediaPlayer(androidContext()) } } diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index f188ccc9..3b25b2ff 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -334,7 +334,7 @@ 0.00 MB -:-- 0:00 - O player MX não está instalado. Baixe da graça pela Play Store ou modifique as configurações de vídeo. + O localMediaPlayer MX não está instalado. Baixe da graça pela Play Store ou modifique as configurações de vídeo. Baixar Player MX Toque para selecionar a música Cartão SD indisponível diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index b5b89e5f..996d9fec 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -334,7 +334,7 @@ 0.00 MB —:—— 0:00 - O player MX não está instalado. Descarregue da graça pela Play Store ou modifique as configurações de vídeo. + O localMediaPlayer MX não está instalado. Descarregue da graça pela Play Store ou modifique as configurações de vídeo. Descarregar Player MX Toque para selecionar a música Cartão SD indisponível diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 4a2b453e..64fa495e 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -314,7 +314,7 @@ Browse Using ID3 Tags Use ID3 tag methods instead of file system based methods Video - Video player + Video localMediaPlayer View Refresh .5 seconds 1 second