summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/android-emulator.yml5
-rw-r--r--.github/workflows/runTests.sh6
-rw-r--r--CONTRIBUTORS6
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/AndroidManifest.xml19
-rw-r--r--app/src/main/assets/developers.csv2
-rw-r--r--app/src/main/assets/translators.csv4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java14
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java43
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java14
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java15
16 files changed, 102 insertions, 58 deletions
diff --git a/.github/workflows/android-emulator.yml b/.github/workflows/android-emulator.yml
index d42b4504e..52c6f0f69 100644
--- a/.github/workflows/android-emulator.yml
+++ b/.github/workflows/android-emulator.yml
@@ -16,12 +16,11 @@ jobs:
- name: Build with Gradle
run: ./gradlew assemblePlayDebugAndroidTest
- name: Android Emulator test
- uses: ReactiveCircus/android-emulator-runner@v1.0.1
+ uses: ReactiveCircus/android-emulator-runner@v2.2.0
with:
api-level: 28
- headless: true
disable-animations: true
- script: ./gradlew connectedPlayDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.notAnnotation=de.test.antennapod.IgnoreOnCi
+ script: zsh .github/workflows/runTests.sh
- uses: actions/upload-artifact@v1
if: failure()
with:
diff --git a/.github/workflows/runTests.sh b/.github/workflows/runTests.sh
new file mode 100644
index 000000000..c631cce72
--- /dev/null
+++ b/.github/workflows/runTests.sh
@@ -0,0 +1,6 @@
+runTests() {
+ ./gradlew connectedPlayDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.notAnnotation=de.test.antennapod.IgnoreOnCi
+}
+
+# Retry tests to make them less flaky
+runTests || runTests || runTests
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 240be593b..a9a8954ba 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -5,8 +5,8 @@ TomHennen
orionlee
domingos86
andersonvom
-patheticpat
spacecowboy
+patheticpat
brad
Cj-Malone
gaul
@@ -122,14 +122,14 @@ Asturian (ast_ES): enolp
Azerbaijani: danieloeh, kotfenix
Basque: gaztainalde, pospolos, zakurranputza
Bulgarian: solusitor
-Catalan: dvd1985, exort12, javiercoll, lambdani, marcmetallextrem, xc70
+Catalan: dvd1985, exort12, javiercoll, Kintu, lambdani, marcmetallextrem, xc70
Chinese (zh_CN): bebeauties38, cyril3, domingos86, dudeG, ErlichLiu, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, JayYoung, jhxie, kavdx, kyleehee, linxiangyu, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, stellaxuyi, tupunco, wi24rd, wongsyrone, xukeek, yangyang, yiqiok, YogaGuru
Chinese (zh_TW): gugod, nigelinux, pggdt, Solomon, ymhuang0808
Czech (cs_CZ): anotheranonymoususer, elich, Hanzmeister, mcepl, petnek, svetlemodry
Danish: CasperHN, jhertel
Dutch: e2jk, glotzbach, rwv, Vistaus
English: mfietz, sterylmreep
-Estonian: Eraser
+Estonian: ByteHamster, Eraser, mahfiaz
Finnish: danieloeh, elguitar, Sahtor
French: cactux, ChaoticMind, clombion, e2jk, edewaele, lacouture, LouFex, Matth78, mfietz, Poussinou, repat, Sioul, sterylmreep, TacoTheDank, Tilwa, vcariven, whenrow
Galician: antiparvos, pikamoku, Raichely
diff --git a/app/build.gradle b/app/build.gradle
index b25e814b8..498111189 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -18,8 +18,8 @@ android {
// "1.2.3-SNAPSHOT" -> 1020300
// "1.2.3-RC4" -> 1020304
// "1.2.3" -> 1020395
- versionCode 1080005
- versionName "1.8.0-RC5"
+ versionCode 1080008
+ versionName "1.8.0-RC8"
testApplicationId "de.test.antennapod"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
generatedDensities = []
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 086206dcd..ad68fcfe3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -236,7 +236,6 @@
android:value="de.danoeh.antennapod.activity.MainActivity"/>
<!-- URLs ending with '.xml' or '.rss' -->
-
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@@ -252,7 +251,6 @@
</intent-filter>
<!-- Feedburner URLs -->
-
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@@ -268,7 +266,6 @@
</intent-filter>
<!-- Files with mimeType rss/xml/atom -->
-
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@@ -284,7 +281,6 @@
</intent-filter>
<!-- Podcast protocols -->
-
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@@ -297,6 +293,21 @@
<data android:scheme="antennapod-subscribe"/>
</intent-filter>
+ <!-- Support for subscribeonandroid.com URLS -->
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data android:pathPattern=".*\\..*/.*" />
+ <data android:host="subscribeonandroid.com" />
+ <data android:host="www.subscribeonandroid.com" />
+ <data android:host="*subscribeonandroid.com" />
+ <data android:scheme="http" />
+ <data android:scheme="https" />
+ </intent-filter>
+
<intent-filter>
<action android:name="android.intent.action.SEND"/>
diff --git a/app/src/main/assets/developers.csv b/app/src/main/assets/developers.csv
index 460e896f9..80ef04970 100644
--- a/app/src/main/assets/developers.csv
+++ b/app/src/main/assets/developers.csv
@@ -5,8 +5,8 @@ TomHennen;5216560;Maintainer (retired)
orionlee;250644;Contributor
domingos86;9538859;Contributor
andersonvom;69922;Contributor
-patheticpat;16046;Contributor
spacecowboy;223655;Contributor
+patheticpat;16046;Contributor
brad;1614;Contributor
Cj-Malone;10121513;Contributor
gaul;848247;Contributor
diff --git a/app/src/main/assets/translators.csv b/app/src/main/assets/translators.csv
index 9670fb652..82a3e9819 100644
--- a/app/src/main/assets/translators.csv
+++ b/app/src/main/assets/translators.csv
@@ -3,14 +3,14 @@ Asturian (ast_ES);enolp
Azerbaijani;danieloeh, kotfenix
Basque;gaztainalde, pospolos, zakurranputza
Bulgarian;solusitor
-Catalan;dvd1985, exort12, javiercoll, lambdani, marcmetallextrem, xc70
+Catalan;dvd1985, exort12, javiercoll, Kintu, lambdani, marcmetallextrem, xc70
Chinese (zh_CN);bebeauties38, cyril3, domingos86, dudeG, ErlichLiu, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, JayYoung, jhxie, kavdx, kyleehee, linxiangyu, molisiye, owen8877, RainSlide, Sak94664, spice2wolf, stellaxuyi, tupunco, wi24rd, wongsyrone, xukeek, yangyang, yiqiok, YogaGuru
Chinese (zh_TW);gugod, nigelinux, pggdt, Solomon, ymhuang0808
Czech (cs_CZ);anotheranonymoususer, elich, Hanzmeister, mcepl, petnek, svetlemodry
Danish;CasperHN, jhertel
Dutch;e2jk, glotzbach, rwv, Vistaus
English;mfietz, sterylmreep
-Estonian;Eraser
+Estonian;ByteHamster, Eraser, mahfiaz
Finnish;danieloeh, elguitar, Sahtor
French;cactux, ChaoticMind, clombion, e2jk, edewaele, lacouture, LouFex, Matth78, mfietz, Poussinou, repat, Sioul, sterylmreep, TacoTheDank, Tilwa, vcariven, whenrow
Galician;antiparvos, pikamoku, Raichely
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
index a0530fb95..50a8d0965 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -134,6 +134,10 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
} else {
Log.d(TAG, "Activity was started with url " + feedUrl);
setLoadingLayout();
+ // Remove subscribeonandroid.com from feed URL in order to subscribe to the actual feed URL
+ if (feedUrl.contains("subscribeonandroid.com")) {
+ feedUrl = feedUrl.replaceFirst("((www.)?(subscribeonandroid.com/))", "");
+ }
if (savedInstanceState == null) {
startFeedDownload(feedUrl, null, null);
} else {
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
index 9cd5cc3ab..eafc4b0a6 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java
@@ -245,8 +245,9 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR
public void onClick(View v) {
MainActivity mainActivity = mainActivityRef.get();
if (mainActivity != null) {
- long[] ids = itemAccess.getItemsIds().toArray();
- mainActivity.loadChildFragment(ItemPagerFragment.newInstance(ids, getAdapterPosition()));
+ LongList itemIds = itemAccess.getItemsIds();
+ long[] ids = itemIds.toArray();
+ mainActivity.loadChildFragment(ItemPagerFragment.newInstance(ids, itemIds.indexOf(item.getId())));
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
index ff131aeba..2e1cc2c7d 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
@@ -51,7 +51,7 @@ public class EpisodesApplyActionFragment extends Fragment {
public static final int ACTION_REMOVE_FROM_QUEUE = 2;
private static final int ACTION_MARK_PLAYED = 4;
private static final int ACTION_MARK_UNPLAYED = 8;
- private static final int ACTION_DOWNLOAD = 16;
+ public static final int ACTION_DOWNLOAD = 16;
public static final int ACTION_DELETE = 32;
private static final int ACTION_ALL = ACTION_ADD_TO_QUEUE | ACTION_REMOVE_FROM_QUEUE
| ACTION_MARK_PLAYED | ACTION_MARK_UNPLAYED | ACTION_DOWNLOAD | ACTION_DELETE;
@@ -480,7 +480,7 @@ public class EpisodesApplyActionFragment extends Fragment {
// download the check episodes in the same order as they are currently displayed
List<FeedItem> toDownload = new ArrayList<>(checkedIds.size());
for(FeedItem episode : episodes) {
- if(checkedIds.contains(episode.getId())) {
+ if(checkedIds.contains(episode.getId()) && episode.hasMedia()) {
toDownload.add(episode);
}
}
@@ -490,7 +490,7 @@ public class EpisodesApplyActionFragment extends Fragment {
e.printStackTrace();
DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
}
- close(R.plurals.downloading_batch_label, checkedIds.size());
+ close(R.plurals.downloading_batch_label, toDownload.size());
}
private void deleteChecked() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
index 3949a03a9..fdb74fa64 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -1,5 +1,7 @@
package de.danoeh.antennapod.fragment;
+import android.content.Context;
+import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -20,6 +22,8 @@ import de.danoeh.antennapod.dialog.FilterDialog;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
import java.util.List;
import java.util.Set;
@@ -32,12 +36,13 @@ public class AllEpisodesFragment extends EpisodesListFragment {
public static final String TAG = "AllEpisodesFragment";
private static final String PREF_NAME = "PrefAllEpisodesFragment";
+ private static final String PREF_FILTER = "filter";
private static final int EPISODES_PER_PAGE = 150;
private static final int VISIBLE_EPISODES_SCROLL_THRESHOLD = 5;
private static int page = 1;
- private static FeedItemFilter feedItemFilter = new FeedItemFilter("");
+ private FeedItemFilter feedItemFilter = new FeedItemFilter("");
@Override
protected boolean showOnlyNewEpisodes() {
@@ -69,6 +74,9 @@ public class AllEpisodesFragment extends EpisodesListFragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = super.onCreateView(inflater, container, savedInstanceState);
+ SharedPreferences prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
+ feedItemFilter = new FeedItemFilter(prefs.getString(PREF_FILTER, ""));
+
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
/* Total number of episodes after last load */
@@ -146,7 +154,9 @@ public class AllEpisodesFragment extends EpisodesListFragment {
FilterDialog filterDialog = new FilterDialog(getContext(), feedItemFilter) {
@Override
protected void updateFilter(Set<String> filterValues) {
- feedItemFilter = new FeedItemFilter(filterValues.toArray(new String[filterValues.size()]));
+ feedItemFilter = new FeedItemFilter(filterValues.toArray(new String[0]));
+ SharedPreferences prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
+ prefs.edit().putString(PREF_FILTER, StringUtils.join(filterValues, ",")).apply();
loadItems();
}
};
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
index fdac649d1..20188a8a6 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
@@ -50,9 +50,6 @@ public class ItemPagerFragment extends Fragment {
* @return The ItemFragment instance
*/
public static ItemPagerFragment newInstance(long[] feeditems, int feedItemPos) {
- if (feeditems.length <= feedItemPos) {
- throw new IllegalArgumentException("Trying to show a feed item that is out of the list");
- }
ItemPagerFragment fragment = new ItemPagerFragment();
Bundle args = new Bundle();
args.putLongArray(ARG_FEEDITEMS, feeditems);
@@ -62,7 +59,6 @@ public class ItemPagerFragment extends Fragment {
}
private long[] feedItems;
- private int feedItemPos;
private FeedItem item;
private Disposable disposable;
@@ -70,9 +66,6 @@ public class ItemPagerFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
-
- feedItems = getArguments().getLongArray(ARG_FEEDITEMS);
- feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS);
}
@Override
@@ -81,6 +74,9 @@ public class ItemPagerFragment extends Fragment {
super.onCreateView(inflater, container, savedInstanceState);
View layout = inflater.inflate(R.layout.feeditem_pager_fragment, container, false);
+ feedItems = getArguments().getLongArray(ARG_FEEDITEMS);
+ int feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS);
+
ViewPager pager = layout.findViewById(R.id.pager);
// FragmentStatePagerAdapter documentation:
// > When using FragmentStatePagerAdapter the host ViewPager must have a valid ID set.
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index b36ce6145..46e8789d4 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -69,6 +69,7 @@ import io.reactivex.schedulers.Schedulers;
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_DELETE;
import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REMOVE_FROM_QUEUE;
+import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_DOWNLOAD;
/**
* Shows all items in the queue
@@ -349,7 +350,7 @@ public class QueueFragment extends Fragment {
return true;
case R.id.episode_actions:
((MainActivity) requireActivity()).loadChildFragment(
- EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE));
+ EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE | ACTION_DOWNLOAD));
return true;
case R.id.queue_sort_episode_title_asc:
setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java
index b82bba89b..34684ac49 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java
@@ -2,29 +2,28 @@ package de.danoeh.antennapod.fragment.preferences;
import android.app.Activity;
import android.content.res.Resources;
-import android.os.Build;
import android.os.Bundle;
-
import androidx.annotation.NonNull;
import androidx.collection.ArrayMap;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
-
-import java.util.Map;
-
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MediaplayerActivity;
import de.danoeh.antennapod.activity.PreferenceActivity;
+import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil;
import de.danoeh.antennapod.dialog.VariableSpeedDialog;
import de.danoeh.antennapod.preferences.PreferenceControllerFlavorHelper;
+import java.util.Map;
+import org.greenrobot.eventbus.EventBus;
public class PlaybackPreferencesFragment extends PreferenceFragmentCompat {
private static final String PREF_PLAYBACK_SPEED_LAUNCHER = "prefPlaybackSpeedLauncher";
private static final String PREF_PLAYBACK_REWIND_DELTA_LAUNCHER = "prefPlaybackRewindDeltaLauncher";
private static final String PREF_PLAYBACK_FAST_FORWARD_DELTA_LAUNCHER = "prefPlaybackFastForwardDeltaLauncher";
+ private static final String PREF_PLAYBACK_PREFER_STREAMING = "prefStreamOverDownload";
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -44,26 +43,28 @@ public class PlaybackPreferencesFragment extends PreferenceFragmentCompat {
private void setupPlaybackScreen() {
final Activity activity = getActivity();
- findPreference(PREF_PLAYBACK_SPEED_LAUNCHER)
- .setOnPreferenceClickListener(preference -> {
- VariableSpeedDialog.showDialog(activity);
- return true;
- });
- findPreference(PREF_PLAYBACK_REWIND_DELTA_LAUNCHER)
- .setOnPreferenceClickListener(preference -> {
- MediaplayerActivity.showSkipPreference(activity, MediaplayerActivity.SkipDirection.SKIP_REWIND);
- return true;
- });
- findPreference(PREF_PLAYBACK_FAST_FORWARD_DELTA_LAUNCHER)
- .setOnPreferenceClickListener(preference -> {
- MediaplayerActivity.showSkipPreference(activity, MediaplayerActivity.SkipDirection.SKIP_FORWARD);
- return true;
- });
+ findPreference(PREF_PLAYBACK_SPEED_LAUNCHER).setOnPreferenceClickListener(preference -> {
+ VariableSpeedDialog.showDialog(activity);
+ return true;
+ });
+ findPreference(PREF_PLAYBACK_REWIND_DELTA_LAUNCHER).setOnPreferenceClickListener(preference -> {
+ MediaplayerActivity.showSkipPreference(activity, MediaplayerActivity.SkipDirection.SKIP_REWIND);
+ return true;
+ });
+ findPreference(PREF_PLAYBACK_FAST_FORWARD_DELTA_LAUNCHER).setOnPreferenceClickListener(preference -> {
+ MediaplayerActivity.showSkipPreference(activity, MediaplayerActivity.SkipDirection.SKIP_FORWARD);
+ return true;
+ });
if (!PictureInPictureUtil.supportsPictureInPicture(activity)) {
- ListPreference behaviour = (ListPreference) findPreference(UserPreferences.PREF_VIDEO_BEHAVIOR);
+ ListPreference behaviour = findPreference(UserPreferences.PREF_VIDEO_BEHAVIOR);
behaviour.setEntries(R.array.video_background_behavior_options_without_pip);
behaviour.setEntryValues(R.array.video_background_behavior_values_without_pip);
}
+ findPreference(PREF_PLAYBACK_PREFER_STREAMING).setOnPreferenceChangeListener((preference, newValue) -> {
+ // Update all visible lists to reflect new streaming action button
+ EventBus.getDefault().post(new UnreadItemsUpdateEvent());
+ return true;
+ });
buildEnqueueLocationPreference();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
index 7c05293c6..f7c338729 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
@@ -167,7 +167,7 @@ public class DownloadService extends Service {
Notification notification = notificationManager.updateNotifications(
requester.getNumberOfDownloads(), downloads);
startForeground(NOTIFICATION_ID, notification);
- onDownloadQueued(intent);
+ syncExecutor.execute(() -> onDownloadQueued(intent));
} else if (numberOfDownloads.get() == 0) {
stopSelf();
} else {
@@ -477,13 +477,13 @@ public class DownloadService extends Service {
&& isEnqueued(request, itemsEnqueued)) {
request.setMediaEnqueued(true);
}
- downloads.add(downloader);
- downloadExecutor.submit(downloader);
-
- postDownloaders();
+ handler.post(() -> {
+ downloads.add(downloader);
+ downloadExecutor.submit(downloader);
+ postDownloaders();
+ });
}
-
- queryDownloads();
+ handler.post(this::queryDownloads);
}
private static boolean isEnqueued(@NonNull DownloadRequest request,
diff --git a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
index 55d804203..c92ce3e74 100644
--- a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
+++ b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java
@@ -3,6 +3,10 @@ package de.danoeh.antennapod.core;
import android.content.Context;
import android.util.Log;
+import com.google.android.gms.common.GoogleApiAvailability;
+import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
+import com.google.android.gms.common.GooglePlayServicesRepairableException;
+import com.google.android.gms.security.ProviderInstaller;
import de.danoeh.antennapod.core.cast.CastManager;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
@@ -57,10 +61,21 @@ public class ClientConfig {
} else {
Log.v(TAG, "Cast is disabled. All Cast-related initialization will be skipped.");
}
+ installSslProvider(context);
SleepTimerPreferences.init(context);
RxJavaErrorHandlerSetup.setupRxJavaErrorHandler();
NotificationUtils.createChannels(context);
initialized = true;
}
+ private static void installSslProvider(Context context) {
+ try {
+ ProviderInstaller.installIfNeeded(context);
+ } catch (GooglePlayServicesRepairableException e) {
+ e.printStackTrace();
+ GoogleApiAvailability.getInstance().showErrorNotification(context, e.getConnectionStatusCode());
+ } catch (GooglePlayServicesNotAvailableException e) {
+ e.printStackTrace();
+ }
+ }
}