From dcc6642f3395dbbc186fa735d2da2e43577c5567 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 3 Sep 2019 15:55:09 +0200 Subject: Updated default notification icon --- .../PlaybackServiceNotificationBuilder.java | 32 ++++++++++++++++++++-- .../drawable/notification_default_large_icon.xml | 15 ++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 core/src/main/res/drawable/notification_default_large_icon.xml (limited to 'core') 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 9a1e8e7ef..d9595e987 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 @@ -1,12 +1,18 @@ package de.danoeh.antennapod.core.service.playback; +import android.annotation.TargetApi; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.VectorDrawable; +import android.os.Build; import android.support.annotation.NonNull; import android.support.v4.app.NotificationCompat; +import android.support.v4.content.ContextCompat; import android.support.v4.media.session.MediaSessionCompat; import android.util.Log; import android.view.KeyEvent; @@ -98,12 +104,32 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build public void loadDefaultIcon() { if (defaultIcon == null) { - defaultIcon = BitmapFactory.decodeResource(context.getResources(), - ClientConfig.playbackServiceCallbacks.getNotificationIconResource(context)); + defaultIcon = getBitmap(context, R.drawable.notification_default_large_icon); } setLargeIcon(defaultIcon); } + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private static Bitmap getBitmap(VectorDrawable vectorDrawable) { + Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), + vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + vectorDrawable.draw(canvas); + return bitmap; + } + + private static Bitmap getBitmap(Context context, int drawableId) { + Drawable drawable = ContextCompat.getDrawable(context, drawableId); + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap(); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && drawable instanceof VectorDrawable) { + return getBitmap((VectorDrawable) drawable); + } else { + return null; + } + } + private void addActions(MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { IntList compactActionList = new IntList(); diff --git a/core/src/main/res/drawable/notification_default_large_icon.xml b/core/src/main/res/drawable/notification_default_large_icon.xml new file mode 100644 index 000000000..6e0c1e369 --- /dev/null +++ b/core/src/main/res/drawable/notification_default_large_icon.xml @@ -0,0 +1,15 @@ + + + + + + + -- cgit v1.2.3 From 4054c330acce74976a3e42e7ccc1f0d1dcb69c14 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Thu, 12 Sep 2019 00:50:07 +0200 Subject: Added per-feed playback speed setting Fixes #375 --- .../de/danoeh/antennapod/core/feed/FeedItem.java | 13 ++++++++ .../de/danoeh/antennapod/core/feed/FeedMedia.java | 12 +++++++ .../antennapod/core/feed/FeedPreferences.java | 38 ++++++++++++++++++++-- .../core/service/playback/LocalPSMP.java | 3 ++ .../danoeh/antennapod/core/storage/DBUpgrader.java | 4 +++ .../antennapod/core/storage/PodDBAdapter.java | 10 ++++-- 6 files changed, 74 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 3495164a6..3b70e4a4d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -15,6 +15,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.asynctask.ImageResource; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.ShownotesProvider; @@ -482,4 +483,16 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } + + /** + * + * @return playback speed for this feed, or the global setting if no feed-specific setting + */ + public float getFeedPlaybackSpeed() { + Feed feed = getFeed(); + if (feed != null) { + return feed.getPreferences().getCurrentPlaybackSpeed(); + } + return UserPreferences.getPlaybackSpeed(); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 218570632..192fa0c2d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -623,4 +623,16 @@ public class FeedMedia extends FeedFile implements Playable { } return super.equals(o); } + + /** + * + * @return playback speed for this feed, or the global setting if no feed-specific setting + */ + public float getFeedPlaybackSpeed() { + FeedItem item = getItem(); + if (item != null) { + return item.getFeedPlaybackSpeed(); + } + return UserPreferences.getPlaybackSpeed(); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index 3285ad7cb..7864f51bd 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -28,12 +28,13 @@ public class FeedPreferences { private AutoDeleteAction auto_delete_action; private String username; private String password; + private String feedPlaybackSpeed; public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction auto_delete_action, String username, String password) { - this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter()); + this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter(), "global"); } - private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter) { + private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter, String feedPlaybackSpeed) { this.feedID = feedID; this.autoDownload = autoDownload; this.keepUpdated = keepUpdated; @@ -41,6 +42,7 @@ public class FeedPreferences { this.username = username; this.password = password; this.filter = filter; + this.feedPlaybackSpeed = feedPlaybackSpeed; } public static FeedPreferences fromCursor(Cursor cursor) { @@ -52,6 +54,7 @@ public class FeedPreferences { int indexPassword = cursor.getColumnIndex(PodDBAdapter.KEY_PASSWORD); int indexIncludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_INCLUDE_FILTER); int indexExcludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_EXCLUDE_FILTER); + int indexFeedPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_PLAYBACK_SPEED); long feedId = cursor.getLong(indexId); boolean autoDownload = cursor.getInt(indexAutoDownload) > 0; @@ -62,7 +65,8 @@ public class FeedPreferences { String password = cursor.getString(indexPassword); String includeFilter = cursor.getString(indexIncludeFilter); String excludeFilter = cursor.getString(indexExcludeFilter); - return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter)); + String feedPlaybackSpeed = cursor.getString(indexFeedPlaybackSpeed); + return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter), feedPlaybackSpeed); } /** @@ -175,4 +179,32 @@ public class FeedPreferences { public void setPassword(String password) { this.password = password; } + + public float getCurrentPlaybackSpeed() { + float speed = 0.0f; + + if (!"global".equals(feedPlaybackSpeed)) { + try { + speed = Float.parseFloat(getFeedPlaybackSpeed()); + } catch (NumberFormatException e) { + Log.e(TAG, Log.getStackTraceString(e)); + setFeedPlaybackSpeed("global"); + } + } + + // Either global or error happened + if (speed == 0.0f) { + speed = UserPreferences.getPlaybackSpeed(); + } + + return speed; + } + + public String getFeedPlaybackSpeed() { + return feedPlaybackSpeed; + } + + public void setFeedPlaybackSpeed(String playbackSpeed) { + feedPlaybackSpeed = playbackSpeed; + } } 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 5177fa6be..c2c503abe 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 @@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; +import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.RewindAfterPauseUtils; @@ -306,6 +307,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { acquireWifiLockIfNecessary(); if (media.getMediaType() == MediaType.VIDEO) { setPlaybackParams(UserPreferences.getVideoPlaybackSpeed(), UserPreferences.isSkipSilence()); + } else if (media instanceof FeedMedia) { + setPlaybackParams(((FeedMedia) media).getFeedPlaybackSpeed(), UserPreferences.isSkipSilence()); } else { setPlaybackParams(UserPreferences.getPlaybackSpeed(), UserPreferences.isSkipSilence()); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index 306f8d104..ddc8e770a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -288,6 +288,10 @@ class DBUpgrader { db.execSQL("DROP TABLE " + PodDBAdapter.TABLE_NAME_FEED_IMAGES); } + if (oldVersion < 1070306) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT"); + } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 13ea9daf0..63c036b6e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -114,6 +114,7 @@ public class PodDBAdapter { public static final String KEY_LAST_PLAYED_TIME = "last_played_time"; public static final String KEY_INCLUDE_FILTER = "include_filter"; public static final String KEY_EXCLUDE_FILTER = "exclude_filter"; + public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed"; // Table names static final String TABLE_NAME_FEEDS = "Feeds"; @@ -146,7 +147,8 @@ public class PodDBAdapter { + KEY_NEXT_PAGE_LINK + " TEXT," + KEY_HIDE + " TEXT," + KEY_LAST_UPDATE_FAILED + " INTEGER DEFAULT 0," - + KEY_AUTO_DELETE_ACTION + " INTEGER DEFAULT 0)"; + + KEY_AUTO_DELETE_ACTION + " INTEGER DEFAULT 0," + + KEY_FEED_PLAYBACK_SPEED + " TEXT)"; private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE @@ -243,7 +245,8 @@ public class PodDBAdapter { TABLE_NAME_FEEDS + "." + KEY_LAST_UPDATE_FAILED, TABLE_NAME_FEEDS + "." + KEY_AUTO_DELETE_ACTION, TABLE_NAME_FEEDS + "." + KEY_INCLUDE_FILTER, - TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER + TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER, + TABLE_NAME_FEEDS + "." + KEY_FEED_PLAYBACK_SPEED }; /** @@ -408,6 +411,7 @@ public class PodDBAdapter { values.put(KEY_PASSWORD, prefs.getPassword()); values.put(KEY_INCLUDE_FILTER, prefs.getFilter().getIncludeFilter()); values.put(KEY_EXCLUDE_FILTER, prefs.getFilter().getExcludeFilter()); + values.put(KEY_FEED_PLAYBACK_SPEED, prefs.getFeedPlaybackSpeed()); db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())}); } @@ -1452,7 +1456,7 @@ public class PodDBAdapter { */ private static class PodDBHelper extends SQLiteOpenHelper { - private static final int VERSION = 1060596; + private static final int VERSION = 1070306; private final Context context; -- cgit v1.2.3 From 6b1a7a9162cb27f0b2aa3e550069945b6e0d95f3 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Thu, 12 Sep 2019 10:57:16 +0200 Subject: Fixed playback speed issues when switching to next media Fixes some issues related to the playback speed when playback was completed or playback was paused and the app went away for awhile. Now a media item which is "in progress" will remember its playback speed so that it can be restored properly. The per-feed-media speed is cleared once playback finishes, either by reaching the end or by the user starting to play something different. --- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 30 +++++++++++++++++++--- .../antennapod/core/feed/FeedPreferences.java | 1 - .../core/service/playback/LocalPSMP.java | 2 +- .../danoeh/antennapod/core/storage/DBUpgrader.java | 2 ++ .../danoeh/antennapod/core/storage/DBWriter.java | 14 ++++++++++ .../antennapod/core/storage/PodDBAdapter.java | 19 +++++++++++++- 6 files changed, 61 insertions(+), 7 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 192fa0c2d..46795bc11 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -55,6 +55,7 @@ public class FeedMedia extends FeedFile implements Playable { private Date playbackCompletionDate; private int startPosition = -1; private int playedDurationWhenStarted; + private String lastPlaybackSpeed = null; // if null: unknown, will be checked private Boolean hasEmbeddedPicture; @@ -91,10 +92,11 @@ public class FeedMedia extends FeedFile implements Playable { private FeedMedia(long id, FeedItem item, int duration, int position, long size, String mime_type, String file_url, String download_url, boolean downloaded, Date playbackCompletionDate, int played_duration, - Boolean hasEmbeddedPicture, long lastPlayedTime) { + Boolean hasEmbeddedPicture, long lastPlayedTime, String lastPlaybackSpeed) { this(id, item, duration, position, size, mime_type, file_url, download_url, downloaded, playbackCompletionDate, played_duration, lastPlayedTime); this.hasEmbeddedPicture = hasEmbeddedPicture; + this.lastPlaybackSpeed = lastPlaybackSpeed; } public static FeedMedia fromCursor(Cursor cursor) { @@ -109,6 +111,7 @@ public class FeedMedia extends FeedFile implements Playable { int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED); int indexPlayedDuration = cursor.getColumnIndex(PodDBAdapter.KEY_PLAYED_DURATION); int indexLastPlayedTime = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYED_TIME); + int indexLastPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYBACK_SPEED); long mediaId = cursor.getLong(indexId); Date playbackCompletionDate = null; @@ -143,7 +146,8 @@ public class FeedMedia extends FeedFile implements Playable { playbackCompletionDate, cursor.getInt(indexPlayedDuration), hasEmbeddedPicture, - cursor.getLong(indexLastPlayedTime) + cursor.getLong(indexLastPlayedTime), + cursor.getString(indexLastPlaybackSpeed) ); } @@ -624,15 +628,33 @@ public class FeedMedia extends FeedFile implements Playable { return super.equals(o); } + public String getLastPlaybackSpeed() { + return lastPlaybackSpeed; + } + + public void updateLastPlaybackSpeed(String newSpeed) { + lastPlaybackSpeed = newSpeed; + DBWriter.setFeedMediaPlaybackInformation(this); + } + /** * - * @return playback speed for this feed, or the global setting if no feed-specific setting + * @return the current playback speed for the media, or the feed's configured speed */ - public float getFeedPlaybackSpeed() { + public float getMediaPlaybackSpeed() { + if (lastPlaybackSpeed != null) { + try { + return Float.parseFloat(lastPlaybackSpeed); + } catch (NumberFormatException e) { + lastPlaybackSpeed = null; + } + } + FeedItem item = getItem(); if (item != null) { return item.getFeedPlaybackSpeed(); } + return UserPreferences.getPlaybackSpeed(); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index 7864f51bd..d7d173e19 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -187,7 +187,6 @@ public class FeedPreferences { try { speed = Float.parseFloat(getFeedPlaybackSpeed()); } catch (NumberFormatException e) { - Log.e(TAG, Log.getStackTraceString(e)); setFeedPlaybackSpeed("global"); } } 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 c2c503abe..abb5d83bd 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 @@ -308,7 +308,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { if (media.getMediaType() == MediaType.VIDEO) { setPlaybackParams(UserPreferences.getVideoPlaybackSpeed(), UserPreferences.isSkipSilence()); } else if (media instanceof FeedMedia) { - setPlaybackParams(((FeedMedia) media).getFeedPlaybackSpeed(), UserPreferences.isSkipSilence()); + setPlaybackParams(((FeedMedia) media).getMediaPlaybackSpeed(), UserPreferences.isSkipSilence()); } else { setPlaybackParams(UserPreferences.getPlaybackSpeed(), UserPreferences.isSkipSilence()); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index ddc8e770a..6126508c6 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -291,6 +291,8 @@ class DBUpgrader { if (oldVersion < 1070306) { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA + + " ADD COLUMN " + PodDBAdapter.KEY_LAST_PLAYBACK_SPEED + " TEXT"); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 4f0ee70ef..afd99bc1b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -760,6 +760,20 @@ public class DBWriter { }); } + /** + * Saves the 'lastPlaybackSpeed' attribute of a FeedMedia object + * + * @param media The FeedMedia object. + */ + public static Future setFeedMediaLastPlaybackSpeed(final FeedMedia media) { + return dbExec.submit(() -> { + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + adapter.setFeedMediaLastPlaybackSpeed(media); + adapter.close(); + }); + } + /** * Saves a FeedItem object in the database. This method will save all attributes of the FeedItem object including * the content of FeedComponent-attributes. diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 63c036b6e..0f4bca09a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -115,6 +115,7 @@ public class PodDBAdapter { public static final String KEY_INCLUDE_FILTER = "include_filter"; public static final String KEY_EXCLUDE_FILTER = "exclude_filter"; public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed"; + public static final String KEY_LAST_PLAYBACK_SPEED = "last_playback_speed"; // Table names static final String TABLE_NAME_FEEDS = "Feeds"; @@ -169,7 +170,8 @@ public class PodDBAdapter { + KEY_FEEDITEM + " INTEGER," + KEY_PLAYED_DURATION + " INTEGER," + KEY_HAS_EMBEDDED_PICTURE + " INTEGER," - + KEY_LAST_PLAYED_TIME + " INTEGER)"; + + KEY_LAST_PLAYED_TIME + " INTEGER," + + KEY_LAST_PLAYBACK_SPEED + " TEXT)"; private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE @@ -440,6 +442,7 @@ public class PodDBAdapter { values.put(KEY_FILE_URL, media.getFile_url()); values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); + values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); if (media.getPlaybackCompletionDate() != null) { values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); @@ -465,6 +468,7 @@ public class PodDBAdapter { values.put(KEY_DURATION, media.getDuration()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); + values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { @@ -472,11 +476,24 @@ public class PodDBAdapter { } } + public void setFeedMediaLastPlaybackSpeed(FeedMedia media) { + if (media.getId() != 0) { + ContentValues values = new ContentValues(); + values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); + db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", + new String[]{String.valueOf(media.getId())}); + } else { + Log.e(TAG, "setFeedMediaLastPlaybackSpeed: ID of media was 0"); + } + } + public void setFeedMediaPlaybackCompletionDate(FeedMedia media) { if (media.getId() != 0) { ContentValues values = new ContentValues(); values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); + // Also reset stored playback speed for media + values.putNull(KEY_LAST_PLAYBACK_SPEED); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { -- cgit v1.2.3 From 7cc602a078345419cfe7bef2190295ed663a8a9e Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Thu, 12 Sep 2019 11:06:05 +0200 Subject: Set a descriptive summary on the per-feed playback speed setting --- core/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) (limited to 'core') diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index c9c6506a9..1cd4a7836 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -449,6 +449,7 @@ This setting does not apply to authentication errors. Playback Speeds Customize the speeds available for variable speed audio playback + The speed to use when starting audio playback for episodes in this feed Adjust media info to playback speed Displayed position and duration are adapted to playback speed Fast Forward Skip Time -- cgit v1.2.3 From 4746b16b12b1a8b70e0fcad6c381e5f4d66f491a Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 00:16:22 +0200 Subject: Changed type of media last playback speed to float from string Also sets default to "magic" -1 value --- .../de/danoeh/antennapod/core/feed/FeedItem.java | 4 ++- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 35 +++++++++++----------- .../antennapod/core/feed/FeedPreferences.java | 6 ++-- .../core/service/playback/LocalPSMP.java | 13 ++++++-- .../danoeh/antennapod/core/storage/DBUpgrader.java | 4 ++- .../antennapod/core/storage/PodDBAdapter.java | 17 +++++------ 6 files changed, 45 insertions(+), 34 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 3b70e4a4d..70e5ea9f4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -20,6 +20,8 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.ShownotesProvider; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + /** * Data Object for a XML message * @@ -493,6 +495,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR if (feed != null) { return feed.getPreferences().getCurrentPlaybackSpeed(); } - return UserPreferences.getPlaybackSpeed(); + return SPEED_USE_GLOBAL; } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 46795bc11..9aa4dd2d0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -21,15 +21,18 @@ import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; 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.PodDBAdapter; import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.util.playback.Playable; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + public class FeedMedia extends FeedFile implements Playable { private static final String TAG = "FeedMedia"; + public static final float LAST_PLAYBACK_SPEED_UNSET = SPEED_USE_GLOBAL; + public static final int FEEDFILETYPE_FEEDMEDIA = 2; public static final int PLAYABLE_TYPE_FEEDMEDIA = 1; @@ -55,7 +58,7 @@ public class FeedMedia extends FeedFile implements Playable { private Date playbackCompletionDate; private int startPosition = -1; private int playedDurationWhenStarted; - private String lastPlaybackSpeed = null; + private float lastPlaybackSpeed = LAST_PLAYBACK_SPEED_UNSET; // if null: unknown, will be checked private Boolean hasEmbeddedPicture; @@ -92,7 +95,7 @@ public class FeedMedia extends FeedFile implements Playable { private FeedMedia(long id, FeedItem item, int duration, int position, long size, String mime_type, String file_url, String download_url, boolean downloaded, Date playbackCompletionDate, int played_duration, - Boolean hasEmbeddedPicture, long lastPlayedTime, String lastPlaybackSpeed) { + Boolean hasEmbeddedPicture, long lastPlayedTime, float lastPlaybackSpeed) { this(id, item, duration, position, size, mime_type, file_url, download_url, downloaded, playbackCompletionDate, played_duration, lastPlayedTime); this.hasEmbeddedPicture = hasEmbeddedPicture; @@ -111,7 +114,7 @@ public class FeedMedia extends FeedFile implements Playable { int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED); int indexPlayedDuration = cursor.getColumnIndex(PodDBAdapter.KEY_PLAYED_DURATION); int indexLastPlayedTime = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYED_TIME); - int indexLastPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYBACK_SPEED); + int indexLastPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED); long mediaId = cursor.getLong(indexId); Date playbackCompletionDate = null; @@ -147,7 +150,7 @@ public class FeedMedia extends FeedFile implements Playable { cursor.getInt(indexPlayedDuration), hasEmbeddedPicture, cursor.getLong(indexLastPlayedTime), - cursor.getString(indexLastPlaybackSpeed) + cursor.getFloat(indexLastPlaybackSpeed) ); } @@ -628,11 +631,11 @@ public class FeedMedia extends FeedFile implements Playable { return super.equals(o); } - public String getLastPlaybackSpeed() { + public float getLastPlaybackSpeed() { return lastPlaybackSpeed; } - public void updateLastPlaybackSpeed(String newSpeed) { + public void updateLastPlaybackSpeed(float newSpeed) { lastPlaybackSpeed = newSpeed; DBWriter.setFeedMediaPlaybackInformation(this); } @@ -642,19 +645,15 @@ public class FeedMedia extends FeedFile implements Playable { * @return the current playback speed for the media, or the feed's configured speed */ public float getMediaPlaybackSpeed() { - if (lastPlaybackSpeed != null) { - try { - return Float.parseFloat(lastPlaybackSpeed); - } catch (NumberFormatException e) { - lastPlaybackSpeed = null; - } - } + float playbackSpeed = lastPlaybackSpeed; - FeedItem item = getItem(); - if (item != null) { - return item.getFeedPlaybackSpeed(); + if (playbackSpeed == LAST_PLAYBACK_SPEED_UNSET) { + FeedItem item = getItem(); + if (item != null) { + playbackSpeed = item.getFeedPlaybackSpeed(); + } } - return UserPreferences.getPlaybackSpeed(); + return playbackSpeed; } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index d7d173e19..2c840952c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -14,6 +14,8 @@ import de.danoeh.antennapod.core.storage.PodDBAdapter; */ public class FeedPreferences { + public static final float SPEED_USE_GLOBAL = -1; + @NonNull private FeedFilter filter; private long feedID; @@ -180,7 +182,7 @@ public class FeedPreferences { this.password = password; } - public float getCurrentPlaybackSpeed() { + float getCurrentPlaybackSpeed() { float speed = 0.0f; if (!"global".equals(feedPlaybackSpeed)) { @@ -193,7 +195,7 @@ public class FeedPreferences { // Either global or error happened if (speed == 0.0f) { - speed = UserPreferences.getPlaybackSpeed(); + speed = SPEED_USE_GLOBAL; } return speed; 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 abb5d83bd..6a694eb6f 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 @@ -35,6 +35,8 @@ import de.danoeh.antennapod.core.util.playback.IPlayer; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.VideoPlayer; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + /** * Manages the MediaPlayer object of the PlaybackService. */ @@ -305,13 +307,18 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { Log.d(TAG, "Audiofocus successfully requested"); Log.d(TAG, "Resuming/Starting playback"); acquireWifiLockIfNecessary(); + float playbackSpeed; if (media.getMediaType() == MediaType.VIDEO) { - setPlaybackParams(UserPreferences.getVideoPlaybackSpeed(), UserPreferences.isSkipSilence()); + playbackSpeed = UserPreferences.getVideoPlaybackSpeed(); } else if (media instanceof FeedMedia) { - setPlaybackParams(((FeedMedia) media).getMediaPlaybackSpeed(), UserPreferences.isSkipSilence()); + playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed(); } else { - setPlaybackParams(UserPreferences.getPlaybackSpeed(), UserPreferences.isSkipSilence()); + playbackSpeed = SPEED_USE_GLOBAL; + } + if (playbackSpeed == SPEED_USE_GLOBAL) { + playbackSpeed = UserPreferences.getPlaybackSpeed(); } + setPlaybackParams(playbackSpeed, UserPreferences.isSkipSilence()); setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume()); if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index 6126508c6..d06f13177 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -8,6 +8,8 @@ import android.util.Log; import de.danoeh.antennapod.core.feed.FeedItem; +import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; + class DBUpgrader { /** * Upgrades the given database to a new schema version @@ -292,7 +294,7 @@ class DBUpgrader { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT"); db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA - + " ADD COLUMN " + PodDBAdapter.KEY_LAST_PLAYBACK_SPEED + " TEXT"); + + " ADD COLUMN " + PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 0f4bca09a..44a653158 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -12,10 +12,7 @@ import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; -import android.media.MediaMetadataRetriever; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; @@ -40,6 +37,8 @@ import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.util.LongIntMap; import org.greenrobot.eventbus.EventBus; +import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; + // TODO Remove media column from feeditem table /** @@ -115,7 +114,7 @@ public class PodDBAdapter { public static final String KEY_INCLUDE_FILTER = "include_filter"; public static final String KEY_EXCLUDE_FILTER = "exclude_filter"; public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed"; - public static final String KEY_LAST_PLAYBACK_SPEED = "last_playback_speed"; + public static final String KEY_MEDIA_LAST_PLAYBACK_SPEED = "last_playback_speed"; // Table names static final String TABLE_NAME_FEEDS = "Feeds"; @@ -171,7 +170,7 @@ public class PodDBAdapter { + KEY_PLAYED_DURATION + " INTEGER," + KEY_HAS_EMBEDDED_PICTURE + " INTEGER," + KEY_LAST_PLAYED_TIME + " INTEGER," - + KEY_LAST_PLAYBACK_SPEED + " TEXT)"; + + KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL)"; private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE @@ -442,7 +441,7 @@ public class PodDBAdapter { values.put(KEY_FILE_URL, media.getFile_url()); values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); - values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); + values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); if (media.getPlaybackCompletionDate() != null) { values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); @@ -468,7 +467,7 @@ public class PodDBAdapter { values.put(KEY_DURATION, media.getDuration()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); - values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); + values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { @@ -479,7 +478,7 @@ public class PodDBAdapter { public void setFeedMediaLastPlaybackSpeed(FeedMedia media) { if (media.getId() != 0) { ContentValues values = new ContentValues(); - values.put(KEY_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); + values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { @@ -493,7 +492,7 @@ public class PodDBAdapter { values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); // Also reset stored playback speed for media - values.putNull(KEY_LAST_PLAYBACK_SPEED); + values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, LAST_PLAYBACK_SPEED_UNSET); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { -- cgit v1.2.3 From 2edc40cd6ea8166bbe64c8c724d93d257e67e55d Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 00:17:21 +0200 Subject: Changed database version in upgrade to be at least 1.7.4 --- core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index d06f13177..8f2c391a9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -290,7 +290,7 @@ class DBUpgrader { db.execSQL("DROP TABLE " + PodDBAdapter.TABLE_NAME_FEED_IMAGES); } - if (oldVersion < 1070306) { + if (oldVersion < 1070400) { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT"); db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA -- cgit v1.2.3 From b1190881bac940e617af349e38e389eab07043df Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 00:19:27 +0200 Subject: Set a default value for last playback speed in database --- core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 44a653158..31e8ea351 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -170,7 +170,7 @@ public class PodDBAdapter { + KEY_PLAYED_DURATION + " INTEGER," + KEY_HAS_EMBEDDED_PICTURE + " INTEGER," + KEY_LAST_PLAYED_TIME + " INTEGER," - + KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL)"; + + KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET + ")"; private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE -- cgit v1.2.3 From e5176c6a198db3401cb4779e0fe537211fb8926b Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 21:27:02 +0200 Subject: Updated database version to 1.7.4 --- core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 31e8ea351..d4e74c038 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -1472,7 +1472,7 @@ public class PodDBAdapter { */ private static class PodDBHelper extends SQLiteOpenHelper { - private static final int VERSION = 1070306; + private static final int VERSION = 1070400; private final Context context; -- cgit v1.2.3 From 3bcb368bb31198372a4ad45a5c3d3cc72a4201e4 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 23:22:13 +0200 Subject: Check the media's own speed before loading video speed --- .../antennapod/core/service/playback/LocalPSMP.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'core') 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 6a694eb6f..fe3b5223e 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 @@ -307,17 +307,19 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { Log.d(TAG, "Audiofocus successfully requested"); Log.d(TAG, "Resuming/Starting playback"); acquireWifiLockIfNecessary(); - float playbackSpeed; - if (media.getMediaType() == MediaType.VIDEO) { - playbackSpeed = UserPreferences.getVideoPlaybackSpeed(); - } else if (media instanceof FeedMedia) { + + float playbackSpeed = SPEED_USE_GLOBAL; + if (media instanceof FeedMedia) { playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed(); - } else { - playbackSpeed = SPEED_USE_GLOBAL; } if (playbackSpeed == SPEED_USE_GLOBAL) { - playbackSpeed = UserPreferences.getPlaybackSpeed(); + if (media.getMediaType() == MediaType.VIDEO) { + playbackSpeed = UserPreferences.getVideoPlaybackSpeed(); + } else { + playbackSpeed = UserPreferences.getPlaybackSpeed(); + } } + setPlaybackParams(playbackSpeed, UserPreferences.isSkipSilence()); setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume()); -- cgit v1.2.3 From d0f19a2b148c0ed04dd51f88854d9696bfe3a190 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 23:27:55 +0200 Subject: Inlined getFeedPlaybackSpeed method on FeedItem --- .../main/java/de/danoeh/antennapod/core/feed/FeedItem.java | 11 ----------- .../main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 5 ++++- .../java/de/danoeh/antennapod/core/feed/FeedPreferences.java | 2 +- 3 files changed, 5 insertions(+), 13 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 70e5ea9f4..86d8f5294 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -486,15 +486,4 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } - /** - * - * @return playback speed for this feed, or the global setting if no feed-specific setting - */ - public float getFeedPlaybackSpeed() { - Feed feed = getFeed(); - if (feed != null) { - return feed.getPreferences().getCurrentPlaybackSpeed(); - } - return SPEED_USE_GLOBAL; - } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 9aa4dd2d0..61cafef94 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -650,7 +650,10 @@ public class FeedMedia extends FeedFile implements Playable { if (playbackSpeed == LAST_PLAYBACK_SPEED_UNSET) { FeedItem item = getItem(); if (item != null) { - playbackSpeed = item.getFeedPlaybackSpeed(); + Feed feed = item.getFeed(); + if (feed != null) { + playbackSpeed = feed.getPreferences().getCurrentPlaybackSpeed(); + } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index 2c840952c..b607d8b42 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -182,7 +182,7 @@ public class FeedPreferences { this.password = password; } - float getCurrentPlaybackSpeed() { + public float getCurrentPlaybackSpeed() { float speed = 0.0f; if (!"global".equals(feedPlaybackSpeed)) { -- cgit v1.2.3 From 19896f0ec2dc1a1380fa05ccf59ca950bc76e6b5 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 23:30:20 +0200 Subject: Removed unused methods --- .../java/de/danoeh/antennapod/core/storage/DBWriter.java | 14 -------------- .../de/danoeh/antennapod/core/storage/PodDBAdapter.java | 11 ----------- 2 files changed, 25 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index afd99bc1b..4f0ee70ef 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -760,20 +760,6 @@ public class DBWriter { }); } - /** - * Saves the 'lastPlaybackSpeed' attribute of a FeedMedia object - * - * @param media The FeedMedia object. - */ - public static Future setFeedMediaLastPlaybackSpeed(final FeedMedia media) { - return dbExec.submit(() -> { - PodDBAdapter adapter = PodDBAdapter.getInstance(); - adapter.open(); - adapter.setFeedMediaLastPlaybackSpeed(media); - adapter.close(); - }); - } - /** * Saves a FeedItem object in the database. This method will save all attributes of the FeedItem object including * the content of FeedComponent-attributes. diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index d4e74c038..1104ca684 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -475,17 +475,6 @@ public class PodDBAdapter { } } - public void setFeedMediaLastPlaybackSpeed(FeedMedia media) { - if (media.getId() != 0) { - ContentValues values = new ContentValues(); - values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); - db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", - new String[]{String.valueOf(media.getId())}); - } else { - Log.e(TAG, "setFeedMediaLastPlaybackSpeed: ID of media was 0"); - } - } - public void setFeedMediaPlaybackCompletionDate(FeedMedia media) { if (media.getId() != 0) { ContentValues values = new ContentValues(); -- cgit v1.2.3 From 684213c291a3b1f2cdb3259789a5c0928fd40c78 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Fri, 13 Sep 2019 23:53:42 +0200 Subject: Moved logic for selecting playback speed entirely to UserPreferences --- .../core/preferences/UserPreferences.java | 28 ++++++++++++++++++++-- .../core/service/playback/LocalPSMP.java | 14 +---------- 2 files changed, 27 insertions(+), 15 deletions(-) (limited to 'core') 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 b8ab1c888..80f0fd454 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 @@ -22,6 +22,8 @@ import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.service.download.ProxyConfig; import de.danoeh.antennapod.core.storage.APCleanupAlgorithm; @@ -29,9 +31,12 @@ 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.core.util.playback.Playable; import de.danoeh.antennapod.core.util.SortOrder; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + /** * Provides access to preferences set by the user in the settings screen. A * private instance of this class must first be instantiated via @@ -320,7 +325,26 @@ public class UserPreferences { return prefs.getBoolean(PREF_DELETE_REMOVES_FROM_QUEUE, false); } - public static float getPlaybackSpeed() { + public static float getPlaybackSpeed(Playable media) { + float playbackSpeed = SPEED_USE_GLOBAL; + if (media != null) { + if (media instanceof FeedMedia) { + playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed(); + } + + if (playbackSpeed == SPEED_USE_GLOBAL && media.getMediaType() == MediaType.VIDEO) { + playbackSpeed = getVideoPlaybackSpeed(); + } + } + + if (playbackSpeed == SPEED_USE_GLOBAL) { + playbackSpeed = getAudioPlaybackSpeed(); + } + + return playbackSpeed; + } + + private static float getAudioPlaybackSpeed() { try { return Float.parseFloat(prefs.getString(PREF_PLAYBACK_SPEED, "1.00")); } catch (NumberFormatException e) { @@ -330,7 +354,7 @@ public class UserPreferences { } } - public static float getVideoPlaybackSpeed() { + private static float getVideoPlaybackSpeed() { try { return Float.parseFloat(prefs.getString(PREF_VIDEO_PLAYBACK_SPEED, "1.00")); } catch (NumberFormatException e) { 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 fe3b5223e..0788a05e8 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 @@ -308,19 +308,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { Log.d(TAG, "Resuming/Starting playback"); acquireWifiLockIfNecessary(); - float playbackSpeed = SPEED_USE_GLOBAL; - if (media instanceof FeedMedia) { - playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed(); - } - if (playbackSpeed == SPEED_USE_GLOBAL) { - if (media.getMediaType() == MediaType.VIDEO) { - playbackSpeed = UserPreferences.getVideoPlaybackSpeed(); - } else { - playbackSpeed = UserPreferences.getPlaybackSpeed(); - } - } - - setPlaybackParams(playbackSpeed, UserPreferences.isSkipSilence()); + setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence()); setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume()); if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) { -- cgit v1.2.3 From 60eb41048f0d3654b629be7476b476641b4f2223 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sat, 14 Sep 2019 00:09:24 +0200 Subject: Converted playback speed in media preferences to a float instead of String --- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 2 +- .../antennapod/core/feed/FeedPreferences.java | 31 +++++----------------- .../danoeh/antennapod/core/storage/DBUpgrader.java | 3 ++- .../antennapod/core/storage/PodDBAdapter.java | 3 ++- 4 files changed, 11 insertions(+), 28 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 61cafef94..05ca84bac 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -652,7 +652,7 @@ public class FeedMedia extends FeedFile implements Playable { if (item != null) { Feed feed = item.getFeed(); if (feed != null) { - playbackSpeed = feed.getPreferences().getCurrentPlaybackSpeed(); + playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed(); } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index b607d8b42..b0512d844 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -30,13 +30,13 @@ public class FeedPreferences { private AutoDeleteAction auto_delete_action; private String username; private String password; - private String feedPlaybackSpeed; + private float feedPlaybackSpeed; public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction auto_delete_action, String username, String password) { - this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter(), "global"); + this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter(), SPEED_USE_GLOBAL); } - private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter, String feedPlaybackSpeed) { + private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter, float feedPlaybackSpeed) { this.feedID = feedID; this.autoDownload = autoDownload; this.keepUpdated = keepUpdated; @@ -67,7 +67,7 @@ public class FeedPreferences { String password = cursor.getString(indexPassword); String includeFilter = cursor.getString(indexIncludeFilter); String excludeFilter = cursor.getString(indexExcludeFilter); - String feedPlaybackSpeed = cursor.getString(indexFeedPlaybackSpeed); + float feedPlaybackSpeed = cursor.getFloat(indexFeedPlaybackSpeed); return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter), feedPlaybackSpeed); } @@ -182,30 +182,11 @@ public class FeedPreferences { this.password = password; } - public float getCurrentPlaybackSpeed() { - float speed = 0.0f; - - if (!"global".equals(feedPlaybackSpeed)) { - try { - speed = Float.parseFloat(getFeedPlaybackSpeed()); - } catch (NumberFormatException e) { - setFeedPlaybackSpeed("global"); - } - } - - // Either global or error happened - if (speed == 0.0f) { - speed = SPEED_USE_GLOBAL; - } - - return speed; - } - - public String getFeedPlaybackSpeed() { + public float getFeedPlaybackSpeed() { return feedPlaybackSpeed; } - public void setFeedPlaybackSpeed(String playbackSpeed) { + public void setFeedPlaybackSpeed(float playbackSpeed) { feedPlaybackSpeed = playbackSpeed; } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index 8f2c391a9..41b39deac 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -9,6 +9,7 @@ import android.util.Log; import de.danoeh.antennapod.core.feed.FeedItem; import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; class DBUpgrader { /** @@ -292,7 +293,7 @@ class DBUpgrader { } if (oldVersion < 1070400) { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS - + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " TEXT"); + + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " REAL DEFAULT " + SPEED_USE_GLOBAL); db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA + " ADD COLUMN " + PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 1104ca684..0c93590e2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -38,6 +38,7 @@ import de.danoeh.antennapod.core.util.LongIntMap; import org.greenrobot.eventbus.EventBus; import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; // TODO Remove media column from feeditem table @@ -148,7 +149,7 @@ public class PodDBAdapter { + KEY_HIDE + " TEXT," + KEY_LAST_UPDATE_FAILED + " INTEGER DEFAULT 0," + KEY_AUTO_DELETE_ACTION + " INTEGER DEFAULT 0," - + KEY_FEED_PLAYBACK_SPEED + " TEXT)"; + + KEY_FEED_PLAYBACK_SPEED + " REAL DEFAULT " + SPEED_USE_GLOBAL + ")"; private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE -- cgit v1.2.3 From d746121a9bdd5c3a432a30b99638c442a6e6df5c Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sat, 14 Sep 2019 00:13:19 +0200 Subject: Included Media playback speed into controller getter --- .../de/danoeh/antennapod/core/util/playback/PlaybackController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') 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 0cfaaab3c..9caa2156d 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 @@ -746,7 +746,7 @@ public class PlaybackController { if (playbackService != null && canSetPlaybackSpeed()) { return playbackService.getCurrentPlaybackSpeed(); } else { - return -1; + return UserPreferences.getPlaybackSpeed(getMedia()); } } -- cgit v1.2.3 From de78c0e31eeff0609fe5388204e6e39e8f60579b Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Mon, 16 Sep 2019 14:38:07 +0200 Subject: Fixed playback speed not changing when episode ended and next started playing --- .../main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java | 1 + 1 file changed, 1 insertion(+) (limited to 'core') 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 0788a05e8..72f5f183a 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 @@ -245,6 +245,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { try { media.loadMetadata(); callback.onMediaChanged(false); + setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence()); if (stream) { mediaPlayer.setDataSource(media.getStreamUrl()); } else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) { -- cgit v1.2.3 From 11270d91a633f757e2fbf80759991323ba0c91b7 Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 4 Sep 2019 16:04:03 -0700 Subject: #3383 Fix skip last episode in queue: android test to reproduce it. --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') 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 787e32ccc..fea8d0603 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 @@ -71,7 +71,7 @@ public class UserPreferences { private static final String PREF_HARDWARE_FOWARD_BUTTON_SKIPS = "prefHardwareForwardButtonSkips"; private static final String PREF_HARDWARE_PREVIOUS_BUTTON_RESTARTS = "prefHardwarePreviousButtonRestarts"; public static final String PREF_FOLLOW_QUEUE = "prefFollowQueue"; - private static final String PREF_SKIP_KEEPS_EPISODE = "prefSkipKeepsEpisode"; + public static final String PREF_SKIP_KEEPS_EPISODE = "prefSkipKeepsEpisode"; private static final String PREF_FAVORITE_KEEPS_EPISODE = "prefFavoriteKeepsEpisode"; private static final String PREF_AUTO_DELETE = "prefAutoDelete"; public static final String PREF_SMART_MARK_AS_PLAYED_SECS = "prefSmartMarkAsPlayedSecs"; -- cgit v1.2.3 From cf5f0fbc28c49dc74a056e364bf20a301a6cc263 Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 4 Sep 2019 16:13:25 -0700 Subject: #3383 Fix skip last episode in queue - the fix --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') 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 a3535616e..a59c189be 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 @@ -969,7 +969,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { } FeedMedia media = (FeedMedia) playable; FeedItem item = media.getItem(); - boolean smartMarkAsPlayed = playingNext && media.hasAlmostEnded(); + boolean smartMarkAsPlayed = media.hasAlmostEnded(); if (!ended && smartMarkAsPlayed) { Log.d(TAG, "smart mark as played"); } -- cgit v1.2.3 From 59d5c3cbf267c0a6e78d528247aad556674f6bbb Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 2 Oct 2019 16:07:08 +0200 Subject: Changed color of default notification icon --- core/src/main/res/drawable/notification_default_large_icon.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/src/main/res/drawable/notification_default_large_icon.xml b/core/src/main/res/drawable/notification_default_large_icon.xml index 6e0c1e369..6da31b1bb 100644 --- a/core/src/main/res/drawable/notification_default_large_icon.xml +++ b/core/src/main/res/drawable/notification_default_large_icon.xml @@ -5,7 +5,7 @@ android:width="64dp"> Date: Fri, 4 Oct 2019 11:22:39 +0200 Subject: Automatic AndroidX migration --- core/build.gradle | 14 +++++++------- .../java/de/danoeh/antennapod/core/util/DateUtilsTest.java | 2 +- .../core/service/playback/PlaybackServiceFlavorHelper.java | 2 +- .../java/android/support/v4/app/SafeJobIntentService.java | 4 ++-- .../danoeh/antennapod/core/dialog/ConfirmationDialog.java | 2 +- .../core/dialog/DownloadRequestErrorDialogCreator.java | 2 +- .../de/danoeh/antennapod/core/event/DownloaderUpdate.java | 2 +- .../de/danoeh/antennapod/core/event/FeedItemEvent.java | 2 +- .../java/de/danoeh/antennapod/core/event/MessageEvent.java | 2 +- .../java/de/danoeh/antennapod/core/event/QueueEvent.java | 2 +- .../src/main/java/de/danoeh/antennapod/core/feed/Feed.java | 2 +- .../main/java/de/danoeh/antennapod/core/feed/FeedItem.java | 2 +- .../java/de/danoeh/antennapod/core/feed/FeedMedia.java | 3 +-- .../de/danoeh/antennapod/core/feed/FeedPreferences.java | 2 +- .../de/danoeh/antennapod/core/glide/ApGlideModule.java | 2 +- .../de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java | 4 ++-- .../de/danoeh/antennapod/core/glide/AudioCoverFetcher.java | 2 +- .../antennapod/core/glide/FastBlurTransformation.java | 2 +- .../danoeh/antennapod/core/gpoddernet/GpodnetService.java | 2 +- .../antennapod/core/gpoddernet/model/GpodnetDevice.java | 2 +- .../gpoddernet/model/GpodnetEpisodeActionGetResponse.java | 2 +- .../gpoddernet/model/GpodnetEpisodeActionPostResponse.java | 2 +- .../antennapod/core/gpoddernet/model/GpodnetPodcast.java | 2 +- .../core/gpoddernet/model/GpodnetSubscriptionChange.java | 2 +- .../antennapod/core/gpoddernet/model/GpodnetTag.java | 2 +- .../gpoddernet/model/GpodnetUploadChangesResponse.java | 2 +- .../antennapod/core/preferences/SleepTimerPreferences.java | 2 +- .../antennapod/core/preferences/UserPreferences.java | 6 +++--- .../antennapod/core/receiver/MediaButtonReceiver.java | 2 +- .../danoeh/antennapod/core/service/FeedUpdateWorker.java | 2 +- .../danoeh/antennapod/core/service/GpodnetSyncService.java | 8 ++++---- .../antennapod/core/service/PlayerWidgetJobService.java | 4 ++-- .../core/service/download/AntennapodHttpClient.java | 2 +- .../antennapod/core/service/download/DownloadRequest.java | 4 ++-- .../antennapod/core/service/download/DownloadService.java | 8 ++++---- .../antennapod/core/service/download/DownloadStatus.java | 2 +- .../antennapod/core/service/download/Downloader.java | 2 +- .../antennapod/core/service/download/HttpDownloader.java | 2 +- .../antennapod/core/service/download/ProxyConfig.java | 2 +- .../danoeh/antennapod/core/service/playback/LocalPSMP.java | 2 +- .../antennapod/core/service/playback/PlaybackService.java | 10 +++++----- .../core/service/playback/PlaybackServiceMediaPlayer.java | 4 ++-- .../playback/PlaybackServiceNotificationBuilder.java | 10 +++++----- .../core/service/playback/PlaybackServiceTaskManager.java | 2 +- .../danoeh/antennapod/core/storage/APCleanupAlgorithm.java | 4 ++-- .../antennapod/core/storage/APQueueCleanupAlgorithm.java | 2 +- .../java/de/danoeh/antennapod/core/storage/DBReader.java | 6 +++--- .../java/de/danoeh/antennapod/core/storage/DBWriter.java | 5 +---- .../danoeh/antennapod/core/storage/DownloadRequester.java | 4 ++-- .../de/danoeh/antennapod/core/storage/FeedSearcher.java | 2 +- .../de/danoeh/antennapod/core/storage/PodDBAdapter.java | 5 ++--- .../antennapod/core/syndication/handler/HandlerState.java | 2 +- .../java/de/danoeh/antennapod/core/util/ChapterUtils.java | 4 ++-- .../java/de/danoeh/antennapod/core/util/LangUtils.java | 2 +- .../java/de/danoeh/antennapod/core/util/NetworkUtils.java | 2 +- .../java/de/danoeh/antennapod/core/util/ShareUtils.java | 2 +- .../java/de/danoeh/antennapod/core/util/ThemeUtils.java | 4 ++-- .../java/de/danoeh/antennapod/core/util/URLChecker.java | 2 +- .../antennapod/core/util/download/AutoUpdateManager.java | 2 +- .../danoeh/antennapod/core/util/gui/NotificationUtils.java | 2 +- .../de/danoeh/antennapod/core/util/playback/Playable.java | 2 +- .../antennapod/core/util/playback/PlaybackController.java | 5 ++--- .../core/util/playback/PlaybackServiceStarter.java | 5 ++--- .../de/danoeh/antennapod/core/util/playback/Timeline.java | 6 ++---- .../antennapod/core/util/syndication/FeedDiscoverer.java | 2 +- .../play/java/de/danoeh/antennapod/core/CastCallbacks.java | 4 ++-- .../java/de/danoeh/antennapod/core/cast/CastManager.java | 10 +++++----- .../java/de/danoeh/antennapod/core/cast/RemoteMedia.java | 2 +- .../core/cast/SwitchableMediaRouteActionProvider.java | 12 ++++++------ .../core/service/playback/PlaybackServiceFlavorHelper.java | 6 +++--- .../antennapod/core/service/playback/RemotePSMP.java | 2 +- 71 files changed, 120 insertions(+), 129 deletions(-) (limited to 'core') diff --git a/core/build.gradle b/core/build.gradle index 8614d5589..b70140662 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -10,7 +10,7 @@ android { versionCode 1 versionName "1.0" testApplicationId "de.danoeh.antennapod.core.tests" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { @@ -56,9 +56,9 @@ android { } dependencies { - implementation "com.android.support:support-v4:$supportVersion" - implementation "com.android.support:appcompat-v7:$supportVersion" - implementation "com.android.support:preference-v14:$supportVersion" + implementation "androidx.legacy:legacy-support-v4:1.0.0-beta01" + implementation "androidx.appcompat:appcompat:1.0.0-beta01" + implementation "androidx.legacy:legacy-preference-v14:1.0.0-beta01" implementation "android.arch.work:work-runtime:$workManagerVersion" implementation "org.apache.commons:commons-lang3:$commonslangVersion" @@ -94,9 +94,9 @@ dependencies { testImplementation "org.awaitility:awaitility:$awaitilityVersion" testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test:rules:1.0.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' + androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' + androidTestImplementation 'androidx.test:rules:1.1.0-alpha4' } diff --git a/core/src/androidTest/java/de/danoeh/antennapod/core/util/DateUtilsTest.java b/core/src/androidTest/java/de/danoeh/antennapod/core/util/DateUtilsTest.java index ffba4e479..5d98f133c 100644 --- a/core/src/androidTest/java/de/danoeh/antennapod/core/util/DateUtilsTest.java +++ b/core/src/androidTest/java/de/danoeh/antennapod/core/util/DateUtilsTest.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.util; -import android.support.test.filters.SmallTest; +import androidx.test.filters.SmallTest; import org.junit.Test; import java.util.Calendar; diff --git a/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java index 37109ddca..837cb1bd0 100644 --- a/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java +++ b/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.service.playback; import android.content.Context; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; diff --git a/core/src/main/java/android/support/v4/app/SafeJobIntentService.java b/core/src/main/java/android/support/v4/app/SafeJobIntentService.java index c07c409ee..aedc9418b 100644 --- a/core/src/main/java/android/support/v4/app/SafeJobIntentService.java +++ b/core/src/main/java/android/support/v4/app/SafeJobIntentService.java @@ -1,4 +1,4 @@ -package android.support.v4.app; +package androidx.core.app; import android.app.job.JobParameters; import android.app.job.JobServiceEngine; @@ -6,7 +6,7 @@ import android.app.job.JobWorkItem; import android.content.Intent; import android.os.Build; import android.os.IBinder; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java b/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java index c626a8189..c9fe886fb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java +++ b/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.dialog; import android.content.Context; import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.util.Log; import de.danoeh.antennapod.core.R; diff --git a/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java b/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java index b1beac315..e38abb990 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.dialog; import android.content.Context; -import android.support.v7.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import de.danoeh.antennapod.core.R; diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java index 7ca6f78de..9acd7728a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.event; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.Arrays; import java.util.List; diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java index 9db262857..89ecf271b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.event; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/MessageEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/MessageEvent.java index 9fc488fbc..9fb22b8ea 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/MessageEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/MessageEvent.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.event; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; public class MessageEvent { diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java index a84e8456f..209dcba4d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.event; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java index 5718c06c2..6a7c97b7b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.feed; import android.database.Cursor; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import java.util.ArrayList; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 744e9b924..ecd34acff 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.feed; import android.database.Cursor; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 218570632..b1c2ff15a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -7,7 +7,7 @@ import android.database.Cursor; import android.media.MediaMetadataRetriever; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaDescriptionCompat; @@ -21,7 +21,6 @@ import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; 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.PodDBAdapter; import de.danoeh.antennapod.core.util.ChapterUtils; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index 3285ad7cb..90fb6514b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.feed; import android.content.Context; import android.database.Cursor; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import de.danoeh.antennapod.core.preferences.UserPreferences; 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 552c1b691..b2c809e90 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 @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.glide; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.bumptech.glide.Glide; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.Registry; diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java b/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java index 3dd87cc0b..f02334af5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.glide; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/AudioCoverFetcher.java b/core/src/main/java/de/danoeh/antennapod/core/glide/AudioCoverFetcher.java index 479846655..6a237573b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/AudioCoverFetcher.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/AudioCoverFetcher.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.glide; import android.media.MediaMetadataRetriever; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.bumptech.glide.Priority; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.data.DataFetcher; diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java b/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java index a740782d6..cbd22ceb0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.glide; import android.graphics.Bitmap; import android.media.ThumbnailUtils; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java index 2588cfdee..9ee8c0fc1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.json.JSONArray; import org.json.JSONException; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java index faf4264e5..e86b74164 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public class GpodnetDevice { diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionGetResponse.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionGetResponse.java index 1e21efcda..7b28bba49 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionGetResponse.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionGetResponse.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.List; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionPostResponse.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionPostResponse.java index b6efab016..10ea4cd9b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionPostResponse.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetEpisodeActionPostResponse.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java index 680dc1042..2c2d759c9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public class GpodnetPodcast { private final String url; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java index 0f1961bef..56a64053f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.List; diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java index 40543592e..dec3be7f2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.gpoddernet.model; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public class GpodnetTag implements Parcelable { diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java index 9f9c3bd74..ba3db8412 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.gpoddernet.model; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; import org.json.JSONArray; import org.json.JSONException; diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java index 0f3a9fcb3..eb87acb5f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.preferences; import android.content.Context; import android.content.SharedPreferences; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import java.util.concurrent.TimeUnit; 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 787e32ccc..ef3bc2d1c 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 @@ -4,9 +4,9 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.preference.PreferenceManager; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index b191dbf8b..b683f849c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -3,7 +3,7 @@ package de.danoeh.antennapod.core.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.Log; import android.view.KeyEvent; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java index 87c18227b..4443319e9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.service; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import androidx.work.Worker; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java index 5584991ca..b254cfc59 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java @@ -5,10 +5,10 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.SafeJobIntentService; -import android.support.v4.util.ArrayMap; +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; +import androidx.core.app.SafeJobIntentService; +import androidx.collection.ArrayMap; import android.util.Log; import android.util.Pair; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java index abb1d0c0b..3cc8ebd7b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java @@ -10,8 +10,8 @@ import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.os.IBinder; -import android.support.annotation.NonNull; -import android.support.v4.app.SafeJobIntentService; +import androidx.annotation.NonNull; +import androidx.core.app.SafeJobIntentService; import android.util.Log; import android.view.KeyEvent; import android.view.View; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index 04a6d5882..2082b95d1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.service.download; import android.os.Build; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java index 48234c387..60591899d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java @@ -3,8 +3,8 @@ package de.danoeh.antennapod.core.service.download; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import de.danoeh.antennapod.core.feed.FeedFile; import de.danoeh.antennapod.core.util.URLChecker; 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 b429740bf..296046031 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 @@ -12,10 +12,10 @@ import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.IBinder; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.VisibleForTesting; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import androidx.core.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; import android.util.Pair; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java index d88eb63f4..675115bc7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.service.download; import android.database.Cursor; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.Date; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java index 38b93eab8..02dc17301 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.service.download; import android.content.Context; import android.net.wifi.WifiManager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.concurrent.Callable; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index c27cefc10..8abfa3da3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.service.download; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java index c4096c3da..0d59a1b7e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.service.download; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import java.net.Proxy; 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 f8f095ea8..01c4df615 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 @@ -6,7 +6,7 @@ import android.media.AudioFocusRequest; import android.media.AudioManager; import android.os.Build; import android.os.PowerManager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.telephony.TelephonyManager; import android.util.Log; import android.util.Pair; 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 e58d5cb31..2eb9c92e4 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 @@ -21,12 +21,12 @@ import android.os.Bundle; import android.os.IBinder; import android.os.Vibrator; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.v4.app.NotificationCompat; -import android.support.v4.app.NotificationManagerCompat; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; import android.support.v4.media.MediaBrowserCompat; -import android.support.v4.media.MediaBrowserServiceCompat; +import androidx.media.MediaBrowserServiceCompat; import android.support.v4.media.MediaDescriptionCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaSessionCompat; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index b8198fa63..bc009e2bc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -2,8 +2,8 @@ package de.danoeh.antennapod.core.service.playback; import android.content.Context; import android.net.wifi.WifiManager; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import android.util.Log; import android.util.Pair; import android.view.SurfaceHolder; 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 39490dc10..79a447c2d 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 @@ -5,18 +5,18 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.v4.app.NotificationCompat; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; import android.support.v4.media.session.MediaSessionCompat; import android.util.Log; import android.view.KeyEvent; +import androidx.media.app.NotificationCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.core.ClientConfig; @@ -195,7 +195,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build PendingIntent stopButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_STOP, numActions); - setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle() + setStyle(new NotificationCompat.MediaStyle() .setMediaSession(mediaSessionToken) .setShowActionsInCompactView(compactActionList.toArray()) .setShowCancelButton(true) diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 1a13f9e9f..1cf271a29 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -4,7 +4,7 @@ import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.Vibrator; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import org.greenrobot.eventbus.EventBus; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index c63ac4416..b88793e87 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -1,8 +1,8 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import android.util.Log; import java.util.ArrayList; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java index 04b200699..dfe0b5201 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import java.util.ArrayList; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 70d3ba9dd..948a21efc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -1,9 +1,9 @@ package de.danoeh.antennapod.core.storage; import android.database.Cursor; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.collection.ArrayMap; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 4f0ee70ef..11d90e57c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -2,10 +2,7 @@ package de.danoeh.antennapod.core.storage; import android.app.backup.BackupManager; import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import org.greenrobot.eventbus.EventBus; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index 9c48f31dd..71f6845c5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -3,8 +3,8 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.util.Log; import android.webkit.URLUtil; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java index c6620a90e..0c8d20007 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.Collections; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index a1732e08f..978f62395 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -12,10 +12,9 @@ import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; -import android.media.MediaMetadataRetriever; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java index 1cd05aa26..608cade88 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.syndication.handler; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; import java.util.ArrayList; import java.util.Map; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index e6d4ed6b7..300e0038a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.Log; import org.apache.commons.io.IOUtils; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java index 90e0b0981..20af6415e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java @@ -1,6 +1,6 @@ package de.danoeh.antennapod.core.util; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; import java.nio.charset.Charset; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java index ca48c9bc9..a9e46e42c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java @@ -5,7 +5,7 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; -import android.support.v4.net.ConnectivityManagerCompat; +import androidx.core.net.ConnectivityManagerCompat; import android.text.TextUtils; import android.util.Log; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java index 5ae00460e..3e9e8327e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java @@ -6,7 +6,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Build; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.util.Log; import java.io.File; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java index 1da7a5c50..eabaaa828 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java @@ -1,8 +1,8 @@ package de.danoeh.antennapod.core.util; import android.content.Context; -import android.support.annotation.AttrRes; -import android.support.annotation.ColorInt; +import androidx.annotation.AttrRes; +import androidx.annotation.ColorInt; import android.util.TypedValue; public class ThemeUtils { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java index ffc6a6e28..7e3870a20 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import de.danoeh.antennapod.core.BuildConfig; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java index ebeec058d..e093a7e00 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util.download; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import androidx.work.Constraints; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/gui/NotificationUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/gui/NotificationUtils.java index 52a43aab2..02e98ba84 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/gui/NotificationUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/gui/NotificationUtils.java @@ -5,7 +5,7 @@ import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; import android.os.Build; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import de.danoeh.antennapod.core.R; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java index da9b96430..378c47faf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Parcelable; import android.preference.PreferenceManager; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.Log; import java.util.List; 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 1456ebd8d..5ce0e715e 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 @@ -11,8 +11,8 @@ import android.content.res.TypedArray; import android.media.MediaPlayer; import android.os.Build; import android.os.IBinder; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.util.Log; import android.util.Pair; @@ -24,7 +24,6 @@ import android.widget.TextView; import java.util.concurrent.ScheduledThreadPoolExecutor; import de.danoeh.antennapod.core.R; -import de.danoeh.antennapod.core.event.PlaybackPositionEvent; import de.danoeh.antennapod.core.event.ServiceEvent; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedMedia; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackServiceStarter.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackServiceStarter.java index f7d2ee409..01ca97134 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackServiceStarter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackServiceStarter.java @@ -2,9 +2,8 @@ package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.content.Intent; -import android.media.MediaPlayer; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java index 75229b9cf..0fe1f0036 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java @@ -3,11 +3,10 @@ package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; -import android.util.Pair; import android.util.TypedValue; import org.jsoup.Jsoup; @@ -15,7 +14,6 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; -import java.util.ArrayList; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java index c5ad9cfd6..a474756e9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util.syndication; import android.net.Uri; -import android.support.v4.util.ArrayMap; +import androidx.collection.ArrayMap; import android.text.TextUtils; import org.jsoup.Jsoup; diff --git a/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java b/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java index 770fee9b9..27f985a4c 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java +++ b/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core; -import android.support.annotation.Nullable; -import android.support.v7.app.MediaRouteDialogFactory; +import androidx.annotation.Nullable; +import androidx.mediarouter.app.MediaRouteDialogFactory; /** * Callbacks for Chromecast support on the core module diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java index 414a7840c..bf9ef3f5b 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java @@ -24,10 +24,10 @@ package de.danoeh.antennapod.core.cast; import android.content.Context; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.v4.view.ActionProvider; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.media.MediaRouter; +import androidx.annotation.NonNull; +import androidx.core.view.ActionProvider; +import androidx.core.view.MenuItemCompat; +import androidx.mediarouter.media.MediaRouter; import android.util.Log; import android.view.KeyEvent; import android.view.MenuItem; @@ -1735,7 +1735,7 @@ public class CastManager extends BaseCastManager implements OnFailedListener { * {@link SwitchableMediaRouteActionProvider} associated with the button if the caller needs * such reference. It is assumed that the enclosing * {@link android.app.Activity} inherits (directly or indirectly) from - * {@link android.support.v7.app.AppCompatActivity}. + * {@link androidx.appcompat.app.AppCompatActivity}. * * @param menuItem MenuItem of the Media Router cast button. */ diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/RemoteMedia.java b/core/src/play/java/de/danoeh/antennapod/core/cast/RemoteMedia.java index 1c6dd30c4..0614e5952 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/cast/RemoteMedia.java +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/RemoteMedia.java @@ -5,7 +5,7 @@ import android.content.SharedPreferences; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.google.android.gms.cast.MediaInfo; diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/SwitchableMediaRouteActionProvider.java b/core/src/play/java/de/danoeh/antennapod/core/cast/SwitchableMediaRouteActionProvider.java index f063cf5e3..5a6a0aa2b 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/cast/SwitchableMediaRouteActionProvider.java +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/SwitchableMediaRouteActionProvider.java @@ -3,12 +3,12 @@ package de.danoeh.antennapod.core.cast; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.MediaRouteActionProvider; -import android.support.v7.app.MediaRouteChooserDialogFragment; -import android.support.v7.app.MediaRouteControllerDialogFragment; -import android.support.v7.media.MediaRouter; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.mediarouter.app.MediaRouteActionProvider; +import androidx.mediarouter.app.MediaRouteChooserDialogFragment; +import androidx.mediarouter.app.MediaRouteControllerDialogFragment; +import androidx.mediarouter.media.MediaRouter; import android.util.Log; /** diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java index 79c71f164..c32ba2385 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java +++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java @@ -7,11 +7,11 @@ import android.content.IntentFilter; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; -import android.support.v7.media.MediaRouter; +import androidx.mediarouter.media.MediaRouter; import android.support.wearable.media.MediaControlConstants; import android.util.Log; import android.widget.Toast; diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java index f91264c59..63fc05cb8 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java +++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/RemotePSMP.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.service.playback; import android.content.Context; import android.media.MediaPlayer; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import android.util.Pair; import android.view.SurfaceHolder; -- cgit v1.2.3 From 7574ca792088cdbe66c1c2a66a4ab9d57cacf3c9 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 29 Sep 2019 13:24:11 +0200 Subject: Adapted dependency versions to stable ones --- core/build.gradle | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'core') diff --git a/core/build.gradle b/core/build.gradle index b70140662..9a724c59f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -56,9 +56,8 @@ android { } dependencies { - implementation "androidx.legacy:legacy-support-v4:1.0.0-beta01" - implementation "androidx.appcompat:appcompat:1.0.0-beta01" - implementation "androidx.legacy:legacy-preference-v14:1.0.0-beta01" + implementation "androidx.appcompat:appcompat:1.1.0" + implementation "androidx.preference:preference:1.1.0" implementation "android.arch.work:work-runtime:$workManagerVersion" implementation "org.apache.commons:commons-lang3:$commonslangVersion" @@ -84,7 +83,7 @@ dependencies { // free build hack: skip some dependencies if (!doFreeBuild()) { playApi "com.google.android.libraries.cast.companionlibrary:ccl:$castCompanionLibVer" - api "com.android.support:mediarouter-v7:$supportVersion" + api "androidx.mediarouter:mediarouter:1.0.0" playApi "com.google.android.gms:play-services-cast:$playServicesVersion" api "com.google.android.support:wearable:$wearableSupportVersion" } else { @@ -94,9 +93,9 @@ dependencies { testImplementation "org.awaitility:awaitility:$awaitilityVersion" testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:1.10.19' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' - androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' - androidTestImplementation 'androidx.test:rules:1.1.0-alpha4' + androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion" + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' } -- cgit v1.2.3 From 933790b0d3068532bdbd6b5b4856e6d49d3dfbdd Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 29 Sep 2019 13:25:59 +0200 Subject: Fixed compilation --- core/build.gradle | 1 + .../core/service/playback/PlaybackServiceNotificationBuilder.java | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/build.gradle b/core/build.gradle index 9a724c59f..8e449a379 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -58,6 +58,7 @@ android { dependencies { implementation "androidx.appcompat:appcompat:1.1.0" implementation "androidx.preference:preference:1.1.0" + annotationProcessor "androidx.annotation:annotation:1.1.0" implementation "android.arch.work:work-runtime:$workManagerVersion" implementation "org.apache.commons:commons-lang3:$commonslangVersion" 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 79a447c2d..b809ad659 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 @@ -16,7 +16,6 @@ import androidx.core.content.ContextCompat; import android.support.v4.media.session.MediaSessionCompat; import android.util.Log; import android.view.KeyEvent; -import androidx.media.app.NotificationCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.core.ClientConfig; @@ -195,7 +194,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build PendingIntent stopButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_STOP, numActions); - setStyle(new NotificationCompat.MediaStyle() + setStyle(new androidx.media.app.NotificationCompat.MediaStyle() .setMediaSession(mediaSessionToken) .setShowActionsInCompactView(compactActionList.toArray()) .setShowCancelButton(true) -- cgit v1.2.3 From 650c5503add2db91c7085c66a4de404a2ed8f9c6 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 30 Sep 2019 19:01:19 +0200 Subject: Moved SafeJobIntentService to correct package --- .../support/v4/app/SafeJobIntentService.java | 118 --------------------- .../androidx/core/app/SafeJobIntentService.java | 118 +++++++++++++++++++++ 2 files changed, 118 insertions(+), 118 deletions(-) delete mode 100644 core/src/main/java/android/support/v4/app/SafeJobIntentService.java create mode 100644 core/src/main/java/androidx/core/app/SafeJobIntentService.java (limited to 'core') diff --git a/core/src/main/java/android/support/v4/app/SafeJobIntentService.java b/core/src/main/java/android/support/v4/app/SafeJobIntentService.java deleted file mode 100644 index aedc9418b..000000000 --- a/core/src/main/java/android/support/v4/app/SafeJobIntentService.java +++ /dev/null @@ -1,118 +0,0 @@ -package androidx.core.app; - -import android.app.job.JobParameters; -import android.app.job.JobServiceEngine; -import android.app.job.JobWorkItem; -import android.content.Intent; -import android.os.Build; -import android.os.IBinder; -import androidx.annotation.RequiresApi; -import android.util.Log; - - -public abstract class SafeJobIntentService extends JobIntentService { - - @Override - public void onCreate() { - super.onCreate(); - if (Build.VERSION.SDK_INT >= 26) { - mJobImpl = new SafeJobServiceEngineImpl(this); - } - } - - /** - * Implementation of a safe JobServiceEngine for interaction with JobIntentService. - */ - @RequiresApi(26) - static final class SafeJobServiceEngineImpl extends JobServiceEngine - implements JobIntentService.CompatJobEngine { - static final String TAG = "JobServiceEngineImpl"; - - static final boolean DEBUG = false; - - final JobIntentService mService; - final Object mLock = new Object(); - JobParameters mParams; - - final class WrapperWorkItem implements JobIntentService.GenericWorkItem { - final JobWorkItem mJobWork; - - WrapperWorkItem(JobWorkItem jobWork) { - mJobWork = jobWork; - } - - @Override - public Intent getIntent() { - return mJobWork.getIntent(); - } - - @Override - public void complete() { - synchronized (mLock) { - if (mParams != null) { - try { - mParams.completeWork(mJobWork); - } catch (SecurityException e) { - Log.e(TAG, Log.getStackTraceString(e)); - } - } - } - } - } - - SafeJobServiceEngineImpl(JobIntentService service) { - super(service); - mService = service; - } - - @Override - public IBinder compatGetBinder() { - return getBinder(); - } - - @Override - public boolean onStartJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStartJob: " + params); - mParams = params; - // We can now start dequeuing work! - mService.ensureProcessorRunningLocked(false); - return true; - } - - @Override - public boolean onStopJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStartJob: " + params); - boolean result = mService.doStopCurrentWork(); - synchronized (mLock) { - // Once we return, the job is stopped, so its JobParameters are no - // longer valid and we should not be doing anything with them. - mParams = null; - } - return result; - } - - /** - * Dequeue some work. - */ - @Override - public JobIntentService.GenericWorkItem dequeueWork() { - JobWorkItem work = null; - synchronized (mLock) { - if (mParams == null) { - return null; - } - try { - work = mParams.dequeueWork(); - } catch (SecurityException e) { - Log.e(TAG, Log.getStackTraceString(e)); - } - } - if (work != null) { - work.getIntent().setExtrasClassLoader(mService.getClassLoader()); - return new WrapperWorkItem(work); - } else { - return null; - } - } - } -} diff --git a/core/src/main/java/androidx/core/app/SafeJobIntentService.java b/core/src/main/java/androidx/core/app/SafeJobIntentService.java new file mode 100644 index 000000000..aedc9418b --- /dev/null +++ b/core/src/main/java/androidx/core/app/SafeJobIntentService.java @@ -0,0 +1,118 @@ +package androidx.core.app; + +import android.app.job.JobParameters; +import android.app.job.JobServiceEngine; +import android.app.job.JobWorkItem; +import android.content.Intent; +import android.os.Build; +import android.os.IBinder; +import androidx.annotation.RequiresApi; +import android.util.Log; + + +public abstract class SafeJobIntentService extends JobIntentService { + + @Override + public void onCreate() { + super.onCreate(); + if (Build.VERSION.SDK_INT >= 26) { + mJobImpl = new SafeJobServiceEngineImpl(this); + } + } + + /** + * Implementation of a safe JobServiceEngine for interaction with JobIntentService. + */ + @RequiresApi(26) + static final class SafeJobServiceEngineImpl extends JobServiceEngine + implements JobIntentService.CompatJobEngine { + static final String TAG = "JobServiceEngineImpl"; + + static final boolean DEBUG = false; + + final JobIntentService mService; + final Object mLock = new Object(); + JobParameters mParams; + + final class WrapperWorkItem implements JobIntentService.GenericWorkItem { + final JobWorkItem mJobWork; + + WrapperWorkItem(JobWorkItem jobWork) { + mJobWork = jobWork; + } + + @Override + public Intent getIntent() { + return mJobWork.getIntent(); + } + + @Override + public void complete() { + synchronized (mLock) { + if (mParams != null) { + try { + mParams.completeWork(mJobWork); + } catch (SecurityException e) { + Log.e(TAG, Log.getStackTraceString(e)); + } + } + } + } + } + + SafeJobServiceEngineImpl(JobIntentService service) { + super(service); + mService = service; + } + + @Override + public IBinder compatGetBinder() { + return getBinder(); + } + + @Override + public boolean onStartJob(JobParameters params) { + if (DEBUG) Log.d(TAG, "onStartJob: " + params); + mParams = params; + // We can now start dequeuing work! + mService.ensureProcessorRunningLocked(false); + return true; + } + + @Override + public boolean onStopJob(JobParameters params) { + if (DEBUG) Log.d(TAG, "onStartJob: " + params); + boolean result = mService.doStopCurrentWork(); + synchronized (mLock) { + // Once we return, the job is stopped, so its JobParameters are no + // longer valid and we should not be doing anything with them. + mParams = null; + } + return result; + } + + /** + * Dequeue some work. + */ + @Override + public JobIntentService.GenericWorkItem dequeueWork() { + JobWorkItem work = null; + synchronized (mLock) { + if (mParams == null) { + return null; + } + try { + work = mParams.dequeueWork(); + } catch (SecurityException e) { + Log.e(TAG, Log.getStackTraceString(e)); + } + } + if (work != null) { + work.getIntent().setExtrasClassLoader(mService.getClassLoader()); + return new WrapperWorkItem(work); + } else { + return null; + } + } + } +} -- cgit v1.2.3 From e37bd243640f2dc1f205bd9cd17ec470b6ae596f Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 4 Oct 2019 23:12:54 +0200 Subject: Fixed free build --- core/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/build.gradle b/core/build.gradle index 8e449a379..fe6ed824a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -60,7 +60,7 @@ dependencies { implementation "androidx.preference:preference:1.1.0" annotationProcessor "androidx.annotation:annotation:1.1.0" implementation "android.arch.work:work-runtime:$workManagerVersion" - + implementation "androidx.media:media:1.1.0" implementation "org.apache.commons:commons-lang3:$commonslangVersion" implementation "org.apache.commons:commons-text:$commonstextVersion" implementation "commons-io:commons-io:$commonsioVersion" -- cgit v1.2.3 From 6a37d33b97ae90ebe6329fa6998f057f4f4f4120 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sat, 5 Oct 2019 02:15:26 +0200 Subject: Changed from db backed item speed to preferences backed global value --- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 37 ++----------------- .../core/preferences/PlaybackPreferences.java | 25 +++++++++++++ .../core/preferences/PlaybackSpeedHelper.java | 41 ++++++++++++++++++++++ .../core/preferences/UserPreferences.java | 25 +++---------- .../core/service/PlayerWidgetJobService.java | 4 +-- .../core/service/playback/LocalPSMP.java | 8 ++--- .../core/service/playback/PlaybackService.java | 2 ++ .../danoeh/antennapod/core/storage/DBUpgrader.java | 2 -- .../antennapod/core/storage/PodDBAdapter.java | 8 +---- .../core/util/playback/PlaybackController.java | 3 +- 10 files changed, 83 insertions(+), 72 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackSpeedHelper.java (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 10cf1f5c8..98beb6a85 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -58,7 +58,6 @@ public class FeedMedia extends FeedFile implements Playable { private Date playbackCompletionDate; private int startPosition = -1; private int playedDurationWhenStarted; - private float lastPlaybackSpeed = LAST_PLAYBACK_SPEED_UNSET; // if null: unknown, will be checked private Boolean hasEmbeddedPicture; @@ -95,11 +94,10 @@ public class FeedMedia extends FeedFile implements Playable { private FeedMedia(long id, FeedItem item, int duration, int position, long size, String mime_type, String file_url, String download_url, boolean downloaded, Date playbackCompletionDate, int played_duration, - Boolean hasEmbeddedPicture, long lastPlayedTime, float lastPlaybackSpeed) { + Boolean hasEmbeddedPicture, long lastPlayedTime) { this(id, item, duration, position, size, mime_type, file_url, download_url, downloaded, playbackCompletionDate, played_duration, lastPlayedTime); this.hasEmbeddedPicture = hasEmbeddedPicture; - this.lastPlaybackSpeed = lastPlaybackSpeed; } public static FeedMedia fromCursor(Cursor cursor) { @@ -114,7 +112,6 @@ public class FeedMedia extends FeedFile implements Playable { int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED); int indexPlayedDuration = cursor.getColumnIndex(PodDBAdapter.KEY_PLAYED_DURATION); int indexLastPlayedTime = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_PLAYED_TIME); - int indexLastPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED); long mediaId = cursor.getLong(indexId); Date playbackCompletionDate = null; @@ -149,8 +146,7 @@ public class FeedMedia extends FeedFile implements Playable { playbackCompletionDate, cursor.getInt(indexPlayedDuration), hasEmbeddedPicture, - cursor.getLong(indexLastPlayedTime), - cursor.getFloat(indexLastPlaybackSpeed) + cursor.getLong(indexLastPlayedTime) ); } @@ -630,33 +626,4 @@ public class FeedMedia extends FeedFile implements Playable { } return super.equals(o); } - - public float getLastPlaybackSpeed() { - return lastPlaybackSpeed; - } - - public void updateLastPlaybackSpeed(float newSpeed) { - lastPlaybackSpeed = newSpeed; - DBWriter.setFeedMediaPlaybackInformation(this); - } - - /** - * - * @return the current playback speed for the media, or the feed's configured speed - */ - public float getMediaPlaybackSpeed() { - float playbackSpeed = lastPlaybackSpeed; - - if (playbackSpeed == LAST_PLAYBACK_SPEED_UNSET) { - FeedItem item = getItem(); - if (item != null) { - Feed feed = item.getFeed(); - if (feed != null) { - playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed(); - } - } - } - - return playbackSpeed; - } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java index f2c0c8fe3..192674f0d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java @@ -11,6 +11,8 @@ import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.util.playback.Playable; +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + /** * Provides access to preferences set by the playback service. A private * instance of this class must first be instantiated via createInstance() or @@ -54,6 +56,13 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference */ private static final String PREF_CURRENT_PLAYER_STATUS = "de.danoeh.antennapod.preferences.currentPlayerStatus"; + /** + * A temporary playback speed which overrides the per-feed playback speed for the currently playing + * media. Considered unset if set to SPEED_USE_GLOBAL; + */ + private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED = "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed"; + + /** * Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing. */ @@ -112,6 +121,10 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference return prefs.getInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER); } + public static float getCurrentlyPlayingTemporaryPlaybackSpeed() { + return prefs.getFloat(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED, SPEED_USE_GLOBAL); + } + public static void writeNoMediaPlaying() { SharedPreferences.Editor editor = prefs.edit(); editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); @@ -154,6 +167,18 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference editor.apply(); } + public static void setCurrentlyPlayingTemporaryPlaybackSpeed(float speed) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putFloat(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED, speed); + editor.apply(); + } + + public static void clearCurrentlyPlayingTemporaryPlaybackSpeed() { + SharedPreferences.Editor editor = prefs.edit(); + editor.remove(PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED); + editor.apply(); + } + private static int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) { int playerStatusAsInt; switch (playerStatus) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackSpeedHelper.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackSpeedHelper.java new file mode 100644 index 000000000..d48e41c3b --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackSpeedHelper.java @@ -0,0 +1,41 @@ +package de.danoeh.antennapod.core.preferences; + +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.util.playback.Playable; + +import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; + +public class PlaybackSpeedHelper { + + /** + * Returns the currently configured playback speed for the specified media. + */ + public static float getCurrentPlaybackSpeed(Playable media) { + float playbackSpeed = SPEED_USE_GLOBAL; + MediaType mediaType = null; + + if (media != null) { + mediaType = media.getMediaType(); + playbackSpeed = PlaybackPreferences.getCurrentlyPlayingTemporaryPlaybackSpeed(); + + if (playbackSpeed == SPEED_USE_GLOBAL && media instanceof FeedMedia) { + FeedItem item = ((FeedMedia) media).getItem(); + if (item != null) { + Feed feed = item.getFeed(); + if (feed != null) { + playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed(); + } + } + } + } + + if (playbackSpeed == SPEED_USE_GLOBAL) { + playbackSpeed = UserPreferences.getPlaybackSpeed(mediaType); + } + + return playbackSpeed; + } +} 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 fc4166eb4..a2ce1fdcb 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 @@ -23,7 +23,6 @@ import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; -import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.service.download.ProxyConfig; @@ -32,12 +31,9 @@ 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.core.util.playback.Playable; import de.danoeh.antennapod.core.util.SortOrder; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; -import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; - /** * Provides access to preferences set by the user in the settings screen. A * private instance of this class must first be instantiated via @@ -326,23 +322,12 @@ public class UserPreferences { return prefs.getBoolean(PREF_DELETE_REMOVES_FROM_QUEUE, false); } - public static float getPlaybackSpeed(Playable media) { - float playbackSpeed = SPEED_USE_GLOBAL; - if (media != null) { - if (media instanceof FeedMedia) { - playbackSpeed = ((FeedMedia) media).getMediaPlaybackSpeed(); - } - - if (playbackSpeed == SPEED_USE_GLOBAL && media.getMediaType() == MediaType.VIDEO) { - playbackSpeed = getVideoPlaybackSpeed(); - } - } - - if (playbackSpeed == SPEED_USE_GLOBAL) { - playbackSpeed = getAudioPlaybackSpeed(); + public static float getPlaybackSpeed(MediaType mediaType) { + if (mediaType == MediaType.VIDEO) { + return getVideoPlaybackSpeed(); + } else { + return getAudioPlaybackSpeed(); } - - return playbackSpeed; } private static float getAudioPlaybackSpeed() { diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java index a3eb92c0c..a34a1e2c3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java @@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.glide.ApGlideSettings; -import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper; import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; import de.danoeh.antennapod.core.receiver.PlayerWidget; import de.danoeh.antennapod.core.service.playback.PlaybackService; @@ -147,7 +147,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService { progressString = getProgressString(playbackService.getCurrentPosition(), playbackService.getDuration(), playbackService.getCurrentPlaybackSpeed()); } else { - progressString = getProgressString(media.getPosition(), media.getDuration(), UserPreferences.getPlaybackSpeed(media)); + progressString = getProgressString(media.getPosition(), media.getDuration(), PlaybackSpeedHelper.getCurrentPlaybackSpeed(media)); } if (progressString != null) { 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 c982cb1e9..1584d29d2 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 @@ -26,8 +26,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; -import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.RewindAfterPauseUtils; import de.danoeh.antennapod.core.util.playback.AudioPlayer; @@ -35,8 +35,6 @@ import de.danoeh.antennapod.core.util.playback.IPlayer; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.VideoPlayer; -import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; - /** * Manages the MediaPlayer object of the PlaybackService. */ @@ -245,7 +243,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { try { media.loadMetadata(); callback.onMediaChanged(false); - setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence()); + setPlaybackParams(PlaybackSpeedHelper.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence()); if (stream) { mediaPlayer.setDataSource(media.getStreamUrl()); } else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) { @@ -309,7 +307,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { Log.d(TAG, "Resuming/Starting playback"); acquireWifiLockIfNecessary(); - setPlaybackParams(UserPreferences.getPlaybackSpeed(media), UserPreferences.isSkipSilence()); + setPlaybackParams(PlaybackSpeedHelper.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence()); setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume()); if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) { 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 2eb9c92e4..6fd219ac4 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 @@ -959,6 +959,8 @@ public class PlaybackService extends MediaBrowserServiceCompat { */ private void onPostPlayback(final Playable playable, boolean ended, boolean skipped, boolean playingNext) { + // Reset the temporary playback speed because it only referred to the last playable + PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSpeed(); if (playable == null) { Log.e(TAG, "Cannot do post-playback processing: media was null"); return; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index 41b39deac..9ddebff0f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -294,8 +294,6 @@ class DBUpgrader { if (oldVersion < 1070400) { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_FEED_PLAYBACK_SPEED + " REAL DEFAULT " + SPEED_USE_GLOBAL); - db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA - + " ADD COLUMN " + PodDBAdapter.KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 4de83f548..0b315c247 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -36,7 +36,6 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.util.LongIntMap; -import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; // TODO Remove media column from feeditem table @@ -108,7 +107,6 @@ public class PodDBAdapter { public static final String KEY_INCLUDE_FILTER = "include_filter"; public static final String KEY_EXCLUDE_FILTER = "exclude_filter"; public static final String KEY_FEED_PLAYBACK_SPEED = "feed_playback_speed"; - public static final String KEY_MEDIA_LAST_PLAYBACK_SPEED = "last_playback_speed"; // Table names static final String TABLE_NAME_FEEDS = "Feeds"; @@ -163,8 +161,7 @@ public class PodDBAdapter { + KEY_FEEDITEM + " INTEGER," + KEY_PLAYED_DURATION + " INTEGER," + KEY_HAS_EMBEDDED_PICTURE + " INTEGER," - + KEY_LAST_PLAYED_TIME + " INTEGER," - + KEY_MEDIA_LAST_PLAYBACK_SPEED + " REAL DEFAULT " + LAST_PLAYBACK_SPEED_UNSET + ")"; + + KEY_LAST_PLAYED_TIME + " INTEGER" + ")"; private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE @@ -435,7 +432,6 @@ public class PodDBAdapter { values.put(KEY_FILE_URL, media.getFile_url()); values.put(KEY_HAS_EMBEDDED_PICTURE, media.hasEmbeddedPicture()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); - values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); if (media.getPlaybackCompletionDate() != null) { values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); @@ -461,7 +457,6 @@ public class PodDBAdapter { values.put(KEY_DURATION, media.getDuration()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); values.put(KEY_LAST_PLAYED_TIME, media.getLastPlayedTime()); - values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, media.getLastPlaybackSpeed()); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { @@ -475,7 +470,6 @@ public class PodDBAdapter { values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); // Also reset stored playback speed for media - values.put(KEY_MEDIA_LAST_PLAYBACK_SPEED, LAST_PLAYBACK_SPEED_UNSET); db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { 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 8328ea577..39888428f 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 @@ -29,6 +29,7 @@ import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.preferences.PlaybackSpeedHelper; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer; @@ -714,7 +715,7 @@ public class PlaybackController { if (playbackService != null && canSetPlaybackSpeed()) { return playbackService.getCurrentPlaybackSpeed(); } else { - return UserPreferences.getPlaybackSpeed(getMedia()); + return PlaybackSpeedHelper.getCurrentPlaybackSpeed(getMedia()); } } -- cgit v1.2.3 From 9539908f233e9c014d118f3d317a60a10b3433d9 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sat, 5 Oct 2019 02:18:30 +0200 Subject: Removed unused imports and unnecessary whitespace changes --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java | 4 ---- core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 4 ---- core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java | 1 - 3 files changed, 9 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 0f9ca0445..ecd34acff 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -15,13 +15,10 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.asynctask.ImageResource; -import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.ShownotesProvider; -import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; - /** * Data Object for a XML message * @@ -487,5 +484,4 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } - } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 98beb6a85..b1c2ff15a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -26,13 +26,9 @@ import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.util.playback.Playable; -import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; - public class FeedMedia extends FeedFile implements Playable { private static final String TAG = "FeedMedia"; - public static final float LAST_PLAYBACK_SPEED_UNSET = SPEED_USE_GLOBAL; - public static final int FEEDFILETYPE_FEEDMEDIA = 2; public static final int PLAYABLE_TYPE_FEEDMEDIA = 1; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java index 9ddebff0f..575b8d2ac 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java @@ -8,7 +8,6 @@ import android.util.Log; import de.danoeh.antennapod.core.feed.FeedItem; -import static de.danoeh.antennapod.core.feed.FeedMedia.LAST_PLAYBACK_SPEED_UNSET; import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL; class DBUpgrader { -- cgit v1.2.3 From cb942b646a2fab715a1a873db5921541a8b2e1b5 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Oct 2019 21:05:25 +0200 Subject: Added 0.75 to default playback speed list Users on Google Play seem to be confused that they can not select a playback speed lower than 1x anymore. The reason is that they just use the preference dialog and that dialog only displays the range that is selected for the button. --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') 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 ef3bc2d1c..4a1d6f119 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 @@ -706,7 +706,7 @@ public class UserPreferences { String[] selectedSpeeds = null; // If this preference hasn't been set yet, return the default options if (valueFromPrefs == null) { - selectedSpeeds = new String[] { "1.00", "1.25", "1.50", "1.75", "2.00" }; + selectedSpeeds = new String[] { "0.75", "1.00", "1.25", "1.50", "1.75", "2.00" }; } else { try { JSONArray jsonArray = new JSONArray(valueFromPrefs); -- cgit v1.2.3 From 53ea702772817693193706c488c3d1777fbb4704 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Oct 2019 21:58:25 +0200 Subject: Showing progress in notification --- .../core/service/playback/PlaybackService.java | 36 +++++++++++----------- .../PlaybackServiceNotificationBuilder.java | 21 ++++++++++--- 2 files changed, 35 insertions(+), 22 deletions(-) (limited to 'core') 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 2eb9c92e4..843dd0843 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 @@ -216,6 +216,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { private PlaybackServiceFlavorHelper flavorHelper; private PlaybackServiceStateManager stateManager; private Disposable positionEventTimer; + private PlaybackServiceNotificationBuilder notificationBuilder; /** * Used for Lollipop notifications, Android Wear, and Android Auto. @@ -271,7 +272,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { isRunning = true; stateManager = new PlaybackServiceStateManager(this); - PlaybackServiceNotificationBuilder notificationBuilder = new PlaybackServiceNotificationBuilder(this); + notificationBuilder = new PlaybackServiceNotificationBuilder(this); stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); registerReceiver(autoStateUpdated, new IntentFilter("com.google.android.gms.car.media.STATUS")); @@ -444,20 +445,9 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); - Log.d(TAG, "OnStartCommand called"); - if (!stateManager.isInForeground()) { - PlaybackServiceNotificationBuilder notificationBuilder = new PlaybackServiceNotificationBuilder(this); - if (mediaPlayer != null && getPlayable() != null) { - notificationBuilder.addMetadata(getPlayable(), mediaSession.getSessionToken(), getStatus(), isCasting); - if (notificationBuilder.isIconCached(getPlayable())) { - notificationBuilder.loadIcon(getPlayable()); - } - } - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); - } - + stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.cancel(NOTIFICATION_ID_STREAMING); @@ -1217,9 +1207,12 @@ public class PlaybackService extends MediaBrowserServiceCompat { return; } PlayerStatus playerStatus = mediaPlayer.getPlayerStatus(); - PlaybackServiceNotificationBuilder notificationBuilder = - new PlaybackServiceNotificationBuilder(PlaybackService.this); - notificationBuilder.addMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); + notificationBuilder = new PlaybackServiceNotificationBuilder(PlaybackService.this); + notificationBuilder.setMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); + + if (Build.VERSION.SDK_INT < 29) { + notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); + } if (!notificationBuilder.isIconCached(playable)) { // To make sure that the notification is shown instantly @@ -1592,8 +1585,15 @@ public class PlaybackService extends MediaBrowserServiceCompat { Log.d(TAG, "Setting up position observer"); positionEventTimer = Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> - EventBus.getDefault().post(new PlaybackPositionEvent(getCurrentPosition(), getDuration()))); + .subscribe(number -> { + EventBus.getDefault().post(new PlaybackPositionEvent(getCurrentPosition(), getDuration())); + if (Build.VERSION.SDK_INT < 29) { + notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); + NotificationManager notificationManager = (NotificationManager) + getSystemService(NOTIFICATION_SERVICE); + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + } + }); } private void cancelPositionObserver() { 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 b809ad659..06bda0739 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 @@ -10,12 +10,12 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; import android.os.Build; -import androidx.annotation.NonNull; -import androidx.core.app.NotificationCompat; -import androidx.core.content.ContextCompat; import android.support.v4.media.session.MediaSessionCompat; import android.util.Log; import android.view.KeyEvent; +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.core.ClientConfig; @@ -23,7 +23,9 @@ import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; +import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.IntList; +import de.danoeh.antennapod.core.util.TimeSpeedConverter; import de.danoeh.antennapod.core.util.gui.NotificationUtils; import de.danoeh.antennapod.core.util.playback.Playable; @@ -32,6 +34,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build private static Bitmap defaultIcon = null; private Context context; + private boolean actionsInitialized = false; public PlaybackServiceNotificationBuilder(@NonNull Context context) { super(context, NotificationUtils.CHANNEL_ID_PLAYING); @@ -50,9 +53,10 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build setWhen(0); // we don't need the time setSmallIcon(smallIcon); setPriority(NotificationCompat.PRIORITY_MIN); + setOnlyAlertOnce(true); } - public void addMetadata(Playable playable, MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { + public void setMetadata(Playable playable, MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { Log.v(TAG, "notificationSetupTask: playerStatus=" + playerStatus); setContentTitle(playable.getFeedTitle()); setContentText(playable.getEpisodeTitle()); @@ -62,6 +66,11 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build setColor(NotificationCompat.COLOR_DEFAULT); } + public void updatePosition(int position,float speed) { + TimeSpeedConverter converter = new TimeSpeedConverter(speed); + setSubText(Converter.getDurationStringLong(converter.convert(position))); + } + public boolean isIconCached(Playable playable) { int iconSize = context.getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width); try { @@ -131,6 +140,10 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build } private void addActions(MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { + if (actionsInitialized) { + throw new IllegalStateException("Notification actions must not be added multiple times"); + } + actionsInitialized = true; IntList compactActionList = new IntList(); int numActions = 0; // we start and 0 and then increment by 1 for each call to addAction -- cgit v1.2.3 From b081e320e3e130062ef89f4af9454765b0af54a3 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Oct 2019 23:03:33 +0200 Subject: Fixed downmixing if service is not bound --- .../antennapod/core/util/playback/PlaybackController.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'core') 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 5ce0e715e..d055098a1 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 @@ -502,16 +502,6 @@ public class PlaybackController { PlaybackServiceMediaPlayer.PSMPInfo info = playbackService.getPSMPInfo(); status = info.playerStatus; media = info.playable; - /* - if (media == null) { - Log.w(TAG, - "PlaybackService has no media object. Trying to restore last played media."); - Intent serviceIntent = getPlayLastPlayedMediaIntent(); - if (serviceIntent != null) { - ContextCompat.startForegroundService(activity, serviceIntent); - } - } - */ onServiceQueried(); setupGUI(); @@ -719,7 +709,8 @@ public class PlaybackController { } public boolean canDownmix() { - return playbackService != null && playbackService.canDownmix(); + return (playbackService != null && playbackService.canDownmix()) + || UserPreferences.useSonic(); } public void setDownmix(boolean enable) { -- cgit v1.2.3 From cf3e8107f31732cfa30778e8656e1d51399e26d4 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Oct 2019 23:32:19 +0200 Subject: Syntax cleanup Mostly replaced tabs with spaces --- .../core/util/playback/ExternalMedia.java | 457 +++++++++++---------- 1 file changed, 230 insertions(+), 227 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java index 9b644c3ba..e3d20e6df 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java @@ -6,245 +6,248 @@ import android.content.SharedPreferences.Editor; import android.media.MediaMetadataRetriever; import android.os.Parcel; import android.os.Parcelable; - -import java.util.List; -import java.util.concurrent.Callable; - import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.util.ChapterUtils; +import java.util.List; +import java.util.concurrent.Callable; /** Represents a media file that is stored on the local storage device. */ public class ExternalMedia implements Playable { + public static final int PLAYABLE_TYPE_EXTERNAL_MEDIA = 2; + public static final String PREF_SOURCE_URL = "ExternalMedia.PrefSourceUrl"; + public static final String PREF_POSITION = "ExternalMedia.PrefPosition"; + public static final String PREF_MEDIA_TYPE = "ExternalMedia.PrefMediaType"; + public static final String PREF_LAST_PLAYED_TIME = "ExternalMedia.PrefLastPlayedTime"; + + private final String source; + private String episodeTitle; + private String feedTitle; + private MediaType mediaType; + private List chapters; + private int duration; + private int position; + private long lastPlayedTime; + + /** + * Creates a new playable for files on the sd card. + * @param source File path of the file + * @param mediaType Type of the file + */ + public ExternalMedia(String source, MediaType mediaType) { + super(); + this.source = source; + this.mediaType = mediaType; + } - public static final int PLAYABLE_TYPE_EXTERNAL_MEDIA = 2; - public static final String PREF_SOURCE_URL = "ExternalMedia.PrefSourceUrl"; - public static final String PREF_POSITION = "ExternalMedia.PrefPosition"; - public static final String PREF_MEDIA_TYPE = "ExternalMedia.PrefMediaType"; - public static final String PREF_LAST_PLAYED_TIME = "ExternalMedia.PrefLastPlayedTime"; - - private final String source; - - private String episodeTitle; - private String feedTitle; - private MediaType mediaType = MediaType.AUDIO; - private List chapters; - private int duration; - private int position; - private long lastPlayedTime; - - public ExternalMedia(String source, MediaType mediaType) { - super(); - this.source = source; - this.mediaType = mediaType; - } - - public ExternalMedia(String source, MediaType mediaType, int position, long lastPlayedTime) { - this(source, mediaType); - this.position = position; - this.lastPlayedTime = lastPlayedTime; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(source); - dest.writeString(mediaType.toString()); - dest.writeInt(position); - dest.writeLong(lastPlayedTime); - } - - @Override - public void writeToPreferences(Editor prefEditor) { - prefEditor.putString(PREF_SOURCE_URL, source); - prefEditor.putString(PREF_MEDIA_TYPE, mediaType.toString()); - prefEditor.putInt(PREF_POSITION, position); - prefEditor.putLong(PREF_LAST_PLAYED_TIME, lastPlayedTime); - } - - @Override - public void loadMetadata() throws PlayableException { - MediaMetadataRetriever mmr = new MediaMetadataRetriever(); - try { - mmr.setDataSource(source); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - throw new PlayableException( - "IllegalArgumentException when setting up MediaMetadataReceiver"); - } catch (RuntimeException e) { - // http://code.google.com/p/android/issues/detail?id=39770 - e.printStackTrace(); - throw new PlayableException( - "RuntimeException when setting up MediaMetadataRetriever"); - } - episodeTitle = mmr - .extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); - feedTitle = mmr - .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); + /** + * Creates a new playable for files on the sd card. + * @param source File path of the file + * @param mediaType Type of the file + * @param position Position to start from + * @param lastPlayedTime Timestamp when it was played last + */ + public ExternalMedia(String source, MediaType mediaType, int position, long lastPlayedTime) { + this(source, mediaType); + this.position = position; + this.lastPlayedTime = lastPlayedTime; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(source); + dest.writeString(mediaType.toString()); + dest.writeInt(position); + dest.writeLong(lastPlayedTime); + } + + @Override + public void writeToPreferences(Editor prefEditor) { + prefEditor.putString(PREF_SOURCE_URL, source); + prefEditor.putString(PREF_MEDIA_TYPE, mediaType.toString()); + prefEditor.putInt(PREF_POSITION, position); + prefEditor.putLong(PREF_LAST_PLAYED_TIME, lastPlayedTime); + } + + @Override + public void loadMetadata() throws PlayableException { + MediaMetadataRetriever mmr = new MediaMetadataRetriever(); try { - duration = Integer.parseInt(mmr - .extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); + mmr.setDataSource(source); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + throw new PlayableException("IllegalArgumentException when setting up MediaMetadataReceiver"); + } catch (RuntimeException e) { + // http://code.google.com/p/android/issues/detail?id=39770 + e.printStackTrace(); + throw new PlayableException("RuntimeException when setting up MediaMetadataRetriever"); + } + episodeTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); + feedTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); + try { + duration = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); } catch (NumberFormatException e) { e.printStackTrace(); throw new PlayableException("NumberFormatException when reading duration of media file"); } - ChapterUtils.loadChaptersFromFileUrl(this); - } - - @Override - public void loadChapterMarks() { - - } - - @Override - public String getEpisodeTitle() { - return episodeTitle; - } - - @Override - public Callable loadShownotes() { - return () -> ""; - } - - @Override - public List getChapters() { - return chapters; - } - - @Override - public String getWebsiteLink() { - return null; - } - - @Override - public String getPaymentLink() { - return null; - } - - @Override - public String getFeedTitle() { - return feedTitle; - } - - @Override - public Object getIdentifier() { - return source; - } - - @Override - public int getDuration() { - return duration; - } - - @Override - public int getPosition() { - return position; - } - - @Override - public long getLastPlayedTime() { - return lastPlayedTime; - } - - @Override - public MediaType getMediaType() { - return mediaType; - } - - @Override - public String getLocalMediaUrl() { - return source; - } - - @Override - public String getStreamUrl() { - return null; - } - - @Override - public boolean localFileAvailable() { - return true; - } - - @Override - public boolean streamAvailable() { - return false; - } - - @Override - public void saveCurrentPosition(SharedPreferences pref, int newPosition, long timestamp) { - SharedPreferences.Editor editor = pref.edit(); - editor.putInt(PREF_POSITION, newPosition); - editor.putLong(PREF_LAST_PLAYED_TIME, timestamp); - position = newPosition; - lastPlayedTime = timestamp; - editor.apply(); - } - - @Override - public void setPosition(int newPosition) { - position = newPosition; - } - - @Override - public void setDuration(int newDuration) { - duration = newDuration; - } - - @Override - public void setLastPlayedTime(long lastPlayedTime) { - this.lastPlayedTime = lastPlayedTime; - } - - @Override - public void onPlaybackStart() { - - } - - @Override - public void onPlaybackPause(Context context) { - - } - - @Override - public void onPlaybackCompleted(Context context) { - - } - - @Override - public int getPlayableType() { - return PLAYABLE_TYPE_EXTERNAL_MEDIA; - } - - @Override - public void setChapters(List chapters) { - this.chapters = chapters; - } - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - public ExternalMedia createFromParcel(Parcel in) { - String source = in.readString(); - MediaType type = MediaType.valueOf(in.readString()); - int position = 0; - if (in.dataAvail() > 0) { - position = in.readInt(); - } - long lastPlayedTime = 0; - if (in.dataAvail() > 0) { - lastPlayedTime = in.readLong(); - } - - return new ExternalMedia(source, type, position, lastPlayedTime); - } - - public ExternalMedia[] newArray(int size) { - return new ExternalMedia[size]; - } - }; + ChapterUtils.loadChaptersFromFileUrl(this); + } + + @Override + public void loadChapterMarks() { + + } + + @Override + public String getEpisodeTitle() { + return episodeTitle; + } + + @Override + public Callable loadShownotes() { + return () -> ""; + } + + @Override + public List getChapters() { + return chapters; + } + + @Override + public String getWebsiteLink() { + return null; + } + + @Override + public String getPaymentLink() { + return null; + } + + @Override + public String getFeedTitle() { + return feedTitle; + } + + @Override + public Object getIdentifier() { + return source; + } + + @Override + public int getDuration() { + return duration; + } + + @Override + public int getPosition() { + return position; + } + + @Override + public long getLastPlayedTime() { + return lastPlayedTime; + } + + @Override + public MediaType getMediaType() { + return mediaType; + } + + @Override + public String getLocalMediaUrl() { + return source; + } + + @Override + public String getStreamUrl() { + return null; + } + + @Override + public boolean localFileAvailable() { + return true; + } + + @Override + public boolean streamAvailable() { + return false; + } + + @Override + public void saveCurrentPosition(SharedPreferences pref, int newPosition, long timestamp) { + SharedPreferences.Editor editor = pref.edit(); + editor.putInt(PREF_POSITION, newPosition); + editor.putLong(PREF_LAST_PLAYED_TIME, timestamp); + position = newPosition; + lastPlayedTime = timestamp; + editor.apply(); + } + + @Override + public void setPosition(int newPosition) { + position = newPosition; + } + + @Override + public void setDuration(int newDuration) { + duration = newDuration; + } + + @Override + public void setLastPlayedTime(long lastPlayedTime) { + this.lastPlayedTime = lastPlayedTime; + } + + @Override + public void onPlaybackStart() { + + } + + @Override + public void onPlaybackPause(Context context) { + + } + + @Override + public void onPlaybackCompleted(Context context) { + + } + + @Override + public int getPlayableType() { + return PLAYABLE_TYPE_EXTERNAL_MEDIA; + } + + @Override + public void setChapters(List chapters) { + this.chapters = chapters; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public ExternalMedia createFromParcel(Parcel in) { + String source = in.readString(); + MediaType type = MediaType.valueOf(in.readString()); + int position = 0; + if (in.dataAvail() > 0) { + position = in.readInt(); + } + long lastPlayedTime = 0; + if (in.dataAvail() > 0) { + lastPlayedTime = in.readLong(); + } + + return new ExternalMedia(source, type, position, lastPlayedTime); + } + + public ExternalMedia[] newArray(int size) { + return new ExternalMedia[size]; + } + }; @Override public String getImageLocation() { -- cgit v1.2.3 From e6ae4c23f0d79fd700230712183014950b35f442 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Oct 2019 23:48:50 +0200 Subject: Showing file name if title extraction fails --- .../java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java index e3d20e6df..b55091009 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java @@ -11,6 +11,7 @@ import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.util.ChapterUtils; import java.util.List; import java.util.concurrent.Callable; +import org.apache.commons.io.FilenameUtils; /** Represents a media file that is stored on the local storage device. */ public class ExternalMedia implements Playable { @@ -88,6 +89,9 @@ public class ExternalMedia implements Playable { throw new PlayableException("RuntimeException when setting up MediaMetadataRetriever"); } episodeTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); + if (episodeTitle == null) { + episodeTitle = FilenameUtils.getName(source); + } feedTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); try { duration = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); -- cgit v1.2.3 From 69e51c148e601738b9faffbc76f76923431b8138 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 6 Oct 2019 09:11:42 +0200 Subject: Moved notification setup out of Thread Fixes wrong thread for media player. Also, might fix race conditions. --- .../core/service/playback/PlaybackService.java | 77 ++++++++++------------ 1 file changed, 35 insertions(+), 42 deletions(-) (limited to 'core') 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 843dd0843..899e0f7b1 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 @@ -1187,59 +1187,52 @@ public class PlaybackService extends MediaBrowserServiceCompat { if (notificationSetupThread != null) { notificationSetupThread.interrupt(); } - if (playable == null) { - Log.d(TAG, "setupNotification: playable is null" + Log.getStackTraceString(new Exception())); + if (playable == null || mediaPlayer == null) { + Log.d(TAG, "setupNotification: playable=" + playable); + Log.d(TAG, "setupNotification: mediaPlayer=" + mediaPlayer); if (!stateManager.hasReceivedValidStartCommand()) { stateManager.stopService(); } return; } - Runnable notificationSetupTask = new Runnable() { - @Override - public void run() { - Log.d(TAG, "Starting background work"); - if (mediaPlayer == null) { - Log.d(TAG, "notificationSetupTask: mediaPlayer is null"); - if (!stateManager.hasReceivedValidStartCommand()) { - stateManager.stopService(); - } - return; - } - PlayerStatus playerStatus = mediaPlayer.getPlayerStatus(); - notificationBuilder = new PlaybackServiceNotificationBuilder(PlaybackService.this); - notificationBuilder.setMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); + PlayerStatus playerStatus = mediaPlayer.getPlayerStatus(); + notificationBuilder = new PlaybackServiceNotificationBuilder(PlaybackService.this); + notificationBuilder.setMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); + if (Build.VERSION.SDK_INT < 29) { + notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); + } - if (Build.VERSION.SDK_INT < 29) { - notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); - } + if (notificationBuilder.isIconCached(playable)) { + notificationBuilder.loadIcon(playable); + startForegroundIfPlaying(playerStatus); + } else { + // To make sure that the notification is shown instantly + notificationBuilder.loadDefaultIcon(); + stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); - if (!notificationBuilder.isIconCached(playable)) { - // To make sure that the notification is shown instantly - notificationBuilder.loadDefaultIcon(); - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); - } + notificationSetupThread = new Thread(() -> { + Log.d(TAG, "Loading notification icon"); notificationBuilder.loadIcon(playable); - - if (!Thread.currentThread().isInterrupted() && stateManager.hasReceivedValidStartCommand()) { - Notification notification = notificationBuilder.build(); - - if (playerStatus == PlayerStatus.PLAYING || - playerStatus == PlayerStatus.PREPARING || - playerStatus == PlayerStatus.SEEKING || - isCasting) { - stateManager.startForeground(NOTIFICATION_ID, notification); - } else { - stateManager.stopForeground(false); - NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - mNotificationManager.notify(NOTIFICATION_ID, notification); - } - Log.d(TAG, "Notification set up"); + if (!Thread.currentThread().isInterrupted()) { + startForegroundIfPlaying(playerStatus); } + }); + notificationSetupThread.start(); + } + } + + private void startForegroundIfPlaying(@NonNull PlayerStatus status) { + if (stateManager.hasReceivedValidStartCommand()) { + if (isCasting || status == PlayerStatus.PLAYING || status == PlayerStatus.PREPARING + || status == PlayerStatus.SEEKING) { + stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); + } else { + stateManager.stopForeground(false); + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } - }; - notificationSetupThread = new Thread(notificationSetupTask); - notificationSetupThread.start(); + } } /** -- cgit v1.2.3 From cab40dc4660499c23a829030dd313c3347d5b0aa Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sun, 6 Oct 2019 10:04:05 +0200 Subject: Removed unnecessary comment --- core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java | 1 - 1 file changed, 1 deletion(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 0b315c247..5feedcebf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -469,7 +469,6 @@ public class PodDBAdapter { ContentValues values = new ContentValues(); values.put(KEY_PLAYBACK_COMPLETION_DATE, media.getPlaybackCompletionDate().getTime()); values.put(KEY_PLAYED_DURATION, media.getPlayedDuration()); - // Also reset stored playback speed for media db.update(TABLE_NAME_FEED_MEDIA, values, KEY_ID + "=?", new String[]{String.valueOf(media.getId())}); } else { -- cgit v1.2.3 From b2d9455d6c8ac719b1c6a21061ce83848bf89ddb Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 6 Oct 2019 10:04:06 +0200 Subject: Caching icon manually to prevent long locks --- .../core/service/playback/PlaybackService.java | 16 +-- .../PlaybackServiceNotificationBuilder.java | 139 +++++++++++---------- 2 files changed, 80 insertions(+), 75 deletions(-) (limited to 'core') 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 899e0f7b1..b00b2c240 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 @@ -1197,23 +1197,15 @@ public class PlaybackService extends MediaBrowserServiceCompat { } PlayerStatus playerStatus = mediaPlayer.getPlayerStatus(); - notificationBuilder = new PlaybackServiceNotificationBuilder(PlaybackService.this); notificationBuilder.setMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); - if (Build.VERSION.SDK_INT < 29) { - notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); - } + notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); - if (notificationBuilder.isIconCached(playable)) { - notificationBuilder.loadIcon(playable); - startForegroundIfPlaying(playerStatus); - } else { - // To make sure that the notification is shown instantly - notificationBuilder.loadDefaultIcon(); - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); + startForegroundIfPlaying(playerStatus); + if (!notificationBuilder.isIconCached()) { notificationSetupThread = new Thread(() -> { Log.d(TAG, "Loading notification icon"); - notificationBuilder.loadIcon(playable); + notificationBuilder.loadIcon(); if (!Thread.currentThread().isInterrupted()) { startForegroundIfPlaying(playerStatus); } 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 06bda0739..b277a6bc2 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 @@ -1,6 +1,7 @@ package de.danoeh.antennapod.core.service.playback; import android.annotation.TargetApi; +import android.app.Notification; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -18,7 +19,6 @@ import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; -import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; @@ -29,68 +29,49 @@ import de.danoeh.antennapod.core.util.TimeSpeedConverter; import de.danoeh.antennapod.core.util.gui.NotificationUtils; import de.danoeh.antennapod.core.util.playback.Playable; -public class PlaybackServiceNotificationBuilder extends NotificationCompat.Builder { +public class PlaybackServiceNotificationBuilder { private static final String TAG = "PlaybackSrvNotification"; private static Bitmap defaultIcon = null; private Context context; - private boolean actionsInitialized = false; + private Playable playable; + private MediaSessionCompat.Token mediaSessionToken; + private PlayerStatus playerStatus; + private boolean isCasting; + private Bitmap icon; + private String position; public PlaybackServiceNotificationBuilder(@NonNull Context context) { - super(context, NotificationUtils.CHANNEL_ID_PLAYING); this.context = context; + } - final int smallIcon = ClientConfig.playbackServiceCallbacks.getNotificationIconResource(context); - - final PendingIntent pIntent = PendingIntent.getActivity(context, 0, - PlaybackService.getPlayerActivityIntent(context), - PendingIntent.FLAG_UPDATE_CURRENT); + public void setMetadata(Playable playable, MediaSessionCompat.Token mediaSessionToken, + PlayerStatus playerStatus, boolean isCasting) { - setContentTitle(context.getString(R.string.app_name)); - setContentText("Service is running"); // Just in case the notification is not updated (should not occur) - setOngoing(false); - setContentIntent(pIntent); - setWhen(0); // we don't need the time - setSmallIcon(smallIcon); - setPriority(NotificationCompat.PRIORITY_MIN); - setOnlyAlertOnce(true); + if (playable != this.playable) { + clearCache(); + } + this.playable = playable; + this.mediaSessionToken = mediaSessionToken; + this.playerStatus = playerStatus; + this.isCasting = isCasting; } - public void setMetadata(Playable playable, MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { - Log.v(TAG, "notificationSetupTask: playerStatus=" + playerStatus); - setContentTitle(playable.getFeedTitle()); - setContentText(playable.getEpisodeTitle()); - setPriority(UserPreferences.getNotifyPriority()); - addActions(mediaSessionToken, playerStatus, isCasting); - setVisibility(NotificationCompat.VISIBILITY_PUBLIC); - setColor(NotificationCompat.COLOR_DEFAULT); + private void clearCache() { + this.icon = null; + this.position = null; } public void updatePosition(int position,float speed) { TimeSpeedConverter converter = new TimeSpeedConverter(speed); - setSubText(Converter.getDurationStringLong(converter.convert(position))); + this.position = Converter.getDurationStringLong(converter.convert(position)); } - public boolean isIconCached(Playable playable) { - int iconSize = context.getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width); - try { - Bitmap icon = Glide.with(context) - .asBitmap() - .load(playable.getImageLocation()) - .apply(RequestOptions.diskCacheStrategyOf(ApGlideSettings.AP_DISK_CACHE_STRATEGY)) - .apply(new RequestOptions() - .centerCrop() - .onlyRetrieveFromCache(true)) - .submit(iconSize, iconSize) - .get(); - return icon != null; - } catch (Throwable tr) { - return false; - } + public boolean isIconCached() { + return icon != null; } - public void loadIcon(Playable playable) { - Bitmap icon = null; + public void loadIcon() { int iconSize = context.getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width); try { icon = Glide.with(context) @@ -103,19 +84,13 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build } catch (Throwable tr) { Log.e(TAG, "Error loading the media icon for the notification", tr); } - - if (icon == null) { - loadDefaultIcon(); - } else { - setLargeIcon(icon); - } } - public void loadDefaultIcon() { + private Bitmap getDefaultIcon() { if (defaultIcon == null) { defaultIcon = getBitmap(context, R.drawable.notification_default_large_icon); } - setLargeIcon(defaultIcon); + return defaultIcon; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @@ -139,11 +114,47 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build } } - private void addActions(MediaSessionCompat.Token mediaSessionToken, PlayerStatus playerStatus, boolean isCasting) { - if (actionsInitialized) { - throw new IllegalStateException("Notification actions must not be added multiple times"); + public Notification build() { + NotificationCompat.Builder notification = new NotificationCompat.Builder(context, + NotificationUtils.CHANNEL_ID_PLAYING); + + if (playable != null) { + notification.setContentTitle(playable.getFeedTitle()); + notification.setContentText(playable.getEpisodeTitle()); + addActions(notification, mediaSessionToken, playerStatus, isCasting); + + if (icon != null) { + notification.setLargeIcon(icon); + } else { + notification.setLargeIcon(getDefaultIcon()); + } + + if (Build.VERSION.SDK_INT < 29) { + notification.setSubText(position); + } + } else { + notification.setContentTitle(context.getString(R.string.app_name)); + notification.setContentText("Service is running"); } - actionsInitialized = true; + + notification.setContentIntent(getPlayerActivityPendingIntent()); + notification.setWhen(0); + notification.setSmallIcon(R.drawable.ic_antenna); + notification.setOngoing(false); + notification.setOnlyAlertOnce(true); + notification.setPriority(UserPreferences.getNotifyPriority()); + notification.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); + notification.setColor(NotificationCompat.COLOR_DEFAULT); + return notification.build(); + } + + private PendingIntent getPlayerActivityPendingIntent() { + return PendingIntent.getActivity(context, 0, PlaybackService.getPlayerActivityIntent(context), + PendingIntent.FLAG_UPDATE_CURRENT); + } + + private void addActions(NotificationCompat.Builder notification, MediaSessionCompat.Token mediaSessionToken, + PlayerStatus playerStatus, boolean isCasting) { IntList compactActionList = new IntList(); int numActions = 0; // we start and 0 and then increment by 1 for each call to addAction @@ -153,7 +164,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build stopCastingIntent.putExtra(PlaybackService.EXTRA_CAST_DISCONNECT, true); PendingIntent stopCastingPendingIntent = PendingIntent.getService(context, numActions, stopCastingIntent, PendingIntent.FLAG_UPDATE_CURRENT); - addAction(R.drawable.ic_notification_cast_off, + notification.addAction(R.drawable.ic_notification_cast_off, context.getString(R.string.cast_disconnect_label), stopCastingPendingIntent); numActions++; @@ -162,7 +173,8 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build // always let them rewind PendingIntent rewindButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_REWIND, numActions); - addAction(R.drawable.ic_notification_fast_rewind, context.getString(R.string.rewind_label), rewindButtonPendingIntent); + notification.addAction(R.drawable.ic_notification_fast_rewind, context.getString(R.string.rewind_label), + rewindButtonPendingIntent); if (UserPreferences.showRewindOnCompactNotification()) { compactActionList.add(numActions); } @@ -171,14 +183,14 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build if (playerStatus == PlayerStatus.PLAYING) { PendingIntent pauseButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_PAUSE, numActions); - addAction(R.drawable.ic_notification_pause, //pause action + notification.addAction(R.drawable.ic_notification_pause, //pause action context.getString(R.string.pause_label), pauseButtonPendingIntent); compactActionList.add(numActions++); } else { PendingIntent playButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_PLAY, numActions); - addAction(R.drawable.ic_notification_play, //play action + notification.addAction(R.drawable.ic_notification_play, //play action context.getString(R.string.play_label), playButtonPendingIntent); compactActionList.add(numActions++); @@ -187,7 +199,8 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build // ff follows play, then we have skip (if it's present) PendingIntent ffButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_FAST_FORWARD, numActions); - addAction(R.drawable.ic_notification_fast_forward, context.getString(R.string.fast_forward_label), ffButtonPendingIntent); + notification.addAction(R.drawable.ic_notification_fast_forward, context.getString(R.string.fast_forward_label), + ffButtonPendingIntent); if (UserPreferences.showFastForwardOnCompactNotification()) { compactActionList.add(numActions); } @@ -196,7 +209,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build if (UserPreferences.isFollowQueue()) { PendingIntent skipButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_NEXT, numActions); - addAction(R.drawable.ic_notification_skip, + notification.addAction(R.drawable.ic_notification_skip, context.getString(R.string.skip_episode_label), skipButtonPendingIntent); if (UserPreferences.showSkipOnCompactNotification()) { @@ -207,7 +220,7 @@ public class PlaybackServiceNotificationBuilder extends NotificationCompat.Build PendingIntent stopButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_STOP, numActions); - setStyle(new androidx.media.app.NotificationCompat.MediaStyle() + notification.setStyle(new androidx.media.app.NotificationCompat.MediaStyle() .setMediaSession(mediaSessionToken) .setShowActionsInCompactView(compactActionList.toArray()) .setShowCancelButton(true) -- cgit v1.2.3 From 138c29df0f9b0c8bcbfbcd74a31671b04cc06ff0 Mon Sep 17 00:00:00 2001 From: Jonas Kalderstam Date: Sun, 6 Oct 2019 10:06:11 +0200 Subject: Removed potentially misleading comment --- .../java/de/danoeh/antennapod/core/service/playback/PlaybackService.java | 1 - 1 file changed, 1 deletion(-) (limited to 'core') 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 6fd219ac4..848eacbd6 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 @@ -959,7 +959,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { */ private void onPostPlayback(final Playable playable, boolean ended, boolean skipped, boolean playingNext) { - // Reset the temporary playback speed because it only referred to the last playable PlaybackPreferences.clearCurrentlyPlayingTemporaryPlaybackSpeed(); if (playable == null) { Log.e(TAG, "Cannot do post-playback processing: media was null"); -- cgit v1.2.3 From 6f809b47e6a3d2929eaf31830bc0aa2b8abd87bb Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 6 Oct 2019 12:44:43 +0200 Subject: Speeding up notification update startForeground() is significantly slower than just notify() --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'core') 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 b00b2c240..5ae660fe1 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 @@ -1184,6 +1184,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { } private synchronized void setupNotification(final Playable playable) { + Log.d(TAG, "setupNotification"); if (notificationSetupThread != null) { notificationSetupThread.interrupt(); } @@ -1200,6 +1201,9 @@ public class PlaybackService extends MediaBrowserServiceCompat { notificationBuilder.setMetadata(playable, mediaSession.getSessionToken(), playerStatus, isCasting); notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); + Log.d(TAG, "setupNotification: startForeground" + playerStatus); + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); startForegroundIfPlaying(playerStatus); if (!notificationBuilder.isIconCached()) { @@ -1207,7 +1211,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { Log.d(TAG, "Loading notification icon"); notificationBuilder.loadIcon(); if (!Thread.currentThread().isInterrupted()) { - startForegroundIfPlaying(playerStatus); + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } }); notificationSetupThread.start(); -- cgit v1.2.3 From c1d81408c1073cfb1657b265f7b0229dbf45c380 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 9 Oct 2019 12:26:11 +0200 Subject: Fixed notification reappearing if continuous playback is disabled --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'core') 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 f155e578e..a9967ae07 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 @@ -838,6 +838,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public void onPlaybackPause(Playable playable, int position) { taskManager.cancelPositionSaver(); + cancelPositionObserver(); saveCurrentPosition(position == PlaybackServiceMediaPlayer.INVALID_TIME || playable == null, playable, position); taskManager.cancelWidgetUpdater(); @@ -914,6 +915,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { Log.d(TAG, "Playback ended"); if (stopPlaying) { taskManager.cancelPositionSaver(); + cancelPositionObserver(); PlaybackPreferences.writeNoMediaPlaying(); if (!isCasting) { stateManager.stopForeground(true); -- cgit v1.2.3 From a59fd671787a5a4d9e0320c2b7f65853791a9e04 Mon Sep 17 00:00:00 2001 From: egsavage Date: Sun, 13 Oct 2019 20:58:28 -0400 Subject: Issue #2381 - restart sleep timer on play --- .../core/service/playback/PlaybackService.java | 3 +++ .../service/playback/PlaybackServiceTaskManager.java | 18 +++++++++++++++--- .../core/service/playback/ShakeListener.java | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) (limited to 'core') 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 a9967ae07..5002fb913 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 @@ -827,6 +827,9 @@ public class PlaybackService extends MediaBrowserServiceCompat { @Override public void onPlaybackStart(@NonNull Playable playable, int position) { + if (taskManager.isSleepTimerActive()) { + taskManager.restartSleepTimer(); + } taskManager.startWidgetUpdater(); if (position != PlaybackServiceMediaPlayer.INVALID_TIME) { playable.setPosition(position); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 1cf271a29..5647590b1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -248,6 +248,16 @@ public class PlaybackServiceTaskManager { } } + /** + * Restarts the sleep timer. If the sleep timer is not active, nothing will happen. + */ + public synchronized void restartSleepTimer() { + if (isSleepTimerActive()) { + Log.d(TAG, "Restarting sleep timer"); + sleepTimer.restart(); + } + } + /** * Returns the current sleep timer time or 0 if the sleep timer is not active. */ @@ -428,13 +438,15 @@ public class PlaybackServiceTaskManager { return timeLeft; } - public void onShake() { + public void restart() { postCallback(() -> { setSleepTimer(waitingTime, shakeToReset, vibrate); callback.onSleepTimerReset(); }); - shakeListener.pause(); - shakeListener = null; + if (shakeListener != null) { + shakeListener.pause(); + shakeListener = null; + } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java index c0b1b3bc0..b0b6e164d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java @@ -52,7 +52,7 @@ class ShakeListener implements SensorEventListener double gForce = Math.sqrt(gX*gX + gY*gY + gZ*gZ); if (gForce > 2.25) { Log.d(TAG, "Detected shake " + gForce); - mSleepTimer.onShake(); + mSleepTimer.restart(); } } -- cgit v1.2.3 From f9b413332f82873aab43066e19170dddcefa8322 Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Tue, 8 Oct 2019 09:43:16 +0200 Subject: Reset playback statistics Fixes #1867 --- .../antennapod/core/event/StatisticsEvent.java | 14 ++++ .../danoeh/antennapod/core/storage/DBWriter.java | 89 ++++++++++++++------- .../main/res/drawable-anydpi/ic_reset_stats.xml | 11 +++ core/src/main/res/drawable-hdpi/ic_reset_stats.png | Bin 0 -> 279 bytes core/src/main/res/drawable-mdpi/ic_reset_stats.png | Bin 0 -> 192 bytes .../src/main/res/drawable-xhdpi/ic_reset_stats.png | Bin 0 -> 294 bytes .../main/res/drawable-xxhdpi/ic_reset_stats.png | Bin 0 -> 419 bytes core/src/main/res/values/strings.xml | 1 + 8 files changed, 87 insertions(+), 28 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java create mode 100644 core/src/main/res/drawable-anydpi/ic_reset_stats.xml create mode 100644 core/src/main/res/drawable-hdpi/ic_reset_stats.png create mode 100644 core/src/main/res/drawable-mdpi/ic_reset_stats.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_reset_stats.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_reset_stats.png (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java new file mode 100644 index 000000000..15b44c2af --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java @@ -0,0 +1,14 @@ +package de.danoeh.antennapod.core.event; + +public class StatisticsEvent { + + public enum Action { + STATISTICS_UPDATED + } + + public final Action action; + + public StatisticsEvent(Action action) { + this.action = action; + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 11d90e57c..815eeeb50 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -2,9 +2,10 @@ package de.danoeh.antennapod.core.storage; import android.app.backup.BackupManager; import android.content.Context; -import androidx.annotation.NonNull; import android.util.Log; +import androidx.annotation.NonNull; + import org.greenrobot.eventbus.EventBus; import java.io.File; @@ -23,6 +24,7 @@ import de.danoeh.antennapod.core.event.FavoritesEvent; import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.MessageEvent; import de.danoeh.antennapod.core.event.QueueEvent; +import de.danoeh.antennapod.core.event.StatisticsEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedEvent; @@ -86,7 +88,8 @@ public class DBWriter { }); } - private static boolean deleteFeedMediaSynchronous(@NonNull Context context, @NonNull FeedMedia media) { + private static boolean deleteFeedMediaSynchronous( + @NonNull Context context, @NonNull FeedMedia media) { Log.i(TAG, String.format("Requested to delete FeedMedia [id=%d, title=%s, downloaded=%s", media.getId(), media.getEpisodeTitle(), String.valueOf(media.isDownloaded()))); if (media.isDownloaded()) { @@ -111,7 +114,7 @@ public class DBWriter { } // Gpodder: queue delete action for synchronization - if(GpodnetPreferences.loggedIn()) { + if (GpodnetPreferences.loggedIn()) { FeedItem item = media.getItem(); GpodnetEpisodeAction action = new GpodnetEpisodeAction.Builder(item, GpodnetEpisodeAction.Action.DELETE) .currentDeviceId() @@ -159,7 +162,7 @@ public class DBWriter { adapter.open(); if (removed.size() > 0) { adapter.setQueue(queue); - for(FeedItem item : removed) { + for (FeedItem item : removed) { EventBus.getDefault().post(QueueEvent.irreversibleRemoved(item)); } } @@ -184,7 +187,6 @@ public class DBWriter { /** * Deletes the entire playback history. - * */ public static Future clearPlaybackHistory() { return dbExec.submit(() -> { @@ -215,7 +217,7 @@ public class DBWriter { * its playback completion date is set to a non-null value. This method will set the playback completion date to the * current date regardless of the current value. * - * @param media FeedMedia that should be added to the playback history. + * @param media FeedMedia that should be added to the playback history. */ public static Future addItemToPlaybackHistory(final FeedMedia media) { return dbExec.submit(() -> { @@ -234,7 +236,7 @@ public class DBWriter { /** * Adds a Download status object to the download log. * - * @param status The DownloadStatus object. + * @param status The DownloadStatus object. */ public static Future addDownloadStatus(final DownloadStatus status) { return dbExec.submit(() -> { @@ -304,9 +306,9 @@ public class DBWriter { * Appends FeedItem objects to the end of the queue. The 'read'-attribute of all items will be set to true. * If a FeedItem is already in the queue, the FeedItem will not change its position in the queue. * - * @param context A context that is used for opening a database connection. + * @param context A context that is used for opening a database connection. * @param performAutoDownload true if an auto-download process should be started after the operation. - * @param itemIds IDs of the FeedItem objects that should be added to the queue. + * @param itemIds IDs of the FeedItem objects that should be added to the queue. */ public static Future addQueueItem(final Context context, final boolean performAutoDownload, final long... itemIds) { @@ -394,7 +396,6 @@ public class DBWriter { /** * Removes all FeedItem objects from the queue. - * */ public static Future clearQueue() { return dbExec.submit(() -> { @@ -409,7 +410,8 @@ public class DBWriter { /** * Removes a FeedItem object from the queue. - * @param context A context that is used for opening a database connection. + * + * @param context A context that is used for opening a database connection. * @param performAutoDownload true if an auto-download process should be started after the operation. * @param item FeedItem that should be removed. */ @@ -497,14 +499,15 @@ public class DBWriter { /** * Moves the specified item to the top of the queue. - * @param itemId The item to move to the top of the queue + * + * @param itemId The item to move to the top of the queue * @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to */ public static Future moveQueueItemToTop(final long itemId, final boolean broadcastUpdate) { return dbExec.submit(() -> { LongList queueIdList = DBReader.getQueueIDList(); int index = queueIdList.indexOf(itemId); - if (index >=0) { + if (index >= 0) { moveQueueItemHelper(index, 0, broadcastUpdate); } else { Log.e(TAG, "moveQueueItemToTop: item not found"); @@ -514,7 +517,8 @@ public class DBWriter { /** * Moves the specified item to the bottom of the queue. - * @param itemId The item to move to the bottom of the queue + * + * @param itemId The item to move to the bottom of the queue * @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to */ public static Future moveQueueItemToBottom(final long itemId, @@ -524,7 +528,7 @@ public class DBWriter { int index = queueIdList.indexOf(itemId); if (index >= 0) { moveQueueItemHelper(index, queueIdList.size() - 1, - broadcastUpdate); + broadcastUpdate); } else { Log.e(TAG, "moveQueueItemToBottom: item not found"); } @@ -605,7 +609,7 @@ public class DBWriter { adapter.open(); adapter.setFeedItemRead(played, itemIds); adapter.close(); - if(broadcastUpdate) { + if (broadcastUpdate) { EventDistributor.getInstance().sendUnreadItemsUpdateBroadcast(); } }); @@ -614,7 +618,8 @@ public class DBWriter { /** * Sets the 'read'-attribute of a FeedItem to the specified value. - * @param item The FeedItem object + * + * @param item The FeedItem object * @param played New value of the 'read'-attribute one of FeedItem.PLAYED, * FeedItem.NEW, FeedItem.UNPLAYED * @param resetMediaPosition true if this method should also reset the position of the FeedItem's FeedMedia object. @@ -644,7 +649,7 @@ public class DBWriter { /** * Sets the 'read'-attribute of all NEW FeedItems of a specific Feed to UNPLAYED. * - * @param feedId ID of the Feed. + * @param feedId ID of the Feed. */ public static Future removeFeedNewFlag(final long feedId) { return dbExec.submit(() -> { @@ -660,7 +665,7 @@ public class DBWriter { /** * Sets the 'read'-attribute of all FeedItems of a specific Feed to PLAYED. * - * @param feedId ID of the Feed. + * @param feedId ID of the Feed. */ public static Future markFeedRead(final long feedId) { return dbExec.submit(() -> { @@ -732,7 +737,7 @@ public class DBWriter { * Saves a FeedMedia object in the database. This method will save all attributes of the FeedMedia object. The * contents of FeedComponent-attributes (e.g. the FeedMedia's 'item'-attribute) will not be saved. * - * @param media The FeedMedia object. + * @param media The FeedMedia object. */ public static Future setFeedMedia(final FeedMedia media) { return dbExec.submit(() -> { @@ -746,7 +751,7 @@ public class DBWriter { /** * Saves the 'position', 'duration' and 'last played time' attributes of a FeedMedia object * - * @param media The FeedMedia object. + * @param media The FeedMedia object. */ public static Future setFeedMediaPlaybackInformation(final FeedMedia media) { return dbExec.submit(() -> { @@ -761,7 +766,7 @@ public class DBWriter { * Saves a FeedItem object in the database. This method will save all attributes of the FeedItem object including * the content of FeedComponent-attributes. * - * @param item The FeedItem object. + * @param item The FeedItem object. */ public static Future setFeedItem(final FeedItem item) { return dbExec.submit(() -> { @@ -777,7 +782,7 @@ public class DBWriter { * Updates download URL of a feed */ public static Future updateFeedDownloadURL(final String original, final String updated) { - Log.d(TAG, "updateFeedDownloadURL(original: " + original + ", updated: " + updated +")"); + Log.d(TAG, "updateFeedDownloadURL(original: " + original + ", updated: " + updated + ")"); return dbExec.submit(() -> { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -802,11 +807,11 @@ public class DBWriter { } private static boolean itemListContains(List items, long itemId) { - return indexInItemList(items, itemId) >= 0; + return indexInItemList(items, itemId) >= 0; } private static int indexInItemList(List items, long itemId) { - for (int i = 0; i < items.size(); i ++) { + for (int i = 0; i < items.size(); i++) { FeedItem item = items.get(i); if (item.getId() == itemId) { return i; @@ -870,7 +875,7 @@ public class DBWriter { /** * Sets the 'auto_download'-attribute of specific FeedItem. * - * @param feedItem FeedItem. + * @param feedItem FeedItem. * @param autoDownload true enables auto download, false disables it */ public static Future setFeedItemAutoDownload(final FeedItem feedItem, @@ -888,7 +893,7 @@ public class DBWriter { return dbExec.submit(() -> { int failedAttempts = feedItem.getFailedAutoDownloadAttempts() + 1; long autoDownload; - if(!feedItem.getAutoDownload() || failedAttempts >= 10) { + if (!feedItem.getAutoDownload() || failedAttempts >= 10) { autoDownload = 0; // giving up, disable auto download feedItem.setAutoDownload(false); } else { @@ -924,7 +929,8 @@ public class DBWriter { /** * Set filter of the feed - * @param feedId The feed's ID + * + * @param feedId The feed's ID * @param filterValues Values that represent properties to filter by */ public static Future setFeedItemsFilter(final long feedId, @@ -939,4 +945,31 @@ public class DBWriter { }); } + + /** + * Reset the statistics in DB + */ + @NonNull + public static Future resetStatistics() { + return dbExec.submit(() -> { + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + + List feeds = DBReader.getFeedList(); + for (Feed feed : feeds) { + List items = DBReader.getFeed(feed.getId()).getItems(); + for (FeedItem item : items) { + FeedMedia media = item.getMedia(); + if (media == null) { + continue; + } + + media.setPlayedDuration(0); + adapter.setFeedMediaPlaybackInformation(media); + } + } + adapter.close(); + EventBus.getDefault().post(new StatisticsEvent(StatisticsEvent.Action.STATISTICS_UPDATED)); + }); + } } diff --git a/core/src/main/res/drawable-anydpi/ic_reset_stats.xml b/core/src/main/res/drawable-anydpi/ic_reset_stats.xml new file mode 100644 index 000000000..afc333088 --- /dev/null +++ b/core/src/main/res/drawable-anydpi/ic_reset_stats.xml @@ -0,0 +1,11 @@ + + + diff --git a/core/src/main/res/drawable-hdpi/ic_reset_stats.png b/core/src/main/res/drawable-hdpi/ic_reset_stats.png new file mode 100644 index 000000000..11fc340de Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_reset_stats.png differ diff --git a/core/src/main/res/drawable-mdpi/ic_reset_stats.png b/core/src/main/res/drawable-mdpi/ic_reset_stats.png new file mode 100644 index 000000000..1e0c48d84 Binary files /dev/null and b/core/src/main/res/drawable-mdpi/ic_reset_stats.png differ diff --git a/core/src/main/res/drawable-xhdpi/ic_reset_stats.png b/core/src/main/res/drawable-xhdpi/ic_reset_stats.png new file mode 100644 index 000000000..9c72f9256 Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_reset_stats.png differ diff --git a/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png b/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png new file mode 100644 index 000000000..7469e76e9 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png differ diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 0d61e30cd..4442c2e13 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -37,6 +37,7 @@ Calculate duration that was actually played. Playing twice is counted twice, while marking as played is not counted Sum up all podcasts marked as played Notice: Playback speed is never taken into account. + Reset statistics data. Open menu -- cgit v1.2.3 From 91463ba8778262d3aa26aee820e8f4b73c71047e Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Tue, 8 Oct 2019 19:46:35 +0200 Subject: Remove icon from "Reset statistics" option menu item --- core/src/main/res/drawable-anydpi/ic_reset_stats.xml | 11 ----------- core/src/main/res/drawable-hdpi/ic_reset_stats.png | Bin 279 -> 0 bytes core/src/main/res/drawable-mdpi/ic_reset_stats.png | Bin 192 -> 0 bytes core/src/main/res/drawable-xhdpi/ic_reset_stats.png | Bin 294 -> 0 bytes core/src/main/res/drawable-xxhdpi/ic_reset_stats.png | Bin 419 -> 0 bytes core/src/main/res/values/strings.xml | 2 +- 6 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 core/src/main/res/drawable-anydpi/ic_reset_stats.xml delete mode 100644 core/src/main/res/drawable-hdpi/ic_reset_stats.png delete mode 100644 core/src/main/res/drawable-mdpi/ic_reset_stats.png delete mode 100644 core/src/main/res/drawable-xhdpi/ic_reset_stats.png delete mode 100644 core/src/main/res/drawable-xxhdpi/ic_reset_stats.png (limited to 'core') diff --git a/core/src/main/res/drawable-anydpi/ic_reset_stats.xml b/core/src/main/res/drawable-anydpi/ic_reset_stats.xml deleted file mode 100644 index afc333088..000000000 --- a/core/src/main/res/drawable-anydpi/ic_reset_stats.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/core/src/main/res/drawable-hdpi/ic_reset_stats.png b/core/src/main/res/drawable-hdpi/ic_reset_stats.png deleted file mode 100644 index 11fc340de..000000000 Binary files a/core/src/main/res/drawable-hdpi/ic_reset_stats.png and /dev/null differ diff --git a/core/src/main/res/drawable-mdpi/ic_reset_stats.png b/core/src/main/res/drawable-mdpi/ic_reset_stats.png deleted file mode 100644 index 1e0c48d84..000000000 Binary files a/core/src/main/res/drawable-mdpi/ic_reset_stats.png and /dev/null differ diff --git a/core/src/main/res/drawable-xhdpi/ic_reset_stats.png b/core/src/main/res/drawable-xhdpi/ic_reset_stats.png deleted file mode 100644 index 9c72f9256..000000000 Binary files a/core/src/main/res/drawable-xhdpi/ic_reset_stats.png and /dev/null differ diff --git a/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png b/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png deleted file mode 100644 index 7469e76e9..000000000 Binary files a/core/src/main/res/drawable-xxhdpi/ic_reset_stats.png and /dev/null differ diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 4442c2e13..b7478580e 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -37,7 +37,7 @@ Calculate duration that was actually played. Playing twice is counted twice, while marking as played is not counted Sum up all podcasts marked as played Notice: Playback speed is never taken into account. - Reset statistics data. + Reset statistics data Open menu -- cgit v1.2.3 From 5989d6daf67a295ccd8e80ce6e40c570b743f779 Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Tue, 8 Oct 2019 19:48:26 +0200 Subject: Remove the unnecessary StatisticsEvent --- .../de/danoeh/antennapod/core/event/StatisticsEvent.java | 14 -------------- .../java/de/danoeh/antennapod/core/storage/DBWriter.java | 2 -- 2 files changed, 16 deletions(-) delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java deleted file mode 100644 index 15b44c2af..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/event/StatisticsEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.danoeh.antennapod.core.event; - -public class StatisticsEvent { - - public enum Action { - STATISTICS_UPDATED - } - - public final Action action; - - public StatisticsEvent(Action action) { - this.action = action; - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 815eeeb50..2113679b9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -24,7 +24,6 @@ import de.danoeh.antennapod.core.event.FavoritesEvent; import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.MessageEvent; import de.danoeh.antennapod.core.event.QueueEvent; -import de.danoeh.antennapod.core.event.StatisticsEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedEvent; @@ -969,7 +968,6 @@ public class DBWriter { } } adapter.close(); - EventBus.getDefault().post(new StatisticsEvent(StatisticsEvent.Action.STATISTICS_UPDATED)); }); } } -- cgit v1.2.3 From 4289933155a72f1dd6e89ead54f7add3a6145ef5 Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Tue, 8 Oct 2019 19:49:13 +0200 Subject: Optimize the deletion of statistics data --- .../java/de/danoeh/antennapod/core/storage/DBWriter.java | 15 +-------------- .../de/danoeh/antennapod/core/storage/PodDBAdapter.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 2113679b9..e0e15c1ff 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -953,20 +953,7 @@ public class DBWriter { return dbExec.submit(() -> { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - - List feeds = DBReader.getFeedList(); - for (Feed feed : feeds) { - List items = DBReader.getFeed(feed.getId()).getItems(); - for (FeedItem item : items) { - FeedMedia media = item.getMedia(); - if (media == null) { - continue; - } - - media.setPlayedDuration(0); - adapter.setFeedMediaPlaybackInformation(media); - } - } + adapter.resetAllMediaPlayedDuration(); adapter.close(); }); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 5feedcebf..66f6d223d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -476,6 +476,20 @@ public class PodDBAdapter { } } + public void resetAllMediaPlayedDuration() { + try { + db.beginTransactionNonExclusive(); + ContentValues values = new ContentValues(); + values.put(KEY_PLAYED_DURATION, 0); + db.update(TABLE_NAME_FEED_MEDIA, values, null, new String[0]); + db.setTransactionSuccessful(); + } catch (SQLException e) { + Log.e(TAG, Log.getStackTraceString(e)); + } finally { + db.endTransaction(); + } + } + /** * Insert all FeedItems of a feed and the feed object itself in a single * transaction -- cgit v1.2.3 From 4f65aa015adb43db09df007168a5627874c73caf Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Wed, 9 Oct 2019 14:58:27 +0200 Subject: Add confirmation dialog before reseting statistics --- core/src/main/res/values/strings.xml | 2 ++ 1 file changed, 2 insertions(+) (limited to 'core') diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index b7478580e..617fa9478 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -38,6 +38,8 @@ Sum up all podcasts marked as played Notice: Playback speed is never taken into account. Reset statistics data + Reset statistics data + This will erase the history of duration played for all episodes. Are you sure you want to proceed ? Open menu -- cgit v1.2.3 From c81fcba22d1f89c00050b5a99acd30a40ef3a084 Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Wed, 9 Oct 2019 17:12:00 +0200 Subject: Fix formatting --- core/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core') diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 617fa9478..e23422817 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -39,7 +39,7 @@ Notice: Playback speed is never taken into account. Reset statistics data Reset statistics data - This will erase the history of duration played for all episodes. Are you sure you want to proceed ? + This will erase the history of duration played for all episodes. Are you sure you want to proceed? Open menu -- cgit v1.2.3 From 504bbb0058ec7a802e4decabda5c921c20f485d3 Mon Sep 17 00:00:00 2001 From: Xavier Gouchet Date: Mon, 14 Oct 2019 09:13:42 +0200 Subject: Remove duplicate string --- core/src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) (limited to 'core') diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index e23422817..5a0267232 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -38,7 +38,6 @@ Sum up all podcasts marked as played Notice: Playback speed is never taken into account. Reset statistics data - Reset statistics data This will erase the history of duration played for all episodes. Are you sure you want to proceed? -- cgit v1.2.3