Pause (but not reset) music on bottom sheet collapsed

This commit is contained in:
CappielloAntonio 2021-12-31 16:50:14 +01:00
parent d526b3163f
commit 6aafc7dfac
2 changed files with 40 additions and 11 deletions

View file

@ -20,6 +20,22 @@ import java.util.concurrent.ExecutionException;
public class MediaManager { public class MediaManager {
private static final String TAG = "MediaManager"; private static final String TAG = "MediaManager";
public static void quit(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> {
try {
if (mediaBrowserListenableFuture.isDone()) {
if (mediaBrowserListenableFuture.get().isPlaying()) {
mediaBrowserListenableFuture.get().pause();
}
}
} catch (ExecutionException | InterruptedException e) {
Log.e(TAG, e.getMessage());
}
}, MoreExecutors.directExecutor());
}
}
public static void check(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context) { public static void check(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
@ -136,7 +152,6 @@ public class MediaManager {
mediaBrowserListenableFuture.get().prepare(); mediaBrowserListenableFuture.get().prepare();
mediaBrowserListenableFuture.get().seekTo(startIndex, 0); mediaBrowserListenableFuture.get().seekTo(startIndex, 0);
mediaBrowserListenableFuture.get().play(); mediaBrowserListenableFuture.get().play();
enqueueDatabase(songs, true, 0); enqueueDatabase(songs, true, 0);
} }
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
@ -155,7 +170,6 @@ public class MediaManager {
mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(context, song)); mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(context, song));
mediaBrowserListenableFuture.get().prepare(); mediaBrowserListenableFuture.get().prepare();
mediaBrowserListenableFuture.get().play(); mediaBrowserListenableFuture.get().play();
enqueueDatabase(song, true, 0); enqueueDatabase(song, true, 0);
} }
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
@ -170,15 +184,13 @@ public class MediaManager {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
if (mediaBrowserListenableFuture.isDone()) { if (mediaBrowserListenableFuture.isDone()) {
if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) { if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) {
enqueueDatabase(songs, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex()); enqueueDatabase(songs, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex());
mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(context, songs)); mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(context, songs));
} else { } else {
enqueueDatabase(songs, false, mediaBrowserListenableFuture.get().getMediaItemCount()); enqueueDatabase(songs, false, mediaBrowserListenableFuture.get().getMediaItemCount());
mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(context, songs)); mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(context, songs));
} }
} }
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
Log.e(TAG, e.getMessage()); Log.e(TAG, e.getMessage());

View file

@ -10,6 +10,7 @@ import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.Player;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.NavigationUI; import androidx.navigation.ui.NavigationUI;
@ -29,8 +30,10 @@ import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.viewmodel.MainViewModel; import com.cappielloantonio.play.viewmodel.MainViewModel;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ExecutionException;
public class MainActivity extends BaseActivity { public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
@ -66,7 +69,7 @@ public class MainActivity extends BaseActivity {
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
initServiceContent(); initService();
} }
@Override @Override
@ -149,8 +152,8 @@ public class MainActivity extends BaseActivity {
break; break;
case BottomSheetBehavior.STATE_COLLAPSED: case BottomSheetBehavior.STATE_COLLAPSED:
if (playerBottomSheetFragment != null) { if (playerBottomSheetFragment != null) {
playerBottomSheetFragment.scrollOnTop();
playerBottomSheetFragment.goBackToFirstPage(); playerBottomSheetFragment.goBackToFirstPage();
playerBottomSheetFragment.scrollOnTop();
} }
case BottomSheetBehavior.STATE_SETTLING: case BottomSheetBehavior.STATE_SETTLING:
if (playerBottomSheetFragment != null) { if (playerBottomSheetFragment != null) {
@ -210,8 +213,24 @@ public class MainActivity extends BaseActivity {
} }
} }
private void initServiceContent() { @SuppressLint("UnsafeOptInUsageError")
private void initService() {
MediaManager.check(getMediaBrowserListenableFuture(), this); MediaManager.check(getMediaBrowserListenableFuture(), this);
getMediaBrowserListenableFuture().addListener(() -> {
try {
getMediaBrowserListenableFuture().get().addListener(new Player.Listener() {
@Override
public void onIsPlayingChanged(boolean isPlaying) {
if (isPlaying && bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
setBottomSheetInPeek(true);
}
}
});
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}, MoreExecutors.directExecutor());
} }
private void goToLogin() { private void goToLogin() {
@ -259,9 +278,7 @@ public class MainActivity extends BaseActivity {
} }
private void resetMusicSession() { private void resetMusicSession() {
QueueRepository queueRepository = new QueueRepository(App.getInstance()); MediaManager.quit(getMediaBrowserListenableFuture());
queueRepository.deleteAll();
// MusicPlayerRemote.quitPlaying();
} }
private void resetViewModel() { private void resetViewModel() {