Skip to content

Commit

Permalink
feat(app): add option to disable skip buttons for unsaved presets
Browse files Browse the repository at this point in the history
resolves #683
  • Loading branch information
ashutoshgngwr committed Jul 12, 2021
1 parent fd50c28 commit 69aeea1
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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())

Expand Down Expand Up @@ -90,14 +92,16 @@ 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))
}

private fun onPlaybackUpdate(state: Int, players: Map<String, Player>) {
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)
Expand All @@ -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<Player>): String {
val name = getString(R.string.unsaved_preset)
private fun getCurrentPreset(players: Collection<Player>): 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 }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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
)
)

Expand All @@ -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
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ff000000"
android:pathData="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm0.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z" />
</vector>
1 change: 1 addition & 0 deletions app/src/main/res/values/donottranslate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@
<string name="should_display_sound_icons_key">should_display_sound_icons</string>
<string name="others_key">others</string>
<string name="should_share_usage_data_key">should_share_usage_data</string>
<string name="should_allow_skipping_unsaved_presets_key">should_allow_skipping_unsaved_presets</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -227,4 +227,6 @@
<string name="others">Others</string>
<string name="should_share_usage_data">Share usage and behaviour data</string>
<string name="should_share_usage_data_summary">Automatically share usage and behaviour data with the developers</string>
<string name="should_allow_skipping_unsaved_presets">Allow skipping unsaved presets</string>
<string name="should_allow_skipping_unsaved_presets_summary">When playing unsaved presets, enable skip buttons in player notification to generate random presets</string>
</resources>
7 changes: 7 additions & 0 deletions app/src/main/res/xml/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@
android:summaryOn="@string/ignore_audio_focus_changes_summary_on"
android:title="@string/ignore_audio_focus_changes" />

<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_settings_skip_unsaved_presets"
android:key="@string/should_allow_skipping_unsaved_presets_key"
android:summary="@string/should_allow_skipping_unsaved_presets_summary"
android:title="@string/should_allow_skipping_unsaved_presets" />

</PreferenceCategory>

<PreferenceCategory android:title="@string/saved_presets">
Expand Down

0 comments on commit 69aeea1

Please sign in to comment.