commit
dc41fe509b
15 changed files with 91 additions and 84 deletions
|
@ -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"
|
||||
|
||||
|
|
|
@ -62,6 +62,19 @@
|
|||
</head>
|
||||
|
||||
<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>
|
||||
<h5>March 13, 2022</h5>
|
||||
<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.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,
|
||||
|
|
|
@ -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 -> {
|
||||
|
|
|
@ -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<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())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<PlaylistEntity> =
|
||||
val playlist: List<PlaylistWithSongs> =
|
||||
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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -42,7 +42,8 @@ class BottomNavigationBarTinted @JvmOverloads constructor(
|
|||
} else {
|
||||
applyInsetter {
|
||||
type(navigationBars = true) {
|
||||
padding()
|
||||
padding(vertical = true)
|
||||
margin(horizontal = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?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:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -208,4 +208,4 @@
|
|||
android:layout_height="72dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
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_constraintTop_toBottomOf="@id/create_backup" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
<code.name.monkey.retromusic.views.insets.InsetsRecyclerView
|
||||
android:id="@+id/backup_recyclerview"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/backup_title" />
|
||||
|
|
|
@ -188,6 +188,7 @@
|
|||
</style>
|
||||
|
||||
<style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet">
|
||||
<item name="paddingBottomSystemWindowInsets">false</item>
|
||||
<item name="android:maxWidth">@empty</item>
|
||||
</style>
|
||||
|
||||
|
|
|
@ -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'
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue