diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java index 7337e930..a6842512 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/PlaylistChooserDialog.java @@ -27,7 +27,6 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba private PlaylistDialogHorizontalAdapter playlistDialogHorizontalAdapter; - private boolean SkipDuplicates; @NonNull @Override @@ -80,15 +79,10 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba private void initPlaylistView() { bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); bind.playlistDialogRecyclerView.setHasFixedSize(true); - SkipDuplicates = true; playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(this); bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter); - bind.playlistChooserDialogSkipDuplicates.setOnCheckedChangeListener((__, isChecked) -> { - SkipDuplicates = isChecked; - }); - playlistChooserViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> { if (playlists != null) { if (!playlists.isEmpty()) { @@ -107,7 +101,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba public void onPlaylistClick(Bundle bundle) { if (playlistChooserViewModel.getSongsToAdd() != null && !playlistChooserViewModel.getSongsToAdd().isEmpty()) { Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT); - playlistChooserViewModel.addSongsToPlaylist(this, getDialog(), playlist.getId(), SkipDuplicates); + playlistChooserViewModel.addSongsToPlaylist(this, getDialog(), playlist.getId()); } else { Toast.makeText(requireContext(), R.string.playlist_chooser_dialog_toast_add_failure, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt b/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt index 8c77ab13..81197abe 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt +++ b/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt @@ -69,6 +69,7 @@ object Preferences { private const val NEXT_UPDATE_CHECK = "next_update_check" private const val CONTINUOUS_PLAY = "continuous_play" private const val LAST_INSTANT_MIX = "last_instant_mix" + private const val ALLOW_PLAYLIST_DUPLICATES = "allow_playlist_duplicates" @JvmStatic @@ -538,4 +539,17 @@ object Preferences { LAST_INSTANT_MIX, 0 ) + 5000 < System.currentTimeMillis() } + + @JvmStatic + fun setAllowPlaylistDuplicates(allowDuplicates: Boolean) { + return App.getInstance().preferences.edit().putString( + ALLOW_PLAYLIST_DUPLICATES, + allowDuplicates.toString() + ).apply() + } + + @JvmStatic + fun allowPlaylistDuplicates(): Boolean { + return App.getInstance().preferences.getBoolean(ALLOW_PLAYLIST_DUPLICATES, false) + } } \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java index 89a948e4..ca7af150 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlaylistChooserViewModel.java @@ -2,6 +2,7 @@ package com.cappielloantonio.tempo.viewmodel; import android.app.Application; import android.app.Dialog; +import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; @@ -12,6 +13,7 @@ import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.tempo.repository.PlaylistRepository; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.subsonic.models.Playlist; +import com.cappielloantonio.tempo.util.Preferences; import com.google.common.collect.Lists; import java.util.ArrayList; @@ -34,9 +36,12 @@ public class PlaylistChooserViewModel extends AndroidViewModel { return playlists; } - public void addSongsToPlaylist(LifecycleOwner owner, Dialog dialog, String playlistId, boolean skipDuplicates) { + public void addSongsToPlaylist(LifecycleOwner owner, Dialog dialog, String playlistId) { List songIds = Lists.transform(toAdd, Child::getId); - if (skipDuplicates) { + if (Preferences.allowPlaylistDuplicates()) { + playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(songIds)); + dialog.dismiss(); + } else { playlistRepository.getPlaylistSongs(playlistId).observe(owner, playlistSongs -> { if (playlistSongs != null) { List playlistSongIds = Lists.transform(playlistSongs, Child::getId); @@ -45,9 +50,6 @@ public class PlaylistChooserViewModel extends AndroidViewModel { playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(songIds)); dialog.dismiss(); }); - } else { - playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(songIds)); - dialog.dismiss(); } } diff --git a/app/src/main/res/layout/dialog_playlist_chooser.xml b/app/src/main/res/layout/dialog_playlist_chooser.xml index 76a44147..3be03136 100644 --- a/app/src/main/res/layout/dialog_playlist_chooser.xml +++ b/app/src/main/res/layout/dialog_playlist_chooser.xml @@ -23,12 +23,4 @@ android:layout_weight="1" android:layout_marginTop="8dp" android:clipToPadding="false" /> - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fbdcff4b..eb8abbc4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,7 +207,6 @@ Cancel Create Add to a playlist - Skip duplicates Added song to playlist Failed to add song to playlist %1$d tracks • %2$s @@ -276,6 +275,8 @@ Tempo is an open source and lightweight music client for Subsonic, designed and built natively for Android. About Always on display + Allow adding duplicates to playlist + If enabled, duplicates won\'t be checked while adding to a playlist. Transcode format If enabled, Tempo will not force download the track with the transcode settings below. Prioritize server settings used for streaming in downloads diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 09afcb1d..81ce41df 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -2,9 +2,10 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + android:summary="@string/settings_equalizer_summary" + android:title="@string/settings_equalizer_title" /> + app:title="@string/settings_language" /> + android:title="@string/settings_rounded_corner" /> + android:title="@string/settings_audio_quality" /> + + + +