summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/AutoDownloadTest.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java55
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/StreamActionButton.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/StreamingConfirmationDialog.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/discovery/ItunesPodcastSearcher.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java2
-rw-r--r--app/src/main/res/layout/itemdescription_listitem.xml10
9 files changed, 76 insertions, 34 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/AutoDownloadTest.java b/app/src/androidTest/java/de/test/antennapod/storage/AutoDownloadTest.java
index b89f1b9bc..41f2ec864 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/AutoDownloadTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/AutoDownloadTest.java
@@ -8,6 +8,7 @@ import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.platform.app.InstrumentationRegistry;
+import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import de.test.antennapod.EspressoTestUtils;
import org.awaitility.Awaitility;
import org.awaitility.core.ConditionTimeoutException;
@@ -113,7 +114,11 @@ public class AutoDownloadTest {
private void playEpisode(@NonNull FeedItem item) {
FeedMedia media = item.getMedia();
- DBTasks.playMedia(context, media, false, true, true);
+ new PlaybackServiceStarter(context, media)
+ .callEvenIfRunning(true)
+ .startWhenPrepared(true)
+ .shouldStream(true)
+ .start();
Awaitility.await("episode is playing")
.atMost(2000, MILLISECONDS)
.until(() -> item.equals(getCurrentlyPlaying()));
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
index 8d469c7a6..f49892b63 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
@@ -1,23 +1,29 @@
package de.danoeh.antennapod.adapter;
import android.content.Context;
-import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
+import android.widget.Button;
import android.widget.TextView;
-
-import java.util.List;
-
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.util.NetworkUtils;
+import de.danoeh.antennapod.core.util.playback.RemoteMedia;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.util.DateUtils;
+import de.danoeh.antennapod.core.util.playback.Playable;
+import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
+import de.danoeh.antennapod.dialog.StreamingConfirmationDialog;
+
+import java.util.List;
/**
* List adapter for showing a list of FeedItems with their title and description.
*/
public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
+ private static final int MAX_LINES_COLLAPSED = 3;
public FeedItemlistDescriptionAdapter(Context context, int resource, List<FeedItem> objects) {
super(context, resource, objects);
@@ -32,12 +38,12 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
// Inflate layout
if (convertView == null) {
holder = new Holder();
- LayoutInflater inflater = (LayoutInflater) getContext()
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.itemdescription_listitem, parent, false);
holder.title = convertView.findViewById(R.id.txtvTitle);
holder.pubDate = convertView.findViewById(R.id.txtvPubDate);
holder.description = convertView.findViewById(R.id.txtvDescription);
+ holder.preview = convertView.findViewById(R.id.butPreview);
convertView.setTag(holder);
} else {
@@ -52,18 +58,34 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
.replaceAll("\\s+", " ")
.trim();
holder.description.setText(description);
-
- final int MAX_LINES_COLLAPSED = 3;
holder.description.setMaxLines(MAX_LINES_COLLAPSED);
- holder.description.setOnClickListener(v -> {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
- && holder.description.getMaxLines() > MAX_LINES_COLLAPSED) {
- holder.description.setMaxLines(MAX_LINES_COLLAPSED);
- } else {
- holder.description.setMaxLines(2000);
- }
- });
}
+ holder.description.setTag(Boolean.FALSE); // not expanded
+ holder.preview.setVisibility(View.GONE);
+ holder.preview.setOnClickListener(v -> {
+ Playable playable = new RemoteMedia(item);
+ if (!NetworkUtils.isStreamingAllowed()) {
+ new StreamingConfirmationDialog(getContext(), playable).show();
+ return;
+ }
+ new PlaybackServiceStarter(getContext(), playable)
+ .shouldStream(true)
+ .startWhenPrepared(true)
+ .callEvenIfRunning(true)
+ .start();
+ getContext().startActivity(PlaybackService.getPlayerActivityIntent(getContext(), playable));
+ });
+ convertView.setOnClickListener(v -> {
+ if (holder.description.getTag() == Boolean.TRUE) {
+ holder.description.setMaxLines(MAX_LINES_COLLAPSED);
+ holder.preview.setVisibility(View.GONE);
+ holder.description.setTag(Boolean.FALSE);
+ } else {
+ holder.description.setMaxLines(2000);
+ holder.preview.setVisibility(View.VISIBLE);
+ holder.description.setTag(Boolean.TRUE);
+ }
+ });
return convertView;
}
@@ -71,5 +93,6 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
TextView title;
TextView pubDate;
TextView description;
+ Button preview;
}
}
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 0c6924469..3a80ec998 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
@@ -6,6 +6,7 @@ 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.DBTasks;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
public class PlayActionButton extends ItemActionButton {
@@ -32,7 +33,10 @@ public class PlayActionButton extends ItemActionButton {
if (media == null) {
return;
}
-
+ if (!media.fileExists()) {
+ DBTasks.notifyMissingFeedMediaFile(context, media);
+ return;
+ }
new PlaybackServiceStarter(context, media)
.callEvenIfRunning(true)
.startWhenPrepared(true)
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 38b84c453..2f943e5fb 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
@@ -8,14 +8,10 @@ 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.DBTasks;
-import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import de.danoeh.antennapod.dialog.StreamingConfirmationDialog;
-import static de.danoeh.antennapod.core.service.playback.PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE;
-
public class StreamActionButton extends ItemActionButton {
public StreamActionButton(FeedItem item) {
@@ -44,6 +40,10 @@ public class StreamActionButton extends ItemActionButton {
new StreamingConfirmationDialog(context, media).show();
return;
}
- DBTasks.playMedia(context, media, false, true, true);
+ new PlaybackServiceStarter(context, media)
+ .callEvenIfRunning(true)
+ .startWhenPrepared(true)
+ .shouldStream(true)
+ .start();
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/StreamingConfirmationDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/StreamingConfirmationDialog.java
index 5b77fd319..81e86e217 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/StreamingConfirmationDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/StreamingConfirmationDialog.java
@@ -5,17 +5,17 @@ import android.view.View;
import android.widget.CheckBox;
import androidx.appcompat.app.AlertDialog;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
public class StreamingConfirmationDialog {
private final Context context;
- private final FeedMedia media;
+ private final Playable playable;
- public StreamingConfirmationDialog(Context context, FeedMedia media) {
+ public StreamingConfirmationDialog(Context context, Playable playable) {
this.context = context;
- this.media = media;
+ this.playable = playable;
}
public void show() {
@@ -30,7 +30,7 @@ public class StreamingConfirmationDialog {
if (checkDoNotShowAgain.isChecked()) {
UserPreferences.setAllowMobileStreaming(true);
}
- new PlaybackServiceStarter(context, media)
+ new PlaybackServiceStarter(context, playable)
.callEvenIfRunning(true)
.startWhenPrepared(true)
.shouldStream(true)
diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesPodcastSearcher.java b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesPodcastSearcher.java
index a91aae1a8..620b30177 100644
--- a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesPodcastSearcher.java
+++ b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesPodcastSearcher.java
@@ -43,8 +43,7 @@ public class ItunesPodcastSearcher implements PodcastSearcher {
OkHttpClient client = AntennapodHttpClient.getHttpClient();
Request.Builder httpReq = new Request.Builder()
- .url(formattedUrl)
- .header("User-Agent", ClientConfig.USER_AGENT);
+ .url(formattedUrl);
List<PodcastSearchResult> podcasts = new ArrayList<>();
try {
Response response = client.newCall(httpReq.build()).execute();
diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
index ee318c706..eb6589b84 100644
--- a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
+++ b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java
@@ -10,6 +10,7 @@ import io.reactivex.Single;
import io.reactivex.SingleOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
+import okhttp3.CacheControl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -21,6 +22,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import java.util.concurrent.TimeUnit;
public class ItunesTopListLoader {
private static final String TAG = "ITunesTopListLoader";
@@ -55,8 +57,7 @@ public class ItunesTopListLoader {
return Single.create((SingleOnSubscribe<String>) emitter -> {
OkHttpClient client = AntennapodHttpClient.getHttpClient();
Request.Builder httpReq = new Request.Builder()
- .url(podcast.feedUrl)
- .header("User-Agent", ClientConfig.USER_AGENT);
+ .url(podcast.feedUrl);
try {
Response response = client.newCall(httpReq.build()).execute();
if (response.isSuccessful()) {
@@ -81,7 +82,7 @@ public class ItunesTopListLoader {
String url = "https://itunes.apple.com/%s/rss/toppodcasts/limit=" + limit + "/explicit=true/json";
Log.d(TAG, "Feed URL " + String.format(url, country));
Request.Builder httpReq = new Request.Builder()
- .header("User-Agent", ClientConfig.USER_AGENT)
+ .cacheControl(new CacheControl.Builder().minFresh(1, TimeUnit.DAYS).build())
.url(String.format(url, country));
try (Response response = client.newCall(httpReq.build()).execute()) {
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 cc1868321..4f8b4e971 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
@@ -120,7 +120,7 @@ public class CoverFragment extends Fragment {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(PlaybackPositionEvent event) {
- if (controller == null) {
+ if (media == null) {
return;
}
displayCoverImage(event.getPosition());
diff --git a/app/src/main/res/layout/itemdescription_listitem.xml b/app/src/main/res/layout/itemdescription_listitem.xml
index 9d03e30a3..15c23c915 100644
--- a/app/src/main/res/layout/itemdescription_listitem.xml
+++ b/app/src/main/res/layout/itemdescription_listitem.xml
@@ -56,4 +56,14 @@
tools:text="Feed item description"
tools:background="@android:color/holo_green_dark" />
+ <Button
+ android:id="@+id/butPreview"
+ android:layout_below="@id/txtvDescription"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentLeft="true"
+ style="?android:attr/buttonBarButtonStyle"
+ android:text="@string/preview_episode"/>
+
</RelativeLayout>