mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
fix: put queue into background thread
This commit is contained in:
parent
3496918ce6
commit
8188ef169c
1 changed files with 32 additions and 19 deletions
|
|
@ -2,6 +2,8 @@ package com.cappielloantonio.tempo.service;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
@ -36,6 +38,8 @@ import com.google.common.util.concurrent.MoreExecutors;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class MediaManager {
|
public class MediaManager {
|
||||||
|
|
@ -43,6 +47,8 @@ public class MediaManager {
|
||||||
private static WeakReference<MediaBrowser> attachedBrowserRef = new WeakReference<>(null);
|
private static WeakReference<MediaBrowser> attachedBrowserRef = new WeakReference<>(null);
|
||||||
public static AtomicBoolean justStarted = new AtomicBoolean(false);
|
public static AtomicBoolean justStarted = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
private static final ExecutorService backgroundExecutor = Executors.newSingleThreadExecutor();
|
||||||
|
|
||||||
public static void registerPlaybackObserver(
|
public static void registerPlaybackObserver(
|
||||||
ListenableFuture<MediaBrowser> browserFuture,
|
ListenableFuture<MediaBrowser> browserFuture,
|
||||||
PlaybackViewModel playbackViewModel
|
PlaybackViewModel playbackViewModel
|
||||||
|
|
@ -175,36 +181,43 @@ public class MediaManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(markerClass = UnstableApi.class)
|
||||||
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Child> media, int startIndex) {
|
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Child> media, int startIndex) {
|
||||||
if (mediaBrowserListenableFuture != null) {
|
if (mediaBrowserListenableFuture != null) {
|
||||||
mediaBrowserListenableFuture.addListener(() -> {
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
try {
|
try {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
MediaBrowser browser = mediaBrowserListenableFuture.get();
|
final MediaBrowser browser = mediaBrowserListenableFuture.get();
|
||||||
justStarted.set(true);
|
|
||||||
browser.setMediaItems(MappingUtil.mapMediaItems(media), startIndex, 0);
|
|
||||||
browser.prepare();
|
|
||||||
|
|
||||||
Player.Listener timelineListener = new Player.Listener() {
|
backgroundExecutor.execute(() -> {
|
||||||
@Override
|
final List<MediaItem> items = MappingUtil.mapMediaItems(media);
|
||||||
public void onTimelineChanged(Timeline timeline, int reason) {
|
enqueueDatabase(media, true, 0);
|
||||||
int itemCount = browser.getMediaItemCount();
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
if (itemCount > 0 && startIndex >= 0 && startIndex < itemCount) {
|
justStarted.set(true);
|
||||||
browser.seekTo(startIndex, 0);
|
browser.setMediaItems(items, startIndex, 0);
|
||||||
browser.play();
|
browser.prepare();
|
||||||
browser.removeListener(this);
|
Player.Listener timelineListener = new Player.Listener() {
|
||||||
}
|
@Override
|
||||||
}
|
public void onTimelineChanged(Timeline timeline, int reason) {
|
||||||
};
|
int itemCount = browser.getMediaItemCount();
|
||||||
browser.addListener(timelineListener);
|
if (itemCount > 0 && startIndex >= 0 && startIndex < itemCount) {
|
||||||
|
browser.seekTo(startIndex, 0);
|
||||||
enqueueDatabase(media, true, 0);
|
browser.play();
|
||||||
|
browser.removeListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
browser.addListener(timelineListener);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
e.printStackTrace();
|
Log.e(TAG, "Error executing startQueue logic: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}, MoreExecutors.directExecutor());
|
}, MoreExecutors.directExecutor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Child media) {
|
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Child media) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue