diff --git a/app/build.gradle b/app/build.gradle
index 7581b2571..2aa64fffb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -14,8 +14,8 @@ android {
vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic"
- versionCode 10569
- versionName '5.7.3'
+ versionCode 10570
+ versionName '5.8.0'
buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
}
@@ -99,7 +99,7 @@ dependencies {
implementation 'androidx.palette:palette-ktx:1.0.0'
//Cast Dependencies
- implementation 'androidx.mediarouter:mediarouter:1.2.6'
+ implementation 'androidx.mediarouter:mediarouter:1.3.0-rc01'
implementation 'com.google.android.gms:play-services-cast-framework:21.0.1'
//WebServer by NanoHttpd
implementation "org.nanohttpd:nanohttpd:2.3.1"
@@ -118,7 +118,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
- implementation "androidx.core:core-splashscreen:1.0.0-beta01"
+ implementation "androidx.core:core-splashscreen:1.0.0-beta02"
implementation 'com.google.android.play:core-ktx:1.8.1'
implementation "com.google.android.material:material:$mdc_version"
@@ -142,7 +142,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.1.5'
+ def koin_version = '3.2.0-beta-1'
implementation "io.insert-koin:koin-core:$koin_version"
implementation "io.insert-koin:koin-android:$koin_version"
diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html
index 40bcf73be..b6f6e0e80 100644
--- a/app/src/main/assets/retro-changelog.html
+++ b/app/src/main/assets/retro-changelog.html
@@ -62,6 +62,19 @@
+
+
March 13, 2022
+
v5.8.0
+
What's New
+
+ - Updated translations
+ - Minor UI improvements
+
+
Fixed
+
+ - Fixed Classic Notification crash
+
+
March 13, 2022
v5.7.3
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 4037421f0..3cbee691b 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
@@ -62,9 +62,9 @@ import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.CategoryInfo
import code.name.monkey.retromusic.util.PreferenceUtil
-import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.ViewUtil
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
+import dev.chrisbanes.insetter.applyInsetter
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -145,9 +145,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
windowInsets = insets
insets
}
- if (RetroUtil.isLandscape()) {
- binding.slidingPanel.drawAboveSystemBarsWithPadding()
- }
chooseFragmentForTheme()
setupSlidingUpPanel()
setupBottomSheet()
@@ -357,7 +354,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
}
}
- fun setBottomNavVisibility(visible: Boolean, animate: Boolean = false, hideBottomSheet: Boolean = MusicPlayerRemote.playingQueue.isEmpty()) {
+ fun setBottomNavVisibility(
+ visible: Boolean,
+ animate: Boolean = false,
+ hideBottomSheet: Boolean = MusicPlayerRemote.playingQueue.isEmpty()
+ ) {
if (isInOneTabMode) {
hideBottomSheet(
hide = hideBottomSheet,
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt
index 7013ab681..06ed30be0 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt
@@ -28,7 +28,6 @@ import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
-import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.PlaylistWithSongs
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension
@@ -56,7 +55,7 @@ class SearchAdapter(
if (dataSet[position] is Album) return ALBUM
if (dataSet[position] is Artist) return if ((dataSet[position] as Artist).isAlbumArtist) ALBUM_ARTIST else ARTIST
if (dataSet[position] is Genre) return GENRE
- if (dataSet[position] is PlaylistEntity) return PLAYLIST
+ if (dataSet[position] is PlaylistWithSongs) return PLAYLIST
return if (dataSet[position] is Song) SONG else HEADER
}
@@ -121,8 +120,8 @@ class SearchAdapter(
)
}
PLAYLIST -> {
- val playlist = dataSet[position] as PlaylistEntity
- holder.title?.text = playlist.playlistName
+ val playlist = dataSet[position] as PlaylistWithSongs
+ holder.title?.text = playlist.playlistEntity.playlistName
//holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs)
}
ALBUM_ARTIST -> {
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 50c922662..63f60d2a4 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
@@ -24,7 +24,6 @@ import android.text.TextWatcher
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
-import androidx.annotation.IdRes
import androidx.core.content.getSystemService
import androidx.core.view.*
import androidx.recyclerview.widget.LinearLayoutManager
@@ -52,7 +51,7 @@ import java.util.*
class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher,
- ChipGroup.OnCheckedChangeListener {
+ ChipGroup.OnCheckedStateChangeListener {
companion object {
const val QUERY = "query"
const val REQ_CODE_SPEECH_INPUT = 9001
@@ -134,7 +133,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
it.chipBackgroundColor = ColorStateList(states, colors)
}
}
- binding.searchFilterGroup.setOnCheckedChangeListener(this)
+ binding.searchFilterGroup.setOnCheckedStateChangeListener(this)
}
private fun showData(data: List
) {
@@ -241,7 +240,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
}
}
- override fun onCheckedChanged(group: ChipGroup?, @IdRes checkedId: Int) {
+ override fun onCheckedChanged(group: ChipGroup, checkedIds: MutableList) {
search(binding.searchView.text.toString())
}
}
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 abfcd0244..17b555ecd 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,7 +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.db.PlaylistWithSongs
import code.name.monkey.retromusic.fragments.search.Filter
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
@@ -93,10 +93,10 @@ class RealSearchRepository(
}
/** Playlists **/
- val playlist: List =
+ val playlist: List =
if (filter == Filter.PLAYLISTS || filter == Filter.NO_FILTER) {
- roomRepository.playlists().filter { playlist ->
- playlist.playlistName.lowercase().contains(searchString.lowercase())
+ roomRepository.playlistWithSongs().filter { playlist ->
+ playlist.playlistEntity.playlistName.lowercase().contains(searchString.lowercase())
}
} else {
emptyList()
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 7cce726d3..965fd3031 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
@@ -68,8 +68,8 @@ import code.name.monkey.retromusic.providers.MusicPlaybackQueueStore
import code.name.monkey.retromusic.providers.SongPlayCountStore
import code.name.monkey.retromusic.service.AudioFader.Companion.startFadeAnimator
import code.name.monkey.retromusic.service.notification.PlayingNotification
-import code.name.monkey.retromusic.service.notification.PlayingNotificationClassic.Companion.from
-import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24.Companion.from
+import code.name.monkey.retromusic.service.notification.PlayingNotificationClassic
+import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24
import code.name.monkey.retromusic.service.playback.Playback
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri
@@ -194,10 +194,10 @@ class MusicService : MediaBrowserServiceCompat(),
playerHandler?.obtainMessage(FOCUS_CHANGE, focusChange, 0)?.sendToTarget()
}
private var playingNotification: PlayingNotification? = null
+
private val updateFavoriteReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
- startForegroundOrNotify()
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
}
}
@@ -594,9 +594,9 @@ class MusicService : MediaBrowserServiceCompat(),
playingNotification = if (VERSION.SDK_INT >= VERSION_CODES.N
&& !isClassicNotification
) {
- from(this, notificationManager!!, mediaSession!!)
+ PlayingNotificationImpl24.from(this, notificationManager!!, mediaSession!!)
} else {
- from(this, notificationManager!!)
+ PlayingNotificationClassic.from(this, notificationManager!!)
}
}
@@ -732,11 +732,18 @@ class MusicService : MediaBrowserServiceCompat(),
}
}
ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData()
- COLORED_NOTIFICATION -> updateNotification()
+ COLORED_NOTIFICATION -> {
+ playingNotification?.updateMetadata(currentSong) {
+ playingNotification?.setPlaying(isPlaying)
+ startForegroundOrNotify()
+ }
+ }
CLASSIC_NOTIFICATION -> {
updateNotification()
- playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
- playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
+ playingNotification?.updateMetadata(currentSong) {
+ playingNotification?.setPlaying(isPlaying)
+ startForegroundOrNotify()
+ }
}
PLAYBACK_SPEED -> updateMediaSessionPlaybackState()
TOGGLE_HEADSET -> registerHeadsetEvents()
@@ -1195,12 +1202,14 @@ class MusicService : MediaBrowserServiceCompat(),
savePositionInTrack()
}
songPlayCountHelper.notifyPlayStateChanged(isPlaying)
- playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
+ playingNotification?.setPlaying(isPlaying)
startForegroundOrNotify()
}
FAVORITE_STATE_CHANGED -> {
- playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
- playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
+ playingNotification?.updateFavorite(currentSong) {
+ startForegroundOrNotify()
+ }
+
updateMediaSessionMetaData()
updateMediaSessionPlaybackState()
savePosition()
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotification.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotification.kt
index 8afc265bd..162775f06 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotification.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotification.kt
@@ -29,7 +29,7 @@ abstract class PlayingNotification(context: Context) :
abstract fun updateMetadata(song: Song, onUpdate: () -> Unit)
- abstract fun setPlaying(isPlaying: Boolean, onUpdate: () -> Unit)
+ abstract fun setPlaying(isPlaying: Boolean)
abstract fun updateFavorite(song: Song, onUpdate: () -> Unit)
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt
index 72cd280f8..93c992085 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt
@@ -56,13 +56,28 @@ import com.bumptech.glide.request.transition.Transition
class PlayingNotificationClassic(
val context: Context
) : PlayingNotification(context) {
-
private var primaryColor: Int = 0
private var isInitialized = false
- init {
- val notificationLayout = getCombinedRemoteViews(true)
- val notificationLayoutBig = getCombinedRemoteViews(false)
+ private fun getCombinedRemoteViews(collapsed: Boolean, song: Song): RemoteViews {
+ val remoteViews = RemoteViews(
+ context.packageName,
+ if (collapsed) R.layout.layout_notification_collapsed else R.layout.layout_notification_expanded
+ )
+ remoteViews.setTextViewText(
+ R.id.appName,
+ context.getString(R.string.app_name) + " • " + song.albumName
+ )
+ remoteViews.setTextViewText(R.id.title, song.title)
+ remoteViews.setTextViewText(R.id.subtitle, song.artistName)
+ linkButtons(remoteViews)
+ return remoteViews
+ }
+
+ override fun updateMetadata(song: Song, onUpdate: () -> Unit) {
+ isInitialized = true
+ val notificationLayout = getCombinedRemoteViews(true, song)
+ val notificationLayoutBig = getCombinedRemoteViews(false, song)
val action = Intent(context, MainActivity::class.java)
action.putExtra(MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel)
@@ -83,25 +98,12 @@ class PlayingNotificationClassic(
setContentIntent(clickIntent)
setDeleteIntent(deleteIntent)
setCategory(NotificationCompat.CATEGORY_SERVICE)
- setColorized(true)
+ setColorized(PreferenceUtil.isColoredNotification)
priority = NotificationCompat.PRIORITY_MAX
setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
setCustomContentView(notificationLayout)
setCustomBigContentView(notificationLayoutBig)
setOngoing(true)
- }
-
- private fun getCombinedRemoteViews(collapsed: Boolean): RemoteViews {
- val remoteViews = RemoteViews(
- context.packageName,
- if (collapsed) R.layout.layout_notification_collapsed else R.layout.layout_notification_expanded
- )
- linkButtons(remoteViews)
- return remoteViews
- }
-
- override fun updateMetadata(song: Song, onUpdate: () -> Unit) {
- isInitialized = true
val bigNotificationImageSize = context.resources
.getDimensionPixelSize(R.dimen.notification_big_image_size)
GlideApp.with(context).asBitmapPalette().songCoverOptions(song)
@@ -128,6 +130,10 @@ class PlayingNotificationClassic(
}
override fun onLoadCleared(placeholder: Drawable?) {
+ update(
+ null,
+ resolveColor(context, R.attr.colorSurface, Color.WHITE)
+ )
}
private fun update(bitmap: Bitmap?, bgColor: Int) {
@@ -208,14 +214,6 @@ class PlayingNotificationClassic(
contentView.setImageViewBitmap(R.id.action_next, next)
contentView.setImageViewBitmap(R.id.action_play_pause, playPause)
- contentView.setTextViewText(
- R.id.appName,
- context.getString(R.string.app_name) + " • " + song.albumName
- )
- contentView.setTextViewText(R.id.title, song.title)
- contentView.setTextViewText(R.id.subtitle, song.artistName)
-
-
bigContentView.setTextColor(R.id.title, primary)
bigContentView.setTextColor(R.id.subtitle, secondary)
bigContentView.setTextColor(R.id.appName, secondary)
@@ -225,14 +223,6 @@ class PlayingNotificationClassic(
bigContentView.setImageViewBitmap(R.id.action_next, next)
bigContentView.setImageViewBitmap(R.id.action_play_pause, playPause)
- bigContentView.setTextViewText(
- R.id.appName,
- context.getString(R.string.app_name) + " • " + song.albumName
- )
- bigContentView.setTextViewText(R.id.title, song.title)
- bigContentView.setTextViewText(R.id.subtitle, song.artistName)
-
-
contentView.setImageViewBitmap(
R.id.smallIcon,
createBitmap(
@@ -269,7 +259,7 @@ class PlayingNotificationClassic(
)
}
- override fun setPlaying(isPlaying: Boolean, onUpdate: () -> Unit) {
+ override fun setPlaying(isPlaying: Boolean) {
getPlayPauseBitmap(isPlaying).also {
contentView.setImageViewBitmap(R.id.action_play_pause, it)
bigContentView.setImageViewBitmap(R.id.action_play_pause, it)
@@ -277,9 +267,6 @@ class PlayingNotificationClassic(
}
override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
- if (!isInitialized) {
- updateMetadata(song, onUpdate)
- }
}
private fun buildPendingIntent(
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt
index 7a0ceba9f..92a2cec0b 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt
@@ -46,10 +46,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroColorUtil
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
+import kotlinx.coroutines.*
@SuppressLint("RestrictedApi")
class PlayingNotificationImpl24(
@@ -207,9 +204,8 @@ class PlayingNotificationImpl24(
).build()
}
- override fun setPlaying(isPlaying: Boolean, onUpdate: () -> Unit) {
+ override fun setPlaying(isPlaying: Boolean) {
mActions[2] = buildPlayAction(isPlaying)
- onUpdate()
}
override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
index 78dcef3a0..2652da794 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt
@@ -42,7 +42,8 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
} else {
applyInsetter {
type(navigationBars = true) {
- padding()
+ padding(vertical = true)
+ margin(horizontal = true)
}
}
}
diff --git a/app/src/main/res/layout/fragment_artist_content.xml b/app/src/main/res/layout/fragment_artist_content.xml
index 7927e81ee..4dae659e8 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_backup.xml b/app/src/main/res/layout/fragment_backup.xml
index d03766434..5bcb9b3e2 100644
--- a/app/src/main/res/layout/fragment_backup.xml
+++ b/app/src/main/res/layout/fragment_backup.xml
@@ -51,11 +51,12 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/create_backup" />
-
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 179ca4e10..cf42f1d20 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -188,6 +188,7 @@
diff --git a/build.gradle b/build.gradle
index 3a129732d..008a095dc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ buildscript {
ext {
kotlin_version = '1.6.10'
navigation_version = '2.4.1'
- mdc_version = '1.5.0'
+ mdc_version = '1.6.0-beta01'
preference_version = '1.2.0'
appcompat_version = '1.4.1'
}