Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: #1574 previous button incorrect behaviour #1590

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion app/src/main/java/code/name/monkey/retromusic/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,6 @@ const val CIRCLE_PLAY_BUTTON = "circle_play_button"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val PAUSE_HISTORY = "pause_history"
const val MANAGE_AUDIO_FOCUS = "manage_audio_focus"
const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss"
const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss"
const val PREF_PREV_SONG_ON_BACK_HEADSET = "prev_song_on_back_h"
const val PREF_PREV_SONG_ON_BACK_BLUETOOTH = "prev_song_on_back_b"
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,21 @@
*/
package code.name.monkey.retromusic.fragments.settings

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.app.ActivityCompat
import androidx.core.os.LocaleListCompat
import androidx.preference.Preference
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.LANGUAGE_NAME
import code.name.monkey.retromusic.LAST_ADDED_CUTOFF
import code.name.monkey.retromusic.PREF_PREV_SONG_ON_BACK_BLUETOOTH
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.extensions.installLanguageAndRecreate
import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.ReloadType.HomeSections
Expand All @@ -37,6 +43,26 @@ class OtherSettingsFragment : AbsSettingsFragment() {
private val libraryViewModel by activityViewModel<LibraryViewModel>()

override fun invalidateSettings() {
val bluetoothPreference: Preference? = findPreference(PREF_PREV_SONG_ON_BACK_BLUETOOTH)
if (VersionUtils.hasS()) {
bluetoothPreference?.setOnPreferenceChangeListener { _, newValue ->
if (newValue as Boolean) {
if (ActivityCompat.checkSelfPermission(
requireContext(),
Manifest.permission.BLUETOOTH_CONNECT
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
requireActivity(), arrayOf(
Manifest.permission.BLUETOOTH_CONNECT
), AbsBaseActivity.BLUETOOTH_PERMISSION_REQUEST
)
}
}
return@setOnPreferenceChangeListener true
}
}

val languagePreference: ATEListPreference? = findPreference(LANGUAGE_NAME)
languagePreference?.setOnPreferenceChangeListener { _, _ ->
restartActivity()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,17 @@ import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.model.Playlist
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.*
import code.name.monkey.retromusic.repository.AlbumRepository
import code.name.monkey.retromusic.repository.ArtistRepository
import code.name.monkey.retromusic.repository.GenreRepository
import code.name.monkey.retromusic.repository.PlaylistRepository
import code.name.monkey.retromusic.repository.SongRepository
import code.name.monkey.retromusic.repository.TopPlayedRepository
import code.name.monkey.retromusic.service.MusicService.Companion.CYCLE_REPEAT
import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_FAVORITE
import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_SHUFFLE
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.logD
import code.name.monkey.retromusic.util.logE
import org.koin.core.component.KoinComponent
Expand Down Expand Up @@ -170,7 +176,12 @@ class MediaSessionCallback(

override fun onSkipToPrevious() {
super.onSkipToPrevious()
musicService.playPreviousSong(true)
if ((PreferenceUtil.shouldPreviousSongOnBackHeadset && musicService.isHeadsetConnected) ||
(PreferenceUtil.shouldPreviousSongOnBackBluetooth && musicService.isBluetoothConnected)) {
musicService.playPreviousSong(true)
} else {
musicService.back(true)
}
}

override fun onStop() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,39 @@
*/
package code.name.monkey.retromusic.service

import android.Manifest
import android.annotation.SuppressLint
import android.app.NotificationManager
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.bluetooth.BluetoothDevice
import android.content.*
import android.bluetooth.BluetoothManager
import android.bluetooth.BluetoothProfile
import android.content.BroadcastReceiver
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.content.pm.PackageManager
import android.content.pm.ServiceInfo
import android.database.ContentObserver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.Drawable
import android.media.AudioDeviceInfo
import android.media.AudioManager
import android.os.*
import android.os.Binder
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Bundle
import android.os.Handler
import android.os.HandlerThread
import android.os.IBinder
import android.os.Looper
import android.os.PowerManager
import android.os.PowerManager.WakeLock
import android.provider.MediaStore
import android.support.v4.media.MediaBrowserCompat
Expand All @@ -37,6 +54,7 @@ import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.app.ServiceCompat
import androidx.core.content.ContextCompat
import androidx.core.content.edit
Expand All @@ -45,9 +63,24 @@ import androidx.core.os.BundleCompat
import androidx.media.MediaBrowserServiceCompat
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.ALBUM_ART_ON_LOCK_SCREEN
import code.name.monkey.retromusic.BLURRED_ALBUM_ART
import code.name.monkey.retromusic.BuildConfig
import code.name.monkey.retromusic.CLASSIC_NOTIFICATION
import code.name.monkey.retromusic.COLORED_NOTIFICATION
import code.name.monkey.retromusic.CROSS_FADE_DURATION
import code.name.monkey.retromusic.PLAYBACK_PITCH
import code.name.monkey.retromusic.PLAYBACK_SPEED
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.TOGGLE_HEADSET
import code.name.monkey.retromusic.activities.LockScreenActivity
import code.name.monkey.retromusic.appwidgets.*
import code.name.monkey.retromusic.appwidgets.AppWidgetBig
import code.name.monkey.retromusic.appwidgets.AppWidgetCard
import code.name.monkey.retromusic.appwidgets.AppWidgetCircle
import code.name.monkey.retromusic.appwidgets.AppWidgetClassic
import code.name.monkey.retromusic.appwidgets.AppWidgetMD3
import code.name.monkey.retromusic.appwidgets.AppWidgetSmall
import code.name.monkey.retromusic.appwidgets.AppWidgetText
import code.name.monkey.retromusic.auto.AutoMediaIDHelper
import code.name.monkey.retromusic.auto.AutoMusicProvider
import code.name.monkey.retromusic.extensions.showToast
Expand Down Expand Up @@ -89,12 +122,18 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.target.Target
import com.bumptech.glide.request.transition.Transition
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.Default
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.java.KoinJavaComponent.get
import java.util.*
import java.util.Objects
import java.util.Random


/**
Expand Down Expand Up @@ -232,7 +271,31 @@ class MusicService : MediaBrowserServiceCompat(),
@JvmField
var shuffleMode = 0
private val songPlayCountHelper = SongPlayCountHelper()

val isHeadsetConnected: Boolean
get(){
val audioManager = ContextCompat.getSystemService(this, AudioManager::class.java)
?: return false
return VersionUtils.hasMarshmallow() &&
audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { device ->
device.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES
|| device.type == AudioDeviceInfo.TYPE_WIRED_HEADSET
}
}
val isBluetoothConnected: Boolean
get() {
val bluetoothAdapter = ContextCompat.getSystemService(
this,
BluetoothManager::class.java
)?.adapter ?: return false
if(VersionUtils.hasS() &&
ActivityCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED){
return false
}
val headsetState = bluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET)
return (headsetState == BluetoothProfile.STATE_CONNECTED)
}
private val bluetoothReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,18 @@ object PreferenceUtil {
MANAGE_AUDIO_FOCUS, false
)


val shouldPreviousSongOnBackHeadset
get() = sharedPreferences.getBoolean(
PREF_PREV_SONG_ON_BACK_HEADSET, false
)

val shouldPreviousSongOnBackBluetooth
get() = sharedPreferences.getBoolean(
PREF_PREV_SONG_ON_BACK_BLUETOOTH, false
)


val isLockScreen get() = sharedPreferences.getBoolean(LOCK_SCREEN, false)

@Suppress("deprecation")
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -563,4 +563,9 @@
<string name="you_will_be_forwarded_to_the_issue_tracker_website">You will be forwarded to the issue tracker website.</string>
<string name="your_account_data_is_only_used_for_authentication">Your account data is only used for authentication.</string>
<string name="could_not_write_tags_to_file">Could not write tags to the music file!</string>
<string name="pref_header_media_back_behavior">Previous Media Button Behavior</string>
<string name="pref_title_prev_song_on_back_headset">Previous song on headset</string>
<string name="pref_title_prev_song_on_back_bluetooth">Previous song on bluetooth</string>
<string name="pref_summary_prev_song_on_back_headset">Media button will play the previous song instead of seeking to start of media, when connected to a headset</string>
<string name="pref_summary_prev_song_on_back_bluetooth">Media button will play the previous song instead of seeking to start of media, when connected to a blueooth device</string>
</resources>
21 changes: 21 additions & 0 deletions app/src/main/res/xml/pref_advanced.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,27 @@


</code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceCategory>

<code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceCategory
android:layout="@layout/preference_category_title"
android:title="@string/pref_header_media_back_behavior">

<code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreference
android:defaultValue="false"
android:key="prev_song_on_back_h"
android:layout="@layout/list_item_view_switch"
android:summary="@string/pref_summary_prev_song_on_back_headset"
android:title="@string/pref_title_prev_song_on_back_headset" />

<code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreference
android:defaultValue="false"
android:key="prev_song_on_back_b"
android:layout="@layout/list_item_view_switch"
android:summary="@string/pref_summary_prev_song_on_back_bluetooth"
android:title="@string/pref_title_prev_song_on_back_bluetooth" />

</code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceCategory>

<code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference
android:defaultValue="auto"
android:entries="@array/pref_language_names"
Expand Down