From 494b34d4219110305c56a2c5bba75bcebb001cb4 Mon Sep 17 00:00:00 2001 From: pachecosf Date: Tue, 22 Jan 2019 23:57:37 -0800 Subject: fixed losing media images and descriptions on rotate --- app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 1 + 1 file changed, 1 insertion(+) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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..ef65a5755 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -48,6 +48,7 @@ public class CoverFragment extends Fragment implements MediaplayerInfoContentFra @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); -- cgit v1.2.3 From 0e3cabb86d27c9d17b9dc4e19794153d5f72b495 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 10 Apr 2019 00:52:49 +0200 Subject: Do not hold state in fragments --- .../danoeh/antennapod/fragment/CoverFragment.java | 93 +++++++++++----------- 1 file changed, 45 insertions(+), 48 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 ef65a5755..88d748c5a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -13,37 +13,24 @@ 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.event.ServiceEvent; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.PlaybackController; +import de.greenrobot.event.EventBus; /** * 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; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -57,31 +44,20 @@ public class CoverFragment extends Fragment implements MediaplayerInfoContentFra } 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 { + Playable media = controller.getMedia(); + if (media == null) { Log.w(TAG, "loadMediaInfo was called while media was null"); + return; } - } - - @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"); - } + 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 @@ -92,14 +68,35 @@ 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() { + if (getMedia() == null) { + return false; + } + CoverFragment.this.loadMediaInfo(); + return true; + } + + }; + controller.init(); + loadMediaInfo(); + EventBus.getDefault().register(this); + } + + public void onEventMainThread(ServiceEvent event) { + if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) { + controller.init(); } } + @Override + public void onStop() { + super.onStop(); + EventBus.getDefault().unregister(this); + controller.release(); + controller = null; + } } -- cgit v1.2.3 From 7d20baf4f920cbec901d2f7408b836cf91d8bc60 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 12 Apr 2019 11:28:29 +0200 Subject: Upgraded EventBus to v3 Also made sure that register/unregister are called in onStart/onStop instead of onResume/onPause (prevents possible MultiWindow problems where updates are not received because activity is not fucused). --- app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 88d748c5a..fb92b1e68 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -17,7 +17,9 @@ import de.danoeh.antennapod.core.event.ServiceEvent; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; -import de.greenrobot.event.EventBus; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; /** * Displays the cover and the title of a FeedItem. @@ -86,6 +88,7 @@ public class CoverFragment extends Fragment { EventBus.getDefault().register(this); } + @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(ServiceEvent event) { if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) { controller.init(); -- cgit v1.2.3 From 09f4ebf08ad17435249d0daddfe290ae1d0484f4 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 12 Apr 2019 11:39:38 +0200 Subject: Let PlaybackController handle listening for service start --- .../java/de/danoeh/antennapod/fragment/CoverFragment.java | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 fb92b1e68..f409c15fb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -13,13 +13,9 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.event.ServiceEvent; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; /** * Displays the cover and the title of a FeedItem. @@ -85,20 +81,11 @@ public class CoverFragment extends Fragment { }; controller.init(); loadMediaInfo(); - EventBus.getDefault().register(this); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(ServiceEvent event) { - if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) { - controller.init(); - } } @Override public void onStop() { super.onStop(); - EventBus.getDefault().unregister(this); controller.release(); controller = null; } -- cgit v1.2.3 From e99ce0a33b83f4f127c9deb5ef5bba5855e726c1 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 12 May 2019 00:20:30 +0200 Subject: Do not query database on main thread --- .../danoeh/antennapod/fragment/CoverFragment.java | 30 +++++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 88d748c5a..87d58b1ff 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; @@ -18,6 +19,10 @@ import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.greenrobot.event.EventBus; +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. @@ -31,6 +36,7 @@ public class CoverFragment extends Fragment { private TextView txtvEpisodeTitle; private ImageView imgvCover; private PlaybackController controller; + private Disposable disposable; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -44,11 +50,24 @@ public class CoverFragment extends Fragment { } private void loadMediaInfo() { - Playable media = controller.getMedia(); - if (media == null) { - Log.w(TAG, "loadMediaInfo was called while media was null"); - return; + 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))); + } + + private void displayMediaInfo(@NonNull Playable media) { txtvPodcastTitle.setText(media.getFeedTitle()); txtvEpisodeTitle.setText(media.getEpisodeTitle()); Glide.with(this) @@ -73,9 +92,6 @@ public class CoverFragment extends Fragment { controller = new PlaybackController(getActivity(), false) { @Override public boolean loadMediaInfo() { - if (getMedia() == null) { - return false; - } CoverFragment.this.loadMediaInfo(); return true; } -- cgit v1.2.3 From 068a4255c131af08c2bdd1b72fc91989fe0e103b Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 14 May 2019 22:19:56 +0200 Subject: Do not deliver result if view is destroyed --- .../main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 87d58b1ff..7bb9c60e4 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -115,4 +115,13 @@ public class CoverFragment extends Fragment { controller.release(); controller = null; } + + @Override + public void onDestroyView() { + super.onDestroyView(); + + if (disposable != null) { + disposable.dispose(); + } + } } -- cgit v1.2.3 From e887996053ea6c76724b2880903059feb62da5eb Mon Sep 17 00:00:00 2001 From: Wagubi Brian Date: Mon, 1 Jul 2019 10:36:57 +0300 Subject: Extend play/pause functionality to Image Cover --- .../main/java/de/danoeh/antennapod/fragment/CoverFragment.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java') 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 7fd61d3ad..db9dd9530 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -44,6 +44,7 @@ public class CoverFragment extends Fragment { txtvPodcastTitle = root.findViewById(R.id.txtvPodcastTitle); txtvEpisodeTitle = root.findViewById(R.id.txtvEpisodeTitle); imgvCover = root.findViewById(R.id.imgvCover); + imgvCover.setOnClickListener(v -> onPlayPause()); return root; } @@ -114,4 +115,11 @@ public class CoverFragment extends Fragment { disposable.dispose(); } } + + void onPlayPause() { + if (controller == null) { + return; + } + controller.playPause(); + } } -- cgit v1.2.3