diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 115 |
1 files changed, 68 insertions, 47 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java index 5a061c7e6..db9dd9530 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.fragment; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; @@ -13,74 +14,68 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.MediaplayerInfoActivity.MediaplayerInfoContentFragment; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.PlaybackController; +import io.reactivex.Maybe; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; /** * Displays the cover and the title of a FeedItem. */ -public class CoverFragment extends Fragment implements MediaplayerInfoContentFragment { +public class CoverFragment extends Fragment { private static final String TAG = "CoverFragment"; - private Playable media; - private View root; private TextView txtvPodcastTitle; private TextView txtvEpisodeTitle; private ImageView imgvCover; - - public static CoverFragment newInstance(Playable item) { - CoverFragment f = new CoverFragment(); - f.media = item; - return f; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (media == null) { - Log.e(TAG, TAG + " was called without media"); - } - } + private PlaybackController controller; + private Disposable disposable; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setRetainInstance(true); root = inflater.inflate(R.layout.cover_fragment, container, false); txtvPodcastTitle = root.findViewById(R.id.txtvPodcastTitle); txtvEpisodeTitle = root.findViewById(R.id.txtvEpisodeTitle); imgvCover = root.findViewById(R.id.imgvCover); + imgvCover.setOnClickListener(v -> onPlayPause()); return root; } private void loadMediaInfo() { - if (media != null) { - txtvPodcastTitle.setText(media.getFeedTitle()); - txtvEpisodeTitle.setText(media.getEpisodeTitle()); - Glide.with(this) - .load(media.getImageLocation()) - .apply(new RequestOptions() - .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) - .dontAnimate() - .fitCenter()) - .into(imgvCover); - } else { - Log.w(TAG, "loadMediaInfo was called while media was null"); + if (disposable != null) { + disposable.dispose(); } + disposable = Maybe.create(emitter -> { + Playable media = controller.getMedia(); + if (media != null) { + emitter.onSuccess(media); + } else { + emitter.onComplete(); + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(media -> displayMediaInfo((Playable) media), + error -> Log.e(TAG, Log.getStackTraceString(error))); } - @Override - public void onStart() { - Log.d(TAG, "On Start"); - super.onStart(); - if (media != null) { - Log.d(TAG, "Loading media info"); - loadMediaInfo(); - } else { - Log.w(TAG, "Unable to load media info: media was null"); - } + private void displayMediaInfo(@NonNull Playable media) { + txtvPodcastTitle.setText(media.getFeedTitle()); + txtvEpisodeTitle.setText(media.getEpisodeTitle()); + Glide.with(this) + .load(media.getImageLocation()) + .apply(new RequestOptions() + .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) + .dontAnimate() + .fitCenter()) + .into(imgvCover); } @Override @@ -91,14 +86,40 @@ public class CoverFragment extends Fragment implements MediaplayerInfoContentFra } @Override - public void onMediaChanged(Playable media) { - if(this.media == media) { - return; - } - this.media = media; - if (isAdded()) { - loadMediaInfo(); + public void onStart() { + super.onStart(); + controller = new PlaybackController(getActivity(), false) { + @Override + public boolean loadMediaInfo() { + CoverFragment.this.loadMediaInfo(); + return true; + } + + }; + controller.init(); + loadMediaInfo(); + } + + @Override + public void onStop() { + super.onStop(); + controller.release(); + controller = null; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + + if (disposable != null) { + disposable.dispose(); } } + void onPlayPause() { + if (controller == null) { + return; + } + controller.playPause(); + } } |