From ae6c97a498c2586ac7684f7e0c9eb3d8d96c98d4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 10 May 2022 11:41:50 +0530 Subject: [PATCH 01/13] Update Gradle plugin --- app/build.gradle | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9e1e21a76..96246f71e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -143,7 +143,7 @@ dependencies { implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-android:$koin_version" - def glide_version = '4.13.1' + def glide_version = '4.13.2' implementation "com.github.bumptech.glide:glide:$glide_version" kapt "com.github.bumptech.glide:compiler:$glide_version" implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version" diff --git a/build.gradle b/build.gradle index f427c5604..c3c9842cb 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.3' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 888b130d3..6308cc5cc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip From 93bb652dd64052d42f3c522b37e4c3d5633e0bc5 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 11 May 2022 18:17:32 +0530 Subject: [PATCH 02/13] Fix blacklist crash --- .../retromusic/dialogs/BlacklistFolderChooserDialog.kt | 5 +++-- .../retromusic/preferences/BlacklistPreferenceDialog.kt | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) 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/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) } } From 90e113e8ab1059d707306caefb1e69441691a608 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 11 May 2022 18:38:12 +0530 Subject: [PATCH 03/13] Fix Lyrics not visible in MD3 theme --- .../player/PlayerAlbumCoverFragment.kt | 2 +- .../player/md3/MD3PlaybackControlsFragment.kt | 25 +++---------------- 2 files changed, 4 insertions(+), 23 deletions(-) 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..c8650599f 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 @@ -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 From 9c07ca276344e98b854521914749d836c2bdc686 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Wed, 11 May 2022 23:06:34 +0530 Subject: [PATCH 04/13] Converted hardcoded strings to string resources --- .../activities/PermissionActivity.kt | 4 +++- .../tageditor/AlbumTagEditorActivity.kt | 2 +- .../tageditor/SongTagEditorActivity.kt | 2 +- .../fragments/backup/BackupFragment.kt | 4 ++-- .../fragments/other/LyricsFragment.kt | 6 +++--- .../fragments/other/UserInfoFragment.kt | 4 ++-- .../fragments/settings/AbsSettingsFragment.kt | 3 ++- .../monkey/retromusic/helper/BackupHelper.kt | 7 ++++--- .../preferences/LibraryPreference.kt | 2 +- .../retromusic/util/CustomArtistImageUtil.kt | 3 ++- app/src/main/res/values/strings.xml | 21 +++++++++++++++---- 11 files changed, 38 insertions(+), 20 deletions(-) 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..bae8ceb87 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,6 +27,7 @@ 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.* @@ -75,7 +76,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 } 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/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/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..a4b03a5b1 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 @@ -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 @@ -262,7 +262,7 @@ class UserInfoFragment : Fragment() { } if (successful) { withContext(Dispatchers.Main) { - showToast("Updated") + showToast(R.string.message_updated) } } } 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/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/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/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/res/values/strings.xml b/app/src/main/res/values/strings.xml index 136218a79..be912dd6d 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 From fcac420ac304eb0f0e85729cb7b5d44a43a9a49c Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 00:01:50 +0530 Subject: [PATCH 05/13] Update dependencies --- app/build.gradle | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 96246f71e..fd8bb8cfe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,7 @@ dependencies { implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" - def lifecycle_version = "2.5.0-beta01" + def lifecycle_version = "2.5.0-rc01" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" @@ -139,7 +139,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" - def koin_version = '3.2.0-beta-1' + def koin_version = '3.2.0' implementation "io.insert-koin:koin-core:$koin_version" implementation "io.insert-koin:koin-android:$koin_version" diff --git a/build.gradle b/build.gradle index c3c9842cb..f19b8301a 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { kotlin_version = '1.6.21' - navigation_version = '2.5.0-beta01' + navigation_version = '2.5.0-rc01' mdc_version = '1.6.0' preference_version = '1.2.0' appcompat_version = '1.4.1' From 8d81424365d1a817c06207e3f2471ad6f9208ab6 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 00:04:50 +0530 Subject: [PATCH 06/13] Set queue for mediaSession so that it (mostly next song) can be read by other apps --- .../retromusic/extensions/SongExtensions.kt | 16 +++++++++++++++- .../monkey/retromusic/service/MusicService.kt | 3 +++ 2 files changed, 18 insertions(+), 1 deletion(-) 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/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) { From 5f5bddf5e9add932aa39b7c4b1093f640ad6ead5 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 00:06:01 +0530 Subject: [PATCH 07/13] Code Cleanup --- .../activities/PermissionActivity.kt | 6 +-- .../activities/base/AbsThemeActivity.kt | 2 + .../fragments/base/AbsPlayerFragment.kt | 21 +++++---- .../fragments/other/UserInfoFragment.kt | 22 ++++------ .../fragments/songs/SongsFragment.kt | 24 +++-------- .../retromusic/helper/menu/SongMenuHelper.kt | 5 +-- .../monkey/retromusic/util/RingtoneManager.kt | 43 +++++++++---------- 7 files changed, 52 insertions(+), 71 deletions(-) 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 bae8ceb87..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 @@ -31,7 +31,6 @@ 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 @@ -50,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) @@ -99,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/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/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/UserInfoFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/UserInfoFragment.kt index a4b03a5b1..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 @@ -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,14 +251,10 @@ 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) { @@ -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/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/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/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 From af63d0f28c1cd5b79b1e2c72b5a5e4165251c69e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 00:06:22 +0530 Subject: [PATCH 08/13] Fix MD3 theme layout --- .../fragment_md3_player_playback_controls.xml | 91 ++++++++++--------- 1 file changed, 49 insertions(+), 42 deletions(-) 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" From 3c26c39a5a17502fbd357f9dddbe9f345e94901a Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 00:22:27 +0530 Subject: [PATCH 09/13] Better Cast layout --- .../activities/base/AbsCastActivity.kt | 5 +- .../name/monkey/retromusic/cast/CastHelper.kt | 2 +- .../main/res/layout/cast_mini_controller.xml | 65 +++++++++---------- app/src/main/res/values/dimens.xml | 2 + 4 files changed, 36 insertions(+), 38 deletions(-) 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/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/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/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 From 4b08919d7d4f0a642c8d66203c0e1a237d4652ef Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 09:50:34 +0530 Subject: [PATCH 10/13] Added an option to enable/disable swipe --- .../main/java/code/name/monkey/retromusic/Constants.kt | 3 ++- .../name/monkey/retromusic/activities/MainActivity.kt | 2 +- .../activities/base/AbsSlidingMusicPanelActivity.kt | 8 ++++---- .../code/name/monkey/retromusic/util/PreferenceUtil.kt | 9 ++++++--- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_now_playing_screen.xml | 7 +++++++ 6 files changed, 22 insertions(+), 9 deletions(-) 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/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/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/res/values/strings.xml b/app/src/main/res/values/strings.xml index be912dd6d..38100d4f9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -553,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"> + + Date: Thu, 12 May 2022 10:01:47 +0530 Subject: [PATCH 11/13] Added Bluetooth connect permission to communicate with paired Bluetooth devices on A12+ --- app/src/main/AndroidManifest.xml | 11 +++++++---- .../activities/base/AbsMusicServiceActivity.kt | 13 +++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 909d433e1..e5f246d68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,13 +3,17 @@ xmlns:tools="http://schemas.android.com/tools" package="code.name.monkey.retromusic"> - + - + @@ -19,7 +23,7 @@ tools:ignore="ProtectedPermissions" /> - + { - 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() { From 0f06f42e08f096e70b972e53059da586c8e4e33a Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 10:52:03 +0530 Subject: [PATCH 12/13] Better synced lyrics color in now playing themes --- .../player/PlayerAlbumCoverFragment.kt | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) 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 c8650599f..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) { From 9db961766d31d9b031dd6a41680880cd050ebfb4 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 12 May 2022 11:12:18 +0530 Subject: [PATCH 13/13] Update changelog --- app/build.gradle | 2 +- app/src/main/assets/retro-changelog.html | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index fd8bb8cfe..8eea7ecc4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { applicationId "code.name.monkey.retromusic" versionCode 10577 - versionName '5.8.3' + versionName '5.8.4' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index fc5a504cb..12be2af8e 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -62,6 +62,19 @@ +
+
May 13, 2022
+

v5.8.4

+

What's New

+
    +
  • Added a toggle to enable/disable swipe down to dismiss mini player
  • +
+

Fixed

+
    +
  • Fixed crash when adding folders to blacklist
  • +
  • Fix bugs in MD3 theme
  • +
+
May 07, 2022

v5.8.3