Added Bluetooth connect permission and better UX for permissions
This commit is contained in:
parent
33bbc0d07e
commit
c8dbb0a0fd
11 changed files with 121 additions and 35 deletions
|
@ -15,6 +15,7 @@
|
|||
package code.name.monkey.retromusic.activities
|
||||
|
||||
import android.Manifest
|
||||
import android.Manifest.permission.BLUETOOTH_CONNECT
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.ColorStateList
|
||||
|
@ -57,6 +58,15 @@ class PermissionActivity : AbsMusicServiceActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
if (VersionUtils.hasS()) {
|
||||
binding.bluetoothPermission.show()
|
||||
binding.bluetoothPermission.setButtonClick {
|
||||
ActivityCompat.requestPermissions(this,
|
||||
arrayOf(BLUETOOTH_CONNECT),
|
||||
PERMISSION_REQUEST)
|
||||
}
|
||||
}
|
||||
|
||||
binding.finish.accentBackgroundColor()
|
||||
binding.finish.setOnClickListener {
|
||||
if (hasPermissions()) {
|
||||
|
@ -83,6 +93,7 @@ class PermissionActivity : AbsMusicServiceActivity() {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
binding.finish.isEnabled = hasStoragePermission()
|
||||
if (hasStoragePermission()) {
|
||||
binding.storagePermission.checkImage.isVisible = true
|
||||
binding.storagePermission.checkImage.imageTintList =
|
||||
|
@ -95,6 +106,13 @@ class PermissionActivity : AbsMusicServiceActivity() {
|
|||
ColorStateList.valueOf(accentColor())
|
||||
}
|
||||
}
|
||||
if (VersionUtils.hasS()) {
|
||||
if (hasBluetoothPermission()) {
|
||||
binding.bluetoothPermission.checkImage.isVisible = true
|
||||
binding.bluetoothPermission.checkImage.imageTintList =
|
||||
ColorStateList.valueOf(accentColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasStoragePermission(): Boolean {
|
||||
|
@ -102,6 +120,12 @@ class PermissionActivity : AbsMusicServiceActivity() {
|
|||
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
private fun hasBluetoothPermission(): Boolean {
|
||||
return ActivityCompat.checkSelfPermission(this,
|
||||
BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.M)
|
||||
private fun hasAudioPermission(): Boolean {
|
||||
return Settings.System.canWrite(this)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.activities
|
||||
|
||||
import android.Manifest.permission.BLUETOOTH_CONNECT
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
|
@ -22,14 +23,14 @@ import androidx.navigation.NavDestination
|
|||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.activities.base.AbsThemeActivity
|
||||
import code.name.monkey.retromusic.activities.base.AbsBaseActivity
|
||||
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
|
||||
import code.name.monkey.retromusic.databinding.ActivitySettingsBinding
|
||||
import code.name.monkey.retromusic.extensions.*
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.color.ColorCallback
|
||||
|
||||
class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListener {
|
||||
class SettingsActivity : AbsBaseActivity(), ColorCallback, OnThemeChangedListener {
|
||||
private lateinit var binding: ActivitySettingsBinding
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
val mSavedInstanceState = extra<Bundle>(TAG).value ?: savedInstanceState
|
||||
|
@ -37,6 +38,7 @@ class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListen
|
|||
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
setupToolbar()
|
||||
setPermissionDeniedMessage(getString(R.string.permission_bluetooth_denied))
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -81,6 +83,14 @@ class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListen
|
|||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun getPermissionsToRequest(): Array<String> {
|
||||
return if (VersionUtils.hasS()) {
|
||||
arrayOf(BLUETOOTH_CONNECT)
|
||||
} else {
|
||||
arrayOf()
|
||||
}
|
||||
}
|
||||
|
||||
override fun invoke(dialog: MaterialDialog, color: Int) {
|
||||
ThemeStore.editTheme(this).accentColor(color).commit()
|
||||
if (VersionUtils.hasNougatMR())
|
||||
|
|
|
@ -95,7 +95,9 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
|||
|
||||
protected fun hasPermissions(): Boolean {
|
||||
for (permission in permissions) {
|
||||
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.checkSelfPermission(this,
|
||||
permission) != PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
@ -105,7 +107,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
|||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String>,
|
||||
grantResults: IntArray
|
||||
grantResults: IntArray,
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
if (requestCode == PERMISSION_REQUEST) {
|
||||
|
@ -123,6 +125,22 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
|||
)
|
||||
.setAction(R.string.action_grant) { requestPermissions() }
|
||||
.setActionTextColor(accentColor()).show()
|
||||
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||
this@AbsBaseActivity, Manifest.permission.BLUETOOTH_CONNECT
|
||||
)
|
||||
) {
|
||||
// User has deny from permission dialog
|
||||
Snackbar.make(
|
||||
snackBarContainer,
|
||||
R.string.permission_bluetooth_denied,
|
||||
Snackbar.LENGTH_INDEFINITE
|
||||
)
|
||||
.setAction(R.string.action_grant) {
|
||||
ActivityCompat.requestPermissions(this,
|
||||
arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
|
||||
PERMISSION_REQUEST)
|
||||
}
|
||||
.setActionTextColor(accentColor()).show()
|
||||
} else {
|
||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
||||
Snackbar.make(
|
||||
|
@ -154,7 +172,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
|
|||
const val PERMISSION_REQUEST = 100
|
||||
}
|
||||
|
||||
// this lets keyboard close when clicked in backgroud
|
||||
// this lets keyboard close when clicked in background
|
||||
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
|
||||
if (event.action == MotionEvent.ACTION_DOWN) {
|
||||
val v = currentFocus
|
||||
|
|
|
@ -189,11 +189,7 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
|
|||
}
|
||||
|
||||
override fun getPermissionsToRequest(): Array<String> {
|
||||
return mutableListOf(
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
if (VersionUtils.hasS()) Manifest.permission.BLUETOOTH_CONNECT
|
||||
else Manifest.permission.BLUETOOTH
|
||||
).apply {
|
||||
return mutableListOf(Manifest.permission.READ_EXTERNAL_STORAGE).apply {
|
||||
if (!VersionUtils.hasQ()) {
|
||||
add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
}
|
||||
|
|
|
@ -54,7 +54,6 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
|||
import code.name.monkey.retromusic.service.MusicService
|
||||
import code.name.monkey.retromusic.util.MusicUtil
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import code.name.monkey.retromusic.util.ViewUtil
|
||||
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||
|
@ -264,11 +263,8 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play
|
|||
binding.playbackControlsFragment.songInfo.setTextColor(lastDisabledPlaybackControlsColor)
|
||||
|
||||
volumeFragment?.setTintableColor(lastPlaybackControlsColor.ripAlpha())
|
||||
ViewUtil.setProgressDrawable(
|
||||
binding.playbackControlsFragment.progressSlider,
|
||||
lastPlaybackControlsColor.ripAlpha(),
|
||||
true
|
||||
)
|
||||
|
||||
binding.playbackControlsFragment.progressSlider.applyColor(lastPlaybackControlsColor.ripAlpha())
|
||||
|
||||
updateRepeatState()
|
||||
updateShuffleState()
|
||||
|
|
|
@ -14,10 +14,15 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.fragments.settings
|
||||
|
||||
import android.Manifest.permission.BLUETOOTH_CONNECT
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||
import android.media.audiofx.AudioEffect
|
||||
import android.os.Bundle
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.preference.Preference
|
||||
import code.name.monkey.appthemehelper.util.VersionUtils
|
||||
import code.name.monkey.retromusic.BLUETOOTH_PLAYBACK
|
||||
import code.name.monkey.retromusic.EQUALIZER
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.util.NavigationUtil
|
||||
|
@ -28,17 +33,31 @@ import code.name.monkey.retromusic.util.NavigationUtil
|
|||
|
||||
class AudioSettings : AbsSettingsFragment() {
|
||||
override fun invalidateSettings() {
|
||||
val findPreference: Preference? = findPreference(EQUALIZER)
|
||||
val eqPreference: Preference? = findPreference(EQUALIZER)
|
||||
if (!hasEqualizer()) {
|
||||
findPreference?.isEnabled = false
|
||||
findPreference?.summary = resources.getString(R.string.no_equalizer)
|
||||
eqPreference?.isEnabled = false
|
||||
eqPreference?.summary = resources.getString(R.string.no_equalizer)
|
||||
} else {
|
||||
findPreference?.isEnabled = true
|
||||
eqPreference?.isEnabled = true
|
||||
}
|
||||
findPreference?.setOnPreferenceClickListener {
|
||||
eqPreference?.setOnPreferenceClickListener {
|
||||
NavigationUtil.openEqualizer(requireActivity())
|
||||
true
|
||||
}
|
||||
val bluetoothPreference: Preference? = findPreference(BLUETOOTH_PLAYBACK)
|
||||
if (VersionUtils.hasS()) {
|
||||
bluetoothPreference?.setOnPreferenceChangeListener { preference, newValue ->
|
||||
if (newValue as Boolean) {
|
||||
if (ActivityCompat.checkSelfPermission(requireContext(),
|
||||
BLUETOOTH_CONNECT) != PERMISSION_GRANTED
|
||||
) {
|
||||
ActivityCompat.requestPermissions(requireActivity(), arrayOf(
|
||||
BLUETOOTH_CONNECT), 100)
|
||||
}
|
||||
}
|
||||
return@setOnPreferenceChangeListener true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasEqualizer(): Boolean {
|
||||
|
|
|
@ -39,7 +39,7 @@ class PermissionItem @JvmOverloads constructor(
|
|||
binding.number.backgroundTintList =
|
||||
ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.22f))
|
||||
|
||||
binding.button.accentOutlineColor()
|
||||
if (!isInEditMode) binding.button.accentOutlineColor()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue