diff --git a/app/build.gradle b/app/build.gradle
index e50f78ec9..4b2059104 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,7 +15,7 @@ android {
applicationId "code.name.monkey.retromusic"
versionCode 10564
- versionName '5.7.0'
+ versionName '5.7.1'
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 aba6d3376..a4e36fb15 100644
--- a/app/src/main/assets/retro-changelog.html
+++ b/app/src/main/assets/retro-changelog.html
@@ -60,13 +60,37 @@
{style-placeholder}
+
+
+
+
+
+
+
+
February 1, 2022
+
v5.7.1
+
What's New
+
+ - Added option to disable changing song by swiping anywhere on the now playing screen
+
+
Fixed
+
+ - Fixed Playlist save on A11+
+ - Fixed Just Black theme
+ - Fixed some UI issues
+
+
Improved
+
+ - Improvements to search
+
+
January 25, 2022
-
v5.7.0
+
v5.7.0Beta
What's New
- Added Android Auto
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 057c47fb1..13574349a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
@@ -55,6 +55,7 @@ object Constants {
)
const val NUMBER_OF_TOP_TRACKS = 99
}
+
const val EXTRA_PLAYLIST_TYPE = "type"
const val EXTRA_GENRE = "extra_genre"
const val EXTRA_PLAYLIST = "extra_playlist"
@@ -161,4 +162,5 @@ const val CUSTOM_FONT = "custom_font"
const val APPBAR_MODE = "appbar_mode"
const val WALLPAPER_ACCENT = "wallpaper_accent"
const val SCREEN_ON_LYRICS = "screen_on_lyrics"
-const val CIRCLE_PLAY_BUTTON = "circle_play_button"
\ No newline at end of file
+const val CIRCLE_PLAY_BUTTON = "circle_play_button"
+const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt
index 7bf32e80e..8a7d50469 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt
@@ -24,7 +24,9 @@ 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.ActivityLockScreenBinding
-import code.name.monkey.retromusic.extensions.*
+import code.name.monkey.retromusic.extensions.hideStatusBar
+import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
+import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.player.lockscreen.LockScreenControlsFragment
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt
index b5d2ecd6d..fda12d6bf 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt
@@ -39,7 +39,6 @@ import code.name.monkey.retromusic.extensions.*
import com.anjlab.android.iab.v3.BillingProcessor
import com.anjlab.android.iab.v3.PurchaseInfo
import com.anjlab.android.iab.v3.SkuDetails
-import java.util.*
class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt
index 489caaa01..e3d6644f1 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.kt
@@ -14,7 +14,10 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.activities.base.AbsThemeActivity
import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding
-import code.name.monkey.retromusic.extensions.*
+import code.name.monkey.retromusic.extensions.accentColor
+import code.name.monkey.retromusic.extensions.drawAboveSystemBars
+import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
+import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion
import code.name.monkey.retromusic.util.RetroUtil
import java.io.BufferedReader
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 68c62d131..0217da9ed 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
@@ -11,7 +11,6 @@ import com.google.android.gms.cast.framework.CastContext
import com.google.android.gms.cast.framework.CastSession
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
-import java.util.*
abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() {
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 a356f6013..f78dbac7e 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
@@ -351,10 +351,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
}
private fun updateColor() {
- libraryViewModel.paletteColor.observe(this, { color ->
+ libraryViewModel.paletteColor.observe(this) { color ->
this.paletteColor = color
onPaletteColorChanged()
- })
+ }
}
fun setBottomNavVisibility(visible: Boolean, animate: Boolean = false, hideBottomSheet: Boolean = MusicPlayerRemote.playingQueue.isEmpty()) {
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 d6c51f291..25e6d2d65 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
@@ -51,7 +51,9 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
private fun updateTheme() {
setTheme(ThemeManager.getThemeResValue())
- setDefaultNightMode(ThemeManager.getNightMode())
+ if (PreferenceUtil.materialYou) {
+ setDefaultNightMode(ThemeManager.getNightMode())
+ }
if (PreferenceUtil.isCustomFont) {
setTheme(R.style.FontThemeOverlay)
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt
index f943a7900..a7262f8c9 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt
@@ -41,7 +41,6 @@ import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import me.zhanghai.android.fastscroll.PopupTextProvider
-import java.util.*
class ArtistAdapter(
override val activity: FragmentActivity,
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt
index 3b9e7193a..093233c36 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt
@@ -16,7 +16,6 @@ import code.name.monkey.retromusic.util.RetroColorUtil
import com.afollestad.materialcab.attached.AttachedCab
import com.afollestad.materialcab.attached.destroy
import com.afollestad.materialcab.attached.isActive
-import java.util.*
abstract class AbsMultiSelectAdapter(
open val activity: FragmentActivity, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt
index 827e3e90b..918ceb8de 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt
@@ -19,14 +19,13 @@ import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
-import code.name.monkey.appthemehelper.ThemeStore
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.db.toSongsEntity
import code.name.monkey.retromusic.dialogs.RemoveSongFromPlaylistDialog
-import code.name.monkey.retromusic.extensions.applyColor
-import code.name.monkey.retromusic.extensions.applyOutlineColor
+import code.name.monkey.retromusic.extensions.accentColor
+import code.name.monkey.retromusic.extensions.accentOutlineColor
import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.ICabHolder
@@ -48,7 +47,6 @@ class OrderablePlaylistSongAdapter(
DraggableItemAdapter {
val libraryViewModel: LibraryViewModel by activity.viewModel()
- val tempDataSet = dataSet
init {
this.setHasStableIds(true)
@@ -63,8 +61,6 @@ class OrderablePlaylistSongAdapter(
} else {
-1
}
-
-
}
override fun createViewHolder(view: View): SongAdapter.ViewHolder {
@@ -77,19 +73,18 @@ class OrderablePlaylistSongAdapter(
override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) {
if (holder.itemViewType == OFFSET_ITEM) {
- val color = ThemeStore.accentColor(activity)
val viewHolder = holder as ViewHolder
viewHolder.playAction?.let {
it.setOnClickListener {
MusicPlayerRemote.openQueue(dataSet, 0, true)
}
- it.applyOutlineColor(color)
+ it.accentOutlineColor()
}
viewHolder.shuffleAction?.let {
it.setOnClickListener {
MusicPlayerRemote.openAndShuffleQueue(dataSet, true)
}
- it.applyColor(color)
+ it.accentColor()
}
} else {
super.onBindViewHolder(holder, position - 1)
@@ -132,18 +127,10 @@ class OrderablePlaylistSongAdapter(
init {
dragView?.isVisible = true
}
-
- override fun onClick(v: View?) {
- if (itemViewType == OFFSET_ITEM) {
- MusicPlayerRemote.openAndShuffleQueue(dataSet, true)
- return
- }
- super.onClick(v)
- }
}
override fun onCheckCanStartDrag(holder: ViewHolder, position: Int, x: Int, y: Int): Boolean {
- if (dataSet.size == 0 or 1) {
+ if (dataSet.size == 0 or 1 || isInQuickSelectMode) {
return false
}
val dragHandle = holder.dragView ?: return false
@@ -161,7 +148,6 @@ class OrderablePlaylistSongAdapter(
dataSet.add(toPosition - 1, dataSet.removeAt(fromPosition - 1))
}
-
override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange {
return ItemDraggableRange(1, itemCount - 1)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SimpleSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SimpleSongAdapter.kt
index 5d3e62638..e96ab0924 100755
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SimpleSongAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SimpleSongAdapter.kt
@@ -20,7 +20,6 @@ import androidx.fragment.app.FragmentActivity
import code.name.monkey.retromusic.interfaces.ICabHolder
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
-import java.util.*
class SimpleSongAdapter(
context: FragmentActivity,
diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt
index 1e0751aad..1b11510a0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt
@@ -25,7 +25,6 @@ import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import java.lang.ref.WeakReference
-import java.util.*
/**
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt
index d6759dc20..cf365c84a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt
@@ -8,7 +8,6 @@ import com.google.android.gms.cast.framework.SessionProvider
import com.google.android.gms.cast.framework.media.CastMediaOptions
import com.google.android.gms.cast.framework.media.MediaIntentReceiver
import com.google.android.gms.cast.framework.media.NotificationOptions
-import java.util.*
class CastOptionsProvider : OptionsProvider {
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt
index fad431d2c..1d7f25cab 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/IntentExtensions.kt
@@ -21,9 +21,10 @@ fun Fragment.createNewFile(
registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
- context?.contentResolver?.openOutputStream(result.data?.data!!)?.use { os->
- write(os, result.data?.data)
- }
+ write(
+ context?.contentResolver?.openOutputStream(result.data?.data!!),
+ result.data?.data
+ )
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt
index dd022378d..08c064fed 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt
@@ -122,9 +122,9 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener {
itemAnimator = DefaultItemAnimator()
adapter = contributorAdapter
}
- libraryViewModel.fetchContributors().observe(viewLifecycleOwner, { contributors ->
+ libraryViewModel.fetchContributors().observe(viewLifecycleOwner) { contributors ->
contributorAdapter.swapData(contributors)
- })
+ }
}
override fun onDestroyView() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
index cbd858619..204c44c2c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
@@ -122,7 +122,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
binding.toolbar.title = " "
ViewCompat.setTransitionName(binding.albumCoverContainer, arguments.extraAlbumId.toString())
postponeEnterTransition()
- detailsViewModel.getAlbum().observe(viewLifecycleOwner, {
+ detailsViewModel.getAlbum().observe(viewLifecycleOwner) {
requireView().doOnPreDraw {
startPostponedEnterTransition()
}
@@ -133,7 +133,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
} else {
ViewCompat.setTransitionName(binding.artistImage, album.artistId.toString())
}
- })
+ }
setupRecyclerView()
binding.artistImage.setOnClickListener { artistView ->
@@ -236,17 +236,17 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
simpleSongAdapter.swapDataSet(album.songs)
if (albumArtistExists) {
detailsViewModel.getAlbumArtist(album.albumArtist.toString())
- .observe(viewLifecycleOwner, {
+ .observe(viewLifecycleOwner) {
loadArtistImage(it)
- })
+ }
} else {
- detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner, {
+ detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner) {
loadArtistImage(it)
- })
+ }
}
- detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner, { result ->
+ detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner) { result ->
when (result) {
is Result.Loading -> {
println("Loading")
@@ -258,7 +258,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
aboutAlbum(result.data)
}
}
- })
+ }
}
private fun moreAlbums(albums: List) {
@@ -305,9 +305,9 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
}
private fun loadArtistImage(artist: Artist) {
- detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, {
+ detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner) {
moreAlbums(it)
- })
+ }
GlideApp.with(requireContext()).asBitmapPalette().artistImageOptions(artist)
//.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata())
.load(
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
index a6f203c0e..55ff96cd2 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt
@@ -48,12 +48,12 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment
+ .observe(viewLifecycleOwner) { result ->
when (result) {
is Result.Loading -> println("Loading")
is Result.Error -> println("Error")
is Result.Success -> artistInfo(result.data)
}
- })
+ }
}
private fun artistInfo(lastFmArtist: LastFmArtist?) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
index a96688fd6..ff85467e3 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt
@@ -49,12 +49,12 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment, LM : Recycle
} else {
binding.shuffleButton.isVisible = false
}
- libraryViewModel.getFabMargin().observe(viewLifecycleOwner, {
+ libraryViewModel.getFabMargin().observe(viewLifecycleOwner) {
binding.shuffleButton.updateLayoutParams {
bottomMargin = it
}
- })
+ }
}
open fun onShuffleClicked() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt
index dc382d52a..28f5dc229 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt
@@ -62,9 +62,9 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_
genre = arguments.extraGenre
binding.toolbar.title = arguments.extraGenre.name
setupRecyclerView()
- detailsViewModel.getSongs().observe(viewLifecycleOwner, {
+ detailsViewModel.getSongs().observe(viewLifecycleOwner) {
songs(it)
- })
+ }
postponeEnterTransition()
view.doOnPreDraw {
startPostponedEnterTransition()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
index a738d8ab8..571e998cd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt
@@ -40,12 +40,12 @@ GenresFragment : AbsRecyclerViewFragment(),
IGenreClickListener {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- libraryViewModel.getGenre().observe(viewLifecycleOwner, {
+ libraryViewModel.getGenre().observe(viewLifecycleOwner) {
if (it.isNotEmpty())
adapter?.swapDataSet(it)
else
adapter?.swapDataSet(listOf())
- })
+ }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
remove()
requireActivity().onBackPressed()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt
index c20fa7644..577bf39db 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt
@@ -77,12 +77,12 @@ class HomeFragment :
layoutManager = LinearLayoutManager(mainActivity)
adapter = homeAdapter
}
- libraryViewModel.getHome().observe(viewLifecycleOwner, {
+ libraryViewModel.getHome().observe(viewLifecycleOwner) {
homeAdapter.swapData(it)
- })
- libraryViewModel.getSuggestions().observe(viewLifecycleOwner, {
+ }
+ libraryViewModel.getSuggestions().observe(viewLifecycleOwner) {
loadSuggestions(it)
- })
+ }
loadProfile()
setupTitle()
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 e3a16770b..bf7f85c03 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
@@ -32,6 +32,7 @@ import androidx.fragment.app.FragmentActivity
import androidx.navigation.fragment.findNavController
import androidx.transition.Fade
import androidx.viewpager2.adapter.FragmentStateAdapter
+import code.name.monkey.appthemehelper.common.ATHToolbarActivity
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
@@ -50,12 +51,16 @@ import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.lyrics.LrcView
import code.name.monkey.retromusic.model.AudioTagInfo
import code.name.monkey.retromusic.model.Song
-import code.name.monkey.retromusic.util.*
+import code.name.monkey.retromusic.util.FileUtils
+import code.name.monkey.retromusic.util.LyricUtil
+import code.name.monkey.retromusic.util.RetroUtil
+import code.name.monkey.retromusic.util.UriUtil
import com.afollestad.materialdialogs.input.input
import com.google.android.material.color.MaterialColors
import com.google.android.material.tabs.TabLayoutMediator
import com.google.android.material.transition.platform.MaterialContainerTransform
-import kotlinx.coroutines.*
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
import org.jaudiotagger.audio.AudioFileIO
import org.jaudiotagger.tag.FieldKey
import java.io.File
@@ -177,6 +182,20 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
}
}
+ override fun onPlayingMetaChanged() {
+ super.onPlayingMetaChanged()
+ updateTitleSong()
+ }
+
+ override fun onServiceConnected() {
+ super.onServiceConnected()
+ updateTitleSong()
+ }
+
+ private fun updateTitleSong() {
+ song = MusicPlayerRemote.currentSong
+ }
+
private fun setupToolbar() {
mainActivity.setSupportActionBar(binding.toolbar)
ToolbarContentTintHelper.colorBackButton(binding.toolbar)
@@ -191,6 +210,12 @@ class LyricsFragment : AbsMusicServiceFragment(R.layout.fragment_lyrics) {
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_search, menu)
+ ToolbarContentTintHelper.handleOnCreateOptionsMenu(
+ requireContext(),
+ binding.toolbar,
+ menu,
+ ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar)
+ )
return super.onCreateOptionsMenu(menu, inflater)
}
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 16cc7268f..79ef841ed 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
@@ -114,11 +114,11 @@ class UserInfoFragment : Fragment() {
view.doOnPreDraw {
startPostponedEnterTransition()
}
- libraryViewModel.getFabMargin().observe(viewLifecycleOwner, {
+ libraryViewModel.getFabMargin().observe(viewLifecycleOwner) {
binding.next.updateLayoutParams {
bottomMargin = it
}
- })
+ }
}
private fun loadProfile() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
index 402b0c833..3ade61087 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt
@@ -14,12 +14,10 @@
*/
package code.name.monkey.retromusic.fragments.player.blur
-import android.animation.ObjectAnimator
import android.graphics.Color
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
@@ -29,6 +27,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentBlurPlayerPlaybackControlsBinding
+import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.extensions.getSongInfo
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
@@ -36,7 +35,6 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
-import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
@@ -134,7 +132,7 @@ class BlurPlaybackControlsFragment :
binding.text.setTextColor(lastPlaybackControlsColor)
binding.songInfo.setTextColor(lastDisabledPlaybackControlsColor)
- TintHelper.setTintAuto(binding.progressSlider, lastPlaybackControlsColor, false)
+ binding.progressSlider.applyColor(lastPlaybackControlsColor)
volumeFragment?.setTintableColor(lastPlaybackControlsColor)
setFabColor(lastPlaybackControlsColor)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
index 1047cc3d8..845df16f8 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt
@@ -14,13 +14,12 @@
*/
package code.name.monkey.retromusic.fragments.player.flat
-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
@@ -35,7 +34,6 @@ import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
-import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
@@ -60,6 +58,12 @@ class FlatPlaybackControlsFragment :
override val previousButton: ImageButton?
get() = null
+ override val songTotalTime: TextView
+ get() = binding.songTotalTime
+
+ override val songCurrentProgress: TextView
+ get() = binding.songCurrentProgress
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentFlatPlayerPlaybackControlsBinding.bind(view)
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt
index 23dd550d4..f20efdd24 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt
@@ -132,7 +132,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
private fun updateArtistImage() {
libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId)
- .observe(viewLifecycleOwner, { artist ->
+ .observe(viewLifecycleOwner) { artist ->
if (artist.id != -1L) {
GlideApp.with(requireActivity()).asBitmapPalette().artistImageOptions(artist)
.load(RetroGlideExtension.getArtistModel(artist))
@@ -142,7 +142,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
})
}
- })
+ }
}
override fun onQueueChanged() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
index c76d3c2dd..2c9771327 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
@@ -1,7 +1,6 @@
package code.name.monkey.retromusic.fragments.playlists
import android.os.Bundle
-import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
@@ -20,7 +19,6 @@ import code.name.monkey.retromusic.db.PlaylistWithSongs
import code.name.monkey.retromusic.db.toSongs
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.surfaceColor
-import code.name.monkey.retromusic.extensions.updateMargin
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper
@@ -51,7 +49,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
private var _binding: FragmentPlaylistDetailBinding? = null
private val binding get() = _binding!!
-
private lateinit var playlist: PlaylistWithSongs
private lateinit var playlistSongAdapter: OrderablePlaylistSongAdapter
@@ -67,9 +64,9 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
playlist = arguments.extraPlaylist
binding.toolbar.title = playlist.playlistEntity.playlistName
setUpRecyclerView()
- viewModel.getSongs().observe(viewLifecycleOwner, {
+ viewModel.getSongs().observe(viewLifecycleOwner) {
songs(it.toSongs())
- })
+ }
postponeEnterTransition()
requireView().doOnPreDraw { startPostponedEnterTransition() }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
@@ -157,7 +154,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
fun songs(songs: List) {
binding.progressIndicator.hide()
if (songs.isNotEmpty()) {
- Log.i("Updated", songs[0].title)
playlistSongAdapter.swapDataSet(songs)
} else {
showEmptyView()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
index ff17c2ad4..1a928ab27 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt
@@ -40,12 +40,12 @@ class PlaylistsFragment :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- libraryViewModel.getPlaylists().observe(viewLifecycleOwner, {
+ libraryViewModel.getPlaylists().observe(viewLifecycleOwner) {
if (it.isNotEmpty())
adapter?.swapDataSet(it)
else
adapter?.swapDataSet(listOf())
- })
+ }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
remove()
requireActivity().onBackPressed()
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt
index 090a8ef5b..820b5ae51 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt
@@ -88,19 +88,19 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
if (savedInstanceState != null) {
query = savedInstanceState.getString(QUERY)
}
- libraryViewModel.getSearchResult().observe(viewLifecycleOwner, {
+ libraryViewModel.getSearchResult().observe(viewLifecycleOwner) {
showData(it)
- })
+ }
setupChips()
postponeEnterTransition()
view.doOnPreDraw {
startPostponedEnterTransition()
}
- libraryViewModel.getFabMargin().observe(viewLifecycleOwner, {
+ libraryViewModel.getFabMargin().observe(viewLifecycleOwner) {
binding.keyboardPopup.updateLayoutParams {
bottomMargin = it
}
- })
+ }
KeyboardVisibilityEvent.setEventListener(requireActivity(), viewLifecycleOwner) {
if (it) {
binding.keyboardPopup.isGone = true
@@ -192,6 +192,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
R.id.chip_albums -> Filter.ALBUMS
R.id.chip_album_artists -> Filter.ALBUM_ARTISTS
R.id.chip_genres -> Filter.GENRES
+ R.id.chip_playlists -> Filter.PLAYLISTS
else -> Filter.NO_FILTER
}
}
@@ -245,6 +246,7 @@ enum class Filter {
ALBUMS,
ALBUM_ARTISTS,
GENRES,
+ PLAYLISTS,
NO_FILTER
}
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 494430ed8..c3aaa94ff 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
@@ -42,12 +42,12 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment
- bw.write(M3UConstants.HEADER)
- songs.forEach {
- bw.newLine()
- bw.write(M3UConstants.ENTRY + it.duration + M3UConstants.DURATION_SEPARATOR + it.artistName + " - " + it.title)
- bw.newLine()
- bw.write(it.data)
+ outputStream.use { os ->
+ os.bufferedWriter().use { bw->
+ bw.write(M3UConstants.HEADER)
+ songs.forEach {
+ bw.newLine()
+ bw.write(M3UConstants.ENTRY + it.duration + M3UConstants.DURATION_SEPARATOR + it.artistName + " - " + it.title)
+ bw.newLine()
+ bw.write(it.data)
+ }
}
}
}
- outputStream.flush()
- outputStream.close()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
index d25b32c01..9bd72fa58 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt
@@ -21,7 +21,6 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.RealSongRepository
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
-import java.util.*
object SearchQueryHelper : KoinComponent {
private const val TITLE_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.TITLE + ") = ?"
diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt b/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt
index 1244f3cbf..6dbc5e9f6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt
@@ -36,7 +36,6 @@ import android.widget.Scroller
import androidx.core.content.ContextCompat
import code.name.monkey.retromusic.R
import java.io.File
-import java.util.*
import kotlin.math.abs
/**
diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt
index 2c096092a..d773beef9 100644
--- a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt
@@ -16,19 +16,19 @@ package code.name.monkey.retromusic.repository
import android.content.ContentResolver
import android.database.Cursor
-import android.net.Uri
import android.provider.BaseColumns
import android.provider.MediaStore.Audio.Genres
import code.name.monkey.retromusic.Constants.IS_MUSIC
import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.extensions.getLong
-import code.name.monkey.retromusic.extensions.getString
import code.name.monkey.retromusic.extensions.getStringOrNull
import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil
interface GenreRepository {
+ fun genres(query: String): List
+
fun genres(): List
fun songs(genreId: Long): List
@@ -41,6 +41,10 @@ class RealGenreRepository(
private val songRepository: RealSongRepository
) : GenreRepository {
+ override fun genres(query: String): List {
+ return getGenresFromCursor(makeGenreCursor(query))
+ }
+
override fun genres(): List {
return getGenresFromCursor(makeGenreCursor())
}
@@ -57,18 +61,23 @@ class RealGenreRepository(
return songRepository.song(makeGenreSongCursor(genreId))
}
+ private fun getSongCount(genreId: Long): Int {
+ contentResolver.query(
+ Genres.Members.getContentUri("external", genreId),
+ null,
+ null,
+ null,
+ null
+ ).use {
+ return it?.count ?: 0
+ }
+ }
+
private fun getGenreFromCursor(cursor: Cursor): Genre {
val id = cursor.getLong(Genres._ID)
val name = cursor.getStringOrNull(Genres.NAME)
- val songCount = songs(id).size
+ val songCount = getSongCount(id)
return Genre(id, name ?: "", songCount)
-
- }
-
- private fun getGenreFromCursorWithOutSongs(cursor: Cursor): Genre {
- val id = cursor.getLong(Genres._ID)
- val name = cursor.getString(Genres.NAME)
- return Genre(id, name, -1)
}
private fun getSongsWithNoGenre(): List {
@@ -77,28 +86,6 @@ class RealGenreRepository(
return songRepository.songs(songRepository.makeSongCursor(selection, null))
}
- private fun hasSongsWithNoGenre(): Boolean {
- val allSongsCursor = songRepository.makeSongCursor(null, null)
- val allSongsWithGenreCursor = makeAllSongsWithGenreCursor()
-
- if (allSongsCursor == null || allSongsWithGenreCursor == null) {
- return false
- }
-
- val hasSongsWithNoGenre = allSongsCursor.count > allSongsWithGenreCursor.count
- allSongsCursor.close()
- allSongsWithGenreCursor.close()
- return hasSongsWithNoGenre
- }
-
- private fun makeAllSongsWithGenreCursor(): Cursor? {
- println(Genres.EXTERNAL_CONTENT_URI.toString())
- return contentResolver.query(
- Uri.parse("content://media/external/audio/genres/all/members"),
- arrayOf(Genres.Members.AUDIO_ID), null, null, null
- )
- }
-
private fun makeGenreSongCursor(genreId: Long): Cursor? {
return try {
contentResolver.query(
@@ -121,37 +108,13 @@ class RealGenreRepository(
val genre = getGenreFromCursor(cursor)
if (genre.songCount > 0) {
genres.add(genre)
- } else {
- // try to remove the empty genre from the media store
- try {
- contentResolver.delete(
- Genres.EXTERNAL_CONTENT_URI,
- Genres._ID + " == " + genre.id,
- null
- )
- } catch (e: Exception) {
- e.printStackTrace()
- }
-
}
} while (cursor.moveToNext())
}
- cursor.close()
}
return genres
}
- private fun getGenresFromCursorForSearch(cursor: Cursor?): List {
- val genres = mutableListOf()
- if (cursor != null && cursor.moveToFirst()) {
- do {
- genres.add(getGenreFromCursorWithOutSongs(cursor))
- } while (cursor.moveToNext())
- }
- cursor?.close()
- return genres
- }
-
private fun makeGenreCursor(): Cursor? {
val projection = arrayOf(Genres._ID, Genres.NAME)
return try {
@@ -166,4 +129,19 @@ class RealGenreRepository(
return null
}
}
+
+ private fun makeGenreCursor(query: String): Cursor? {
+ val projection = arrayOf(Genres._ID, Genres.NAME)
+ return try {
+ contentResolver.query(
+ Genres.EXTERNAL_CONTENT_URI,
+ projection,
+ Genres.NAME + " = ?",
+ arrayOf(query),
+ PreferenceUtil.genreSortOrder
+ )
+ } catch (e: SecurityException) {
+ return null
+ }
+ }
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt
index 4a1280d6a..abfcd0244 100644
--- a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt
@@ -16,6 +16,7 @@ package code.name.monkey.retromusic.repository
import android.content.Context
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.fragments.search.Filter
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
@@ -29,20 +30,23 @@ class RealSearchRepository(
private val roomRepository: RoomRepository,
private val genreRepository: GenreRepository,
) {
- fun searchAll(context: Context, query: String?, filter: Filter): MutableList {
+ suspend fun searchAll(context: Context, query: String?, filter: Filter): MutableList {
val results = mutableListOf()
if (query.isNullOrEmpty()) return results
query.let { searchString ->
+
+ /** Songs **/
val songs: List = if (filter == Filter.SONGS || filter == Filter.NO_FILTER) {
songRepository.songs(searchString)
} else {
emptyList()
}
-
if (songs.isNotEmpty()) {
results.add(context.resources.getString(R.string.songs))
results.addAll(songs)
}
+
+ /** Artists **/
val artists: List =
if (filter == Filter.ARTISTS || filter == Filter.NO_FILTER) {
artistRepository.artists(searchString)
@@ -53,6 +57,8 @@ class RealSearchRepository(
results.add(context.resources.getString(R.string.artists))
results.addAll(artists)
}
+
+ /** Albums **/
val albums: List = if (filter == Filter.ALBUMS || filter == Filter.NO_FILTER) {
albumRepository.albums(searchString)
} else {
@@ -62,6 +68,8 @@ class RealSearchRepository(
results.add(context.resources.getString(R.string.albums))
results.addAll(albums)
}
+
+ /** Album-Artists **/
val albumArtists: List =
if (filter == Filter.ALBUM_ARTISTS || filter == Filter.NO_FILTER) {
artistRepository.albumArtists(searchString)
@@ -72,11 +80,10 @@ class RealSearchRepository(
results.add(context.resources.getString(R.string.album_artist))
results.addAll(albumArtists)
}
+
+ /** Genres **/
val genres: List = if (filter == Filter.GENRES || filter == Filter.NO_FILTER) {
- genreRepository.genres().filter { genre ->
- genre.name.lowercase()
- .contains(searchString.lowercase())
- }
+ genreRepository.genres(query)
} else {
emptyList()
}
@@ -84,14 +91,21 @@ class RealSearchRepository(
results.add(context.resources.getString(R.string.genres))
results.addAll(genres)
}
- /* val playlist = roomRepository.playlists().filter { playlist ->
- playlist.playlistName.toLowerCase(Locale.getDefault())
- .contains(searchString.toLowerCase(Locale.getDefault()))
- }
- if (playlist.isNotEmpty()) {
- results.add(context.getString(R.string.playlists))
- results.addAll(playlist)
- }*/
+
+ /** Playlists **/
+ val playlist: List =
+ if (filter == Filter.PLAYLISTS || filter == Filter.NO_FILTER) {
+ roomRepository.playlists().filter { playlist ->
+ playlist.playlistName.lowercase().contains(searchString.lowercase())
+ }
+ } else {
+ emptyList()
+ }
+
+ if (playlist.isNotEmpty()) {
+ results.add(context.getString(R.string.playlists))
+ results.addAll(playlist)
+ }
}
return results
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java
index df569eb60..d10a4232f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java
@@ -30,6 +30,7 @@ import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.res.ResourcesCompat;
import java.io.File;
import java.io.FileOutputStream;
@@ -100,7 +101,7 @@ public class ImageUtil {
public static Drawable getVectorDrawable(
@NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) {
- return res.getDrawable(resId, theme);
+ return ResourcesCompat.getDrawable(res,resId, theme);
}
/** Makes sure that {@code mTempBuffer} has at least length {@code size}. */
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt
index 3d300c102..15b9722ee 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt
@@ -35,7 +35,6 @@ import java.io.IOException
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.*
-import kotlin.collections.LinkedHashMap
/**
* Validates that the calling package is authorized to browse a [MediaBrowserServiceCompat].
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 20b9d799f..eb6585548 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
@@ -708,6 +708,9 @@ object PreferenceUtil {
val circlePlayButton
get() = sharedPreferences.getBoolean(CIRCLE_PLAY_BUTTON, false)
+
+ val swipeAnywhereToChangeSong
+ get() = sharedPreferences.getBoolean(SWIPE_ANYWHERE_NOW_PLAYING, true)
}
enum class LyricsType {
REPLACE_COVER, OVER_COVER
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
index 8bd8504b2..1f69fbc4f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt
@@ -26,13 +26,6 @@ object ThemeManager {
fun getNightMode(): Int = when (App.getContext().generalThemeValue) {
LIGHT -> AppCompatDelegate.MODE_NIGHT_NO
DARK -> AppCompatDelegate.MODE_NIGHT_YES
- BLACK -> {
- if (PreferenceUtil.baseTheme == "dark") {
- AppCompatDelegate.MODE_NIGHT_YES
- } else {
- AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
- }
- }
else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
}
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java
index 8bc646d54..64abadf92 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java
+++ b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java
@@ -222,7 +222,7 @@ public class SeekArc extends View {
* provides notifications of when the user starts and stops a touch gesture within the SeekArc.
*
* @param l The seek bar notification listener
- * @see SeekArc.OnSeekBarChangeListener
+ * @see SeekArc.OnSeekArcChangeListener
*/
public void setOnSeekArcChangeListener(OnSeekArcChangeListener l) {
mOnSeekArcChangeListener = l;
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsLinearLayout.kt b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsLinearLayout.kt
index ec6c08f04..8f1f67534 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsLinearLayout.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/views/insets/InsetsLinearLayout.kt
@@ -3,7 +3,6 @@ package code.name.monkey.retromusic.views.insets
import android.content.Context
import android.util.AttributeSet
import android.widget.LinearLayout
-import androidx.constraintlayout.widget.ConstraintLayout
import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding
import code.name.monkey.retromusic.util.RetroUtil
diff --git a/app/src/main/res/layout/fragment_artist_content.xml b/app/src/main/res/layout/fragment_artist_content.xml
index eea605d55..7927e81ee 100644
--- a/app/src/main/res/layout/fragment_artist_content.xml
+++ b/app/src/main/res/layout/fragment_artist_content.xml
@@ -1,5 +1,5 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
index 85dda2d01..d75ebdf95 100644
--- a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
+++ b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
@@ -26,14 +26,12 @@
android:id="@+id/progressSlider"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="8"
android:paddingVertical="@dimen/seekbar_padding"
android:splitTrack="false"
android:thumb="@drawable/switch_square"
app:layout_constraintEnd_toStartOf="@id/songTotalTime"
app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
app:layout_constraintTop_toTopOf="parent"
- tools:ignore="RtlHardcoded,UnusedAttribute"
tools:progress="20" />
+
+
diff --git a/app/src/main/res/layout/item_queue.xml b/app/src/main/res/layout/item_queue.xml
index 305cb28a5..855392064 100644
--- a/app/src/main/res/layout/item_queue.xml
+++ b/app/src/main/res/layout/item_queue.xml
@@ -6,6 +6,7 @@
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
+ android:background="?rectSelector"
android:transitionGroup="true">
Navigate to the last used tab on start
Display synced lyrics over album cover
Show New Music Mix on homescreen
+ Enables changing song by swiping anywhere on the now playing screen
Immersive mode
Start playing immediately after headphones are connected
Shuffle mode will turn off when playing a new list of songs
@@ -390,6 +391,7 @@
Remember last tab
Show lyrics
Show suggestions
+ Swipe anywhere to change song
Tab titles mode
Carousel effect
Fullscreen app
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5a11aca98..7eb320a8e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -207,7 +207,6 @@
- 16sp
- true
- 10dp
- - true
- 40dp
- 10dp
diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml
index 18c71ebb8..6739788ff 100644
--- a/app/src/main/res/values/styles_parents.xml
+++ b/app/src/main/res/values/styles_parents.xml
@@ -29,7 +29,7 @@
- @drawable/popup_background
-