commit
dc41fe509b
15 changed files with 91 additions and 84 deletions
|
@ -14,8 +14,8 @@ android {
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
|
|
||||||
applicationId "code.name.monkey.retromusic"
|
applicationId "code.name.monkey.retromusic"
|
||||||
versionCode 10569
|
versionCode 10570
|
||||||
versionName '5.7.3'
|
versionName '5.8.0'
|
||||||
|
|
||||||
buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
|
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'
|
implementation 'androidx.palette:palette-ktx:1.0.0'
|
||||||
|
|
||||||
//Cast Dependencies
|
//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'
|
implementation 'com.google.android.gms:play-services-cast-framework:21.0.1'
|
||||||
//WebServer by NanoHttpd
|
//WebServer by NanoHttpd
|
||||||
implementation "org.nanohttpd:nanohttpd:2.3.1"
|
implementation "org.nanohttpd:nanohttpd:2.3.1"
|
||||||
|
@ -118,7 +118,7 @@ dependencies {
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
||||||
implementation "androidx.lifecycle:lifecycle-common-java8:$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.play:core-ktx:1.8.1'
|
||||||
implementation "com.google.android.material:material:$mdc_version"
|
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-core:$kotlin_coroutines_version"
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$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-core:$koin_version"
|
||||||
implementation "io.insert-koin:koin-android:$koin_version"
|
implementation "io.insert-koin:koin-android:$koin_version"
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,19 @@
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
<div>
|
||||||
|
<h5>March 13, 2022</h5>
|
||||||
|
<h2>v5.8.0</h2>
|
||||||
|
<h3>What's New</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Updated translations</li>
|
||||||
|
<li>Minor UI improvements</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Fixed</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed Classic Notification crash</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h5>March 13, 2022</h5>
|
<h5>March 13, 2022</h5>
|
||||||
<h2>v5.7.3</h2>
|
<h2>v5.7.3</h2>
|
||||||
|
|
|
@ -62,9 +62,9 @@ import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment
|
||||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import code.name.monkey.retromusic.model.CategoryInfo
|
import code.name.monkey.retromusic.model.CategoryInfo
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.RetroUtil
|
|
||||||
import code.name.monkey.retromusic.util.ViewUtil
|
import code.name.monkey.retromusic.util.ViewUtil
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||||
|
import dev.chrisbanes.insetter.applyInsetter
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,9 +145,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
||||||
windowInsets = insets
|
windowInsets = insets
|
||||||
insets
|
insets
|
||||||
}
|
}
|
||||||
if (RetroUtil.isLandscape()) {
|
|
||||||
binding.slidingPanel.drawAboveSystemBarsWithPadding()
|
|
||||||
}
|
|
||||||
chooseFragmentForTheme()
|
chooseFragmentForTheme()
|
||||||
setupSlidingUpPanel()
|
setupSlidingUpPanel()
|
||||||
setupBottomSheet()
|
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) {
|
if (isInOneTabMode) {
|
||||||
hideBottomSheet(
|
hideBottomSheet(
|
||||||
hide = hideBottomSheet,
|
hide = hideBottomSheet,
|
||||||
|
|
|
@ -28,7 +28,6 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import code.name.monkey.appthemehelper.ThemeStore
|
import code.name.monkey.appthemehelper.ThemeStore
|
||||||
import code.name.monkey.retromusic.*
|
import code.name.monkey.retromusic.*
|
||||||
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
|
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.db.PlaylistWithSongs
|
||||||
import code.name.monkey.retromusic.glide.GlideApp
|
import code.name.monkey.retromusic.glide.GlideApp
|
||||||
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
import code.name.monkey.retromusic.glide.RetroGlideExtension
|
||||||
|
@ -56,7 +55,7 @@ class SearchAdapter(
|
||||||
if (dataSet[position] is Album) return ALBUM
|
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 Artist) return if ((dataSet[position] as Artist).isAlbumArtist) ALBUM_ARTIST else ARTIST
|
||||||
if (dataSet[position] is Genre) return GENRE
|
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
|
return if (dataSet[position] is Song) SONG else HEADER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,8 +120,8 @@ class SearchAdapter(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
PLAYLIST -> {
|
PLAYLIST -> {
|
||||||
val playlist = dataSet[position] as PlaylistEntity
|
val playlist = dataSet[position] as PlaylistWithSongs
|
||||||
holder.title?.text = playlist.playlistName
|
holder.title?.text = playlist.playlistEntity.playlistName
|
||||||
//holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs)
|
//holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs)
|
||||||
}
|
}
|
||||||
ALBUM_ARTIST -> {
|
ALBUM_ARTIST -> {
|
||||||
|
|
|
@ -24,7 +24,6 @@ import android.text.TextWatcher
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import androidx.annotation.IdRes
|
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.core.view.*
|
import androidx.core.view.*
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
@ -52,7 +51,7 @@ import java.util.*
|
||||||
|
|
||||||
|
|
||||||
class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher,
|
class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher,
|
||||||
ChipGroup.OnCheckedChangeListener {
|
ChipGroup.OnCheckedStateChangeListener {
|
||||||
companion object {
|
companion object {
|
||||||
const val QUERY = "query"
|
const val QUERY = "query"
|
||||||
const val REQ_CODE_SPEECH_INPUT = 9001
|
const val REQ_CODE_SPEECH_INPUT = 9001
|
||||||
|
@ -134,7 +133,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
|
||||||
it.chipBackgroundColor = ColorStateList(states, colors)
|
it.chipBackgroundColor = ColorStateList(states, colors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.searchFilterGroup.setOnCheckedChangeListener(this)
|
binding.searchFilterGroup.setOnCheckedStateChangeListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showData(data: List<Any>) {
|
private fun showData(data: List<Any>) {
|
||||||
|
@ -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<Int>) {
|
||||||
search(binding.searchView.text.toString())
|
search(binding.searchView.text.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ package code.name.monkey.retromusic.repository
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import code.name.monkey.retromusic.R
|
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.fragments.search.Filter
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
|
@ -93,10 +93,10 @@ class RealSearchRepository(
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Playlists **/
|
/** Playlists **/
|
||||||
val playlist: List<PlaylistEntity> =
|
val playlist: List<PlaylistWithSongs> =
|
||||||
if (filter == Filter.PLAYLISTS || filter == Filter.NO_FILTER) {
|
if (filter == Filter.PLAYLISTS || filter == Filter.NO_FILTER) {
|
||||||
roomRepository.playlists().filter { playlist ->
|
roomRepository.playlistWithSongs().filter { playlist ->
|
||||||
playlist.playlistName.lowercase().contains(searchString.lowercase())
|
playlist.playlistEntity.playlistName.lowercase().contains(searchString.lowercase())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
|
|
|
@ -68,8 +68,8 @@ import code.name.monkey.retromusic.providers.MusicPlaybackQueueStore
|
||||||
import code.name.monkey.retromusic.providers.SongPlayCountStore
|
import code.name.monkey.retromusic.providers.SongPlayCountStore
|
||||||
import code.name.monkey.retromusic.service.AudioFader.Companion.startFadeAnimator
|
import code.name.monkey.retromusic.service.AudioFader.Companion.startFadeAnimator
|
||||||
import code.name.monkey.retromusic.service.notification.PlayingNotification
|
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.PlayingNotificationClassic
|
||||||
import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24.Companion.from
|
import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl24
|
||||||
import code.name.monkey.retromusic.service.playback.Playback
|
import code.name.monkey.retromusic.service.playback.Playback
|
||||||
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
|
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
|
||||||
import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri
|
import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri
|
||||||
|
@ -194,10 +194,10 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
playerHandler?.obtainMessage(FOCUS_CHANGE, focusChange, 0)?.sendToTarget()
|
playerHandler?.obtainMessage(FOCUS_CHANGE, focusChange, 0)?.sendToTarget()
|
||||||
}
|
}
|
||||||
private var playingNotification: PlayingNotification? = null
|
private var playingNotification: PlayingNotification? = null
|
||||||
|
|
||||||
private val updateFavoriteReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
private val updateFavoriteReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
|
playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
|
||||||
startForegroundOrNotify()
|
|
||||||
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
|
appWidgetCircle.notifyChange(this@MusicService, FAVORITE_STATE_CHANGED)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -594,9 +594,9 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
playingNotification = if (VERSION.SDK_INT >= VERSION_CODES.N
|
playingNotification = if (VERSION.SDK_INT >= VERSION_CODES.N
|
||||||
&& !isClassicNotification
|
&& !isClassicNotification
|
||||||
) {
|
) {
|
||||||
from(this, notificationManager!!, mediaSession!!)
|
PlayingNotificationImpl24.from(this, notificationManager!!, mediaSession!!)
|
||||||
} else {
|
} else {
|
||||||
from(this, notificationManager!!)
|
PlayingNotificationClassic.from(this, notificationManager!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -732,11 +732,18 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData()
|
ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData()
|
||||||
COLORED_NOTIFICATION -> updateNotification()
|
COLORED_NOTIFICATION -> {
|
||||||
|
playingNotification?.updateMetadata(currentSong) {
|
||||||
|
playingNotification?.setPlaying(isPlaying)
|
||||||
|
startForegroundOrNotify()
|
||||||
|
}
|
||||||
|
}
|
||||||
CLASSIC_NOTIFICATION -> {
|
CLASSIC_NOTIFICATION -> {
|
||||||
updateNotification()
|
updateNotification()
|
||||||
playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
|
playingNotification?.updateMetadata(currentSong) {
|
||||||
playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
|
playingNotification?.setPlaying(isPlaying)
|
||||||
|
startForegroundOrNotify()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PLAYBACK_SPEED -> updateMediaSessionPlaybackState()
|
PLAYBACK_SPEED -> updateMediaSessionPlaybackState()
|
||||||
TOGGLE_HEADSET -> registerHeadsetEvents()
|
TOGGLE_HEADSET -> registerHeadsetEvents()
|
||||||
|
@ -1195,12 +1202,14 @@ class MusicService : MediaBrowserServiceCompat(),
|
||||||
savePositionInTrack()
|
savePositionInTrack()
|
||||||
}
|
}
|
||||||
songPlayCountHelper.notifyPlayStateChanged(isPlaying)
|
songPlayCountHelper.notifyPlayStateChanged(isPlaying)
|
||||||
playingNotification?.setPlaying(isPlaying) { startForegroundOrNotify() }
|
playingNotification?.setPlaying(isPlaying)
|
||||||
startForegroundOrNotify()
|
startForegroundOrNotify()
|
||||||
}
|
}
|
||||||
FAVORITE_STATE_CHANGED -> {
|
FAVORITE_STATE_CHANGED -> {
|
||||||
playingNotification?.updateFavorite(currentSong) { startForegroundOrNotify() }
|
playingNotification?.updateFavorite(currentSong) {
|
||||||
playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
|
startForegroundOrNotify()
|
||||||
|
}
|
||||||
|
|
||||||
updateMediaSessionMetaData()
|
updateMediaSessionMetaData()
|
||||||
updateMediaSessionPlaybackState()
|
updateMediaSessionPlaybackState()
|
||||||
savePosition()
|
savePosition()
|
||||||
|
|
|
@ -29,7 +29,7 @@ abstract class PlayingNotification(context: Context) :
|
||||||
|
|
||||||
abstract fun updateMetadata(song: Song, onUpdate: () -> Unit)
|
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)
|
abstract fun updateFavorite(song: Song, onUpdate: () -> Unit)
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,28 @@ import com.bumptech.glide.request.transition.Transition
|
||||||
class PlayingNotificationClassic(
|
class PlayingNotificationClassic(
|
||||||
val context: Context
|
val context: Context
|
||||||
) : PlayingNotification(context) {
|
) : PlayingNotification(context) {
|
||||||
|
|
||||||
private var primaryColor: Int = 0
|
private var primaryColor: Int = 0
|
||||||
private var isInitialized = false
|
private var isInitialized = false
|
||||||
|
|
||||||
init {
|
private fun getCombinedRemoteViews(collapsed: Boolean, song: Song): RemoteViews {
|
||||||
val notificationLayout = getCombinedRemoteViews(true)
|
val remoteViews = RemoteViews(
|
||||||
val notificationLayoutBig = getCombinedRemoteViews(false)
|
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)
|
val action = Intent(context, MainActivity::class.java)
|
||||||
action.putExtra(MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel)
|
action.putExtra(MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel)
|
||||||
|
@ -83,25 +98,12 @@ class PlayingNotificationClassic(
|
||||||
setContentIntent(clickIntent)
|
setContentIntent(clickIntent)
|
||||||
setDeleteIntent(deleteIntent)
|
setDeleteIntent(deleteIntent)
|
||||||
setCategory(NotificationCompat.CATEGORY_SERVICE)
|
setCategory(NotificationCompat.CATEGORY_SERVICE)
|
||||||
setColorized(true)
|
setColorized(PreferenceUtil.isColoredNotification)
|
||||||
priority = NotificationCompat.PRIORITY_MAX
|
priority = NotificationCompat.PRIORITY_MAX
|
||||||
setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
setCustomContentView(notificationLayout)
|
setCustomContentView(notificationLayout)
|
||||||
setCustomBigContentView(notificationLayoutBig)
|
setCustomBigContentView(notificationLayoutBig)
|
||||||
setOngoing(true)
|
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
|
val bigNotificationImageSize = context.resources
|
||||||
.getDimensionPixelSize(R.dimen.notification_big_image_size)
|
.getDimensionPixelSize(R.dimen.notification_big_image_size)
|
||||||
GlideApp.with(context).asBitmapPalette().songCoverOptions(song)
|
GlideApp.with(context).asBitmapPalette().songCoverOptions(song)
|
||||||
|
@ -128,6 +130,10 @@ class PlayingNotificationClassic(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadCleared(placeholder: Drawable?) {
|
override fun onLoadCleared(placeholder: Drawable?) {
|
||||||
|
update(
|
||||||
|
null,
|
||||||
|
resolveColor(context, R.attr.colorSurface, Color.WHITE)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun update(bitmap: Bitmap?, bgColor: Int) {
|
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_next, next)
|
||||||
contentView.setImageViewBitmap(R.id.action_play_pause, playPause)
|
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.title, primary)
|
||||||
bigContentView.setTextColor(R.id.subtitle, secondary)
|
bigContentView.setTextColor(R.id.subtitle, secondary)
|
||||||
bigContentView.setTextColor(R.id.appName, 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_next, next)
|
||||||
bigContentView.setImageViewBitmap(R.id.action_play_pause, playPause)
|
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(
|
contentView.setImageViewBitmap(
|
||||||
R.id.smallIcon,
|
R.id.smallIcon,
|
||||||
createBitmap(
|
createBitmap(
|
||||||
|
@ -269,7 +259,7 @@ class PlayingNotificationClassic(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setPlaying(isPlaying: Boolean, onUpdate: () -> Unit) {
|
override fun setPlaying(isPlaying: Boolean) {
|
||||||
getPlayPauseBitmap(isPlaying).also {
|
getPlayPauseBitmap(isPlaying).also {
|
||||||
contentView.setImageViewBitmap(R.id.action_play_pause, it)
|
contentView.setImageViewBitmap(R.id.action_play_pause, it)
|
||||||
bigContentView.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) {
|
override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
|
||||||
if (!isInitialized) {
|
|
||||||
updateMetadata(song, onUpdate)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildPendingIntent(
|
private fun buildPendingIntent(
|
||||||
|
|
|
@ -46,10 +46,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
import code.name.monkey.retromusic.util.RetroColorUtil
|
import code.name.monkey.retromusic.util.RetroColorUtil
|
||||||
import com.bumptech.glide.request.target.CustomTarget
|
import com.bumptech.glide.request.target.CustomTarget
|
||||||
import com.bumptech.glide.request.transition.Transition
|
import com.bumptech.glide.request.transition.Transition
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.GlobalScope
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
|
|
||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
class PlayingNotificationImpl24(
|
class PlayingNotificationImpl24(
|
||||||
|
@ -207,9 +204,8 @@ class PlayingNotificationImpl24(
|
||||||
).build()
|
).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setPlaying(isPlaying: Boolean, onUpdate: () -> Unit) {
|
override fun setPlaying(isPlaying: Boolean) {
|
||||||
mActions[2] = buildPlayAction(isPlaying)
|
mActions[2] = buildPlayAction(isPlaying)
|
||||||
onUpdate()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
|
override fun updateFavorite(song: Song, onUpdate: () -> Unit) {
|
||||||
|
|
|
@ -42,7 +42,8 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
|
||||||
} else {
|
} else {
|
||||||
applyInsetter {
|
applyInsetter {
|
||||||
type(navigationBars = true) {
|
type(navigationBars = true) {
|
||||||
padding()
|
padding(vertical = true)
|
||||||
|
margin(horizontal = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<code.name.monkey.retromusic.views.insets.InsetsConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -208,4 +208,4 @@
|
||||||
android:layout_height="72dp"
|
android:layout_height="72dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/listeners" />
|
app:layout_constraintTop_toBottomOf="@id/listeners" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout>
|
|
@ -51,11 +51,12 @@
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/create_backup" />
|
app:layout_constraintTop_toBottomOf="@id/create_backup" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<code.name.monkey.retromusic.views.insets.InsetsRecyclerView
|
||||||
android:id="@+id/backup_recyclerview"
|
android:id="@+id/backup_recyclerview"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="0dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/backup_title" />
|
app:layout_constraintTop_toBottomOf="@+id/backup_title" />
|
||||||
|
|
|
@ -188,6 +188,7 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet">
|
<style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet">
|
||||||
|
<item name="paddingBottomSystemWindowInsets">false</item>
|
||||||
<item name="android:maxWidth">@empty</item>
|
<item name="android:maxWidth">@empty</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ buildscript {
|
||||||
ext {
|
ext {
|
||||||
kotlin_version = '1.6.10'
|
kotlin_version = '1.6.10'
|
||||||
navigation_version = '2.4.1'
|
navigation_version = '2.4.1'
|
||||||
mdc_version = '1.5.0'
|
mdc_version = '1.6.0-beta01'
|
||||||
preference_version = '1.2.0'
|
preference_version = '1.2.0'
|
||||||
appcompat_version = '1.4.1'
|
appcompat_version = '1.4.1'
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue