Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / player / playlist / PlayerPlaylistPresenter.java
1 package com.moiseum.wolnelektury.view.player.playlist;
2
3 import android.content.Context;
4 import android.os.Bundle;
5 import android.support.v4.media.MediaMetadataCompat;
6 import android.support.v4.media.session.MediaControllerCompat;
7 import android.support.v4.media.session.MediaSessionCompat;
8 import android.support.v4.media.session.PlaybackStateCompat;
9 import android.util.Log;
10
11 import com.moiseum.wolnelektury.base.DataProvider;
12 import com.moiseum.wolnelektury.base.mvp.FragmentPresenter;
13 import com.moiseum.wolnelektury.connection.models.BookModel;
14 import com.moiseum.wolnelektury.connection.models.MediaModel;
15 import com.moiseum.wolnelektury.connection.services.BooksService;
16 import com.moiseum.wolnelektury.storage.BookStorage;
17 import com.moiseum.wolnelektury.view.book.list.BookListType;
18 import com.moiseum.wolnelektury.view.player.PlayerPresenter;
19 import com.moiseum.wolnelektury.view.player.service.AudiobookService;
20 import com.moiseum.wolnelektury.view.player.service.MediaBrowserHelper;
21
22 import java.util.List;
23
24 /**
25  * Created by Piotr Ostrowski on 28.05.2018.
26  */
27 public class PlayerPlaylistPresenter extends FragmentPresenter<PlayerPlaylistView> {
28
29         private class PlayerPlaylistMediaControllerCallback extends MediaControllerCompat.Callback {
30
31                 @Override
32                 public void onMetadataChanged(MediaMetadataCompat mediaMetadata) {
33                         if (mediaMetadata == null) {
34                                 return;
35                         }
36                         if (!containsMediaId(mediaMetadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID))) {
37                                 return;
38                         }
39
40                         int currentChapter = (int) mediaMetadata.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER);
41                         getView().setCurrentPlaylistItem(currentChapter);
42                 }
43
44                 private boolean containsMediaId(String mediaIdUrl) {
45                         for (MediaModel model : media) {
46                                 if (model.getUrl().equals(mediaIdUrl)) {
47                                         return true;
48                                 }
49                         }
50                         return false;
51                 }
52         }
53
54         private final List<MediaModel> media;
55         private MediaBrowserHelper mMediaBrowserHelper;
56
57         PlayerPlaylistPresenter(List<MediaModel> mediaFiles, PlayerPlaylistView view, Context context) {
58                 super(view);
59                 media = mediaFiles;
60                 mMediaBrowserHelper = new MediaBrowserHelper(context, AudiobookService.class);
61                 mMediaBrowserHelper.registerCallback(new PlayerPlaylistMediaControllerCallback());
62         }
63
64         @Override
65         public void onStart() {
66                 super.onStart();
67                 mMediaBrowserHelper.onStart();
68         }
69
70         @Override
71         public void onStop() {
72                 super.onStop();
73                 mMediaBrowserHelper.onStop();
74         }
75
76         @Override
77         public void onViewCreated(Bundle savedInstanceState) {
78                 super.onViewCreated(savedInstanceState);
79                 getView().setPlaylist(media);
80         }
81
82         void onPlaylistItemClick(int itemPosition) {
83                 mMediaBrowserHelper.getTransportControls().skipToQueueItem(itemPosition);
84         }
85 }