summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java49
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java17
-rw-r--r--app/src/main/res/layout/audio_controls.xml69
-rw-r--r--app/src/main/res/layout/episode_filter_dialog.xml21
-rw-r--r--app/src/main/res/layout/subscription_item.xml25
-rw-r--r--app/src/main/res/xml/preferences_storage.xml7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/glide/ApGlideModule.java13
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java43
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java12
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java124
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java8
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/Converter.java16
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java6
-rw-r--r--core/src/main/res/values/arrays.xml16
-rw-r--r--core/src/main/res/values/strings.xml7
16 files changed, 97 insertions, 343 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
index 195891499..3186cbe2e 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java
@@ -10,11 +10,9 @@ import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import android.widget.Button;
import android.widget.CheckBox;
-import android.widget.SeekBar;
import android.widget.TextView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.view.PlaybackSpeedSeekBar;
@@ -63,11 +61,7 @@ public class PlaybackControlsDialog extends DialogFragment {
dialog = new AlertDialog.Builder(getContext())
.setTitle(R.string.audio_controls)
.setView(R.layout.audio_controls)
- .setPositiveButton(R.string.close_label, (dialog1, which) -> {
- final SeekBar left = dialog.findViewById(R.id.volume_left);
- final SeekBar right = dialog.findViewById(R.id.volume_right);
- UserPreferences.setVolume(left.getProgress(), right.getProgress());
- }).create();
+ .setPositiveButton(R.string.close_label, null).create();
return dialog;
}
@@ -79,10 +73,6 @@ public class PlaybackControlsDialog extends DialogFragment {
speedSeekBar.setProgressChangedListener(speed
-> txtvPlaybackSpeed.setText(String.format(Locale.getDefault(), "%.2fx", speed)));
- final SeekBar barLeftVolume = dialog.findViewById(R.id.volume_left);
- barLeftVolume.setProgress(UserPreferences.getLeftVolumePercentage());
- final SeekBar barRightVolume = dialog.findViewById(R.id.volume_right);
- barRightVolume.setProgress(UserPreferences.getRightVolumePercentage());
final CheckBox stereoToMono = dialog.findViewById(R.id.stereo_to_mono);
stereoToMono.setChecked(UserPreferences.stereoToMono());
if (controller != null && !controller.canDownmix()) {
@@ -91,10 +81,6 @@ public class PlaybackControlsDialog extends DialogFragment {
stereoToMono.setText(getString(R.string.stereo_to_mono) + " [" + sonicOnly + "]");
}
- if (UserPreferences.useExoplayer()) {
- barRightVolume.setEnabled(false);
- }
-
final CheckBox skipSilence = dialog.findViewById(R.id.skipSilence);
skipSilence.setChecked(UserPreferences.isSkipSilence());
if (!UserPreferences.useExoplayer()) {
@@ -106,39 +92,6 @@ public class PlaybackControlsDialog extends DialogFragment {
UserPreferences.setSkipSilence(isChecked);
controller.setSkipSilence(isChecked);
});
-
- barLeftVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- controller.setVolume(
- Converter.getVolumeFromPercentage(progress),
- Converter.getVolumeFromPercentage(barRightVolume.getProgress()));
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- });
- barRightVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- controller.setVolume(
- Converter.getVolumeFromPercentage(barLeftVolume.getProgress()),
- Converter.getVolumeFromPercentage(progress));
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- });
stereoToMono.setOnCheckedChangeListener((buttonView, isChecked) -> {
UserPreferences.stereoToMono(isChecked);
if (controller != null) {
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
index fa5c2d8c3..691bd65e8 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
@@ -153,10 +153,13 @@ public class SleepTimerDialog extends DialogFragment {
return;
}
try {
+ long time = Long.parseLong(etxtTime.getText().toString());
+ if (time == 0) {
+ throw new NumberFormatException("Timer must not be zero");
+ }
SleepTimerPreferences.setLastTimer(etxtTime.getText().toString(), spTimeUnit.getSelectedItemPosition());
- long time = SleepTimerPreferences.timerMillis();
if (controller != null) {
- controller.setSleepTimer(time);
+ controller.setSleepTimer(SleepTimerPreferences.timerMillis());
}
closeKeyboard(content);
} catch (NumberFormatException e) {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java
index 42b0cb96f..e5617b8ea 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java
@@ -1,7 +1,6 @@
package de.danoeh.antennapod.fragment.preferences;
import android.os.Bundle;
-import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceFragmentCompat;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.PreferenceActivity;
@@ -43,22 +42,6 @@ public class StoragePreferencesFragment extends PreferenceFragmentCompat {
return true;
}
);
- findPreference(UserPreferences.PREF_IMAGE_CACHE_SIZE).setOnPreferenceChangeListener(
- (preference, o) -> {
- if (o instanceof String) {
- int newValue = Integer.parseInt((String) o) * 1024 * 1024;
- if (newValue != UserPreferences.getImageCacheSize()) {
- AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
- dialog.setTitle(android.R.string.dialog_alert_title);
- dialog.setMessage(R.string.pref_restart_required);
- dialog.setPositiveButton(android.R.string.ok, null);
- dialog.show();
- }
- return true;
- }
- return false;
- }
- );
findPreference(PREF_IMPORT_EXPORT).setOnPreferenceClickListener(
preference -> {
((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_import_export);
diff --git a/app/src/main/res/layout/audio_controls.xml b/app/src/main/res/layout/audio_controls.xml
index 2c9665aad..0bfa4f521 100644
--- a/app/src/main/res/layout/audio_controls.xml
+++ b/app/src/main/res/layout/audio_controls.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:orientation="vertical"
android:padding="16dp">
<LinearLayout
@@ -17,7 +17,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
- android:layout_marginBottom="8dp"/>
+ android:layout_marginBottom="8dp" />
<LinearLayout
android:layout_width="match_parent"
@@ -27,9 +27,9 @@
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
android:layout_weight="1"
- android:text="@string/playback_speed" />
+ android:text="@string/playback_speed"
+ style="@style/AntennaPod.TextView.ListItemPrimaryTitle" />
<TextView
android:id="@+id/txtvPlaybackSpeed"
@@ -42,67 +42,14 @@
<de.danoeh.antennapod.view.PlaybackSpeedSeekBar
android:id="@+id/speed_seek_bar"
android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="12dp"
- android:layout_marginBottom="4dp"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
- android:text="@string/volume" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dp"
- android:layout_marginStart="8dp"
- android:orientation="horizontal"
- android:gravity="center">
-
- <TextView
- android:id="@+id/txtvLeft"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/left_short" />
-
- <SeekBar
- android:id="@+id/volume_left"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:max="100" />
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:layout_marginLeft="8dp"
- android:layout_marginStart="8dp"
- android:orientation="horizontal"
- android:gravity="center">
-
- <TextView
- android:id="@+id/txtvRight"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/right_short" />
-
- <SeekBar
- android:id="@+id/volume_right"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:max="100" />
-
- </LinearLayout>
+ android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
- android:text="@string/audio_effects" />
+ android:text="@string/audio_effects"
+ style="@style/AntennaPod.TextView.ListItemPrimaryTitle" />
<CheckBox
android:id="@+id/skipSilence"
@@ -115,5 +62,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/stereo_to_mono" />
+
</LinearLayout>
+
</ScrollView>
diff --git a/app/src/main/res/layout/episode_filter_dialog.xml b/app/src/main/res/layout/episode_filter_dialog.xml
index 43d074bfb..9661a8e72 100644
--- a/app/src/main/res/layout/episode_filter_dialog.xml
+++ b/app/src/main/res/layout/episode_filter_dialog.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
@@ -7,7 +8,7 @@
<RadioGroup
android:id="@+id/radio_filter_group"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@@ -22,19 +23,21 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/episode_filters_exclude" />
+
</RadioGroup>
<EditText
android:id="@+id/etxtEpisodeFilterText"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:lines="8"
- android:minLines="1"
- android:maxLines="20"
- android:scrollbars="vertical"
- android:hint="@string/episode_filters_hint"
+ android:cursorVisible="true"
android:focusable="true"
android:focusableInTouchMode="true"
- android:cursorVisible="true" />
+ android:hint="@string/episode_filters_hint"
+ android:lines="8"
+ android:maxLines="20"
+ android:minLines="1"
+ android:scrollbars="vertical" />
+
</LinearLayout>
diff --git a/app/src/main/res/layout/subscription_item.xml b/app/src/main/res/layout/subscription_item.xml
index 7fa738f12..ec918fdac 100644
--- a/app/src/main/res/layout/subscription_item.xml
+++ b/app/src/main/res/layout/subscription_item.xml
@@ -2,32 +2,32 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
xmlns:squareImageView="http://schemas.android.com/apk/de.danoeh.antennapod"
+ xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?attr/selectableItemBackground">
<de.danoeh.antennapod.ui.common.SquareImageView
android:id="@+id/imgvCover"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:scaleType="fitCenter"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:background="@color/non_square_icon_background"
- tools:src="@mipmap/ic_launcher_round"
- squareImageView:direction="width"/>
+ android:scaleType="fitCenter"
+ squareImageView:direction="width"
+ tools:src="@mipmap/ic_launcher_round" />
<com.joanzapata.iconify.widget.IconTextView
android:id="@+id/txtvTitle"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/non_square_icon_background"
- android:layout_alignLeft="@+id/imgvCover"
- android:layout_alignRight="@+id/imgvCover"
android:layout_alignStart="@+id/imgvCover"
- android:layout_alignEnd="@+id/imgvCover"
+ android:layout_alignLeft="@+id/imgvCover"
android:layout_alignTop="@+id/imgvCover"
+ android:layout_alignEnd="@+id/imgvCover"
+ android:layout_alignRight="@+id/imgvCover"
android:layout_alignBottom="@+id/imgvCover"
+ android:background="@color/non_square_icon_background"
android:ellipsize="end"
android:gravity="center"
android:textColor="?android:attr/textColorPrimary"
@@ -37,12 +37,13 @@
android:id="@+id/triangleCountView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentRight="true"
- android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
app:backgroundColor="?attr/colorSecondary"
app:corner="rightTop"
app:primaryText="Test"
app:primaryTextColor="?attr/colorOnSecondary"
app:primaryTextSize="12sp" />
+
</RelativeLayout>
diff --git a/app/src/main/res/xml/preferences_storage.xml b/app/src/main/res/xml/preferences_storage.xml
index d3d570e6c..89e8c4cf5 100644
--- a/app/src/main/res/xml/preferences_storage.xml
+++ b/app/src/main/res/xml/preferences_storage.xml
@@ -6,13 +6,6 @@
<Preference
android:title="@string/choose_data_directory"
android:key="prefChooseDataDir"/>
- <ListPreference
- android:entryValues="@array/image_cache_size_values"
- android:entries="@array/image_cache_size_options"
- android:title="@string/pref_image_cache_size_title"
- android:key="prefImageCacheSize"
- android:summary="@string/pref_image_cache_size_sum"
- android:defaultValue="100"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:enabled="true"
diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/ApGlideModule.java b/core/src/main/java/de/danoeh/antennapod/core/glide/ApGlideModule.java
index b3adc567e..8ad04cb47 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/glide/ApGlideModule.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/glide/ApGlideModule.java
@@ -1,6 +1,8 @@
package de.danoeh.antennapod.core.glide;
+import android.annotation.SuppressLint;
import android.content.Context;
+import android.util.Log;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
@@ -16,7 +18,6 @@ import de.danoeh.antennapod.core.util.EmbeddedChapterImage;
import java.io.InputStream;
import com.bumptech.glide.request.RequestOptions;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
import java.nio.ByteBuffer;
/**
@@ -24,12 +25,18 @@ import java.nio.ByteBuffer;
*/
@GlideModule
public class ApGlideModule extends AppGlideModule {
+ private static final String TAG = "ApGlideModule";
+ private static final long MEGABYTES = 1024 * 1024;
+ private static final long GIGABYTES = 1024 * 1024 * 1024;
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
builder.setDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_ARGB_8888));
- builder.setDiskCache(new InternalCacheDiskCacheFactory(context,
- UserPreferences.getImageCacheSize()));
+ @SuppressLint("UsableSpace")
+ long spaceAvailable = context.getCacheDir().getUsableSpace();
+ long imageCacheSize = (spaceAvailable > 2 * GIGABYTES) ? (250 * MEGABYTES) : (50 * MEGABYTES);
+ Log.d(TAG, "Free space on cache dir: " + spaceAvailable + ", using image cache size: " + imageCacheSize);
+ builder.setDiskCache(new InternalCacheDiskCacheFactory(context, imageCacheSize));
}
@Override
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 046e5a5a7..76dfab169 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
@@ -8,7 +8,6 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
-import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.core.app.NotificationCompat;
@@ -40,7 +39,6 @@ import de.danoeh.antennapod.core.storage.ExceptFavoriteCleanupAlgorithm;
import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm;
import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm;
import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm;
-import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
@@ -116,7 +114,6 @@ public class UserPreferences {
// Other
private static final String PREF_DATA_FOLDER = "prefDataFolder";
- public static final String PREF_IMAGE_CACHE_SIZE = "prefImageCacheSize";
public static final String PREF_DELETE_REMOVES_FROM_QUEUE = "prefDeleteRemovesFromQueue";
public static final String PREF_USAGE_COUNTING_DATE = "prefUsageCounting";
@@ -129,8 +126,6 @@ public class UserPreferences {
private static final String PREF_FAST_FORWARD_SECS = "prefFastForwardSecs";
private static final String PREF_REWIND_SECS = "prefRewindSecs";
private static final String PREF_QUEUE_LOCKED = "prefQueueLocked";
- private static final String IMAGE_CACHE_DEFAULT_VALUE = "100";
- private static final int IMAGE_CACHE_SIZE_MINIMUM = 20;
private static final String PREF_LEFT_VOLUME = "prefLeftVolume";
private static final String PREF_RIGHT_VOLUME = "prefRightVolume";
@@ -471,24 +466,6 @@ public class UserPreferences {
return readPlaybackSpeedArray(prefs.getString(PREF_PLAYBACK_SPEED_ARRAY, null));
}
- public static float getLeftVolume() {
- int volume = prefs.getInt(PREF_LEFT_VOLUME, 100);
- return Converter.getVolumeFromPercentage(volume);
- }
-
- public static float getRightVolume() {
- int volume = prefs.getInt(PREF_RIGHT_VOLUME, 100);
- return Converter.getVolumeFromPercentage(volume);
- }
-
- public static int getLeftVolumePercentage() {
- return prefs.getInt(PREF_LEFT_VOLUME, 100);
- }
-
- public static int getRightVolumePercentage() {
- return prefs.getInt(PREF_RIGHT_VOLUME, 100);
- }
-
public static boolean shouldPauseForFocusLoss() {
return prefs.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false);
}
@@ -616,18 +593,6 @@ public class UserPreferences {
return Build.VERSION.SDK_INT < 29 && prefs.getBoolean(PREF_ENABLE_AUTODL_WIFI_FILTER, false);
}
- public static int getImageCacheSize() {
- String cacheSizeString = prefs.getString(PREF_IMAGE_CACHE_SIZE, IMAGE_CACHE_DEFAULT_VALUE);
- int cacheSizeInt = Integer.parseInt(cacheSizeString);
- // if the cache size is too small the user won't get any images at all
- // that's bad, force it back to the default.
- if (cacheSizeInt < IMAGE_CACHE_SIZE_MINIMUM) {
- prefs.edit().putString(PREF_IMAGE_CACHE_SIZE, IMAGE_CACHE_DEFAULT_VALUE).apply();
- cacheSizeInt = Integer.parseInt(IMAGE_CACHE_DEFAULT_VALUE);
- }
- return cacheSizeInt * 1024 * 1024;
- }
-
public static int getFastForwardSecs() {
return prefs.getInt(PREF_FAST_FORWARD_SECS, 30);
}
@@ -727,14 +692,6 @@ public class UserPreferences {
.apply();
}
- public static void setVolume(@IntRange(from = 0, to = 100) int leftVolume,
- @IntRange(from = 0, to = 100) int rightVolume) {
- prefs.edit()
- .putInt(PREF_LEFT_VOLUME, leftVolume)
- .putInt(PREF_RIGHT_VOLUME, rightVolume)
- .apply();
- }
-
public static void setAutodownloadSelectedNetworks(String[] value) {
prefs.edit()
.putString(PREF_AUTODL_SELECTED_NETWORKS, TextUtils.join(",", value))
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
index dc29f53d4..3016b96d5 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
@@ -322,10 +322,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
acquireWifiLockIfNecessary();
setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence());
-
- float leftVolume = UserPreferences.getLeftVolume();
- float rightVolume = UserPreferences.getRightVolume();
- setVolume(leftVolume, rightVolume);
+ setVolume(1.0f, 1.0f);
if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
int newPosition = RewindAfterPauseUtils.calculatePositionWithRewind(
@@ -891,16 +888,13 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
if (pausedBecauseOfTransientAudiofocusLoss) { // we paused => play now
resume();
} else { // we ducked => raise audio level back
- setVolumeSync(UserPreferences.getLeftVolume(),
- UserPreferences.getRightVolume());
+ setVolumeSync(1.0f, 1.0f);
}
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
if (playerStatus == PlayerStatus.PLAYING) {
if (!UserPreferences.shouldPauseForFocusLoss()) {
Log.d(TAG, "Lost audio focus temporarily. Ducking...");
- final float DUCK_FACTOR = 0.25f;
- setVolumeSync(DUCK_FACTOR * UserPreferences.getLeftVolume(),
- DUCK_FACTOR * UserPreferences.getRightVolume());
+ setVolumeSync(0.25f, 0.25f);
pausedBecauseOfTransientAudiofocusLoss = false;
} else {
Log.d(TAG, "Lost audio focus temporarily. Could duck, but won't, pausing...");
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 ef4e28448..2da06e226 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
@@ -13,7 +13,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
-import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
@@ -41,10 +40,6 @@ import android.view.SurfaceHolder;
import android.webkit.URLUtil;
import android.widget.Toast;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.bumptech.glide.request.target.Target;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -63,7 +58,6 @@ import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.MediaType;
-import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@@ -72,7 +66,6 @@ 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.FeedSearcher;
-import de.danoeh.antennapod.core.feed.util.ImageResourceUtils;
import de.danoeh.antennapod.core.sync.SyncService;
import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.IntentUtils;
@@ -779,25 +772,19 @@ public class PlaybackService extends MediaBrowserServiceCompat {
final float[] multiplicators = {0.1f, 0.2f, 0.3f, 0.3f, 0.3f, 0.4f, 0.4f, 0.4f, 0.6f, 0.8f};
float multiplicator = multiplicators[Math.max(0, (int) timeLeft / 1000)];
Log.d(TAG, "onSleepTimerAlmostExpired: " + multiplicator);
- float leftVolume = multiplicator * UserPreferences.getLeftVolume();
- float rightVolume = multiplicator * UserPreferences.getRightVolume();
- mediaPlayer.setVolume(leftVolume, rightVolume);
+ mediaPlayer.setVolume(multiplicator, multiplicator);
}
@Override
public void onSleepTimerExpired() {
mediaPlayer.pause(true, true);
- float leftVolume = UserPreferences.getLeftVolume();
- float rightVolume = UserPreferences.getRightVolume();
- mediaPlayer.setVolume(leftVolume, rightVolume);
+ mediaPlayer.setVolume(1.0f, 1.0f);
sendNotificationBroadcast(NOTIFICATION_TYPE_SLEEPTIMER_UPDATE, 0);
}
@Override
public void onSleepTimerReset() {
- float leftVolume = UserPreferences.getLeftVolume();
- float rightVolume = UserPreferences.getRightVolume();
- mediaPlayer.setVolume(leftVolume, rightVolume);
+ mediaPlayer.setVolume(1.0f, 1.0f);
}
@Override
@@ -1286,81 +1273,43 @@ public class PlaybackService extends MediaBrowserServiceCompat {
(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP));
}
- /**
- * Used by updateMediaSessionMetadata to load notification data in another thread.
- */
- private Thread mediaSessionSetupThread;
-
private void updateMediaSessionMetadata(final Playable p) {
if (p == null || mediaSession == null) {
return;
}
- if (mediaSessionSetupThread != null) {
- mediaSessionSetupThread.interrupt();
- }
-
- Runnable mediaSessionSetupTask = () -> {
- MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
- builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, p.getFeedTitle());
- builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, p.getEpisodeTitle());
- builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle());
- builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, p.getDuration());
- builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, p.getEpisodeTitle());
- builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, p.getFeedTitle());
-
- String imageLocation = p.getImageLocation();
-
- if (!TextUtils.isEmpty(imageLocation)) {
- if (UserPreferences.setLockscreenBackground()) {
- Bitmap art;
- builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, imageLocation);
- try {
- art = Glide.with(this)
- .asBitmap()
- .load(imageLocation)
- .apply(RequestOptions.diskCacheStrategyOf(ApGlideSettings.AP_DISK_CACHE_STRATEGY))
- .submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
- .get();
- builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art);
- } catch (Throwable tr1) {
- try {
- art = Glide.with(this)
- .asBitmap()
- .load(ImageResourceUtils.getFallbackImageLocation(p))
- .apply(RequestOptions.diskCacheStrategyOf(ApGlideSettings.AP_DISK_CACHE_STRATEGY))
- .submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
- .get();
- builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art);
- } catch (Throwable tr2) {
- Log.e(TAG, Log.getStackTraceString(tr2));
- }
- }
- } else if (isCasting) {
- // In the absence of metadata art, the controller dialog takes care of creating it.
- builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, imageLocation);
- }
- }
- if (!Thread.currentThread().isInterrupted() && stateManager.hasReceivedValidStartCommand()) {
- mediaSession.setSessionActivity(PendingIntent.getActivity(this, R.id.pending_intent_player_activity,
- PlaybackService.getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT));
- try {
- mediaSession.setMetadata(builder.build());
- } catch (OutOfMemoryError e) {
- Log.e(TAG, "Setting media session metadata", e);
- builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, null);
- mediaSession.setMetadata(builder.build());
- }
- }
- };
- mediaSessionSetupThread = new Thread(mediaSessionSetupTask);
- mediaSessionSetupThread.start();
+ MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
+ builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, p.getFeedTitle());
+ builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, p.getEpisodeTitle());
+ builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle());
+ builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, p.getDuration());
+ builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, p.getEpisodeTitle());
+ builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, p.getFeedTitle());
+
+ if (UserPreferences.setLockscreenBackground() && notificationBuilder.isIconCached()) {
+ builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, notificationBuilder.getCachedIcon());
+ } else if (isCasting && !TextUtils.isEmpty(p.getImageLocation())) {
+ // In the absence of metadata art, the controller dialog takes care of creating it.
+ builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, p.getImageLocation());
+ }
+
+ if (stateManager.hasReceivedValidStartCommand()) {
+ mediaSession.setSessionActivity(PendingIntent.getActivity(this, R.id.pending_intent_player_activity,
+ PlaybackService.getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT));
+ try {
+ mediaSession.setMetadata(builder.build());
+ } catch (OutOfMemoryError e) {
+ Log.e(TAG, "Setting media session metadata", e);
+ builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, null);
+ mediaSession.setMetadata(builder.build());
+ }
+ }
}
/**
* Used by setupNotification to load notification data in another thread.
*/
- private Thread notificationSetupThread;
+ private Thread playableIconLoaderThread;
/**
* Prepares notification and starts the service in the foreground.
@@ -1371,8 +1320,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
private synchronized void setupNotification(final Playable playable) {
Log.d(TAG, "setupNotification");
- if (notificationSetupThread != null) {
- notificationSetupThread.interrupt();
+ if (playableIconLoaderThread != null) {
+ playableIconLoaderThread.interrupt();
}
if (playable == null || mediaPlayer == null) {
Log.d(TAG, "setupNotification: playable=" + playable);
@@ -1395,14 +1344,15 @@ public class PlaybackService extends MediaBrowserServiceCompat {
startForegroundIfPlaying(playerStatus);
if (!notificationBuilder.isIconCached()) {
- notificationSetupThread = new Thread(() -> {
+ playableIconLoaderThread = new Thread(() -> {
Log.d(TAG, "Loading notification icon");
notificationBuilder.loadIcon();
if (!Thread.currentThread().isInterrupted()) {
notificationManager.notify(R.id.notification_playing, notificationBuilder.build());
+ updateMediaSessionMetadata(playable);
}
});
- notificationSetupThread.start();
+ playableIconLoaderThread.start();
}
}
@@ -1705,10 +1655,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
mediaPlayer.setPlaybackParams(getCurrentPlaybackSpeed(), skipSilence);
}
- public void setVolume(float leftVolume, float rightVolume) {
- mediaPlayer.setVolume(leftVolume, rightVolume);
- }
-
public float getCurrentPlaybackSpeed() {
if(mediaPlayer == null) {
return 1.0f;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java
index 75ebf7e10..e7dea192a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java
@@ -89,14 +89,22 @@ public class PlaybackServiceNotificationBuilder {
.apply(new RequestOptions().centerCrop())
.submit(iconSize, iconSize)
.get();
+ } catch (InterruptedException ignore) {
+ Log.e(TAG, "Media icon loader was interrupted");
} catch (Throwable tr) {
Log.e(TAG, "Error loading the media icon for the notification", tr);
}
+ } catch (InterruptedException ignore) {
+ Log.e(TAG, "Media icon loader was interrupted");
} catch (Throwable tr) {
Log.e(TAG, "Error loading the media icon for the notification", tr);
}
}
+ public Bitmap getCachedIcon() {
+ return icon;
+ }
+
private Bitmap getDefaultIcon() {
if (defaultIcon == null) {
defaultIcon = getBitmap(context, R.mipmap.ic_launcher);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
index 8f9b8ce2f..4014937bd 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java
@@ -12,9 +12,6 @@ public final class Converter {
private Converter() {
}
- /** Logging tag. */
- private static final String TAG = "Converter";
-
private static final int HOURS_MIL = 3600000;
private static final int MINUTES_MIL = 60000;
private static final int SECONDS_MIL = 1000;
@@ -108,17 +105,4 @@ public final class Converter {
float hours = (float) time / 3600f;
return String.format(Locale.getDefault(), "%.1f ", hours) + context.getString(R.string.time_hours);
}
-
- /**
- * Converts the volume as read as the progress from a SeekBar scaled to 100 and as saved in
- * UserPreferences to the format taken by setVolume methods.
- * @param progress integer between 0 to 100 taken from the SeekBar progress
- * @return the appropriate volume as float taken by setVolume methods
- */
- public static float getVolumeFromPercentage(int progress) {
- if (progress == 100) {
- return 1f;
- }
- return (float) (1 - (Math.log(101 - progress) / Math.log(101)));
- }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
index 6fe2502ab..cd69147a6 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
@@ -496,12 +496,6 @@ public abstract class PlaybackController {
}
}
- public void setVolume(float leftVolume, float rightVolume) {
- if (playbackService != null) {
- playbackService.setVolume(leftVolume, rightVolume);
- }
- }
-
public float getCurrentPlaybackSpeedMultiplier() {
if (playbackService != null) {
return playbackService.getCurrentPlaybackSpeed();
diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml
index 290c8635f..97b677362 100644
--- a/core/src/main/res/values/arrays.xml
+++ b/core/src/main/res/values/arrays.xml
@@ -270,22 +270,6 @@
<item>DURATION_LONG_SHORT</item>
</string-array>
- <string-array name="image_cache_size_options">
- <item>20 MiB</item>
- <item>50 MiB</item>
- <item>100 MiB</item>
- <item>250 MiB</item>
- <item>500 MiB</item>
- </string-array>
-
- <string-array name="image_cache_size_values">
- <item>20</item>
- <item>50</item>
- <item>100</item>
- <item>250</item>
- <item>500</item>
- </string-array>
-
<string-array name="compact_notification_buttons_options">
<item>@string/rewind_label</item>
<item>@string/fast_forward_label</item>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 86f79318a..670c74993 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -110,7 +110,7 @@
<string name="auto_download_label">Include in auto downloads</string>
<string name="auto_delete_label">Auto Delete Episode</string>
<string name="feed_volume_reduction">Volume Reduction</string>
- <string name="feed_volume_reduction_summary">Turn down volume for episodes of this feed: %1$s</string>
+ <string name="feed_volume_reduction_summary">Turn down volume for episodes of this podcast: %1$s</string>
<string name="feed_volume_reduction_off">Off</string>
<string name="feed_volume_reduction_light">Light</string>
<string name="feed_volume_reduction_heavy">Heavy</string>
@@ -483,8 +483,6 @@
<string name="enqueue_location_front">Front</string>
<string name="enqueue_location_after_current">After current episode</string>
<string name="pref_smart_mark_as_played_disabled">Disabled</string>
- <string name="pref_image_cache_size_title">Image Cache Size</string>
- <string name="pref_image_cache_size_sum">Size of the disk cache for images.</string>
<string name="documentation_support">Documentation &amp; Support</string>
<string name="visit_user_forum">User forum</string>
<string name="bug_report_title">Report bug</string>
@@ -776,9 +774,6 @@
<!-- Audio controls -->
<string name="audio_controls">Audio controls</string>
<string name="playback_speed">Playback Speed</string>
- <string name="volume">Volume</string>
- <string name="left_short">L</string>
- <string name="right_short">R</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>