summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod
diff options
context:
space:
mode:
authorH. Lehmann <ByteHamster@users.noreply.github.com>2020-03-01 00:10:39 +0100
committerGitHub <noreply@github.com>2020-03-01 00:10:39 +0100
commit3dae17beff1f8338bbc88716e70e7234d0dd3be4 (patch)
treedba51ab00e9d58c78b690951ae2c60813b2424fc /app/src/main/java/de/danoeh/antennapod
parentb80bb03d273749a1768f1d6502aab7a990a7b90b (diff)
downloadAntennaPod-3dae17beff1f8338bbc88716e70e7234d0dd3be4.zip
Refactor action button in ItemFragment (#3898)
Much more readable to have decision for action and action itself in one place.
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java43
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java11
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MarkAsPlayedActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java40
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java140
9 files changed, 149 insertions, 103 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java
index 10458ed46..3b5baadef 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java
@@ -12,9 +12,9 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequester;
-class CancelDownloadActionButton extends ItemActionButton {
+public class CancelDownloadActionButton extends ItemActionButton {
- CancelDownloadActionButton(FeedItem item) {
+ public CancelDownloadActionButton(FeedItem item) {
super(item);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java
new file mode 100644
index 000000000..7831c6450
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java
@@ -0,0 +1,43 @@
+package de.danoeh.antennapod.adapter.actionbutton;
+
+import android.content.Context;
+import android.view.View;
+import androidx.annotation.AttrRes;
+import androidx.annotation.StringRes;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.storage.DBWriter;
+
+public class DeleteActionButton extends ItemActionButton {
+
+ public DeleteActionButton(FeedItem item) {
+ super(item);
+ }
+
+ @Override
+ @StringRes
+ public int getLabel() {
+ return R.string.delete_label;
+ }
+
+ @Override
+ @AttrRes
+ public int getDrawable() {
+ return R.attr.content_discard;
+ }
+
+ @Override
+ public void onClick(Context context) {
+ final FeedMedia media = item.getMedia();
+ if (media == null) {
+ return;
+ }
+ DBWriter.deleteFeedMediaOfItem(context, media.getId());
+ }
+
+ @Override
+ public int getVisibility() {
+ return (item.isPlayed()) ? View.INVISIBLE : View.VISIBLE;
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java
index 026386cf9..0a1199e9b 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.adapter.actionbutton;
import android.content.Context;
+import android.view.View;
import android.widget.Toast;
import androidx.annotation.AttrRes;
@@ -16,10 +17,10 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.NetworkUtils;
-class DownloadActionButton extends ItemActionButton {
+public class DownloadActionButton extends ItemActionButton {
private boolean isInQueue;
- DownloadActionButton(FeedItem item, boolean isInQueue) {
+ public DownloadActionButton(FeedItem item, boolean isInQueue) {
super(item);
this.isInQueue = isInQueue;
}
@@ -37,6 +38,12 @@ class DownloadActionButton extends ItemActionButton {
}
@Override
+ public int getVisibility() {
+ return (item.getMedia() != null && DownloadRequester.getInstance().isDownloadingFile(item.getMedia()))
+ ? View.INVISIBLE : View.VISIBLE;
+ }
+
+ @Override
public void onClick(Context context) {
final FeedMedia media = item.getMedia();
if (media == null || shouldNotDownload(media)) {
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MarkAsPlayedActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MarkAsPlayedActionButton.java
index 71ac07c47..14fa94f7a 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MarkAsPlayedActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MarkAsPlayedActionButton.java
@@ -9,9 +9,9 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.DBWriter;
-class MarkAsPlayedActionButton extends ItemActionButton {
+public class MarkAsPlayedActionButton extends ItemActionButton {
- MarkAsPlayedActionButton(FeedItem item) {
+ public MarkAsPlayedActionButton(FeedItem item) {
super(item);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java
index b839f7788..4ac03c50e 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java
@@ -10,9 +10,9 @@ import de.danoeh.antennapod.core.util.IntentUtils;
import static de.danoeh.antennapod.core.service.playback.PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE;
-class PauseActionButton extends ItemActionButton {
+public class PauseActionButton extends ItemActionButton {
- PauseActionButton(FeedItem item) {
+ public PauseActionButton(FeedItem item) {
super(item);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
index 3432f1deb..0c6924469 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
@@ -8,9 +8,9 @@ import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
-class PlayActionButton extends ItemActionButton {
+public class PlayActionButton extends ItemActionButton {
- PlayActionButton(FeedItem item) {
+ public PlayActionButton(FeedItem item) {
super(item);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java
index c1e619fdf..3a43d3217 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java
@@ -16,7 +16,7 @@ import static de.danoeh.antennapod.core.service.playback.PlaybackService.ACTION_
public class StreamActionButton extends ItemActionButton {
- StreamActionButton(FeedItem item) {
+ public StreamActionButton(FeedItem item) {
super(item);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java
new file mode 100644
index 000000000..5eb8c1fb6
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java
@@ -0,0 +1,40 @@
+package de.danoeh.antennapod.adapter.actionbutton;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.view.View;
+import androidx.annotation.AttrRes;
+import androidx.annotation.StringRes;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedItem;
+
+public class VisitWebsiteActionButton extends ItemActionButton {
+
+ public VisitWebsiteActionButton(FeedItem item) {
+ super(item);
+ }
+
+ @Override
+ @StringRes
+ public int getLabel() {
+ return R.string.visit_website_label;
+ }
+
+ @Override
+ @AttrRes
+ public int getDrawable() {
+ return R.attr.location_web_site;
+ }
+
+ @Override
+ public void onClick(Context context) {
+ Uri uri = Uri.parse(item.getLink());
+ context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ }
+
+ @Override
+ public int getVisibility() {
+ return (item.getLink() != null) ? View.INVISIBLE : View.VISIBLE;
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
index e263d2b3e..de6eb6dd6 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -1,8 +1,6 @@
package de.danoeh.antennapod.fragment;
import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.Layout;
@@ -13,14 +11,11 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
-import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.FitCenter;
@@ -29,10 +24,19 @@ import com.bumptech.glide.request.RequestOptions;
import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
+import de.danoeh.antennapod.adapter.actionbutton.CancelDownloadActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.DeleteActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.DownloadActionButton;
import de.danoeh.antennapod.adapter.actionbutton.ItemActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.MarkAsPlayedActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.PauseActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.PlayActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.StreamActionButton;
+import de.danoeh.antennapod.adapter.actionbutton.VisitWebsiteActionButton;
import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloaderUpdate;
import de.danoeh.antennapod.core.event.FeedItemEvent;
+import de.danoeh.antennapod.core.event.PlayerStatusEvent;
import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -40,8 +44,6 @@ import de.danoeh.antennapod.core.feed.util.ImageResourceUtils;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
-import de.danoeh.antennapod.core.storage.DBTasks;
-import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.DateUtils;
@@ -102,6 +104,8 @@ public class ItemFragment extends Fragment {
private ImageView butAction2Icon;
private View butAction1;
private View butAction2;
+ private ItemActionButton actionButton1;
+ private ItemActionButton actionButton2;
private Disposable disposable;
private PlaybackController controller;
@@ -151,40 +155,8 @@ public class ItemFragment extends Fragment {
butAction2Icon = layout.findViewById(R.id.butAction2Icon);
butAction1Text = layout.findViewById(R.id.butAction1Text);
butAction2Text = layout.findViewById(R.id.butAction2Text);
-
- butAction1.setOnClickListener(v -> {
- if (item == null) {
- return;
- }
- ItemActionButton actionButton = ItemActionButton.forItem(item, item.isTagged(FeedItem.TAG_QUEUE), false);
- actionButton.onClick(getActivity());
-
- FeedMedia media = item.getMedia();
- if (media != null && media.isDownloaded()) {
- // playback was started, dialog should close itself
- ((MainActivity) getActivity()).dismissChildFragment();
- }
- });
-
- butAction2.setOnClickListener(v -> {
- if (item == null) {
- return;
- }
-
- if (item.hasMedia()) {
- FeedMedia media = item.getMedia();
- if (!media.isDownloaded()) {
- DBTasks.playMedia(getActivity(), media, true, true, true);
- ((MainActivity) getActivity()).dismissChildFragment();
- } else {
- DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId());
- }
- } else if (item.getLink() != null) {
- Uri uri = Uri.parse(item.getLink());
- getActivity().startActivity(new Intent(Intent.ACTION_VIEW, uri));
- }
- });
-
+ butAction1.setOnClickListener(v -> actionButton1.onClick(getContext()));
+ butAction2.setOnClickListener(v -> actionButton2.onClick(getContext()));
return layout;
}
@@ -264,7 +236,10 @@ public class ItemFragment extends Fragment {
new RoundedCorners((int) (4 * getResources().getDisplayMetrics().density)))
.dontAnimate())
.into(imgvCover);
+ updateButtons();
+ }
+ private void updateButtons() {
progbarDownload.setVisibility(View.GONE);
if (item.hasMedia() && downloaderList != null) {
for (Downloader downloader : downloaderList) {
@@ -277,67 +252,41 @@ public class ItemFragment extends Fragment {
}
FeedMedia media = item.getMedia();
- @AttrRes int butAction1IconRes = 0;
- @StringRes int butAction1TextRes = 0;
- @AttrRes int butAction2IconRes = 0;
- @StringRes int butAction2TextRes = 0;
if (media == null) {
- if (!item.isPlayed()) {
- butAction1IconRes = R.attr.navigation_accept;
- if (item.hasMedia()) {
- butAction1TextRes = R.string.mark_read_label;
- } else {
- butAction1TextRes = R.string.mark_read_no_media_label;
- }
- }
- if (item.getLink() != null) {
- butAction2IconRes = R.attr.location_web_site;
- butAction2TextRes = R.string.visit_website_label;
- }
+ actionButton1 = new MarkAsPlayedActionButton(item);
+ actionButton2 = new VisitWebsiteActionButton(item);
} else {
if (media.getDuration() > 0) {
txtvDuration.setText(Converter.getDurationStringLong(media.getDuration()));
}
- boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
- if (!media.isDownloaded()) {
- butAction2IconRes = R.attr.action_stream;
- butAction2TextRes = R.string.stream_label;
+ if (media.isCurrentlyPlaying()) {
+ actionButton1 = new PauseActionButton(item);
+ } else if (media.isDownloaded()) {
+ actionButton1 = new PlayActionButton(item);
} else {
- butAction2IconRes = R.attr.content_discard;
- butAction2TextRes = R.string.delete_label;
+ actionButton1 = new StreamActionButton(item);
}
- if (isDownloading) {
- butAction1IconRes = R.attr.navigation_cancel;
- butAction1TextRes = R.string.cancel_label;
- } else if (media.isDownloaded()) {
- butAction1IconRes = R.attr.av_play;
- butAction1TextRes = R.string.play_label;
+ if (DownloadRequester.getInstance().isDownloadingFile(media)) {
+ actionButton2 = new CancelDownloadActionButton(item);
+ } else if (!media.isDownloaded()) {
+ actionButton2 = new DownloadActionButton(item, false);
} else {
- butAction1IconRes = R.attr.av_download;
- butAction1TextRes = R.string.download_label;
+ actionButton2 = new DeleteActionButton(item);
}
}
- if (butAction1IconRes != 0 && butAction1TextRes != 0) {
- butAction1Text.setText(butAction1TextRes);
- butAction1Text.setTransformationMethod(null);
- TypedValue typedValue = new TypedValue();
- getContext().getTheme().resolveAttribute(butAction1IconRes, typedValue, true);
- butAction1Icon.setImageResource(typedValue.resourceId);
- butAction1.setVisibility(View.VISIBLE);
- } else {
- butAction1.setVisibility(View.INVISIBLE);
- }
- if (butAction2IconRes != 0 && butAction2TextRes != 0) {
- butAction2Text.setText(butAction2TextRes);
- butAction2Text.setTransformationMethod(null);
- TypedValue typedValue = new TypedValue();
- getContext().getTheme().resolveAttribute(butAction2IconRes, typedValue, true);
- butAction2Icon.setImageResource(typedValue.resourceId);
- butAction2.setVisibility(View.VISIBLE);
- } else {
- butAction2.setVisibility(View.INVISIBLE);
- }
+ butAction1Text.setText(actionButton1.getLabel());
+ butAction1Text.setTransformationMethod(null);
+ TypedValue typedValue = new TypedValue();
+ getContext().getTheme().resolveAttribute(actionButton1.getDrawable(), typedValue, true);
+ butAction1Icon.setImageResource(typedValue.resourceId);
+ butAction1.setVisibility(actionButton1.getVisibility());
+
+ butAction2Text.setText(actionButton2.getLabel());
+ butAction2Text.setTransformationMethod(null);
+ getContext().getTheme().resolveAttribute(actionButton2.getDrawable(), typedValue, true);
+ butAction2Icon.setImageResource(typedValue.resourceId);
+ butAction2.setVisibility(actionButton1.getVisibility());
}
@Override
@@ -378,6 +327,11 @@ public class ItemFragment extends Fragment {
}
@Subscribe(threadMode = ThreadMode.MAIN)
+ public void onPlayerStatusChanged(PlayerStatusEvent event) {
+ updateButtons();
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) {
load();
}
@@ -386,7 +340,9 @@ public class ItemFragment extends Fragment {
if (disposable != null) {
disposable.dispose();
}
- progbarLoading.setVisibility(View.VISIBLE);
+ if (!itemsLoaded) {
+ progbarLoading.setVisibility(View.VISIBLE);
+ }
disposable = Observable.fromCallable(this::loadInBackground)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())