diff --git a/app/src/main/java/com/github/ashutoshgngwr/noice/MediaPlayerService.kt b/app/src/main/java/com/github/ashutoshgngwr/noice/MediaPlayerService.kt index 0cad61239..06ea097d8 100644 --- a/app/src/main/java/com/github/ashutoshgngwr/noice/MediaPlayerService.kt +++ b/app/src/main/java/com/github/ashutoshgngwr/noice/MediaPlayerService.kt @@ -24,6 +24,7 @@ import com.github.ashutoshgngwr.noice.playback.Player import com.github.ashutoshgngwr.noice.playback.PlayerManager import com.github.ashutoshgngwr.noice.playback.PlayerNotificationManager import com.github.ashutoshgngwr.noice.repository.PresetRepository +import com.github.ashutoshgngwr.noice.repository.SettingsRepository import org.greenrobot.eventbus.EventBus import java.util.concurrent.TimeUnit @@ -49,6 +50,7 @@ class MediaPlayerService : Service() { private lateinit var mediaSession: MediaSessionCompat private lateinit var playerManager: PlayerManager private lateinit var presetRepository: PresetRepository + private lateinit var settingsRepository: SettingsRepository private val handler = Handler(Looper.getMainLooper()) @@ -90,6 +92,7 @@ class MediaPlayerService : Service() { playerManager.setPlaybackUpdateListener(this::onPlaybackUpdate) presetRepository = PresetRepository.newInstance(this) + settingsRepository = SettingsRepository.newInstance(this) PlayerNotificationManager.createChannel(this) registerReceiver(becomingNoisyReceiver, IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) } @@ -97,7 +100,8 @@ class MediaPlayerService : Service() { private fun onPlaybackUpdate(state: Int, players: Map) { EventBus.getDefault().postSticky(PlaybackUpdateEvent(state, players)) - val title = getCurrentPresetName(players.values) + val currentPreset = getCurrentPreset(players.values) + val title = currentPreset?.name ?: getString(R.string.unsaved_preset) mediaSession.setMetadata( MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) @@ -111,19 +115,21 @@ class MediaPlayerService : Service() { wakeLock.acquire(WAKELOCK_TIMEOUT) startForeground( FOREGROUND_ID, - PlayerNotificationManager.createNotification(this, mediaSession, title) + PlayerNotificationManager.createNotification( + this, mediaSession, title, + currentPreset != null || settingsRepository.shouldAllowSkippingUnsavedPresets() + ) ) } } - private fun getCurrentPresetName(players: Collection): String { - val name = getString(R.string.unsaved_preset) + private fun getCurrentPreset(players: Collection): Preset? { if (players.isEmpty()) { - return name + return null } return Preset.from("", players).let { - presetRepository.list().find { p -> p == it }?.name ?: name + presetRepository.list().find { p -> p == it } } } diff --git a/app/src/main/java/com/github/ashutoshgngwr/noice/playback/PlayerNotificationManager.kt b/app/src/main/java/com/github/ashutoshgngwr/noice/playback/PlayerNotificationManager.kt index dbc437e59..3b5d8b773 100644 --- a/app/src/main/java/com/github/ashutoshgngwr/noice/playback/PlayerNotificationManager.kt +++ b/app/src/main/java/com/github/ashutoshgngwr/noice/playback/PlayerNotificationManager.kt @@ -3,6 +3,7 @@ package com.github.ashutoshgngwr.noice.playback import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager +import android.app.PendingIntent import android.content.Context import android.os.Build import android.support.v4.media.session.MediaSessionCompat @@ -37,7 +38,8 @@ object PlayerNotificationManager { fun createNotification( context: Context, mediaSession: MediaSessionCompat, - title: String + title: String, + enableSkipButtons: Boolean, ): Notification { return with(NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)) { color = ContextCompat.getColor(context, R.color.primary_dark) @@ -57,11 +59,16 @@ object PlayerNotificationManager { } ) + var skipPrevIntent: PendingIntent? = null + if (enableSkipButtons) { + skipPrevIntent = PlaybackController.buildSkipPrevActionPendingIntent(context) + } + addAction( NotificationCompat.Action( R.drawable.ic_noti_prev, context.getString(R.string.skip_to_prev), - PlaybackController.buildSkipPrevActionPendingIntent(context) + skipPrevIntent ) ) @@ -83,11 +90,16 @@ object PlayerNotificationManager { ) } + var skipNextIntent: PendingIntent? = null + if (enableSkipButtons) { + skipNextIntent = PlaybackController.buildSkipNextActionPendingIntent(context) + } + addAction( NotificationCompat.Action( R.drawable.ic_noti_next, context.getString(R.string.skip_to_next), - PlaybackController.buildSkipNextActionPendingIntent(context) + skipNextIntent ) ) diff --git a/app/src/main/java/com/github/ashutoshgngwr/noice/repository/SettingsRepository.kt b/app/src/main/java/com/github/ashutoshgngwr/noice/repository/SettingsRepository.kt index 45127057b..3b7bb6ca1 100644 --- a/app/src/main/java/com/github/ashutoshgngwr/noice/repository/SettingsRepository.kt +++ b/app/src/main/java/com/github/ashutoshgngwr/noice/repository/SettingsRepository.kt @@ -97,4 +97,13 @@ class SettingsRepository private constructor(private val context: Context) { fun setShouldShareUsageData(enabled: Boolean) { prefs.edit { putBoolean(context.getString(R.string.should_share_usage_data_key), enabled) } } + + /** + * Returns the value of switch preference with key [R.string.should_allow_skipping_unsaved_presets_key] + */ + fun shouldAllowSkippingUnsavedPresets(): Boolean { + return prefs.getBoolean( + context.getString(R.string.should_allow_skipping_unsaved_presets_key), true + ) + } } diff --git a/app/src/main/res/drawable/ic_settings_skip_unsaved_presets.xml b/app/src/main/res/drawable/ic_settings_skip_unsaved_presets.xml new file mode 100644 index 000000000..7eaaa4892 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_skip_unsaved_presets.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 9d2dbfe34..f24256205 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -30,4 +30,5 @@ should_display_sound_icons others should_share_usage_data + should_allow_skipping_unsaved_presets diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 32aea038a..0ee153768 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -227,4 +227,6 @@ Others Share usage and behaviour data Automatically share usage and behaviour data with the developers + Allow skipping unsaved presets + When playing unsaved presets, enable skip buttons in player notification to generate random presets \ No newline at end of file diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 66eb4dec1..ed899ac8f 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -28,6 +28,13 @@ android:summaryOn="@string/ignore_audio_focus_changes_summary_on" android:title="@string/ignore_audio_focus_changes" /> + +