May 07, 2022
v5.8.3
diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
index 04f7a0e2f..59532ab49 100644
--- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
@@ -167,4 +167,5 @@ const val SCREEN_ON_LYRICS = "screen_on_lyrics"
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"
\ No newline at end of file
+const val MANAGE_AUDIO_FOCUS = "manage_audio_focus"
+const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss"
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
index 74d173fc5..b338915ea 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt
@@ -148,7 +148,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
- if (key == GENERAL_THEME || key == MATERIAL_YOU || key == WALLPAPER_ACCENT || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES || key == CUSTOM_FONT || key == APPBAR_MODE || key == CIRCLE_PLAY_BUTTON) {
+ if (key == GENERAL_THEME || key == MATERIAL_YOU || key == WALLPAPER_ACCENT || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES || key == CUSTOM_FONT || key == APPBAR_MODE || key == CIRCLE_PLAY_BUTTON || key == SWIPE_DOWN_DISMISS) {
postRecreate()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt
index 3344f8e05..e9bd00667 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt
@@ -27,10 +27,10 @@ import androidx.core.net.toUri
import androidx.core.text.parseAsHtml
import androidx.core.view.isVisible
import code.name.monkey.appthemehelper.util.VersionUtils
+import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity
import code.name.monkey.retromusic.databinding.ActivityPermissionBinding
import code.name.monkey.retromusic.extensions.*
-import code.name.monkey.retromusic.util.RingtoneManager
class PermissionActivity : AbsMusicServiceActivity() {
private lateinit var binding: ActivityPermissionBinding
@@ -49,7 +49,7 @@ class PermissionActivity : AbsMusicServiceActivity() {
if (VersionUtils.hasMarshmallow()) {
binding.audioPermission.show()
binding.audioPermission.setButtonClick {
- if (RingtoneManager.requiresDialog(this@PermissionActivity)) {
+ if (hasAudioPermission()) {
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
intent.data = ("package:" + applicationContext.packageName).toUri()
startActivity(intent)
@@ -75,7 +75,8 @@ class PermissionActivity : AbsMusicServiceActivity() {
val color = accentColor()
val hexColor = String.format("#%06X", 0xFFFFFF and color)
val appName =
- "Hello there!
Welcome to
Retro Music"
+ getString(R.string.message_welcome,
+ "
Retro Music")
.parseAsHtml()
binding.appNameText.text = appName
}
@@ -97,7 +98,8 @@ class PermissionActivity : AbsMusicServiceActivity() {
}
private fun hasStoragePermission(): Boolean {
- return ActivityCompat.checkSelfPermission(this , Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
+ return ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
}
@RequiresApi(Build.VERSION_CODES.M)
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt
index ffd0eaadc..0a88ef350 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt
@@ -60,7 +60,8 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
mCastSession = castSession
webServer.start()
mCastSession?.remoteMediaClient?.let {
- loadCastQueue(it.mediaQueue.indexOfItemWithId(it.currentItem?.itemId ?: 0), it.approximateStreamPosition)
+ loadCastQueue(it.mediaQueue.indexOfItemWithId(it.currentItem?.itemId ?: 0),
+ it.approximateStreamPosition)
}
MusicPlayerRemote.isCasting = true
@@ -126,7 +127,7 @@ abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
progress: Long = MusicPlayerRemote.songProgressMillis.toLong(),
) {
mCastSession?.let {
- if (!MusicPlayerRemote.playingQueue.isNullOrEmpty()) {
+ if (MusicPlayerRemote.playingQueue.isNotEmpty()) {
CastHelper.castQueue(
it,
MusicPlayerRemote.playingQueue,
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt
index 1e05c367f..20ffc192d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt
@@ -19,6 +19,7 @@ import android.content.*
import android.os.Bundle
import android.os.IBinder
import androidx.lifecycle.lifecycleScope
+import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.db.toPlayCount
import code.name.monkey.retromusic.helper.MusicPlayerRemote
@@ -188,11 +189,15 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
}
override fun getPermissionsToRequest(): Array
{
- return arrayOf(
+ return mutableListOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.BLUETOOTH
- )
+ if (VersionUtils.hasS()) Manifest.permission.BLUETOOTH_CONNECT
+ else Manifest.permission.BLUETOOTH
+ ).apply {
+ if (!VersionUtils.hasQ()) {
+ add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ }
+ }.toTypedArray()
}
private class MusicStateReceiver(activity: AbsMusicServiceActivity) : BroadcastReceiver() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
index d26e25015..917685cfd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
@@ -160,7 +160,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
private fun setupBottomSheet() {
bottomSheetBehavior = from(binding.slidingPanel)
bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallbackList)
- bottomSheetBehavior.isHideable = true
+ if (PreferenceUtil.swipeDownToDismiss) bottomSheetBehavior.isHideable = true
setMiniPlayerAlphaProgress(0F)
}
@@ -298,7 +298,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
navigationBarColor = surfaceColor()
setTaskDescColor(paletteColor)
val isColorLight = paletteColor.isColorLight
- if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat || nowPlayingScreen == Material)) {
+ if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat || nowPlayingScreen == Material)) {
setLightNavigationBar(true)
setLightStatusBar(isColorLight)
} else if (nowPlayingScreen == Card || nowPlayingScreen == Blur || nowPlayingScreen == BlurCard) {
@@ -357,7 +357,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
fun setBottomNavVisibility(
visible: Boolean,
animate: Boolean = false,
- hideBottomSheet: Boolean = MusicPlayerRemote.playingQueue.isEmpty()
+ hideBottomSheet: Boolean = MusicPlayerRemote.playingQueue.isEmpty(),
) {
if (isInOneTabMode) {
hideBottomSheet(
@@ -391,7 +391,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
fun hideBottomSheet(
hide: Boolean,
animate: Boolean = false,
- isBottomNavVisible: Boolean = bottomNavigationView.isVisible
+ isBottomNavVisible: Boolean = bottomNavigationView.isVisible,
) {
val heightOfBar =
windowInsets.safeGetBottomInsets() +
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
index b2aba2318..5e7a8f8eb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt
@@ -31,6 +31,7 @@ import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.theme.getNightMode
import code.name.monkey.retromusic.util.theme.getThemeResValue
+import com.google.android.play.core.splitcompat.SplitCompat
import java.util.*
abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
@@ -122,5 +123,6 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
Locale.forLanguageTag(code)
}
super.attachBaseContext(LanguageContextWrapper.wrap(newBase, locale))
+ SplitCompat.install(this)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt
index 8f30f8de3..8509c963e 100755
--- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt
@@ -154,7 +154,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity
override fun onLoadFailed(errorDrawable: Drawable?) {
super.onLoadFailed(errorDrawable)
- showToast("Load Failed", Toast.LENGTH_LONG)
+ showToast(R.string.error_load_failed, Toast.LENGTH_LONG)
}
override fun setResource(resource: BitmapPaletteWrapper?) {}
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt
index 05839216f..33ac06250 100644
--- a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt
@@ -39,7 +39,7 @@ object CastHelper {
val remoteMediaClient = castSession.remoteMediaClient
remoteMediaClient?.queueLoad(
songs.toMediaInfoList(),
- position,
+ if (position != -1) position else 0,
MediaStatus.REPEAT_MODE_REPEAT_OFF,
progress,
JSONObject()
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
index 0b787608f..5701d858b 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt
@@ -2,6 +2,7 @@ package code.name.monkey.retromusic.dialogs
import android.Manifest
import android.app.Dialog
+import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.core.app.ActivityCompat
@@ -80,7 +81,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
}
.noAutoDismiss()
.positiveButton(res = R.string.add_action) {
- callback?.onFolderSelection(this@BlacklistFolderChooserDialog, parentFolder!!)
+ callback?.onFolderSelection(requireContext(), parentFolder!!)
dismiss()
}
.negativeButton(res = android.R.string.cancel) { dismiss() }
@@ -128,7 +129,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
}
interface FolderCallback {
- fun onFolderSelection(dialog: BlacklistFolderChooserDialog, folder: File)
+ fun onFolderSelection(context: Context, folder: File)
}
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/SongExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/SongExtensions.kt
index 3565ac486..f51331c2a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/SongExtensions.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/SongExtensions.kt
@@ -1,6 +1,20 @@
package code.name.monkey.retromusic.extensions
+import android.support.v4.media.MediaDescriptionCompat
+import android.support.v4.media.session.MediaSessionCompat.QueueItem
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
-val Song.uri get() = MusicUtil.getSongFileUri(songId = id)
\ No newline at end of file
+val Song.uri get() = MusicUtil.getSongFileUri(songId = id)
+
+
+fun ArrayList.toMediaSessionQueue(): List {
+ return map {
+ val mediaDescription = MediaDescriptionCompat.Builder()
+ .setMediaId(it.id.toString())
+ .setTitle(it.title)
+ .setSubtitle(it.artistName)
+ .build()
+ QueueItem(mediaDescription, it.hashCode().toLong())
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt
index 27066c5b9..f5dc5b069 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/backup/BackupFragment.kt
@@ -122,7 +122,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC
try {
file.delete()
} catch (exception: SecurityException) {
- showToast("Could not delete backup")
+ showToast(R.string.error_delete_backup)
}
backupViewModel.loadBackups()
return true
@@ -147,7 +147,7 @@ class BackupFragment : Fragment(R.layout.fragment_backup), BackupAdapter.BackupC
file.renameTo(renamedFile)
backupViewModel.loadBackups()
} else {
- showToast("File already exists")
+ showToast(R.string.file_already_exists)
}
}
positiveButton(android.R.string.ok)
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
index 082f1ce4b..8a8069d2f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt
@@ -180,11 +180,14 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
return true
}
R.id.action_set_as_ringtone -> {
- if (RingtoneManager.requiresDialog(requireActivity())) {
- RingtoneManager.getDialog(requireActivity())
+ requireContext().run {
+ if (RingtoneManager.requiresDialog(this)) {
+ RingtoneManager.showDialog(this)
+ } else {
+ RingtoneManager.setRingtone(this, song)
+ }
}
- val ringtoneManager = RingtoneManager(requireActivity())
- ringtoneManager.setRingtone(song)
+
return true
}
R.id.action_go_to_genre -> {
@@ -265,7 +268,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
} else {
if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border
}
- val drawable = requireContext().getTintedDrawable(
+ val drawable = requireContext().getTintedDrawable(
icon,
toolbarIconColor()
)
@@ -379,9 +382,7 @@ fun goToArtist(activity: Activity) {
findNavController(R.id.fragment_container).navigate(
R.id.artistDetailsFragment,
bundleOf(EXTRA_ARTIST_ID to song.artistId),
- navOptions {
- launchSingleTop = true
- },
+ null,
null
)
}
@@ -402,9 +403,7 @@ fun goToAlbum(activity: Activity) {
findNavController(R.id.fragment_container).navigate(
R.id.albumDetailsFragment,
bundleOf(EXTRA_ALBUM_ID to song.albumId),
- navOptions {
- launchSingleTop = true
- },
+ null,
null
)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt
index d1ce9c693..0083464b2 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/LyricsFragment.kt
@@ -141,8 +141,8 @@ class LyricsFragment : AbsMainActivityFragment(R.layout.fragment_lyrics) {
binding.lyricsPager.adapter = lyricsSectionsAdapter
TabLayoutMediator(binding.tabLyrics, binding.lyricsPager) { tab, position ->
tab.text = when (position) {
- 0 -> "Synced Lyrics"
- 1 -> "Normal Lyrics"
+ 0 -> getString(R.string.synced_lyrics)
+ 1 -> getString(R.string.normal_lyrics)
else -> ""
}
}.attach()
@@ -383,7 +383,7 @@ class LyricsFragment : AbsMainActivityFragment(R.layout.fragment_lyrics) {
}
fun loadLRCLyrics() {
- binding.lyricsView.setLabel("Empty")
+ binding.lyricsView.setLabel(getString(R.string.empty))
LyricUtil.getSyncedLyricsFile(MusicPlayerRemote.currentSong)?.let {
binding.lyricsView.loadLrc(it)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt
index 915e34116..7b4946506 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt
@@ -66,7 +66,7 @@ class UserInfoFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
- savedInstanceState: Bundle?
+ savedInstanceState: Bundle?,
): View {
sharedElementEnterTransition = MaterialContainerTransform().apply {
drawingViewId = R.id.fragment_container
@@ -96,7 +96,7 @@ class UserInfoFragment : Fragment() {
binding.next.setOnClickListener {
val nameString = binding.name.text.toString().trim { it <= ' ' }
if (nameString.isEmpty()) {
- showToast("Your name can't be empty!")
+ showToast(R.string.error_empty_name)
return@setOnClickListener
}
userName = nameString
@@ -229,7 +229,7 @@ class UserInfoFragment : Fragment() {
model: Any?,
target: Target?,
dataSource: DataSource?,
- isFirstResource: Boolean
+ isFirstResource: Boolean,
): Boolean {
resource?.let { saveImage(it, USER_BANNER) }
return false
@@ -239,7 +239,7 @@ class UserInfoFragment : Fragment() {
e: GlideException?,
model: Any?,
target: Target?,
- isFirstResource: Boolean
+ isFirstResource: Boolean,
): Boolean {
return false
}
@@ -251,18 +251,14 @@ class UserInfoFragment : Fragment() {
lifecycleScope.launch(Dispatchers.IO) {
val appDir = requireContext().filesDir
val file = File(appDir, fileName)
- var successful = false
- runCatching {
- file.outputStream().buffered().use {
- successful = ImageUtil.resizeBitmap(bitmap, 2048)
- .compress(Bitmap.CompressFormat.WEBP, 100, it)
- }
- }.onFailure {
- it.printStackTrace()
+ var successful: Boolean
+ file.outputStream().buffered().use {
+ successful = ImageUtil.resizeBitmap(bitmap, 2048)
+ .compress(Bitmap.CompressFormat.WEBP, 100, it)
}
if (successful) {
withContext(Dispatchers.Main) {
- showToast("Updated")
+ showToast(R.string.message_updated)
}
}
}
@@ -279,7 +275,7 @@ class UserInfoFragment : Fragment() {
model: Any?,
target: Target?,
dataSource: DataSource?,
- isFirstResource: Boolean
+ isFirstResource: Boolean,
): Boolean {
resource?.let { saveImage(it, USER_PROFILE) }
return false
@@ -289,7 +285,7 @@ class UserInfoFragment : Fragment() {
e: GlideException?,
model: Any?,
target: Target?,
- isFirstResource: Boolean
+ isFirstResource: Boolean,
): Boolean {
return false
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
index 5775b4471..e99ad40cc 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt
@@ -20,11 +20,13 @@ import android.content.SharedPreferences
import android.graphics.Color
import android.os.Bundle
import android.view.View
+import androidx.annotation.ColorInt
import androidx.core.animation.doOnEnd
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import androidx.viewpager.widget.ViewPager
+import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.LYRICS_TYPE
import code.name.monkey.retromusic.R
@@ -195,15 +197,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe
}
}
- private fun setLRCViewColors(backgroundColor: Int) {
- val primaryColor = MaterialValueHelper.getPrimaryTextColor(
- requireContext(),
- backgroundColor.isColorLight
- )
- val secondaryColor = MaterialValueHelper.getSecondaryDisabledTextColor(
- requireContext(),
- backgroundColor.isColorLight
- )
+ private fun setLRCViewColors(@ColorInt primaryColor: Int, @ColorInt secondaryColor: Int) {
lrcView.apply {
setCurrentColor(primaryColor)
setTimeTextColor(primaryColor)
@@ -277,19 +271,25 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe
private fun notifyColorChange(color: MediaNotificationProcessor) {
callbacks?.onColorChanged(color)
- setLRCViewColors(
- when (PreferenceUtil.nowPlayingScreen) {
- Adaptive, Fit, Plain, Simple -> surfaceColor()
- Flat, Normal, Material -> if (PreferenceUtil.isAdaptiveColor) {
- color.backgroundColor
- } else {
- surfaceColor()
- }
- Color, Classic -> color.primaryTextColor
- Blur -> Color.BLACK
- else -> surfaceColor()
- }
+ val primaryColor = MaterialValueHelper.getPrimaryTextColor(
+ requireContext(),
+ surfaceColor().isColorLight
)
+ val secondaryColor = MaterialValueHelper.getSecondaryDisabledTextColor(
+ requireContext(),
+ surfaceColor().isColorLight
+ )
+
+ when (PreferenceUtil.nowPlayingScreen) {
+ Flat, Normal, Material -> if (PreferenceUtil.isAdaptiveColor) {
+ setLRCViewColors(color.primaryTextColor, color.secondaryTextColor)
+ } else {
+ setLRCViewColors(primaryColor, secondaryColor)
+ }
+ Color, Classic -> setLRCViewColors(color.primaryTextColor, color.secondaryTextColor)
+ Blur -> setLRCViewColors(Color.WHITE, ColorUtil.withAlpha(Color.WHITE, 0.5f))
+ else -> setLRCViewColors(primaryColor, secondaryColor)
+ }
}
fun setCallbacks(listener: Callbacks) {
@@ -308,5 +308,5 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe
}
private val lyricViewNpsList =
- listOf(Blur, Classic, Color, Flat, Material, Normal, Plain, Simple)
+ listOf(Blur, Classic, Color, Flat, Material, MD3, Normal, Plain, Simple)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/md3/MD3PlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/md3/MD3PlaybackControlsFragment.kt
index 17809656b..b02bfb861 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/md3/MD3PlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/md3/MD3PlaybackControlsFragment.kt
@@ -17,12 +17,10 @@ package code.name.monkey.retromusic.fragments.player.md3
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
-import android.view.animation.DecelerateInterpolator
import android.view.animation.LinearInterpolator
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.TextView
-import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
@@ -108,11 +106,7 @@ class MD3PlaybackControlsFragment :
MaterialValueHelper.getPrimaryDisabledTextColor(requireContext(), false)
}
- val colorFinal = if (PreferenceUtil.isAdaptiveColor) {
- color.primaryTextColor
- } else {
- ThemeStore.accentColor(requireContext())
- }.ripAlpha()
+ val colorFinal = accentColor().ripAlpha()
TintHelper.setTintAuto(
binding.playPauseButton,
@@ -198,22 +192,9 @@ class MD3PlaybackControlsFragment :
setUpPlayPauseFab()
}
- public override fun show() {
- binding.playPauseButton.animate()
- .scaleX(1f)
- .scaleY(1f)
- .rotation(360f)
- .setInterpolator(DecelerateInterpolator())
- .start()
- }
+ public override fun show() {}
- public override fun hide() {
- binding.playPauseButton.apply {
- scaleX = 0f
- scaleY = 0f
- rotation = 0f
- }
- }
+ public override fun hide() {}
override fun onUpdateProgressViews(progress: Int, total: Int) {
binding.progressSlider.max = total
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
index 8e09950f3..0b8632826 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt
@@ -24,6 +24,7 @@ import androidx.preference.Preference
import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
import code.name.monkey.appthemehelper.util.VersionUtils
+import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.OnThemeChangedListener
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.preferences.*
@@ -37,7 +38,7 @@ import dev.chrisbanes.insetter.applyInsetter
abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
internal fun showProToastAndNavigate(message: String) {
- showToast("$message is Pro version feature.")
+ showToast(getString(R.string.message_pro_feature, message))
NavigationUtil.goToProVersion(requireActivity())
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
index b0ada25df..3500d2627 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt
@@ -139,9 +139,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment subMenu.findItem(R.id.action_layout_card).isChecked = true
R.layout.item_grid -> subMenu.findItem(R.id.action_layout_normal).isChecked = true
@@ -227,9 +223,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment gridSizeMenu.findItem(R.id.action_grid_size_1).isChecked = true
2 -> gridSizeMenu.findItem(R.id.action_grid_size_2).isChecked = true
@@ -274,9 +268,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment SongSortOrder.SONG_A_Z
R.id.action_song_sort_order_desc -> SongSortOrder.SONG_Z_A
@@ -297,9 +289,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment R.layout.item_grid
R.id.action_layout_card -> R.layout.item_card
@@ -317,9 +307,7 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment 1
R.id.action_grid_size_2 -> 2
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt
index ac970fe4c..50869e936 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/BackupHelper.kt
@@ -3,6 +3,7 @@ package code.name.monkey.retromusic.helper
import android.content.Context
import android.os.Environment
import code.name.monkey.retromusic.BuildConfig
+import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.toSongEntity
import code.name.monkey.retromusic.extensions.showToast
@@ -57,11 +58,11 @@ object BackupHelper : KoinComponent {
}
}.onFailure {
withContext(Dispatchers.Main) {
- context.showToast("Couldn't create backup")
+ context.showToast(R.string.error_create_backup)
}
}.onSuccess {
withContext(Dispatchers.Main) {
- context.showToast("Backup created successfully")
+ context.showToast(R.string.message_backup_create_success)
}
}
}
@@ -160,7 +161,7 @@ object BackupHelper : KoinComponent {
}
}
withContext(Dispatchers.Main) {
- context.showToast("Restore Completed Successfully")
+ context.showToast(R.string.message_restore_success)
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt
index 4c63a6f39..6fca4a3a0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt
@@ -55,10 +55,9 @@ object SongMenuHelper : KoinComponent {
when (menuItemId) {
R.id.action_set_as_ringtone -> {
if (RingtoneManager.requiresDialog(activity)) {
- RingtoneManager.getDialog(activity)
+ RingtoneManager.showDialog(activity)
} else {
- val ringtoneManager = RingtoneManager(activity)
- ringtoneManager.setRingtone(song)
+ RingtoneManager.setRingtone(activity, song)
}
return true
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
index c3283be21..4723bc9de 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/BlacklistPreferenceDialog.kt
@@ -38,7 +38,7 @@ class BlacklistPreference @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = -1,
- defStyleRes: Int = -1
+ defStyleRes: Int = -1,
) : ATEDialogPreference(context, attrs, defStyleAttr, defStyleRes) {
init {
@@ -123,8 +123,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
dialog?.setItems(paths.toTypedArray(), null)
}
- override fun onFolderSelection(dialog: BlacklistFolderChooserDialog, folder: File) {
- BlacklistStore.getInstance(requireContext()).addPath(folder)
- refreshBlacklistData()
+ override fun onFolderSelection(context: Context, folder: File) {
+ BlacklistStore.getInstance(context).addPath(folder)
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
index 3fa4aad50..27a70ac67 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt
@@ -76,7 +76,7 @@ class LibraryPreferenceDialog : DialogFragment() {
private fun updateCategories(categories: List) {
if (getSelected(categories) == 0) return
if (getSelected(categories) > 5) {
- showToast("Not more than 5 items")
+ showToast(R.string.message_limit_tabs)
return
}
PreferenceUtil.libraryCategory = categories
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
index 72005339d..20796815c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt
@@ -56,6 +56,7 @@ import code.name.monkey.retromusic.appwidgets.*
import code.name.monkey.retromusic.auto.AutoMediaIDHelper
import code.name.monkey.retromusic.auto.AutoMusicProvider
import code.name.monkey.retromusic.extensions.showToast
+import code.name.monkey.retromusic.extensions.toMediaSessionQueue
import code.name.monkey.retromusic.glide.BlurTransformation
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension.getDefaultTransition
@@ -1225,6 +1226,8 @@ class MusicService : MediaBrowserServiceCompat(),
songPlayCountHelper.notifySongChanged(currentSong)
}
QUEUE_CHANGED -> {
+ mediaSession?.setQueueTitle(getString(R.string.now_playing_queue))
+ mediaSession?.setQueue(playingQueue.toMediaSessionQueue())
updateMediaSessionMetaData() // because playing queue size might have changed
saveState()
if (playingQueue.size > 0) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
index 39994818f..a4a3ed27e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
@@ -22,6 +22,7 @@ import android.provider.MediaStore
import android.widget.Toast
import androidx.core.content.edit
import code.name.monkey.retromusic.App
+import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.model.Artist
@@ -56,7 +57,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
saveImage(context, artist, it)
}
.onFailure {
- context.showToast("Load Failed")
+ context.showToast(R.string.error_load_failed)
}
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
index c46a169fb..ffdee11b6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
@@ -67,12 +67,12 @@ object PreferenceUtil {
}
fun registerOnSharedPreferenceChangedListener(
- listener: OnSharedPreferenceChangeListener
+ listener: OnSharedPreferenceChangeListener,
) = sharedPreferences.registerOnSharedPreferenceChangeListener(listener)
fun unregisterOnSharedPreferenceChangedListener(
- changeListener: OnSharedPreferenceChangeListener
+ changeListener: OnSharedPreferenceChangeListener,
) = sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener)
@@ -394,7 +394,7 @@ object PreferenceUtil {
val filterLength get() = sharedPreferences.getInt(FILTER_SONG, 20)
var lastVersion
- // This was stored as an integer before now it's a long, so avoid a ClassCastException
+ // This was stored as an integer before now it's a long, so avoid a ClassCastException
get() = try {
sharedPreferences.getLong(LAST_CHANGELOG_VERSION, 0)
} catch (e: ClassCastException) {
@@ -725,6 +725,9 @@ object PreferenceUtil {
val swipeAnywhereToChangeSong
get() = sharedPreferences.getBoolean(SWIPE_ANYWHERE_NOW_PLAYING, true)
+
+ val swipeDownToDismiss
+ get() = sharedPreferences.getBoolean(SWIPE_DOWN_DISMISS, true)
}
enum class LyricsType {
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
index 8071ce4fa..98be17699 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
@@ -27,10 +27,10 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-class RingtoneManager(val context: Context) {
- fun setRingtone(song: Song) {
- val resolver = context.contentResolver
+object RingtoneManager {
+ fun setRingtone(context: Context, song: Song) {
val uri = getSongFileUri(song.id)
+ val resolver = context.contentResolver
try {
val cursor = resolver.query(
@@ -52,28 +52,25 @@ class RingtoneManager(val context: Context) {
}
}
- companion object {
-
- fun requiresDialog(context: Context): Boolean {
- if (VersionUtils.hasMarshmallow()) {
- if (!Settings.System.canWrite(context)) {
- return true
- }
+ fun requiresDialog(context: Context): Boolean {
+ if (VersionUtils.hasMarshmallow()) {
+ if (!Settings.System.canWrite(context)) {
+ return true
}
- return false
}
+ return false
+ }
- fun getDialog(context: Context) {
- return MaterialAlertDialogBuilder(context, R.style.MaterialAlertDialogTheme)
- .setTitle(R.string.dialog_title_set_ringtone)
- .setMessage(R.string.dialog_message_set_ringtone)
- .setPositiveButton(android.R.string.ok) { _, _ ->
- val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
- intent.data = ("package:" + context.applicationContext.packageName).toUri()
- context.startActivity(intent)
- }
- .setNegativeButton(android.R.string.cancel, null)
- .create().show()
- }
+ fun showDialog(context: Context) {
+ return MaterialAlertDialogBuilder(context, R.style.MaterialAlertDialogTheme)
+ .setTitle(R.string.dialog_title_set_ringtone)
+ .setMessage(R.string.dialog_message_set_ringtone)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
+ intent.data = ("package:" + context.applicationContext.packageName).toUri()
+ context.startActivity(intent)
+ }
+ .setNegativeButton(android.R.string.cancel, null)
+ .create().show()
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/cast_mini_controller.xml b/app/src/main/res/layout/cast_mini_controller.xml
index f3b77d360..49e7789ed 100644
--- a/app/src/main/res/layout/cast_mini_controller.xml
+++ b/app/src/main/res/layout/cast_mini_controller.xml
@@ -1,31 +1,40 @@
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/cast_mini_controller_height">
-
+
+
+
+
+ android:layout_toStartOf="@+id/button_1" />
+ android:layout_toStartOf="@+id/button_2" />
+ android:layout_marginEnd="8dp" />
@@ -97,11 +92,11 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_md3_player_playback_controls.xml b/app/src/main/res/layout/fragment_md3_player_playback_controls.xml
index 70513475e..473c5de51 100644
--- a/app/src/main/res/layout/fragment_md3_player_playback_controls.xml
+++ b/app/src/main/res/layout/fragment_md3_player_playback_controls.xml
@@ -53,51 +53,54 @@
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="@tools:sample/date/hhmmss" />
-
+ app:layout_constraintTop_toBottomOf="@+id/progressSlider">
-
+
+
+
+
@@ -193,6 +199,7 @@
android:src="@drawable/ic_repeat"
app:layout_constraintBottom_toTopOf="@+id/songInfo"
app:layout_constraintEnd_toStartOf="@id/shuffleButton"
+ app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/playPauseCard"
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index c4b41ae8d..d4cfca694 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -72,4 +72,6 @@
16dp
16dp
+ 64dp
+ 48dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 136218a79..38100d4f9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -86,7 +86,9 @@
Change the sound settings and adjust the equalizer controls
Auto
Backup and restore your settings, playlists
-
+
+
+
Backups
Biography
Just Black
@@ -171,9 +173,14 @@
Edit Synced Lyrics
Empty
Equalizer
+ Couldn\u2019t create backup
+ Couldn\u2019t delete backup
+ Your name can\'t be empty!
+ Load failed
Expanded
FAQ
Favorites
+ File already exists
Finish last song
Fit
Flat
@@ -237,9 +244,15 @@
Lyrics
Made with ❤️ in India
Material
+ MD3
Error
Permission error
- MD3
+ Backup created successfully.
+ Not more than 5 items
+ %s is a Pro feature.
+ Restore completed successfully.
+ Updated
+ Welcome to %s]]>
Name
Most played
Never
@@ -342,6 +355,7 @@
Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks
Configure visibility and order of library categories.
Use Retro Music\'s custom lockscreen controls
+ Always play audio in background regardless of anything else being played
License details for open source software
When enabled, newly played songs won\'t show in history
Navigate to the last used tab on start
@@ -354,7 +368,6 @@
If enough space is available, show volume controls in the now playing screen
Extract accent color from wallpaper
Only show music from /Music Folder
- Always play audio in background regardless of anything else being played
Show album cover
Navigate by Album Artist
Album cover theme
@@ -387,6 +400,7 @@
Fullscreen controls
Keep screen on when showing lyrics
Lyrics type
+ Always play
Now playing theme
Open source licences
Pause history
@@ -402,7 +416,6 @@
Volume controls
Wallpaper accent color
Whitelist music
- Always play
Pro
Black theme, Now playing themes, Carousel effect and more..
Profile
@@ -540,4 +553,6 @@
You have to select at least one category.
You will be forwarded to the issue tracker website.
Your account data is only used for authentication.
+ Swipe down to dismiss mini player
+ Dismiss with swipe down
diff --git a/app/src/main/res/xml/pref_now_playing_screen.xml b/app/src/main/res/xml/pref_now_playing_screen.xml
index 82db63d13..63f4e7403 100644
--- a/app/src/main/res/xml/pref_now_playing_screen.xml
+++ b/app/src/main/res/xml/pref_now_playing_screen.xml
@@ -80,6 +80,13 @@
android:layout="@layout/preference_category_title"
android:title="@string/pref_header_controls">
+
+