summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/DownloadAuthenticationActivityStarter.java39
-rw-r--r--ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/MainActivityStarter.java23
-rw-r--r--ui/app-start-intent/src/main/res/values/pending_intent.xml2
-rw-r--r--ui/common/src/main/res/layout/pager_fragment.xml2
-rw-r--r--ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/ApGlideModule.java2
-rw-r--r--ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmap.java20
-rw-r--r--ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapResource.java40
-rw-r--r--ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapTranscoder.java31
-rw-r--r--ui/i18n/build.gradle2
-rw-r--r--ui/i18n/src/main/res/values/strings.xml78
-rw-r--r--ui/png-icons/src/main/res/drawable/ic_notification_cancel.xml5
-rw-r--r--ui/png-icons/src/main/res/drawable/ic_notification_playback_speed.xml8
-rw-r--r--ui/statistics/src/main/java/de/danoeh/antennapod/ui/statistics/subscriptions/StatisticsFilterDialog.java4
13 files changed, 119 insertions, 137 deletions
diff --git a/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/DownloadAuthenticationActivityStarter.java b/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/DownloadAuthenticationActivityStarter.java
new file mode 100644
index 000000000..03c5e915e
--- /dev/null
+++ b/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/DownloadAuthenticationActivityStarter.java
@@ -0,0 +1,39 @@
+package de.danoeh.antennapod.ui.appstartintent;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Parcelable;
+
+/**
+ * Launches the download authentication activity of the app with specific arguments.
+ * Does not require a dependency on the actual implementation of the activity.
+ */
+public class DownloadAuthenticationActivityStarter {
+ public static final String INTENT = "de.danoeh.antennapod.intents.DOWNLOAD_AUTH_ACTIVITY";
+ public static final String EXTRA_DOWNLOAD_REQUEST = "download_request";
+
+ private final Intent intent;
+ private final Context context;
+ private final long feedFileId;
+
+ public DownloadAuthenticationActivityStarter(Context context, long feedFileId, Parcelable downloadRequest) {
+ this.context = context;
+ this.feedFileId = feedFileId;
+ intent = new Intent(INTENT);
+ intent.setAction("request" + feedFileId);
+ intent.putExtra(EXTRA_DOWNLOAD_REQUEST, downloadRequest);
+ intent.setPackage(context.getPackageName());
+ }
+
+ public Intent getIntent() {
+ return intent;
+ }
+
+ public PendingIntent getPendingIntent() {
+ return PendingIntent.getActivity(context.getApplicationContext(),
+ ("downloadAuth" + feedFileId).hashCode(), getIntent(),
+ PendingIntent.FLAG_ONE_SHOT | (Build.VERSION.SDK_INT >= 23 ? PendingIntent.FLAG_IMMUTABLE : 0));
+ }
+}
diff --git a/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/MainActivityStarter.java b/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/MainActivityStarter.java
index f91bb9244..1463978ee 100644
--- a/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/MainActivityStarter.java
+++ b/ui/app-start-intent/src/main/java/de/danoeh/antennapod/ui/appstartintent/MainActivityStarter.java
@@ -4,6 +4,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
+import android.os.Bundle;
/**
* Launches the main activity of the app with specific arguments.
@@ -14,9 +15,13 @@ public class MainActivityStarter {
public static final String EXTRA_OPEN_PLAYER = "open_player";
public static final String EXTRA_FEED_ID = "fragment_feed_id";
public static final String EXTRA_ADD_TO_BACK_STACK = "add_to_back_stack";
+ public static final String EXTRA_FRAGMENT_TAG = "fragment_tag";
+ public static final String EXTRA_OPEN_DRAWER = "open_drawer";
+ public static final String EXTRA_FRAGMENT_ARGS = "fragment_args";
private final Intent intent;
private final Context context;
+ private Bundle fragmentArgs = null;
public MainActivityStarter(Context context) {
this.context = context;
@@ -51,4 +56,22 @@ public class MainActivityStarter {
intent.putExtra(EXTRA_ADD_TO_BACK_STACK, true);
return this;
}
+
+ public MainActivityStarter withFragmentLoaded(String fragmentName) {
+ intent.putExtra(EXTRA_FRAGMENT_TAG, fragmentName);
+ return this;
+ }
+
+ public MainActivityStarter withDrawerOpen() {
+ intent.putExtra(EXTRA_OPEN_DRAWER, true);
+ return this;
+ }
+
+ public MainActivityStarter withFragmentArgs(String name, boolean value) {
+ if (fragmentArgs == null) {
+ fragmentArgs = new Bundle();
+ }
+ fragmentArgs.putBoolean(name, value);
+ return this;
+ }
}
diff --git a/ui/app-start-intent/src/main/res/values/pending_intent.xml b/ui/app-start-intent/src/main/res/values/pending_intent.xml
index ed7e9b2cd..30b35d926 100644
--- a/ui/app-start-intent/src/main/res/values/pending_intent.xml
+++ b/ui/app-start-intent/src/main/res/values/pending_intent.xml
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="pending_intent_download_service_notification" type="id"/>
+ <item name="pending_intent_download_service_retry" type="id"/>
+ <item name="pending_intent_download_cancel_all" type="id"/>
<item name="pending_intent_download_service_auth" type="id"/>
<item name="pending_intent_download_service_report" type="id"/>
<item name="pending_intent_download_service_autodownload_report" type="id"/>
diff --git a/ui/common/src/main/res/layout/pager_fragment.xml b/ui/common/src/main/res/layout/pager_fragment.xml
index 3987b871d..e479259d5 100644
--- a/ui/common/src/main/res/layout/pager_fragment.xml
+++ b/ui/common/src/main/res/layout/pager_fragment.xml
@@ -26,7 +26,7 @@
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
app:tabBackground="?attr/selectableItemBackground"
- app:tabMode="fixed"
+ app:tabMode="auto"
app:tabGravity="fill" />
<androidx.viewpager2.widget.ViewPager2
diff --git a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/ApGlideModule.java b/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/ApGlideModule.java
index d233fba14..132ed4901 100644
--- a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/ApGlideModule.java
+++ b/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/ApGlideModule.java
@@ -2,7 +2,6 @@ package de.danoeh.antennapod.ui.glide;
import android.annotation.SuppressLint;
import android.content.Context;
-import android.graphics.Bitmap;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -51,6 +50,5 @@ public class ApGlideModule extends AppGlideModule {
registry.append(String.class, InputStream.class, new NoHttpStringLoader.StreamFactory());
registry.append(EmbeddedChapterImage.class, ByteBuffer.class, new ChapterImageModelLoader.Factory());
- registry.register(Bitmap.class, PaletteBitmap.class, new PaletteBitmapTranscoder());
}
}
diff --git a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmap.java b/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmap.java
deleted file mode 100644
index a3b590ba2..000000000
--- a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmap.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Source: https://github.com/bumptech/glide/wiki/Custom-targets#palette-example
- */
-
-package de.danoeh.antennapod.ui.glide;
-
-import android.graphics.Bitmap;
-
-import androidx.annotation.NonNull;
-import androidx.palette.graphics.Palette;
-
-public class PaletteBitmap {
- public final Palette palette;
- public final Bitmap bitmap;
-
- public PaletteBitmap(@NonNull Bitmap bitmap, Palette palette) {
- this.bitmap = bitmap;
- this.palette = palette;
- }
-} \ No newline at end of file
diff --git a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapResource.java b/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapResource.java
deleted file mode 100644
index 2fd18a0cb..000000000
--- a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapResource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Source: https://github.com/bumptech/glide/wiki/Custom-targets#palette-example
- */
-
-package de.danoeh.antennapod.ui.glide;
-
-import androidx.annotation.NonNull;
-
-import com.bumptech.glide.load.engine.Resource;
-import com.bumptech.glide.util.Util;
-
-public class PaletteBitmapResource implements Resource<PaletteBitmap> {
- private final PaletteBitmap paletteBitmap;
-
- public PaletteBitmapResource(@NonNull PaletteBitmap paletteBitmap) {
- this.paletteBitmap = paletteBitmap;
- }
-
- @NonNull
- @Override
- public Class<PaletteBitmap> getResourceClass() {
- return PaletteBitmap.class;
- }
-
- @NonNull
- @Override
- public PaletteBitmap get() {
- return paletteBitmap;
- }
-
- @Override
- public int getSize() {
- return Util.getBitmapByteSize(paletteBitmap.bitmap);
- }
-
- @Override
- public void recycle() {
- paletteBitmap.bitmap.recycle();
- }
-} \ No newline at end of file
diff --git a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapTranscoder.java b/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapTranscoder.java
deleted file mode 100644
index bcb5f590a..000000000
--- a/ui/glide/src/main/java/de/danoeh/antennapod/ui/glide/PaletteBitmapTranscoder.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Source: https://github.com/bumptech/glide/wiki/Custom-targets#palette-example
- */
-
-package de.danoeh.antennapod.ui.glide;
-
-import android.graphics.Bitmap;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.palette.graphics.Palette;
-
-import com.bumptech.glide.load.Options;
-import com.bumptech.glide.load.engine.Resource;
-import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
-import de.danoeh.antennapod.storage.preferences.UserPreferences;
-
-public class PaletteBitmapTranscoder implements ResourceTranscoder<Bitmap, PaletteBitmap> {
-
- @Nullable
- @Override
- public Resource<PaletteBitmap> transcode(@NonNull Resource<Bitmap> toTranscode, @NonNull Options options) {
- Bitmap bitmap = toTranscode.get();
- Palette palette = null;
- if (UserPreferences.shouldShowSubscriptionTitle()) {
- palette = new Palette.Builder(bitmap).generate();
- }
- PaletteBitmap result = new PaletteBitmap(bitmap, palette);
- return new PaletteBitmapResource(result);
- }
-}
diff --git a/ui/i18n/build.gradle b/ui/i18n/build.gradle
index a1ace417b..4f5370662 100644
--- a/ui/i18n/build.gradle
+++ b/ui/i18n/build.gradle
@@ -4,7 +4,7 @@ plugins {
apply from: "../../common.gradle"
android {
- lintOptions {
+ lint {
disable "Typos", "ExtraTranslation", "ImpliedQuantity",
"PluralsCandidate", "UnusedQuantity", "TypographyEllipsis"
}
diff --git a/ui/i18n/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml
index f072ea673..59fc8b4e5 100644
--- a/ui/i18n/src/main/res/values/strings.xml
+++ b/ui/i18n/src/main/res/values/strings.xml
@@ -38,6 +38,7 @@
<string name="swipe_left">Swipe Left</string>
<string name="enable_swipeactions">Enable Swipe Actions for this Screen</string>
<string name="change_setting">Change</string>
+ <string name="individual_subscription">Individual subscription</string>
<!-- Statistics fragment -->
<string name="statistics_include_marked">Include duration of episodes that are just marked as played</string>
@@ -60,6 +61,9 @@
<string name="home_downloads_title">Manage downloads</string>
<string name="home_welcome_title">Welcome to AntennaPod!</string>
<string name="home_welcome_text">You are not subscribed to any podcasts yet. Open the side menu to add a podcast.</string>
+ <string name="notification_permission_text">AntennaPod needs your permission to show notifications while downloading episodes.</string>
+ <string name="notification_permission_denied">You denied the permission.</string>
+ <string name="open_settings">Open settings</string>
<string name="configure_home">Configure Home Screen</string>
<!-- Download Statistics fragment -->
@@ -103,6 +107,7 @@
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="reset">Reset</string>
+ <string name="global_default">Global default</string>
<string name="url_label">URL</string>
<string name="support_funding_label">Support</string>
<string name="support_podcast">Support this Podcast</string>
@@ -110,6 +115,7 @@
<string name="error_msg_prefix">An error occurred:</string>
<string name="refresh_label">Refresh</string>
<string name="chapters_label">Chapters</string>
+ <string name="no_chapters_label">No chapters</string>
<string name="chapter_duration">Duration: %1$s</string>
<string name="description_label">Description</string>
<string name="shownotes_label">Shownotes</string>
@@ -125,9 +131,10 @@
<string name="feed_volume_reduction_light">Light</string>
<string name="feed_volume_reduction_heavy">Heavy</string>
<string name="parallel_downloads">%1$d parallel downloads</string>
- <string name="feed_auto_download_global">Global default</string>
<string name="feed_auto_download_always">Always</string>
<string name="feed_auto_download_never">Never</string>
+ <string name="feed_new_episodes_action_add_to_inbox">Add to Inbox</string>
+ <string name="feed_new_episodes_action_nothing">Nothing</string>
<string name="send_label">Send&#8230;</string>
<string name="episode_cleanup_never">Never</string>
<string name="episode_cleanup_except_favorite_removal">When not favorited</string>
@@ -175,9 +182,9 @@
<string name="share_label">Share</string>
<string name="share_file_label">Share File</string>
<string name="share_rss_address_label">RSS address:</string>
- <string name="feed_delete_confirmation_msg">Please confirm that you want to delete the podcast \"%1$s\" and ALL its episodes (including downloaded episodes).</string>
- <string name="feed_delete_confirmation_msg_batch">Please confirm that you want to remove the selected podcasts and ALL their episodes (including downloaded episodes).</string>
- <string name="feed_delete_confirmation_local_msg">Please confirm that you want to remove the podcast \"%1$s\". The files in the local source folder will not be deleted.</string>
+ <string name="feed_delete_confirmation_msg">Please confirm that you want to delete the podcast \"%1$s\", ALL its episodes (including downloaded episodes), and its statistics.</string>
+ <string name="feed_delete_confirmation_msg_batch">Please confirm that you want to remove the selected podcasts, ALL their episodes (including downloaded episodes), and its statistics.</string>
+ <string name="feed_delete_confirmation_local_msg">Please confirm that you want to remove the podcast \"%1$s\" and its statistics. The files in the local source folder will not be deleted.</string>
<string name="feed_remover_msg">Removing podcast</string>
<string name="load_complete_feed">Refresh complete podcast</string>
<string name="multi_select">Multi select</string>
@@ -308,6 +315,7 @@
<string name="confirm_mobile_download_dialog_enable_temporarily">Allow temporarily</string>
<!-- Mediaplayer messages -->
+ <string name="playback_error_generic"><![CDATA[The media file could not be played.\n\n- Try deleting and re-downloading the episode.\n- Check your network connection, and make sure no VPN or login page is blocking access.\n- Try long-pressing and sharing the \"Media address\" to your web browser to see if it can be played there. If not, contact the podcast creators.]]></string>
<string name="playback_error_server_died">Server died</string>
<string name="playback_error_unsupported">Unsupported media type</string>
<string name="playback_error_timeout">Operation timed out</string>
@@ -363,9 +371,6 @@
<string name="no_subscriptions_label">To subscribe to a podcast, press the plus icon below.</string>
<!-- Preferences -->
- <string name="storage_pref">Storage</string>
- <string name="storage_sum">Episode auto delete, Import, Export</string>
- <string name="statistics_moved">The statistics screen was moved to the subscriptions screen. You can open it from there.</string>
<string name="project_pref">Project</string>
<string name="synchronization_pref">Synchronization</string>
<string name="synchronization_sum">Synchronize with other devices</string>
@@ -381,7 +386,6 @@
<string name="preference_search_hint">Search…</string>
<string name="preference_search_no_results">No results</string>
<string name="preference_search_clear_history">Clear history</string>
- <string name="media_player">Media player</string>
<string name="pref_episode_cleanup_title">Episode Cleanup</string>
<string name="pref_episode_cleanup_summary">Episodes that should be eligible for removal if Auto Download needs space for new episodes</string>
<string name="pref_pauseOnDisconnect_sum">Pause playback when headphones or bluetooth are disconnected</string>
@@ -406,20 +410,18 @@
<string name="pref_favorite_keeps_episodes_title">Keep Favorite Episodes</string>
<string name="playback_pref">Playback</string>
<string name="playback_pref_sum">Headphone controls, Skip intervals, Queue</string>
- <string name="network_pref">Network</string>
- <string name="network_pref_sum">Update interval, Download controls, Mobile data</string>
+ <string name="downloads_pref">Downloads</string>
+ <string name="downloads_pref_sum">Update interval, Mobile data, Automatic download, Automatic deletion</string>
<string name="feed_refresh_title">Refresh podcasts</string>
- <string name="feed_refresh_sum">Specify an interval or a specific time to look for new episodes automatically</string>
- <string name="feed_refresh_interval">Interval</string>
- <string name="feed_refresh_time">Time</string>
+ <string name="feed_refresh_sum">Specify an interval at which AntennaPod looks for new episodes automatically</string>
<string name="feed_refresh_never">Never</string>
- <string name="feed_refresh_interval_at">at %1$s</string>
- <plurals name="feed_refresh_every_x_hours">
- <item quantity="one">Every hour</item>
- <item quantity="other">Every %d hours</item>
- </plurals>
- <string name="battery_optimization_pref_title">Battery Optimization</string>
- <string name="battery_optimization_pref">For more reliable automatic downloads and automatic refresh, exclude AntennaPod from battery optimization. Tap to add an exception for AntennaPod.</string>
+ <string name="feed_every_hour">Every hour</string>
+ <string name="feed_every_2_hours">Every 2 hours</string>
+ <string name="feed_every_4_hours">Every 4 hours</string>
+ <string name="feed_every_8_hours">Every 8 hours</string>
+ <string name="feed_every_12_hours">Every 12 hours</string>
+ <string name="feed_every_24_hours">Every day</string>
+ <string name="feed_every_72_hours">Every 3 days</string>
<string name="pref_followQueue_title">Continuous Playback</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Headphones or Bluetooth disconnect</string>
<string name="pref_unpauseOnHeadsetReconnect_title">Headphones Reconnect</string>
@@ -435,7 +437,8 @@
<string name="pref_mobileUpdate_streaming">Streaming</string>
<string name="user_interface_label">User Interface</string>
<string name="user_interface_sum">Appearance, Subscriptions, Lockscreen</string>
- <string name="pref_set_theme_title">Select Theme</string>
+ <string name="pref_black_theme_title">Full Black</string>
+ <string name="pref_black_theme_message">Use full black for the dark theme</string>
<string name="pref_tinted_theme_title">Use dynamic colors</string>
<string name="pref_tinted_theme_message">Adapt app colors based on the wallpaper</string>
<string name="pref_nav_drawer_items_title">Set Navigation Drawer items</string>
@@ -444,7 +447,6 @@
<string name="pref_nav_drawer_feed_order_sum">Change the order of your subscriptions</string>
<string name="pref_nav_drawer_feed_counter_title">Set Subscription Counter</string>
<string name="pref_nav_drawer_feed_counter_sum">Change the information displayed by the subscription counter. Also affects the sorting of subscriptions if \'Subscription Order\' is set to \'Counter\'.</string>
- <string name="pref_set_theme_sum">Change the appearance of AntennaPod.</string>
<string name="pref_automatic_download_title">Automatic Download</string>
<string name="pref_automatic_download_sum">Configure the automatic download of episodes.</string>
<string name="pref_autodl_wifi_filter_title">Enable Wi-Fi filter</string>
@@ -458,10 +460,9 @@
<string name="pref_episode_cover_summary">Use the episode specific cover in lists whenever available. If unchecked, the app will always use the podcast cover image.</string>
<string name="pref_show_remain_time_title">Show Remaining Time</string>
<string name="pref_show_remain_time_summary">Display remaining time of episodes when checked. If unchecked, display total duration of episodes.</string>
- <string name="pref_theme_title_use_system">Use system theme</string>
+ <string name="pref_theme_title_automatic">Automatic</string>
<string name="pref_theme_title_light">Light</string>
<string name="pref_theme_title_dark">Dark</string>
- <string name="pref_theme_title_trueblack">Black (AMOLED ready)</string>
<string name="pref_episode_cache_unlimited">Unlimited</string>
<string name="pref_playback_speed_sum">Customize the speeds available for variable speed playback</string>
<string name="pref_feed_playback_speed_sum">The speed to use when starting audio playback for episodes in this podcast</string>
@@ -485,13 +486,12 @@
<string name="pref_compact_notification_buttons_sum">Change the playback buttons when the notification is collapsed. The play/pause button is always included.</string>
<string name="pref_compact_notification_buttons_dialog_title">Select a maximum of %1$d items</string>
<string name="pref_compact_notification_buttons_dialog_error">You can only select a maximum of %1$d items.</string>
- <string name="pref_lockscreen_background_title">Set Lockscreen Background</string>
- <string name="pref_lockscreen_background_sum">Set the lockscreen background to the current episode\'s image. As a side effect, this will also show the image in third party apps.</string>
<string name="pref_enqueue_location_title">Enqueue Location</string>
<string name="pref_enqueue_location_sum">Add episodes to: %1$s</string>
<string name="enqueue_location_back">Back</string>
<string name="enqueue_location_front">Front</string>
<string name="enqueue_location_after_current">After current episode</string>
+ <string name="enqueue_location_random">Random</string>
<string name="pref_smart_mark_as_played_disabled">Disabled</string>
<string name="documentation_support">Documentation &amp; Support</string>
<string name="visit_user_forum">User forum</string>
@@ -499,19 +499,11 @@
<string name="open_bug_tracker">Open bug tracker</string>
<string name="copy_to_clipboard">Copy to clipboard</string>
<string name="copied_to_clipboard">Copied to clipboard</string>
- <string name="experimental_pref">Experimental</string>
- <string name="pref_media_player_message">Select which media player to use to play files</string>
- <string name="pref_current_value">Current value: %1$s</string>
<string name="pref_proxy_title">Proxy</string>
<string name="pref_proxy_sum">Set a network proxy</string>
<string name="pref_no_browser_found">No web browser found.</string>
<string name="pref_enqueue_downloaded_title">Enqueue Downloaded</string>
<string name="pref_enqueue_downloaded_summary">Add downloaded episodes to the queue</string>
- <string name="media_player_builtin">Built-in Android player (deprecated) </string>
- <string name="media_player_sonic">Sonic Media Player (deprecated) </string>
- <string name="media_player_exoplayer_recommended">ExoPlayer (recommended)</string>
- <string name="media_player_switch_to_exoplayer">Switch to ExoPlayer</string>
- <string name="media_player_switched_to_exoplayer">Switched to ExoPlayer.</string>
<string name="pref_skip_silence_title">Skip Silence in Audio</string>
<string name="behavior">Behavior</string>
<string name="pref_default_page">Default Page</string>
@@ -535,6 +527,8 @@
<string name="pref_contribute">Contribute</string>
<string name="pref_show_subscription_title">Show Subscription Title</string>
<string name="pref_show_subscription_title_summary">Display the subscription title below the cover image.</string>
+ <string name="pref_new_episodes_action_title">New Episodes Action</string>
+ <string name="pref_new_episodes_action_sum">Action to take for new episodes</string>
<!-- About screen -->
<string name="about_pref">About</string>
@@ -600,6 +594,7 @@
<string name="set_sleeptimer_label">Set sleep timer</string>
<string name="disable_sleeptimer_label">Disable sleep timer</string>
<string name="extend_sleep_timer_label">+%d min</string>
+ <string name="sleep_timer_always">Always</string>
<string name="sleep_timer_label">Sleep timer</string>
<string name="time_dialog_invalid_input">Invalid input, time has to be an integer</string>
<string name="shake_to_reset_label">Shake to reset</string>
@@ -619,7 +614,9 @@
<item quantity="one">1 hour</item>
<item quantity="other">%d hours</item>
</plurals>
- <string name="auto_enable_label">Auto-enable</string>
+ <string name="auto_enable_label">Automatically activate the sleep timer when pressing play</string>
+ <string name="auto_enable_label_with_times">Automatically activate the sleep timer when pressing play between %s and %s</string>
+ <string name="auto_enable_change_times">Change times</string>
<string name="sleep_timer_enabled_label">Sleep timer enabled</string>
<!-- Synchronisation -->
@@ -696,7 +693,7 @@
<string name="authentication_descr">Change your username and password for this podcast and its episodes.</string>
<string name="feed_tags_label">Tags</string>
<string name="feed_tags_summary">Change the tags of this podcast to help organize your subscriptions</string>
- <string name="feed_folders_include_root">Show in main list</string>
+ <string name="feed_folders_include_root">Show this podcast in main list</string>
<string name="multi_feed_common_tags_info">{fa-info-circle} Only common tags from all selected subscriptions are shown. Other tags stay unaffected.</string>
<string name="auto_download_settings_label">Auto Download Settings</string>
<string name="episode_filters_label">Episode Filter</string>
@@ -723,8 +720,8 @@
<!-- Add podcast fragment -->
<string name="search_podcast_hint">Search podcast…</string>
- <string name="search_itunes_label">Search iTunes</string>
- <string name="search_podcastindex_label">Search Podcastindex.org</string>
+ <string name="search_itunes_label">Search Apple Podcasts</string>
+ <string name="search_podcastindex_label">Search Podcast Index</string>
<string name="search_fyyd_label">Search fyyd</string>
<string name="gpodnet_search_hint">Search gpodder.net</string>
<string name="advanced">Advanced</string>
@@ -734,7 +731,7 @@
<string name="discover_hide">Hide</string>
<string name="discover_is_hidden">You selected to hide suggestions.</string>
<string name="discover_more">more »</string>
- <string name="discover_powered_by_itunes">Suggestions by iTunes</string>
+ <string name="discover_powered_by_itunes">Suggestions by Apple Podcasts</string>
<string name="discover_confirm">Show suggestions</string>
<string name="search_powered_by">Results by %1$s</string>
<string name="select_country">Select country</string>
@@ -797,9 +794,6 @@
<string name="audio_controls">Audio controls</string>
<string name="playback_speed">Playback Speed</string>
<string name="audio_effects">Audio Effects</string>
- <string name="stereo_to_mono">Downmix: Stereo to mono</string>
- <string name="sonic_only">Sonic only</string>
- <string name="exoplayer_only">ExoPlayer only</string>
<string name="player_switch_to_audio_only">Switch to audio only</string>
<!-- proxy settings -->
diff --git a/ui/png-icons/src/main/res/drawable/ic_notification_cancel.xml b/ui/png-icons/src/main/res/drawable/ic_notification_cancel.xml
new file mode 100644
index 000000000..a5480c71f
--- /dev/null
+++ b/ui/png-icons/src/main/res/drawable/ic_notification_cancel.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp"
+ android:viewportHeight="24.0" android:viewportWidth="24.0"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#FFFFFFFF" android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
+</vector>
diff --git a/ui/png-icons/src/main/res/drawable/ic_notification_playback_speed.xml b/ui/png-icons/src/main/res/drawable/ic_notification_playback_speed.xml
new file mode 100644
index 000000000..5aad5031a
--- /dev/null
+++ b/ui/png-icons/src/main/res/drawable/ic_notification_playback_speed.xml
@@ -0,0 +1,8 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="30dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0"
+ android:width="30dp">
+
+ <path android:fillColor="#ffffff" android:pathData="M 12 15.98 A 2.98 2.98 0 0 1 9.02 12.99 c 0 -1.11 0.61 -2.09 1.49 -2.6 L 20.17 4.81 L 14.67 14.34 C 14.17 15.31 13.16 15.98 12 15.98 M 12 3.05 c 1.8 0 3.48 0.5 4.94 1.31 l -2.09 1.2 C 13.99 5.22 12.99 5.04 12 5.04 a 7.96 7.96 0 0 0 -7.96 7.96 c 0 2.2 0.89 4.19 2.33 5.62 h 0.01 c 0.39 0.39 0.39 1.01 0 1.4 c -0.39 0.39 -1.02 0.39 -1.41 0.01 v 0 C 3.17 18.22 2.05 15.74 2.05 12.99 A 9.95 9.95 0 0 1 12 3.05 m 9.95 9.95 c 0 2.75 -1.11 5.23 -2.91 7.03 v 0 c -0.39 0.38 -1.01 0.38 -1.4 -0.01 c -0.39 -0.39 -0.39 -1.01 0 -1.4 v 0 c 1.44 -1.44 2.33 -3.42 2.33 -5.62 c 0 -0.99 -0.19 -1.99 -0.54 -2.88 L 20.62 8.02 c 0.83 1.49 1.32 3.16 1.32 4.97 z" />
+</vector>
diff --git a/ui/statistics/src/main/java/de/danoeh/antennapod/ui/statistics/subscriptions/StatisticsFilterDialog.java b/ui/statistics/src/main/java/de/danoeh/antennapod/ui/statistics/subscriptions/StatisticsFilterDialog.java
index 8efdcf603..077883321 100644
--- a/ui/statistics/src/main/java/de/danoeh/antennapod/ui/statistics/subscriptions/StatisticsFilterDialog.java
+++ b/ui/statistics/src/main/java/de/danoeh/antennapod/ui/statistics/subscriptions/StatisticsFilterDialog.java
@@ -107,6 +107,10 @@ public class StatisticsFilterDialog {
private Pair<String[], Long[]> makeMonthlyList(long oldestDate, boolean inclusive) {
Calendar date = Calendar.getInstance();
date.setTimeInMillis(oldestDate);
+ date.set(Calendar.HOUR_OF_DAY, 0);
+ date.set(Calendar.MINUTE, 0);
+ date.set(Calendar.SECOND, 0);
+ date.set(Calendar.MILLISECOND, 0);
date.set(Calendar.DAY_OF_MONTH, 1);
ArrayList<String> names = new ArrayList<>();
ArrayList<Long> timestamps = new ArrayList<>();