summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2019-04-27 10:50:13 +0200
committerByteHamster <info@bytehamster.com>2019-04-27 10:50:13 +0200
commit5d124c476a8167e6b70494481596ecceb3436cf9 (patch)
tree0d8cfd4ac92430ce04fef838cc22912338faa5cf /core
parent881578ee4181118d075f1e6c0812c54cf37982db (diff)
downloadAntennaPod-5d124c476a8167e6b70494481596ecceb3436cf9.zip
Fixed sleep timer ANR (Closes #3139)
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java15
1 files changed, 9 insertions, 6 deletions
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 0c0ee23c6..730ae7734 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
@@ -191,8 +191,7 @@ public class PlaybackServiceTaskManager {
sleepTimerFuture.cancel(true);
}
sleepTimer = new SleepTimer(waitingTime, shakeToReset, vibrate);
- Runnable runnable = useMainThreadIfNecessary(sleepTimer);
- sleepTimerFuture = schedExecutor.schedule(runnable, 0, TimeUnit.MILLISECONDS);
+ sleepTimerFuture = schedExecutor.schedule(sleepTimer, 0, TimeUnit.MILLISECONDS);
}
/**
@@ -321,6 +320,7 @@ public class PlaybackServiceTaskManager {
private final boolean shakeToReset;
private final boolean vibrate;
private ShakeListener shakeListener;
+ private Handler handler;
public SleepTimer(long waitingTime, boolean shakeToReset, boolean vibrate) {
super();
@@ -328,6 +328,7 @@ public class PlaybackServiceTaskManager {
this.timeLeft = waitingTime;
this.shakeToReset = shakeToReset;
this.vibrate = vibrate;
+ this.handler = new Handler(); // Use the same thread for callbacks (ExoPlayer)
}
@Override
@@ -353,7 +354,7 @@ public class PlaybackServiceTaskManager {
if(shakeListener == null && shakeToReset) {
shakeListener = new ShakeListener(context, this);
}
- callback.onSleepTimerAlmostExpired();
+ handler.post(callback::onSleepTimerAlmostExpired);
notifiedAlmostExpired = true;
}
if (timeLeft <= 0) {
@@ -363,7 +364,7 @@ public class PlaybackServiceTaskManager {
shakeListener = null;
}
if (!Thread.currentThread().isInterrupted()) {
- callback.onSleepTimerExpired();
+ handler.post(callback::onSleepTimerExpired);
} else {
Log.d(TAG, "Sleep timer interrupted");
}
@@ -381,8 +382,10 @@ public class PlaybackServiceTaskManager {
}
public void onShake() {
- setSleepTimer(waitingTime, shakeToReset, vibrate);
- callback.onSleepTimerReset();
+ handler.post(() -> {
+ setSleepTimer(waitingTime, shakeToReset, vibrate);
+ callback.onSleepTimerReset();
+ });
shakeListener.pause();
shakeListener = null;
}