summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authormueller-ma <mueller-ma@users.noreply.github.com>2023-04-15 21:08:03 +0200
committerGitHub <noreply@github.com>2023-04-15 21:08:03 +0200
commit0bdf9d9e28572bba38fd36ad518e817dbdd04fe5 (patch)
tree5711d01accb4b0d42815d2a6c51277e51aaca6ff /core
parent8396a346707677ce22373a96e905bb1763d5cfb9 (diff)
downloadAntennaPod-0bdf9d9e28572bba38fd36ad518e817dbdd04fe5.zip
Add option to enable sleep timer based on current time (#6384)
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/SleepTimerPreferences.java40
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java50
2 files changed, 68 insertions, 22 deletions
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 b56e7e6f3..96ffe5cb6 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,9 +2,10 @@ package de.danoeh.antennapod.core.preferences;
import android.content.Context;
import android.content.SharedPreferences;
-import androidx.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.NonNull;
+
import java.util.concurrent.TimeUnit;
public class SleepTimerPreferences {
@@ -17,8 +18,12 @@ public class SleepTimerPreferences {
private static final String PREF_VIBRATE = "Vibrate";
private static final String PREF_SHAKE_TO_RESET = "ShakeToReset";
private static final String PREF_AUTO_ENABLE = "AutoEnable";
+ private static final String PREF_AUTO_ENABLE_FROM = "AutoEnableFrom";
+ private static final String PREF_AUTO_ENABLE_TO = "AutoEnableTo";
- private static final String DEFAULT_VALUE = "15";
+ private static final String DEFAULT_LAST_TIMER = "15";
+ private static final int DEFAULT_AUTO_ENABLE_FROM = 22;
+ private static final int DEFAULT_AUTO_ENABLE_TO = 6;
private static SharedPreferences prefs;
@@ -37,7 +42,7 @@ public class SleepTimerPreferences {
}
public static String lastTimerValue() {
- return prefs.getString(PREF_VALUE, DEFAULT_VALUE);
+ return prefs.getString(PREF_VALUE, DEFAULT_LAST_TIMER);
}
public static long timerMillis() {
@@ -69,4 +74,33 @@ public class SleepTimerPreferences {
return prefs.getBoolean(PREF_AUTO_ENABLE, false);
}
+ public static void setAutoEnableFrom(int hourOfDay) {
+ prefs.edit().putInt(PREF_AUTO_ENABLE_FROM, hourOfDay).apply();
+ }
+
+ public static int autoEnableFrom() {
+ return prefs.getInt(PREF_AUTO_ENABLE_FROM, DEFAULT_AUTO_ENABLE_FROM);
+ }
+
+ public static void setAutoEnableTo(int hourOfDay) {
+ prefs.edit().putInt(PREF_AUTO_ENABLE_TO, hourOfDay).apply();
+ }
+
+ public static int autoEnableTo() {
+ return prefs.getInt(PREF_AUTO_ENABLE_TO, DEFAULT_AUTO_ENABLE_TO);
+ }
+
+ public static boolean isInTimeRange(int from, int to, int current) {
+ // Range covers one day
+ if (from < to) {
+ return from <= current && current < to;
+ }
+
+ // Range covers two days
+ if (from <= current) {
+ return true;
+ }
+
+ return current < to;
+ }
}
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 f207339bc..da23ebf53 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
@@ -44,37 +44,22 @@ import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.media.MediaBrowserServiceCompat;
-import de.danoeh.antennapod.core.service.QuickSettingsTileService;
-import de.danoeh.antennapod.core.util.playback.PlayableUtils;
-import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
-import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
-import de.danoeh.antennapod.event.PlayerErrorEvent;
-import de.danoeh.antennapod.event.playback.SleepTimerUpdatedEvent;
-import de.danoeh.antennapod.model.feed.FeedItemFilter;
-import de.danoeh.antennapod.model.feed.SortOrder;
-import de.danoeh.antennapod.playback.base.PlaybackServiceMediaPlayer;
-import de.danoeh.antennapod.playback.base.PlayerStatus;
-import de.danoeh.antennapod.playback.cast.CastPsmp;
-import de.danoeh.antennapod.playback.cast.CastStateListener;
-import de.danoeh.antennapod.storage.preferences.UserPreferences;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collections;
+import java.util.GregorianCalendar;
import java.util.List;
import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.event.MessageEvent;
-import de.danoeh.antennapod.event.playback.PlaybackPositionEvent;
-import de.danoeh.antennapod.event.settings.SkipIntroEndingChangedEvent;
-import de.danoeh.antennapod.event.settings.SpeedPresetChangedEvent;
-import de.danoeh.antennapod.event.settings.VolumeAdaptionChangedEvent;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
+import de.danoeh.antennapod.core.service.QuickSettingsTileService;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.FeedSearcher;
@@ -83,14 +68,31 @@ import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.gui.NotificationUtils;
+import de.danoeh.antennapod.core.util.playback.PlayableUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import de.danoeh.antennapod.core.widget.WidgetUpdater;
+import de.danoeh.antennapod.event.MessageEvent;
+import de.danoeh.antennapod.event.PlayerErrorEvent;
+import de.danoeh.antennapod.event.playback.BufferUpdateEvent;
+import de.danoeh.antennapod.event.playback.PlaybackPositionEvent;
+import de.danoeh.antennapod.event.playback.PlaybackServiceEvent;
+import de.danoeh.antennapod.event.playback.SleepTimerUpdatedEvent;
+import de.danoeh.antennapod.event.settings.SkipIntroEndingChangedEvent;
+import de.danoeh.antennapod.event.settings.SpeedPresetChangedEvent;
+import de.danoeh.antennapod.event.settings.VolumeAdaptionChangedEvent;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.FeedPreferences;
+import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.model.playback.MediaType;
import de.danoeh.antennapod.model.playback.Playable;
+import de.danoeh.antennapod.playback.base.PlaybackServiceMediaPlayer;
+import de.danoeh.antennapod.playback.base.PlayerStatus;
+import de.danoeh.antennapod.playback.cast.CastPsmp;
+import de.danoeh.antennapod.playback.cast.CastStateListener;
+import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter;
import de.danoeh.antennapod.ui.appstartintent.VideoPlayerActivityStarter;
import io.reactivex.Completable;
@@ -797,8 +799,18 @@ public class PlaybackService extends MediaBrowserServiceCompat {
stateManager.validStartCommandWasReceived();
stateManager.startForeground(R.id.notification_playing, notificationBuilder.build());
// set sleep timer if auto-enabled
+ boolean autoEnableByTime = true;
+ int fromSetting = SleepTimerPreferences.autoEnableFrom();
+ int toSetting = SleepTimerPreferences.autoEnableTo();
+ if (fromSetting != toSetting) {
+ Calendar now = new GregorianCalendar();
+ now.setTimeInMillis(System.currentTimeMillis());
+ int currentHour = now.get(Calendar.HOUR_OF_DAY);
+ autoEnableByTime = SleepTimerPreferences.isInTimeRange(fromSetting, toSetting, currentHour);
+ }
+
if (newInfo.oldPlayerStatus != null && newInfo.oldPlayerStatus != PlayerStatus.SEEKING
- && SleepTimerPreferences.autoEnable() && !sleepTimerActive()) {
+ && SleepTimerPreferences.autoEnable() && autoEnableByTime && !sleepTimerActive()) {
setSleepTimer(SleepTimerPreferences.timerMillis());
EventBus.getDefault().post(new MessageEvent(getString(R.string.sleep_timer_enabled_label),
PlaybackService.this::disableSleepTimer));