From 586054240fbdf91e027c6f3b7c74a3164b2739b8 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Wed, 29 Dec 2021 19:08:10 +0100 Subject: [PATCH] Moved ListenableFuture waiting logic to MediaManager --- .../play/service/MediaManager.java | 165 ++++++++++++++++-- 1 file changed, 154 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java index 214c7298..dedcacc9 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java +++ b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java @@ -1,29 +1,172 @@ 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 com.cappielloantonio.play.App; import com.cappielloantonio.play.model.Song; 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.concurrent.ExecutionException; public class MediaManager { - public static void clearQueue(MediaController mediaController) { - mediaController.clearMediaItems(); - getQueueRepository().deleteAll(); + private static final String TAG = "MediaManager"; + + public static void prepare(ListenableFuture 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 mediaItems, List songs) { - clearQueue(mediaController); - mediaController.addMediaItems(mediaItems); - getQueueRepository().insertAllAndStartNew(songs); + public static void play(ListenableFuture mediaBrowserListenableFuture) { + if (mediaBrowserListenableFuture != null) { + mediaBrowserListenableFuture.addListener(() -> { + 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 mediaItems, List songs) { - mediaController.addMediaItems(mediaItems); - getQueueRepository().insertAll(songs); + public static void pause(ListenableFuture mediaBrowserListenableFuture) { + if (mediaBrowserListenableFuture != null) { + 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 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 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 mediaBrowserListenableFuture, Context context, List 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 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 mediaBrowserListenableFuture, Context context, List 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 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() {