Merge pull request #1314 from prathameshmm02/dev

UI improvements
This commit is contained in:
Daksh P. Jain 2022-03-25 15:09:59 +05:30 committed by GitHub
commit dc41fe509b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 91 additions and 84 deletions

View file

@ -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"

View file

@ -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>

View file

@ -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,

View file

@ -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 -> {

View file

@ -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())
} }
} }

View file

@ -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()

View file

@ -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()

View file

@ -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)

View file

@ -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(

View file

@ -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) {

View file

@ -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)
} }
} }
} }

View file

@ -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>

View file

@ -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" />

View file

@ -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>

View file

@ -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'
} }