mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-02 02:13:33 +00:00
Moved ListenableFuture waiting logic to MediaManager
This commit is contained in:
parent
f8defb7337
commit
586054240f
1 changed files with 154 additions and 11 deletions
|
|
@ -1,29 +1,172 @@
|
||||||
package com.cappielloantonio.play.service;
|
package com.cappielloantonio.play.service;
|
||||||
|
|
||||||
import androidx.media3.common.MediaItem;
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.media3.session.MediaBrowser;
|
||||||
import androidx.media3.session.MediaController;
|
import androidx.media3.session.MediaController;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
public class MediaManager {
|
public class MediaManager {
|
||||||
public static void clearQueue(MediaController mediaController) {
|
private static final String TAG = "MediaManager";
|
||||||
mediaController.clearMediaItems();
|
|
||||||
getQueueRepository().deleteAll();
|
public static void prepare(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startQueue(MediaController mediaController, List<MediaItem> mediaItems, List<Song> songs) {
|
public static void play(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
clearQueue(mediaController);
|
if (mediaBrowserListenableFuture != null) {
|
||||||
mediaController.addMediaItems(mediaItems);
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
getQueueRepository().insertAllAndStartNew(songs);
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().play();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void enqueue(MediaController mediaController, List<MediaItem> mediaItems, List<Song> songs) {
|
public static void pause(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
mediaController.addMediaItems(mediaItems);
|
if (mediaBrowserListenableFuture != null) {
|
||||||
getQueueRepository().insertAll(songs);
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().pause();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stop(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().stop();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Song> songs, int startIndex) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
|
mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(context, songs));
|
||||||
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
|
mediaBrowserListenableFuture.get().seekTo(startIndex, 0);
|
||||||
|
mediaBrowserListenableFuture.get().play();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Song song) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
|
mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(context, song));
|
||||||
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
|
mediaBrowserListenableFuture.get().play();
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Song> songs, int afterIndex) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
if (afterIndex != -1) {
|
||||||
|
mediaBrowserListenableFuture.get().addMediaItems(afterIndex, MappingUtil.mapMediaItems(context, songs));
|
||||||
|
} else {
|
||||||
|
mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(context, songs));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Song song, int afterIndex) {
|
||||||
|
if (mediaBrowserListenableFuture != null) {
|
||||||
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
try {
|
||||||
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
|
if (afterIndex != -1) {
|
||||||
|
mediaBrowserListenableFuture.get().addMediaItem(afterIndex, MappingUtil.mapMediaItem(context, song));
|
||||||
|
} else {
|
||||||
|
mediaBrowserListenableFuture.get().addMediaItem(MappingUtil.mapMediaItem(context, song));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}, MoreExecutors.directExecutor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static QueueRepository getQueueRepository() {
|
private static QueueRepository getQueueRepository() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue