From 9328ec87ab6eae11195f5c257814a961603b6d48 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Thu, 30 Dec 2021 19:31:13 +0100 Subject: [PATCH] Init media3 queue on startup --- .../play/service/MediaManager.java | 35 ++++++ .../play/ui/activity/MainActivity.java | 102 +++++++++--------- 2 files changed, 86 insertions(+), 51 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 d2d9edd3..904caeb2 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java +++ b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java @@ -18,6 +18,41 @@ import java.util.concurrent.ExecutionException; public class MediaManager { private static final String TAG = "MediaManager"; + public static void check(ListenableFuture mediaBrowserListenableFuture, Context context) { + if (mediaBrowserListenableFuture != null) { + mediaBrowserListenableFuture.addListener(() -> { + try { + if (mediaBrowserListenableFuture.isDone()) { + if (mediaBrowserListenableFuture.get().getMediaItemCount() < 1) { + List songs = getQueueRepository().getSongs(); + if (songs.size() >= 1) { + init(mediaBrowserListenableFuture, context, songs); + } + } + } + } catch (ExecutionException | InterruptedException e) { + Log.e(TAG, e.getMessage()); + } + }, MoreExecutors.directExecutor()); + } + } + + public static void init(ListenableFuture mediaBrowserListenableFuture, Context context, List songs) { + if (mediaBrowserListenableFuture != null) { + mediaBrowserListenableFuture.addListener(() -> { + try { + if (mediaBrowserListenableFuture.isDone()) { + mediaBrowserListenableFuture.get().clearMediaItems(); + mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(context, songs)); + mediaBrowserListenableFuture.get().prepare(); + } + } catch (ExecutionException | InterruptedException e) { + Log.e(TAG, e.getMessage()); + } + }, MoreExecutors.directExecutor()); + } + } + public static void prepare(ListenableFuture mediaBrowserListenableFuture) { if (mediaBrowserListenableFuture != null) { mediaBrowserListenableFuture.addListener(() -> { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java index 7e9d48d5..4547b320 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java @@ -5,16 +5,11 @@ import android.content.Context; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.os.Bundle; -import android.util.Log; import android.view.View; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentManager; import androidx.lifecycle.ViewModelProvider; -import androidx.media3.common.MediaMetadata; -import androidx.media3.common.PlaybackParameters; -import androidx.media3.common.Player; -import androidx.media3.common.TracksInfo; import androidx.navigation.NavController; import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.ui.NavigationUI; @@ -24,6 +19,8 @@ import com.cappielloantonio.play.R; import com.cappielloantonio.play.broadcast.receiver.ConnectivityStatusBroadcastReceiver; import com.cappielloantonio.play.databinding.ActivityMainBinding; import com.cappielloantonio.play.repository.QueueRepository; +import com.cappielloantonio.play.service.MediaManager; +import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.ui.activity.base.BaseActivity; import com.cappielloantonio.play.ui.dialog.ConnectionAlertDialog; import com.cappielloantonio.play.ui.dialog.ServerUnreachableDialog; @@ -32,10 +29,8 @@ import com.cappielloantonio.play.util.PreferenceUtil; import com.cappielloantonio.play.viewmodel.MainViewModel; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomsheet.BottomSheetBehavior; -import com.google.common.util.concurrent.MoreExecutors; import java.util.Objects; -import java.util.concurrent.ExecutionException; public class MainActivity extends BaseActivity { private static final String TAG = "MainActivity"; @@ -67,10 +62,15 @@ public class MainActivity extends BaseActivity { checkConnectionType(); } + @Override + protected void onStart() { + super.onStart(); + init(); + } + @Override protected void onResume() { super.onResume(); - init(); pingServer(); } @@ -94,6 +94,7 @@ public class MainActivity extends BaseActivity { initBottomSheet(); initNavigation(); + initServiceContent(); if (PreferenceUtil.getInstance(this).getToken() != null) { goFromLogin(); @@ -109,13 +110,7 @@ public class MainActivity extends BaseActivity { bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallback); fragmentManager.beginTransaction().replace(R.id.player_bottom_sheet, new PlayerBottomSheetFragment(), "PlayerBottomSheet").commit(); - getMediaBrowserListenableFuture().addListener(() -> { - try { - setBottomSheetInPeek(getMediaBrowserListenableFuture().get().getMediaItemCount() > 0); - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); + setBottomSheetInPeek(mainViewModel.isQueueLoaded()); } public void setBottomSheetInPeek(Boolean isVisible) { @@ -126,40 +121,6 @@ public class MainActivity extends BaseActivity { } } - public void setBottomSheetDraggableState(Boolean isDraggable) { - bottomSheetBehavior.setDraggable(isDraggable); - } - - private void initNavigation() { - bottomNavigationView = findViewById(R.id.bottom_navigation); - navHostFragment = (NavHostFragment) fragmentManager.findFragmentById(R.id.nav_host_fragment); - navController = Objects.requireNonNull(navHostFragment).getNavController(); - - /* - * In questo modo intercetto il cambio schermata tramite navbar e se il bottom sheet è aperto, - * lo chiudo - */ - navController.addOnDestinationChangedListener((controller, destination, arguments) -> { - if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED && ( - destination.getId() == R.id.homeFragment || - destination.getId() == R.id.libraryFragment || - destination.getId() == R.id.searchFragment || - destination.getId() == R.id.settingsFragment) - ) { - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); - } - }); - NavigationUI.setupWithNavController(bottomNavigationView, navController); - } - - public void setBottomNavigationBarVisibility(boolean visibility) { - if (visibility) { - bottomNavigationView.setVisibility(View.VISIBLE); - } else { - bottomNavigationView.setVisibility(View.GONE); - } - } - public void setBottomSheetVisibility(boolean visibility) { if (visibility) { findViewById(R.id.player_bottom_sheet).setVisibility(View.VISIBLE); @@ -168,6 +129,14 @@ public class MainActivity extends BaseActivity { } } + public void collapseBottomSheet() { + bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + + public void setBottomSheetDraggableState(Boolean isDraggable) { + bottomSheetBehavior.setDraggable(isDraggable); + } + private final BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override @@ -210,8 +179,39 @@ public class MainActivity extends BaseActivity { } }; - public void collapseBottomSheet() { - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + private void initNavigation() { + bottomNavigationView = findViewById(R.id.bottom_navigation); + navHostFragment = (NavHostFragment) fragmentManager.findFragmentById(R.id.nav_host_fragment); + navController = Objects.requireNonNull(navHostFragment).getNavController(); + + /* + * In questo modo intercetto il cambio schermata tramite navbar e se il bottom sheet è aperto, + * lo chiudo + */ + navController.addOnDestinationChangedListener((controller, destination, arguments) -> { + if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED && ( + destination.getId() == R.id.homeFragment || + destination.getId() == R.id.libraryFragment || + destination.getId() == R.id.searchFragment || + destination.getId() == R.id.settingsFragment) + ) { + bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + }); + + NavigationUI.setupWithNavController(bottomNavigationView, navController); + } + + public void setBottomNavigationBarVisibility(boolean visibility) { + if (visibility) { + bottomNavigationView.setVisibility(View.VISIBLE); + } else { + bottomNavigationView.setVisibility(View.GONE); + } + } + + private void initServiceContent() { + MediaManager.check(getMediaBrowserListenableFuture(), this); } private void goToLogin() {