Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / player / playlist / PlayerPlaylistPresenter.java
diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/playlist/PlayerPlaylistPresenter.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/player/playlist/PlayerPlaylistPresenter.java
new file mode 100644 (file)
index 0000000..6aa2eb7
--- /dev/null
@@ -0,0 +1,85 @@
+package com.moiseum.wolnelektury.view.player.playlist;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
+import android.util.Log;
+
+import com.moiseum.wolnelektury.base.DataProvider;
+import com.moiseum.wolnelektury.base.mvp.FragmentPresenter;
+import com.moiseum.wolnelektury.connection.models.BookModel;
+import com.moiseum.wolnelektury.connection.models.MediaModel;
+import com.moiseum.wolnelektury.connection.services.BooksService;
+import com.moiseum.wolnelektury.storage.BookStorage;
+import com.moiseum.wolnelektury.view.book.list.BookListType;
+import com.moiseum.wolnelektury.view.player.PlayerPresenter;
+import com.moiseum.wolnelektury.view.player.service.AudiobookService;
+import com.moiseum.wolnelektury.view.player.service.MediaBrowserHelper;
+
+import java.util.List;
+
+/**
+ * Created by Piotr Ostrowski on 28.05.2018.
+ */
+public class PlayerPlaylistPresenter extends FragmentPresenter<PlayerPlaylistView> {
+
+       private class PlayerPlaylistMediaControllerCallback extends MediaControllerCompat.Callback {
+
+               @Override
+               public void onMetadataChanged(MediaMetadataCompat mediaMetadata) {
+                       if (mediaMetadata == null) {
+                               return;
+                       }
+                       if (!containsMediaId(mediaMetadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID))) {
+                               return;
+                       }
+
+                       int currentChapter = (int) mediaMetadata.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER);
+                       getView().setCurrentPlaylistItem(currentChapter);
+               }
+
+               private boolean containsMediaId(String mediaIdUrl) {
+                       for (MediaModel model : media) {
+                               if (model.getUrl().equals(mediaIdUrl)) {
+                                       return true;
+                               }
+                       }
+                       return false;
+               }
+       }
+
+       private final List<MediaModel> media;
+       private MediaBrowserHelper mMediaBrowserHelper;
+
+       PlayerPlaylistPresenter(List<MediaModel> mediaFiles, PlayerPlaylistView view, Context context) {
+               super(view);
+               media = mediaFiles;
+               mMediaBrowserHelper = new MediaBrowserHelper(context, AudiobookService.class);
+               mMediaBrowserHelper.registerCallback(new PlayerPlaylistMediaControllerCallback());
+       }
+
+       @Override
+       public void onStart() {
+               super.onStart();
+               mMediaBrowserHelper.onStart();
+       }
+
+       @Override
+       public void onStop() {
+               super.onStop();
+               mMediaBrowserHelper.onStop();
+       }
+
+       @Override
+       public void onViewCreated(Bundle savedInstanceState) {
+               super.onViewCreated(savedInstanceState);
+               getView().setPlaylist(media);
+       }
+
+       void onPlaylistItemClick(int itemPosition) {
+               mMediaBrowserHelper.getTransportControls().skipToQueueItem(itemPosition);
+       }
+}