diff options
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
11 files changed, 65 insertions, 96 deletions
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 175f8e77b..a41b04b53 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 @@ -209,7 +209,7 @@ public class FeedMedia extends FeedFile implements Playable { * currently being played. */ public boolean isPlaying() { - return PlaybackPreferences.getCurrentlyPlayingMedia() == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA + return PlaybackPreferences.getCurrentlyPlayingMediaType() == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA && PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == id; } 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 4e2233407..a4612d857 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 @@ -33,14 +33,16 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference * Contains the id of the currently playing FeedMedia object or * NO_MEDIA_PLAYING if the currently playing media is no FeedMedia object. */ - private static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId"; + private static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID + = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId"; /** * Type of the media object that is currently being played. This preference * is set to NO_MEDIA_PLAYING after playback has been completed and is set * as soon as the 'play' button is pressed. */ - private static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia"; + private static final String PREF_CURRENTLY_PLAYING_MEDIA_TYPE + = "de.danoeh.antennapod.preferences.currentlyPlayingMedia"; /** * True if last played media was streamed. @@ -61,7 +63,8 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference * 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"; + private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED + = "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed"; /** @@ -102,21 +105,21 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference } } - public static long getCurrentlyPlayingMedia() { - return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); - } + public static long getCurrentlyPlayingMediaType() { + return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING); + } - public static long getCurrentlyPlayingFeedMediaId() { - return prefs.getLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); - } + public static long getCurrentlyPlayingFeedMediaId() { + return prefs.getLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); + } - public static boolean getCurrentEpisodeIsStream() { - return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_STREAM, true); - } + public static boolean getCurrentEpisodeIsStream() { + return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_STREAM, true); + } - public static boolean getCurrentEpisodeIsVideo() { - return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, false); - } + public static boolean getCurrentEpisodeIsVideo() { + return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, false); + } public static int getCurrentPlayerStatus() { return prefs.getInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER); @@ -128,7 +131,7 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference public static void writeNoMediaPlaying() { SharedPreferences.Editor editor = prefs.edit(); - editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); + editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); editor.putInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER); @@ -142,13 +145,13 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference if (playable == null) { writeNoMediaPlaying(); } else { - editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, playable.getPlayableType()); + editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, playable.getPlayableType()); editor.putBoolean(PREF_CURRENT_EPISODE_IS_STREAM, stream); editor.putBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, playable.getMediaType() == MediaType.VIDEO); if (playable instanceof FeedMedia) { - FeedMedia fMedia = (FeedMedia) playable; - editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, fMedia.getItem().getFeed().getId()); - editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, fMedia.getId()); + FeedMedia feedMedia = (FeedMedia) playable; + editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, feedMedia.getItem().getFeed().getId()); + editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, feedMedia.getId()); } else { editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); 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 476c2cd9e..cb5a405c0 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 @@ -695,7 +695,7 @@ public class UserPreferences { .apply(); // when updating with an interval, we assume the user wants // to update *now* and then every 'hours' interval thereafter. - AutoUpdateManager.restartUpdateAlarm(); + AutoUpdateManager.restartUpdateAlarm(context); } /** @@ -705,14 +705,14 @@ public class UserPreferences { prefs.edit() .putString(PREF_UPDATE_INTERVAL, hourOfDay + ":" + minute) .apply(); - AutoUpdateManager.restartUpdateAlarm(); + AutoUpdateManager.restartUpdateAlarm(context); } - public static void disableAutoUpdate() { + public static void disableAutoUpdate(Context context) { prefs.edit() .putString(PREF_UPDATE_INTERVAL, "0") .apply(); - AutoUpdateManager.disableAutoUpdate(); + AutoUpdateManager.disableAutoUpdate(context); } public static boolean gpodnetNotificationsEnabled() { diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java index af0a0d426..b667b154c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java @@ -20,7 +20,7 @@ public class FeedUpdateReceiver extends BroadcastReceiver { Log.d(TAG, "Received intent"); ClientConfig.initialize(context); - AutoUpdateManager.runOnce(); + AutoUpdateManager.runOnce(context); } } 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 8811faf8a..6265fc30d 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 @@ -39,7 +39,7 @@ public class FeedUpdateWorker extends Worker { if (!isRunOnce && UserPreferences.isAutoUpdateTimeOfDay()) { // WorkManager does not allow to set specific time for repeated tasks. // We repeatedly schedule a OneTimeWorkRequest instead. - AutoUpdateManager.restartUpdateAlarm(); + AutoUpdateManager.restartUpdateAlarm(getApplicationContext()); } return Result.success(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java index 828691737..e9e224851 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java @@ -168,7 +168,7 @@ public class SyncService extends Worker { public static void sync(Context context) { OneTimeWorkRequest workRequest = getWorkRequest().build(); - WorkManager.getInstance().enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); + WorkManager.getInstance(context).enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); EventBus.getDefault().postSticky(new SyncServiceEvent(R.string.sync_status_started)); } @@ -176,7 +176,7 @@ public class SyncService extends Worker { OneTimeWorkRequest workRequest = getWorkRequest() .setInitialDelay(0L, TimeUnit.SECONDS) .build(); - WorkManager.getInstance().enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); + WorkManager.getInstance(context).enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); EventBus.getDefault().postSticky(new SyncServiceEvent(R.string.sync_status_started)); } @@ -192,7 +192,7 @@ public class SyncService extends Worker { .setInitialDelay(0L, TimeUnit.SECONDS) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) .build(); - WorkManager.getInstance().enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); + WorkManager.getInstance(context).enqueueUniqueWork(WORK_ID_SYNC, ExistingWorkPolicy.REPLACE, workRequest); EventBus.getDefault().postSticky(new SyncServiceEvent(R.string.sync_status_started)); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java index 6ecca941a..4e7e6a6b6 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.core.util; import android.content.Context; -import android.util.Log; import java.util.Locale; @@ -15,53 +14,10 @@ public final class Converter { /** Logging tag. */ private static final String TAG = "Converter"; - - - /** Indicates that the value is in the Byte range.*/ - private static final int B_RANGE = 0; - /** Indicates that the value is in the Kilobyte range.*/ - private static final int KB_RANGE = 1; - /** Indicates that the value is in the Megabyte range.*/ - private static final int MB_RANGE = 2; - /** Indicates that the value is in the Gigabyte range.*/ - private static final int GB_RANGE = 3; - /** Determines the length of the number for best readability.*/ - private static final int NUM_LENGTH = 1024; private static final int HOURS_MIL = 3600000; private static final int MINUTES_MIL = 60000; private static final int SECONDS_MIL = 1000; - - /** Takes a byte-value and converts it into a more readable - * String. - * @param input The value to convert - * @return The converted String with a unit - * */ - public static String byteToString(final long input) { - int i = 0; - int result = 0; - - for (i = 0; i < GB_RANGE + 1; i++) { - result = (int) (input / Math.pow(1024, i)); - if (result < NUM_LENGTH) { - break; - } - } - - switch (i) { - case B_RANGE: - return result + " B"; - case KB_RANGE: - return result + " KB"; - case MB_RANGE: - return result + " MB"; - case GB_RANGE: - return result + " GB"; - default: - Log.e(TAG, "Error happened in byteToString"); - return "ERROR"; - } - } /** Converts milliseconds to a string containing hours, minutes and seconds */ public static String getDurationStringLong(int duration) { 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 fc04d82cc..991089910 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 @@ -32,24 +32,25 @@ public class AutoUpdateManager { /** * Start / restart periodic auto feed refresh + * @param context Context */ - public static void restartUpdateAlarm() { + public static void restartUpdateAlarm(Context context) { if (UserPreferences.isAutoUpdateDisabled()) { - disableAutoUpdate(); + disableAutoUpdate(context); } else if (UserPreferences.isAutoUpdateTimeOfDay()) { int[] timeOfDay = UserPreferences.getUpdateTimeOfDay(); Log.d(TAG, "timeOfDay: " + Arrays.toString(timeOfDay)); - restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1]); + restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1], context); } else { long milliseconds = UserPreferences.getUpdateInterval(); - restartUpdateIntervalAlarm(milliseconds); + restartUpdateIntervalAlarm(milliseconds, context); } } /** * Sets the interval in which the feeds are refreshed automatically */ - private static void restartUpdateIntervalAlarm(long intervalMillis) { + private static void restartUpdateIntervalAlarm(long intervalMillis, Context context) { Log.d(TAG, "Restarting update alarm."); PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(FeedUpdateWorker.class, @@ -57,14 +58,14 @@ public class AutoUpdateManager { .setConstraints(getConstraints()) .build(); - WorkManager.getInstance().enqueueUniquePeriodicWork( + WorkManager.getInstance(context).enqueueUniquePeriodicWork( WORK_ID_FEED_UPDATE, ExistingPeriodicWorkPolicy.REPLACE, workRequest); } /** * Sets time of day the feeds are refreshed automatically */ - private static void restartUpdateTimeOfDayAlarm(int hoursOfDay, int minute) { + private static void restartUpdateTimeOfDayAlarm(int hoursOfDay, int minute, Context context) { Log.d(TAG, "Restarting update alarm."); Calendar now = Calendar.getInstance(); @@ -81,7 +82,8 @@ public class AutoUpdateManager { .setInitialDelay(triggerAtMillis, TimeUnit.MILLISECONDS) .build(); - WorkManager.getInstance().enqueueUniqueWork(WORK_ID_FEED_UPDATE, ExistingWorkPolicy.REPLACE, workRequest); + WorkManager.getInstance(context).enqueueUniqueWork(WORK_ID_FEED_UPDATE, + ExistingWorkPolicy.REPLACE, workRequest); } /** @@ -89,8 +91,9 @@ public class AutoUpdateManager { * * Callers from UI should use {@link #runImmediate(Context)}, as it will guarantee * the refresh be run immediately. + * @param context Context */ - public static void runOnce() { + public static void runOnce(Context context) { Log.d(TAG, "Run auto update once, as soon as OS allows."); OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(FeedUpdateWorker.class) @@ -102,7 +105,8 @@ public class AutoUpdateManager { ) .build(); - WorkManager.getInstance().enqueueUniqueWork(WORK_ID_FEED_UPDATE_ONCE, ExistingWorkPolicy.REPLACE, workRequest); + WorkManager.getInstance(context).enqueueUniqueWork(WORK_ID_FEED_UPDATE_ONCE, + ExistingWorkPolicy.REPLACE, workRequest); } @@ -110,7 +114,7 @@ public class AutoUpdateManager { /** * Run auto feed refresh once in background immediately, using its own thread. * - * Callers where the additional threads is not suitable should use {@link #runOnce()} + * Callers where the additional threads is not suitable should use {@link #runOnce(Context)} */ public static void runImmediate(@NonNull Context context) { Log.d(TAG, "Run auto update immediately in background."); @@ -119,8 +123,8 @@ public class AutoUpdateManager { }, "ManualRefreshAllFeeds").start(); } - public static void disableAutoUpdate() { - WorkManager.getInstance().cancelUniqueWork(WORK_ID_FEED_UPDATE); + public static void disableAutoUpdate(Context context) { + WorkManager.getInstance(context).cancelUniqueWork(WORK_ID_FEED_UPDATE); } private static Constraints getConstraints() { 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 378c47faf..24aabf212 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 @@ -188,7 +188,7 @@ public interface Playable extends Parcelable, */ @Nullable public static Playable createInstanceFromPreferences(Context context) { - long currentlyPlayingMedia = PlaybackPreferences.getCurrentlyPlayingMedia(); + long currentlyPlayingMedia = PlaybackPreferences.getCurrentlyPlayingMediaType(); if (currentlyPlayingMedia != PlaybackPreferences.NO_MEDIA_PLAYING) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); return PlayableUtils.createInstanceFromPreferences(context, diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java index c39121564..ca09cda4b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java @@ -282,7 +282,7 @@ public class RemoteMedia implements Playable { dest.writeString(imageUrl); dest.writeString(feedLink); dest.writeString(mimeType); - dest.writeLong(pubDate.getTime()); + dest.writeLong((pubDate != null) ? pubDate.getTime() : 0); dest.writeString(notes); dest.writeInt(duration); dest.writeInt(position); 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 b59a95cd9..40849a262 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 @@ -53,12 +53,8 @@ public class Timeline { this.shownotesProvider = shownotesProvider; noShownotesLabel = context.getString(R.string.no_shownotes_label); - - TypedArray res = context.getTheme().obtainStyledAttributes(new int[]{android.R.attr.textColorPrimary}); - @ColorInt int col = res.getColor(0, 0); - final String colorPrimary = "rgba(" + Color.red(col) + "," + Color.green(col) + "," - + Color.blue(col) + "," + (Color.alpha(col) / 255.0) + ")"; - res.recycle(); + final String colorPrimary = colorToHtml(context, android.R.attr.textColorPrimary); + final String colorAccent = colorToHtml(context, R.attr.colorAccent); final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, context.getResources().getDisplayMetrics()); String styleString = ""; @@ -68,7 +64,17 @@ public class Timeline { } catch (IOException e) { e.printStackTrace(); } - webviewStyle = String.format(Locale.getDefault(), styleString, colorPrimary, margin, margin, margin, margin); + webviewStyle = String.format(Locale.US, styleString, colorPrimary, colorAccent, + margin, margin, margin, margin); + } + + private String colorToHtml(Context context, int colorAttr) { + TypedArray res = context.getTheme().obtainStyledAttributes(new int[]{colorAttr}); + @ColorInt int col = res.getColor(0, 0); + final String color = "rgba(" + Color.red(col) + "," + Color.green(col) + "," + + Color.blue(col) + "," + (Color.alpha(col) / 255.0) + ")"; + res.recycle(); + return color; } /** |