feat: added preference to disable heart and show shuffle instead

This commit is contained in:
eddyizm 2025-10-05 12:59:24 -07:00
parent 791190f681
commit 9a64eeabe6
No known key found for this signature in database
GPG key ID: CF5F671829E8158A
5 changed files with 53 additions and 24 deletions

View file

@ -117,6 +117,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
actionDeleteDownloadStorage(); actionDeleteDownloadStorage();
actionKeepScreenOn(); actionKeepScreenOn();
actionAutoDownloadLyrics(); actionAutoDownloadLyrics();
actionMiniPlayerHeart();
bindMediaService(); bindMediaService();
actionAppEqualizer(); actionAppEqualizer();
@ -358,6 +359,21 @@ public class SettingsFragment extends PreferenceFragmentCompat {
}); });
} }
private void actionMiniPlayerHeart() {
SwitchPreference preference = findPreference("mini_shuffle_button_visibility");
if (preference == null) {
return;
}
preference.setChecked(Preferences.showShuffleInsteadOfHeart());
preference.setOnPreferenceChangeListener((pref, newValue) -> {
if (newValue instanceof Boolean) {
Preferences.setShuffleInsteadOfHeart((Boolean) newValue);
}
return true;
});
}
private void actionAutoDownloadLyrics() { private void actionAutoDownloadLyrics() {
SwitchPreference preference = findPreference("auto_download_lyrics"); SwitchPreference preference = findPreference("auto_download_lyrics");
if (preference == null) { if (preference == null) {

View file

@ -73,6 +73,7 @@ object Preferences {
private const val LAST_INSTANT_MIX = "last_instant_mix" private const val LAST_INSTANT_MIX = "last_instant_mix"
private const val EQUALIZER_ENABLED = "equalizer_enabled" private const val EQUALIZER_ENABLED = "equalizer_enabled"
private const val EQUALIZER_BAND_LEVELS = "equalizer_band_levels" private const val EQUALIZER_BAND_LEVELS = "equalizer_band_levels"
private const val MINI_SHUFFLE_BUTTON_VISIBILITY = "mini_shuffle_button_visibility"
@JvmStatic @JvmStatic
fun getServer(): String? { fun getServer(): String? {
@ -359,6 +360,16 @@ object Preferences {
).apply() ).apply()
} }
@JvmStatic
fun showShuffleInsteadOfHeart(): Boolean {
return App.getInstance().preferences.getBoolean(MINI_SHUFFLE_BUTTON_VISIBILITY, false)
}
@JvmStatic
fun setShuffleInsteadOfHeart(enabled: Boolean) {
App.getInstance().preferences.edit().putBoolean(MINI_SHUFFLE_BUTTON_VISIBILITY, enabled).apply()
}
@JvmStatic @JvmStatic
fun showServerUnreachableDialog(): Boolean { fun showServerUnreachableDialog(): Boolean {
return App.getInstance().preferences.getLong( return App.getInstance().preferences.getLong(

View file

@ -335,6 +335,8 @@
<string name="settings_queue_syncing_countdown">Sync timer</string> <string name="settings_queue_syncing_countdown">Sync timer</string>
<string name="settings_queue_syncing_summary">If enabled, the user will have the ability to save their play queue and will have the ability to load state when opening the application.</string> <string name="settings_queue_syncing_summary">If enabled, the user will have the ability to save their play queue and will have the ability to load state when opening the application.</string>
<string name="settings_queue_syncing_title">Sync play queue for this user [Not Fully Baked]</string> <string name="settings_queue_syncing_title">Sync play queue for this user [Not Fully Baked]</string>
<string name="settings_show_mini_shuffle_button">Show Shuffle button</string>
<string name="settings_show_mini_shuffle_button_summary">If enabled, show the shuffle button, remove the heart in the mini player</string>
<string name="settings_radio">Show radio</string> <string name="settings_radio">Show radio</string>
<string name="settings_radio_summary">If enabled, show the radio section. Restart the app for it to take full effect.</string> <string name="settings_radio_summary">If enabled, show the radio section. Restart the app for it to take full effect.</string>
<string name="settings_auto_download_lyrics">Auto download lyrics</string> <string name="settings_auto_download_lyrics">Auto download lyrics</string>

View file

@ -97,6 +97,13 @@
android:defaultValue="true" android:defaultValue="true"
android:summary="@string/settings_music_directory_summary" android:summary="@string/settings_music_directory_summary"
android:key="music_directory_section_visibility" /> android:key="music_directory_section_visibility" />
<SwitchPreference
android:title="@string/settings_show_mini_shuffle_button"
android:defaultValue="false"
android:summary="@string/settings_show_mini_shuffle_button_summary"
android:key="mini_shuffle_button_visibility" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory app:title="@string/settings_title_data"> <PreferenceCategory app:title="@string/settings_title_data">

View file

@ -32,6 +32,7 @@ import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_REPEAT_MO
import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF
import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_ON import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_ON
import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableList
import com.cappielloantonio.tempo.util.Preferences
import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.Futures
import com.google.common.util.concurrent.ListenableFuture import com.google.common.util.concurrent.ListenableFuture
import retrofit2.Call import retrofit2.Call
@ -180,11 +181,22 @@ open class MediaLibrarySessionCallback(
private fun buildCustomLayout(player: Player, isRatingPending: Boolean = false): ImmutableList<CommandButton> { private fun buildCustomLayout(player: Player, isRatingPending: Boolean = false): ImmutableList<CommandButton> {
val customLayout = mutableListOf<CommandButton>() val customLayout = mutableListOf<CommandButton>()
//TODO: create a user setting to decide which of the buttons to show on the mini player val showShuffle = Preferences.showShuffleInsteadOfHeart()
// // Add shuffle button
// customLayout.add( if (!showShuffle) {
// if (player.shuffleModeEnabled) customCommandToggleShuffleModeOff else customCommandToggleShuffleModeOn if (player.currentMediaItem != null && !isRatingPending) {
// ) // Heart button
if ((player.mediaMetadata.userRating as HeartRating?)?.isHeart == true) {
customLayout.add(customCommandToggleHeartOff)
} else {
customLayout.add(customCommandToggleHeartOn)
}
}
} else {
customLayout.add(
if (player.shuffleModeEnabled) customCommandToggleShuffleModeOff else customCommandToggleShuffleModeOn
)
}
// Add repeat button // Add repeat button
val repeatButton = when (player.repeatMode) { val repeatButton = when (player.repeatMode) {
@ -194,25 +206,6 @@ open class MediaLibrarySessionCallback(
} }
customLayout.add(repeatButton) customLayout.add(repeatButton)
// HEART_DEBUG logging
Log.d("HEART_DEBUG:", "Current media item: ${player.currentMediaItem}")
Log.d("HEART_DEBUG:", "User rating: ${player.mediaMetadata.userRating}")
Log.d("HEART_DEBUG:", "Is rating pending: $isRatingPending")
// Add heart button if there's a current media item
if (player.currentMediaItem != null) {
if (isRatingPending) {
customLayout.add(customCommandToggleHeartLoading)
} else if ((player.mediaMetadata.userRating as HeartRating?)?.isHeart == true) {
customLayout.add(customCommandToggleHeartOff)
} else {
customLayout.add(customCommandToggleHeartOn)
}
} else {
Log.d("HEART_DEBUG:", "No current media item - skipping heart button")
}
return ImmutableList.copyOf(customLayout) return ImmutableList.copyOf(customLayout)
} }