diff options
Diffstat (limited to 'core/src/main')
19 files changed, 92 insertions, 5 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 743ee135d..bad48e4cc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -74,6 +74,7 @@ public class UserPreferences { private static final String PREF_PLAYBACK_SPEED_ARRAY = "prefPlaybackSpeedArray"; private static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss"; private static final String PREF_RESUME_AFTER_CALL = "prefResumeAfterCall"; + public static final String PREF_VIDEO_BEHAVIOR = "prefVideoBehavior"; // Network private static final String PREF_ENQUEUE_DOWNLOADED = "prefEnqueueDownloaded"; @@ -661,6 +662,14 @@ public class UserPreferences { .apply(); } + public static VideoBackgroundBehavior getVideoBackgroundBehavior() { + switch (prefs.getString(PREF_VIDEO_BEHAVIOR, "stop")) { + case "stop": return VideoBackgroundBehavior.STOP; + case "pip": return VideoBackgroundBehavior.PICTURE_IN_PICTURE; + case "continue": return VideoBackgroundBehavior.CONTINUE_PLAYING; + default: return VideoBackgroundBehavior.STOP; + } + } public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() { int cleanupValue = Integer.parseInt(prefs.getString(PREF_EPISODE_CLEANUP, "-1")); @@ -839,4 +848,8 @@ public class UserPreferences { public static boolean isCastEnabled() { return prefs.getBoolean(PREF_CAST_ENABLED, false); } + + public enum VideoBackgroundBehavior { + STOP, PICTURE_IN_PICTURE, CONTINUE_PLAYING + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index ab25f0a5f..67a2cdad2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -1436,6 +1436,12 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public void onReceive(Context context, Intent intent) { + if (isInitialStickyBroadcast ()) { + // Don't pause playback after we just started, just because the receiver + // delivers the current headset state (instead of a change) + return; + } + if (TextUtils.equals(intent.getAction(), Intent.ACTION_HEADSET_PLUG)) { int state = intent.getIntExtra("state", -1); if (state != -1) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java index ea1b724d4..b512dce3f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.syndication.namespace.atom; -import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.text.StringEscapeUtils; import de.danoeh.antennapod.core.syndication.namespace.Namespace; import de.danoeh.antennapod.core.syndication.namespace.SyndElement; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java index a93dd8ee3..e99461806 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java @@ -3,7 +3,8 @@ package de.danoeh.antennapod.core.util; import android.text.TextUtils; import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.text.RandomStringGenerator; + /** Generates valid filenames for a given string. */ public class FileNameGenerator { @@ -34,7 +35,11 @@ public class FileNameGenerator { } String filename = buf.toString().trim(); if(TextUtils.isEmpty(filename)) { - return RandomStringUtils.randomAlphanumeric(8); + return new RandomStringGenerator.Builder() + .withinRange('0', 'z') + .filteredBy(Character::isLetterOrDigit) + .build() + .generate(8); } return filename; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/gui/PictureInPictureUtil.java b/core/src/main/java/de/danoeh/antennapod/core/util/gui/PictureInPictureUtil.java new file mode 100644 index 000000000..f763653a1 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/util/gui/PictureInPictureUtil.java @@ -0,0 +1,27 @@ +package de.danoeh.antennapod.core.util.gui; + +import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Build; + +public class PictureInPictureUtil { + private PictureInPictureUtil() { + } + + public static boolean supportsPictureInPicture(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + PackageManager packageManager = activity.getPackageManager(); + return packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE); + } else { + return false; + } + } + + public static boolean isInPictureInPictureMode(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && supportsPictureInPicture(activity)) { + return activity.isInPictureInPictureMode(); + } else { + return false; + } + } +} diff --git a/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..212948b70 --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png diff --git a/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_white_24dp.png Binary files differnew file mode 100644 index 000000000..cce69655d --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_checkbox_multiple_marked_outline_white_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..498ddf8eb --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_white_24dp.png Binary files differnew file mode 100644 index 000000000..66a6d7681 --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_checkbox_multiple_marked_outline_white_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..df64c26fe --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png Binary files differnew file mode 100644 index 000000000..9e49cbe0a --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..951244d68 --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png Binary files differnew file mode 100644 index 000000000..3eaedd318 --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..6c4c2b94c --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png Binary files differnew file mode 100644 index 000000000..fd5114044 --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_checkbox_multiple_marked_outline_white_24dp.png diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 45650495c..9d9a2453d 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -224,4 +224,26 @@ <item>@string/fast_forward_label</item> <item>@string/skip_episode_label</item> </string-array> + + <string-array name="video_background_behavior_options"> + <item>@string/stop_playback</item> + <item>@string/player_go_to_picture_in_picture</item> + <item>@string/continue_playback</item> + </string-array> + + <string-array name="video_background_behavior_values"> + <item>stop</item> + <item>pip</item> + <item>continue</item> + </string-array> + + <string-array name="video_background_behavior_options_without_pip"> + <item>@string/stop_playback</item> + <item>@string/continue_playback</item> + </string-array> + + <string-array name="video_background_behavior_values_without_pip"> + <item>stop</item> + <item>continue</item> + </string-array> </resources> diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index 04ad7ea64..5f25796b0 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -44,6 +44,7 @@ <attr name="ic_unfav" format="reference"/> <attr name="ic_sleep" format="reference"/> <attr name="ic_sleep_off" format="reference"/> + <attr name="checkbox_multiple" format="reference"/> <attr name="ic_check_box" format="reference"/> <attr name="ic_check_box_outline" format="reference"/> <attr name="ic_indeterminate_check_box" format="reference"/> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index aa36eab33..d199a8764 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -11,6 +11,7 @@ <string name="add_feed_label">Add Podcast</string> <string name="episodes_label">Episodes</string> <string name="all_episodes_short_label">All</string> + <string name="new_episodes_label">New</string> <string name="favorite_episodes_label">Favorites</string> <string name="new_label">New</string> <string name="settings_label">Settings</string> @@ -122,6 +123,9 @@ <string name="mark_all_seen_msg">Marked all Episodes as seen</string> <string name="mark_all_seen_confirmation_msg">Please confirm that you want to mark all episodes as seen.</string> <string name="show_info_label">Show information</string> + <string name="show_feed_settings_label">Show feed settings</string> + <string name="feed_info_label">Feed info</string> + <string name="feed_settings_label">Feed settings</string> <string name="rename_feed_label">Rename Podcast</string> <string name="remove_feed_label">Remove Podcast</string> <string name="share_label">Share…</string> @@ -135,7 +139,7 @@ <string name="feed_remover_msg">Removing Feed</string> <string name="load_complete_feed">Refresh complete Feed</string> <string name="hide_episodes_title">Hide Episodes</string> - <string name="episode_actions">Apply actions</string> + <string name="batch_edit">Batch edit</string> <string name="hide_unplayed_episodes_label">Unplayed</string> <string name="hide_paused_episodes_label">Paused</string> <string name="hide_played_episodes_label">Played</string> @@ -236,6 +240,7 @@ <string name="no_media_playing_label">No media playing</string> <string name="position_default_label" translate="false">00:00:00</string> <string name="player_buffering_msg">Buffering</string> + <string name="player_go_to_picture_in_picture">Picture-in-picture mode</string> <string name="playbackservice_notification_title">Playing podcast</string> <string name="unknown_media_key">AntennaPod - Unknown media key: %1$d</string> @@ -439,6 +444,10 @@ <string name="pref_cast_message_free_flavor">Chromecast requires third party proprietary libraries that are disabled in this version of AntennaPod</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="pref_videoBehavior_title">Video behavior</string> + <string name="pref_videoBehavior_sum">Behavior when leaving video playback</string> + <string name="stop_playback">Stop playback</string> + <string name="continue_playback">Continue playback</string> <!-- Auto-Flattr dialog --> <string name="auto_flattr_enable">Enable automatic flattring</string> diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 13d956bab..b74b55334 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -13,6 +13,7 @@ <item name="alertDialogTheme">@style/AntennaPod.Dialog.Light</item> <item type="attr" name="action_bar_icon_color">@color/grey600</item> <item type="attr" name="action_about">@drawable/ic_info_grey600_24dp</item> + <item type="attr" name="checkbox_multiple">@drawable/ic_checkbox_multiple_marked_outline_grey600_24dp</item> <item type="attr" name="action_search">@drawable/ic_search_grey600_24dp</item> <item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item> <item type="attr" name="av_download">@drawable/ic_file_download_grey600_24dp</item> @@ -75,7 +76,8 @@ <item name="progressBarTheme">@style/ProgressBarDark</item> <item name="alertDialogTheme">@style/AntennaPod.Dialog.Dark</item> <item type="attr" name="action_bar_icon_color">@color/white</item> - <item type="attr" name="action_about">@drawable/ic_info_white_24dp</item>g + <item type="attr" name="action_about">@drawable/ic_info_white_24dp</item> + <item type="attr" name="checkbox_multiple">@drawable/ic_checkbox_multiple_marked_outline_white_24dp</item> <item type="attr" name="action_search">@drawable/ic_search_white_24dp</item> <item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_white_24dp</item> <item type="attr" name="av_download">@drawable/ic_file_download_white_24dp</item> @@ -140,6 +142,7 @@ <item name="buttonStyle">@style/Widget.AntennaPod.Button</item> <item name="alertDialogTheme">@style/AntennaPod.Dialog.Light</item> <item type="attr" name="action_about">@drawable/ic_info_grey600_24dp</item> + <item type="attr" name="checkbox_multiple">@drawable/ic_checkbox_multiple_marked_outline_grey600_24dp</item> <item type="attr" name="action_search">@drawable/ic_search_grey600_24dp</item> <item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item> <item type="attr" name="av_download">@drawable/ic_file_download_grey600_24dp</item> @@ -204,6 +207,7 @@ <item name="buttonStyle">@style/Widget.AntennaPod.Button</item> <item name="alertDialogTheme">@style/AntennaPod.Dialog.Dark</item> <item type="attr" name="action_about">@drawable/ic_info_white_24dp</item> + <item type="attr" name="checkbox_multiple">@drawable/ic_checkbox_multiple_marked_outline_white_24dp</item> <item type="attr" name="action_search">@drawable/ic_search_white_24dp</item> <item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_white_24dp</item> <item type="attr" name="av_download">@drawable/ic_file_download_white_24dp</item> |