Added settings for play queue sync functionality

This commit is contained in:
antonio 2023-03-14 11:55:35 +01:00
parent 74ff105eee
commit a130fb38cc
8 changed files with 115 additions and 40 deletions

View file

@ -33,6 +33,7 @@ import com.cappielloantonio.play.subsonic.models.PlayQueue;
import com.cappielloantonio.play.ui.fragment.pager.PlayerControllerVerticalPager;
import com.cappielloantonio.play.util.Constants;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.util.Preferences;
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
import com.google.android.material.elevation.SurfaceColors;
import com.google.common.util.concurrent.ListenableFuture;
@ -255,38 +256,40 @@ public class PlayerBottomSheetFragment extends Fragment {
}
private void setHeaderBookmarksButton() {
playerBottomSheetViewModel.getPlayQueue().observeForever(new Observer<PlayQueue>() {
@Override
public void onChanged(PlayQueue playQueue) {
playerBottomSheetViewModel.getPlayQueue().removeObserver(this);
if (Preferences.isSyncronizationEnabled()) {
playerBottomSheetViewModel.getPlayQueue().observeForever(new Observer<PlayQueue>() {
@Override
public void onChanged(PlayQueue playQueue) {
playerBottomSheetViewModel.getPlayQueue().removeObserver(this);
if (bind == null) return;
if (bind == null) return;
if (playQueue != null && !playQueue.getEntries().isEmpty()) {
int index = IntStream.range(0, playQueue.getEntries().size()).filter(ix -> playQueue.getEntries().get(ix).getId().equals(playQueue.getCurrent())).findFirst().orElse(-1);
if (playQueue != null && !playQueue.getEntries().isEmpty()) {
int index = IntStream.range(0, playQueue.getEntries().size()).filter(ix -> playQueue.getEntries().get(ix).getId().equals(playQueue.getCurrent())).findFirst().orElse(-1);
if (index != -1) {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.VISIBLE);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnClickListener(v -> {
MediaManager.startQueue(mediaBrowserListenableFuture, playQueue.getEntries(), index);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
});
if (index != -1) {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.VISIBLE);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnClickListener(v -> {
MediaManager.startQueue(mediaBrowserListenableFuture, playQueue.getEntries(), index);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
});
}
} else {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnClickListener(null);
}
} else {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnClickListener(null);
}
}
});
});
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnLongClickListener(v -> {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
return false;
});
new Handler().postDelayed(() -> {
if (bind != null)
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setOnLongClickListener(v -> {
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
}, 5000);
return false;
});
new Handler().postDelayed(() -> {
if (bind != null)
bind.playerHeaderLayout.playerHeaderBookmarkMediaButton.setVisibility(View.GONE);
}, Preferences.getSyncCountdownTimer() * 1000L);
}
}
}

View file

@ -30,6 +30,7 @@ import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
import com.cappielloantonio.play.util.Constants;
import com.cappielloantonio.play.util.DownloadUtil;
import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.util.Preferences;
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
import com.google.android.material.snackbar.Snackbar;
import com.google.common.util.concurrent.ListenableFuture;
@ -86,6 +87,9 @@ public class PlayerCoverFragment extends Fragment {
TransitionManager.beginDelayedTransition(bind.getRoot(), transition);
bind.nowPlayingSongCoverButtonGroup.setVisibility(isVisible ? View.VISIBLE : View.GONE);
bind.innerButtonBottomRight.setVisibility(Preferences.isSyncronizationEnabled() ? View.VISIBLE : View.GONE);
bind.innerButtonBottomRightAlternative.setVisibility(Preferences.isSyncronizationEnabled() ? View.GONE : View.VISIBLE);
}
private void initInnerButton() {
@ -119,6 +123,15 @@ public class PlayerCoverFragment extends Fragment {
Snackbar.make(requireView(), "Salvato", Snackbar.LENGTH_LONG).show();
}
});
bind.innerButtonBottomRightAlternative.setOnClickListener(view -> {
if (getActivity() != null) {
PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) requireActivity().getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet");
if (playerBottomSheetFragment != null) {
playerBottomSheetFragment.goToLyricsPage();
}
}
});
}
});
}

View file

@ -1,7 +1,6 @@
package com.cappielloantonio.play.util
import com.cappielloantonio.play.App
import com.cappielloantonio.play.helper.ThemeHelper
object Preferences {
const val THEME = "theme"
@ -24,6 +23,8 @@ object Preferences {
private const val DATA_SAVING_MODE = "data_saving_mode"
private const val SERVER_UNREACHABLE = "server_unreachable"
private const val SYNC_STARRED_TRACKS_FOR_OFFLINE_USE = "sync_starred_tracks_for_offline_use"
private const val QUEUE_SYNCING = "queue_syncing"
private const val QUEUE_SYNCING_COUNTDOWN = "queue_syncing_countdown"
@JvmStatic
fun getServer(): String? {
@ -112,14 +113,12 @@ object Preferences {
@JvmStatic
fun setSkipSilenceMode(isSkipSilenceMode: Boolean) {
App.getInstance().preferences.edit().putBoolean(SKIP_SILENCE, isSkipSilenceMode)
.apply()
App.getInstance().preferences.edit().putBoolean(SKIP_SILENCE, isSkipSilenceMode).apply()
}
@JvmStatic
fun getImageCacheSize(): Int {
return App.getInstance().preferences.getString(IMAGE_CACHE_SIZE, "500")!!
.toInt()
return App.getInstance().preferences.getString(IMAGE_CACHE_SIZE, "500")!!.toInt()
}
@JvmStatic
@ -159,14 +158,13 @@ object Preferences {
@JvmStatic
fun setDataSavingMode(isDataSavingModeEnabled: Boolean) {
App.getInstance().preferences.edit()
.putBoolean(DATA_SAVING_MODE, isDataSavingModeEnabled).apply()
App.getInstance().preferences.edit().putBoolean(DATA_SAVING_MODE, isDataSavingModeEnabled)
.apply()
}
@JvmStatic
fun isStarredSyncEnabled(): Boolean {
return App.getInstance().preferences
.getBoolean(SYNC_STARRED_TRACKS_FOR_OFFLINE_USE, false)
return App.getInstance().preferences.getBoolean(SYNC_STARRED_TRACKS_FOR_OFFLINE_USE, false)
}
@JvmStatic
@ -179,14 +177,22 @@ object Preferences {
@JvmStatic
fun showServerUnreachableDialog(): Boolean {
return App.getInstance().preferences.getLong(
SERVER_UNREACHABLE,
0
SERVER_UNREACHABLE, 0
) + 360000 < System.currentTimeMillis()
}
@JvmStatic
fun setServerUnreachableDatetime(datetime: Long) {
App.getInstance().preferences.edit()
.putLong(SERVER_UNREACHABLE, datetime).apply()
App.getInstance().preferences.edit().putLong(SERVER_UNREACHABLE, datetime).apply()
}
@JvmStatic
fun isSyncronizationEnabled(): Boolean {
return App.getInstance().preferences.getBoolean(QUEUE_SYNCING, false)
}
@JvmStatic
fun getSyncCountdownTimer(): Int {
return App.getInstance().preferences.getString(QUEUE_SYNCING_COUNTDOWN, "5")!!.toInt()
}
}