Better implementation for insets and bottom padding

This commit is contained in:
Prathamesh More 2022-05-31 01:30:56 +05:30
parent 97e37dd7b9
commit 45a3899a0d
29 changed files with 470 additions and 320 deletions

View file

@ -398,6 +398,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
if (binding.bottomNavigationView.menu.size() == 1) { if (binding.bottomNavigationView.menu.size() == 1) {
isInOneTabMode = true isInOneTabMode = true
binding.bottomNavigationView.isVisible = false binding.bottomNavigationView.isVisible = false
} else {
isInOneTabMode = false
} }
} }
@ -470,7 +472,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
bottomSheetBehavior.peekHeight = heightOfBarWithTabs bottomSheetBehavior.peekHeight = heightOfBarWithTabs
} }
libraryViewModel.setFabMargin(this, libraryViewModel.setFabMargin(this,
dip(R.dimen.mini_player_height_expanded)) dip(R.dimen.bottom_nav_mini_player_height))
} else { } else {
logD("Details") logD("Details")
if (animate) { if (animate) {

View file

@ -46,7 +46,7 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener {
binding.aboutContent.root.applyInsetter { binding.aboutContent.root.applyInsetter {
type(navigationBars = true) { type(navigationBars = true) {
padding() padding(vertical = true)
} }
} }
} }

View file

@ -32,7 +32,6 @@ import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog
import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog
import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.dip import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.IScrollHelper import code.name.monkey.retromusic.interfaces.IScrollHelper
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ThemedFastScroller.create import code.name.monkey.retromusic.util.ThemedFastScroller.create
@ -61,6 +60,7 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
mainActivity.supportActionBar?.title = null mainActivity.supportActionBar?.title = null
initLayoutManager() initLayoutManager()
initAdapter() initAdapter()
checkForMargins()
setUpRecyclerView() setUpRecyclerView()
setupToolbar() setupToolbar()
binding.shuffleButton.fitsSystemWindows = PreferenceUtil.isFullScreenMode binding.shuffleButton.fitsSystemWindows = PreferenceUtil.isFullScreenMode
@ -118,7 +118,6 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
adapter = this@AbsRecyclerViewFragment.adapter adapter = this@AbsRecyclerViewFragment.adapter
create(this) create(this)
} }
checkForPadding()
} }
protected open fun createFastScroller(recyclerView: RecyclerView): FastScroller { protected open fun createFastScroller(recyclerView: RecyclerView): FastScroller {
@ -131,7 +130,6 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
override fun onChanged() { override fun onChanged() {
super.onChanged() super.onChanged()
checkIsEmpty() checkIsEmpty()
checkForPadding()
} }
}) })
} }
@ -148,16 +146,12 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
binding.empty.isVisible = adapter!!.itemCount == 0 binding.empty.isVisible = adapter!!.itemCount == 0
} }
private fun checkForPadding() { private fun checkForMargins() {
val itemCount: Int = adapter?.itemCount ?: 0 if (mainActivity.bottomNavigationView.isVisible) {
binding.recyclerView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
binding.recyclerView.updatePadding( bottomMargin = dip(R.dimen.bottom_nav_height)
bottom = if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) {
dip(R.dimen.mini_player_height_expanded)
} else {
dip(R.dimen.bottom_nav_height)
} }
) }
} }
private fun initLayoutManager() { private fun initLayoutManager() {
@ -169,16 +163,6 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
@NonNull @NonNull
protected abstract fun createAdapter(): A protected abstract fun createAdapter(): A
override fun onQueueChanged() {
super.onQueueChanged()
checkForPadding()
}
override fun onServiceConnected() {
super.onServiceConnected()
checkForPadding()
}
protected fun invalidateLayoutManager() { protected fun invalidateLayoutManager() {
initLayoutManager() initLayoutManager()
binding.recyclerView.layoutManager = layoutManager binding.recyclerView.layoutManager = layoutManager
@ -232,6 +216,11 @@ abstract class AbsRecyclerViewFragment<A : RecyclerView.Adapter<*>, LM : Recycle
return false return false
} }
override fun onResume() {
super.onResume()
checkForMargins()
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null

View file

@ -17,16 +17,14 @@ import android.content.Context
import android.media.MediaScannerConnection import android.media.MediaScannerConnection
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.view.Menu import android.view.*
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.loader.app.LoaderManager import androidx.loader.app.LoaderManager
import androidx.loader.content.Loader import androidx.loader.content.Loader
@ -45,7 +43,6 @@ import code.name.monkey.retromusic.databinding.FragmentFolderBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote.openQueue import code.name.monkey.retromusic.helper.MusicPlayerRemote.openQueue
import code.name.monkey.retromusic.helper.MusicPlayerRemote.playingQueue
import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.helper.menu.SongsMenuHelper
import code.name.monkey.retromusic.interfaces.ICabCallback import code.name.monkey.retromusic.interfaces.ICabCallback
import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICabHolder
@ -110,6 +107,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
reenterTransition = MaterialFadeThrough() reenterTransition = MaterialFadeThrough()
setUpBreadCrumbs() setUpBreadCrumbs()
checkForMargins()
setUpRecyclerView() setUpRecyclerView()
setUpAdapter() setUpAdapter()
setUpTitle() setUpTitle()
@ -385,14 +383,9 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
return false return false
} }
override fun onQueueChanged() { override fun onResume() {
super.onQueueChanged() super.onResume()
checkForPadding() checkForMargins()
}
override fun onServiceConnected() {
super.onServiceConnected()
checkForPadding()
} }
override fun openCab(menuRes: Int, callback: ICabCallback): AttachedCab { override fun openCab(menuRes: Int, callback: ICabCallback): AttachedCab {
@ -413,13 +406,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
return cab as AttachedCab return cab as AttachedCab
} }
private fun checkForPadding() { private fun checkForMargins() {
val count = adapter?.itemCount ?: 0 if (mainActivity.bottomNavigationView.isVisible) {
if (_binding != null) { binding.recyclerView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
binding.recyclerView.updatePadding( bottomMargin = dip(R.dimen.bottom_nav_height)
bottom = if (count > 0 && playingQueue.isNotEmpty()) dip(R.dimen.mini_player_height_expanded) }
else dip(R.dimen.mini_player_height)
)
} }
} }
@ -608,7 +599,6 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
override fun onChanged() { override fun onChanged() {
super.onChanged() super.onChanged()
checkIsEmpty() checkIsEmpty()
checkForPadding()
} }
}) })
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter

View file

@ -15,17 +15,15 @@
package code.name.monkey.retromusic.fragments.home package code.name.monkey.retromusic.fragments.home
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.*
import android.view.MenuInflater
import android.view.MenuItem
import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM
import android.view.View
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
import androidx.core.view.doOnLayout import androidx.core.view.doOnLayout
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -38,6 +36,7 @@ import code.name.monkey.retromusic.databinding.FragmentHomeBinding
import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog
import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog
import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.extensions.drawNextToNavbar
import code.name.monkey.retromusic.extensions.elevatedAccentColor import code.name.monkey.retromusic.extensions.elevatedAccentColor
import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.ReloadType
@ -72,6 +71,8 @@ class HomeFragment :
enterTransition = MaterialFadeThrough().addTarget(binding.contentContainer) enterTransition = MaterialFadeThrough().addTarget(binding.contentContainer)
reenterTransition = MaterialFadeThrough().addTarget(binding.contentContainer) reenterTransition = MaterialFadeThrough().addTarget(binding.contentContainer)
checkForMargins()
val homeAdapter = HomeAdapter(mainActivity) val homeAdapter = HomeAdapter(mainActivity)
binding.recyclerView.apply { binding.recyclerView.apply {
layoutManager = LinearLayoutManager(mainActivity) layoutManager = LinearLayoutManager(mainActivity)
@ -190,6 +191,14 @@ class HomeFragment :
binding.actionShuffle.elevatedAccentColor() binding.actionShuffle.elevatedAccentColor()
} }
private fun checkForMargins() {
if (mainActivity.bottomNavigationView.isVisible) {
binding.recyclerView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
bottomMargin = dip(R.dimen.bottom_nav_height)
}
}
}
override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_main, menu) inflater.inflate(R.menu.menu_main, menu)
menu.removeItem(R.id.action_grid_size) menu.removeItem(R.id.action_grid_size)
@ -212,12 +221,14 @@ class HomeFragment :
} }
fun setSharedAxisXTransitions() { fun setSharedAxisXTransitions() {
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true).addTarget(CoordinatorLayout::class.java) exitTransition =
MaterialSharedAxis(MaterialSharedAxis.X, true).addTarget(CoordinatorLayout::class.java)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
} }
private fun setSharedAxisYTransitions() { private fun setSharedAxisYTransitions() {
exitTransition = MaterialSharedAxis(MaterialSharedAxis.Y, true).addTarget(CoordinatorLayout::class.java) exitTransition =
MaterialSharedAxis(MaterialSharedAxis.Y, true).addTarget(CoordinatorLayout::class.java)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Y, false) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Y, false)
} }
@ -301,7 +312,9 @@ class HomeFragment :
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
checkForMargins()
libraryViewModel.forceReload(ReloadType.HomeSections) libraryViewModel.forceReload(ReloadType.HomeSections)
exitTransition = null
} }
override fun onDestroyView() { override fun onDestroyView() {

View file

@ -29,7 +29,6 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
import code.name.monkey.retromusic.* import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.adapter.album.AlbumAdapter
import code.name.monkey.retromusic.adapter.artist.ArtistAdapter import code.name.monkey.retromusic.adapter.artist.ArtistAdapter
@ -37,7 +36,6 @@ import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter
import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter
import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding
import code.name.monkey.retromusic.db.toSong import code.name.monkey.retromusic.db.toSong
import code.name.monkey.retromusic.extensions.dipToPix
import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.interfaces.IAlbumClickListener import code.name.monkey.retromusic.interfaces.IAlbumClickListener
@ -71,7 +69,8 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
RECENT_ARTISTS, RECENT_ARTISTS,
TOP_ALBUMS, TOP_ALBUMS,
RECENT_ALBUMS, RECENT_ALBUMS,
FAVOURITES -> { FAVOURITES,
-> {
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
} }
@ -103,13 +102,6 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
TOP_PLAYED_PLAYLIST -> topPlayed() TOP_PLAYED_PLAYLIST -> topPlayed()
} }
binding.recyclerView.adapter?.registerAdapterDataObserver(object : AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
val height = dipToPix(52f)
binding.recyclerView.updatePadding(bottom = height.toInt())
}
})
binding.appBarLayout.statusBarForeground = binding.appBarLayout.statusBarForeground =
MaterialShapeDrawable.createWithElevationOverlay(requireContext()) MaterialShapeDrawable.createWithElevationOverlay(requireContext())
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {

View file

@ -17,10 +17,8 @@ import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter
import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding
import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.PlaylistWithSongs
import code.name.monkey.retromusic.db.toSongs import code.name.monkey.retromusic.db.toSongs
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper
import code.name.monkey.retromusic.interfaces.ICabCallback import code.name.monkey.retromusic.interfaces.ICabCallback
import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICabHolder
@ -129,17 +127,7 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
return PlaylistMenuHelper.handleMenuClick(requireActivity(), playlist, item) return PlaylistMenuHelper.handleMenuClick(requireActivity(), playlist, item)
} }
private fun checkForPadding() {
val itemCount: Int = playlistSongAdapter.itemCount
if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) {
binding.recyclerView.updatePadding(bottom = dip(R.dimen.mini_player_height))
} else {
binding.recyclerView.updatePadding(bottom = 0)
}
}
private fun checkIsEmpty() { private fun checkIsEmpty() {
checkForPadding()
binding.empty.isVisible = playlistSongAdapter.itemCount == 0 binding.empty.isVisible = playlistSongAdapter.itemCount == 0
binding.emptyText.isVisible = playlistSongAdapter.itemCount == 0 binding.emptyText.isVisible = playlistSongAdapter.itemCount == 0
} }

View file

@ -146,14 +146,20 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search),
} }
} }
private fun checkForMargins() {
if (mainActivity.bottomNavigationView.isVisible) {
binding.recyclerView.updateLayoutParams<ViewGroup.MarginLayoutParams> {
bottomMargin = dip(R.dimen.bottom_nav_height)
}
}
}
private fun setupRecyclerView() { private fun setupRecyclerView() {
searchAdapter = SearchAdapter(requireActivity(), emptyList()) searchAdapter = SearchAdapter(requireActivity(), emptyList())
searchAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { searchAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() { override fun onChanged() {
super.onChanged() super.onChanged()
binding.empty.isVisible = searchAdapter.itemCount < 1 binding.empty.isVisible = searchAdapter.itemCount < 1
val height = dipToPix(52f)
binding.recyclerView.updatePadding(bottom = height.toInt())
} }
}) })
binding.recyclerView.apply { binding.recyclerView.apply {
@ -219,6 +225,11 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search),
} }
} }
override fun onResume() {
super.onResume()
checkForMargins()
}
override fun onDestroyView() { override fun onDestroyView() {
hideKeyboard(view) hideKeyboard(view)
super.onDestroyView() super.onDestroyView()

View file

@ -19,12 +19,14 @@ import android.graphics.drawable.ColorDrawable
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.updatePadding
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.preferences.* import code.name.monkey.retromusic.preferences.*
import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.NavigationUtil
@ -70,9 +72,10 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
listView.overScrollMode = View.OVER_SCROLL_NEVER listView.overScrollMode = View.OVER_SCROLL_NEVER
} }
listView.updatePadding(bottom = dip(R.dimen.mini_player_height))
listView.applyInsetter { listView.applyInsetter {
type(navigationBars = true) { type(navigationBars = true) {
padding() padding(vertical = true)
} }
} }
invalidateSettings() invalidateSettings()

View file

@ -17,10 +17,7 @@ package code.name.monkey.retromusic.fragments.settings
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEListPreference
import code.name.monkey.retromusic.HOME_ALBUM_GRID_STYLE import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.HOME_ARTIST_GRID_STYLE
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.TAB_TEXT_MODE
class PersonalizeSettingsFragment : AbsSettingsFragment() { class PersonalizeSettingsFragment : AbsSettingsFragment() {

View file

@ -3,9 +3,9 @@ package code.name.monkey.retromusic.util
import android.app.Activity import android.app.Activity
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.core.net.toUri
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.BuildConfig
import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.extensions.showToast
@ -26,9 +26,9 @@ fun Activity.maybeShowAnnoyingToasts() {
showToast("Support us by downloading the original version from Play Store.", Toast.LENGTH_LONG) showToast("Support us by downloading the original version from Play Store.", Toast.LENGTH_LONG)
val packageName = "code.name.monkey.retromusic" val packageName = "code.name.monkey.retromusic"
try { try {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$packageName"))) startActivity(Intent(Intent.ACTION_VIEW, "market://details?id=$packageName".toUri()))
} catch (e: ActivityNotFoundException) { } catch (e: ActivityNotFoundException) {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$packageName"))) startActivity(Intent(Intent.ACTION_VIEW, "https://play.google.com/store/apps/details?id=$packageName".toUri()))
} }
} }
} }

View file

@ -4,7 +4,9 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RetroUtil
import dev.chrisbanes.insetter.applyInsetter
class InsetsConstraintLayout @JvmOverloads constructor( class InsetsConstraintLayout @JvmOverloads constructor(
context: Context, context: Context,
@ -12,7 +14,11 @@ class InsetsConstraintLayout @JvmOverloads constructor(
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) { ) : ConstraintLayout(context, attrs, defStyleAttr) {
init { init {
if (!isInEditMode && !RetroUtil.isLandscape) if (!isInEditMode && !PreferenceUtil.isFullScreenMode)
drawAboveSystemBarsWithPadding() applyInsetter {
type(navigationBars = true) {
padding(vertical = true)
}
}
} }
} }

View file

@ -1,18 +0,0 @@
package code.name.monkey.retromusic.views.insets
import android.content.Context
import android.util.AttributeSet
import android.widget.LinearLayout
import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding
import code.name.monkey.retromusic.util.RetroUtil
class InsetsLinearLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
init {
if (!RetroUtil.isLandscape)
drawAboveSystemBarsWithPadding()
}
}

View file

@ -2,26 +2,21 @@ package code.name.monkey.retromusic.views.insets
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.annotation.Px
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.retromusic.extensions.applyBottomInsets import code.name.monkey.retromusic.util.PreferenceUtil
import dev.chrisbanes.insetter.applyInsetter
class InsetsRecyclerView @JvmOverloads constructor( class InsetsRecyclerView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyleAttr: Int = 0 defStyleAttr: Int = 0,
) : RecyclerView(context, attrs, defStyleAttr) { ) : RecyclerView(context, attrs, defStyleAttr) {
init { init {
applyBottomInsets() if (!isInEditMode && !PreferenceUtil.isFullScreenMode)
} applyInsetter {
type(navigationBars = true) {
fun updatePadding( padding(vertical = true)
@Px left: Int = paddingLeft, }
@Px top: Int = paddingTop, }
@Px right: Int = paddingRight,
@Px bottom: Int = paddingBottom
) {
setPadding(left, top, right, bottom)
applyBottomInsets()
} }
} }

View file

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/md_black_1000"
android:fitsSystemWindows="true">
<View
android:id="@+id/bannerContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shadow_pro" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:elevation="0dp"
app:elevation="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/Toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_collapseMode="pin"
app:navigationIcon="@drawable/ic_keyboard_backspace_black"
app:title="@string/retro_music_pro"
app:titleTextAppearance="@style/ToolbarTextAppearanceNormal"
app:titleTextColor="@color/md_white_1000" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/actions"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/appBarLayout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/black_theme_name"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/now_playing_themes"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/carousal_effect_on_now_playing_screen"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/support_development"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/actions"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/linearLayout"
app:layout_constraintTop_toBottomOf="@+id/appBarLayout">
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingHorizontal="16dp"
android:paddingVertical="24dp"
android:text="@string/try_retro_music_premium"
android:textAppearance="@style/TextViewHeadline5"
android:textColor="@color/md_white_1000" />
<com.google.android.material.button.MaterialButton
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:paddingVertical="16dp"
android:text="@string/restore"
android:textAppearance="@style/TextViewHeadline6"
android:textColor="@color/md_black_1000"
app:backgroundTint="@color/md_white_1000"
app:cornerRadius="28dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/purchaseButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:paddingVertical="16dp"
android:text="@string/purchase"
android:textAppearance="@style/TextViewHeadline6"
app:cornerRadius="28dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -65,7 +65,7 @@
android:transitionGroup="true" android:transitionGroup="true"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<code.name.monkey.retromusic.views.insets.InsetsConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/contentContainer" android:id="@+id/contentContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -87,6 +87,6 @@
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/imageLayout" /> app:layout_constraintTop_toBottomOf="@id/imageLayout" />
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -28,7 +28,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
android:paddingBottom="@dimen/mini_player_height">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView
android:id="@+id/bannerImage" android:id="@+id/bannerImage"

View file

@ -3,7 +3,9 @@
xmlns:grid="http://schemas.android.com/apk/res-auto" xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="8dp" android:paddingHorizontal="8dp"
android:paddingTop="8dp"
android:paddingBottom="@dimen/mini_player_height"
grid:alignmentMode="alignBounds"> grid:alignmentMode="alignBounds">
<LinearLayout <LinearLayout

View file

@ -1,200 +1,191 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<code.name.monkey.retromusic.views.insets.InsetsConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout 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"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/md_black_1000" android:background="@color/md_black_1000"
android:orientation="vertical"> android:fitsSystemWindows="true">
<View <View
android:id="@+id/bannerContainer" android:id="@+id/bannerContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/shadow_pro" android:background="@drawable/shadow_pro" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<code.name.monkey.retromusic.views.StatusBarView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/status_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="match_parent">
android:background="?attr/colorSurface"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout" android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:elevation="0dp"
app:elevation="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_bar">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/Toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_collapseMode="pin" android:background="@android:color/transparent"
app:navigationIcon="@drawable/ic_keyboard_backspace_black" android:elevation="0dp"
app:title="@string/retro_music_pro" app:elevation="0dp"
app:titleTextAppearance="@style/ToolbarTextAppearanceNormal" app:layout_constraintEnd_toEndOf="parent"
app:titleTextColor="@color/md_white_1000" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout <com.google.android.material.appbar.MaterialToolbar
android:layout_width="match_parent" android:id="@+id/toolbar"
android:layout_height="0dp" style="@style/Toolbar"
android:orientation="vertical" android:layout_width="match_parent"
app:layout_constraintBottom_toTopOf="@id/actions" android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent" app:layout_collapseMode="pin"
app:layout_constraintStart_toStartOf="parent" app:navigationIcon="@drawable/ic_keyboard_backspace_black"
app:layout_constraintTop_toBottomOf="@id/appBarLayout"> app:title="@string/retro_music_pro"
app:titleTextAppearance="@style/ToolbarTextAppearanceNormal"
app:titleTextColor="@color/md_white_1000" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="0dp"
android:gravity="center_vertical" android:orientation="vertical"
android:orientation="horizontal"> app:layout_constraintBottom_toTopOf="@id/actions"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/appBarLayout">
<androidx.appcompat.widget.AppCompatImageView <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp" android:gravity="center_vertical"
android:text="@string/black_theme_name" android:orientation="horizontal">
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" /> <androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/black_theme_name"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/now_playing_themes"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/carousal_effect_on_now_playing_screen"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/support_development"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/actions"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:orientation="vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/now_playing_themes"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/carousal_effect_on_now_playing_screen"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_check_circle"
app:tint="@color/md_white_1000" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/support_development"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:paddingVertical="24dp" android:paddingBottom="16dp"
android:text="@string/try_retro_music_premium" app:layout_constraintBottom_toBottomOf="parent"
android:textAppearance="@style/TextViewHeadline5" app:layout_constraintEnd_toEndOf="parent"
android:textColor="@color/md_white_1000" /> app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.button.MaterialButton <com.google.android.material.textview.MaterialTextView
android:id="@+id/restoreButton" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:gravity="center"
android:layout_marginStart="16dp" android:paddingHorizontal="16dp"
android:layout_marginEnd="16dp" android:paddingVertical="24dp"
android:paddingVertical="16dp" android:text="@string/try_retro_music_premium"
android:text="@string/restore" android:textAppearance="@style/TextViewHeadline5"
android:textAppearance="@style/TextViewHeadline6" android:textColor="@color/md_white_1000" />
android:textColor="@color/md_black_1000"
app:backgroundTint="@color/md_white_1000" <com.google.android.material.button.MaterialButton
app:cornerRadius="28dp" /> android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:paddingVertical="16dp"
android:text="@string/restore"
android:textAppearance="@style/TextViewHeadline6"
android:textColor="@color/md_black_1000"
app:backgroundTint="@color/md_white_1000"
app:cornerRadius="28dp" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/purchaseButton" android:id="@+id/purchaseButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:paddingVertical="16dp" android:paddingVertical="16dp"
android:text="@string/purchase" android:text="@string/purchase"
android:textAppearance="@style/TextViewHeadline6" android:textAppearance="@style/TextViewHeadline6"
app:cornerRadius="28dp" /> app:cornerRadius="28dp" />
</LinearLayout> </LinearLayout>
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -2,7 +2,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical"
android:paddingBottom="@dimen/mini_player_height">
<include <include
android:id="@+id/card_credit" android:id="@+id/card_credit"

View file

@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
android:paddingBottom="@dimen/mini_player_height">
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/playAction" android:id="@+id/playAction"
@ -168,6 +169,7 @@
android:id="@+id/listeners" android:id="@+id/listeners"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:textAppearance="@style/TextViewBody1" android:textAppearance="@style/TextViewBody1"
android:textColor="?android:attr/textColorTertiary" android:textColor="?android:attr/textColorTertiary"
android:visibility="gone" android:visibility="gone"
@ -182,6 +184,7 @@
android:id="@+id/scrobbles" android:id="@+id/scrobbles"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:textAppearance="@style/TextViewBody1" android:textAppearance="@style/TextViewBody1"
android:textColor="?android:attr/textColorTertiary" android:textColor="?android:attr/textColorTertiary"
android:visibility="gone" android:visibility="gone"
@ -191,11 +194,4 @@
app:layout_constraintTop_toBottomOf="@id/scrobblesLabel" app:layout_constraintTop_toBottomOf="@id/scrobblesLabel"
tools:text="100000" tools:text="100000"
tools:visibility="visible" /> tools:visibility="visible" />
<Space
android:layout_width="match_parent"
android:layout_height="72dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/listeners" />
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout> </code.name.monkey.retromusic.views.insets.InsetsConstraintLayout>

View file

@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
android:paddingBottom="@dimen/mini_player_height">
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/playAction" android:id="@+id/playAction"
@ -81,18 +82,18 @@
app:layout_constrainedWidth="true" app:layout_constrainedWidth="true"
app:layout_constraintEnd_toStartOf="@id/song_sort_order" app:layout_constraintEnd_toStartOf="@id/song_sort_order"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/albumRecyclerView"/> app:layout_constraintTop_toBottomOf="@id/albumRecyclerView" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/song_sort_order" android:id="@+id/song_sort_order"
style="@style/Widget.Material3.Button.IconButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
style="@style/Widget.Material3.Button.IconButton"
app:iconTint="?colorControlNormal"
app:iconSize="24dp"
android:background="?roundSelector" android:background="?roundSelector"
app:icon="@drawable/ic_sort" app:icon="@drawable/ic_sort"
app:iconSize="24dp"
app:iconTint="?colorControlNormal"
app:layout_constraintBottom_toBottomOf="@+id/songTitle" app:layout_constraintBottom_toBottomOf="@+id/songTitle"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/songTitle" app:layout_constraintStart_toEndOf="@id/songTitle"
@ -178,6 +179,7 @@
android:id="@+id/listeners" android:id="@+id/listeners"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:textAppearance="@style/TextViewBody2" android:textAppearance="@style/TextViewBody2"
android:textColor="?android:attr/textColorTertiary" android:textColor="?android:attr/textColorTertiary"
android:visibility="gone" android:visibility="gone"
@ -193,6 +195,7 @@
android:id="@+id/scrobbles" android:id="@+id/scrobbles"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:textAppearance="@style/TextViewBody2" android:textAppearance="@style/TextViewBody2"
android:textColor="?android:attr/textColorTertiary" android:textColor="?android:attr/textColorTertiary"
android:visibility="gone" android:visibility="gone"
@ -202,10 +205,4 @@
app:layout_constraintTop_toBottomOf="@id/scrobblesLabel" app:layout_constraintTop_toBottomOf="@id/scrobblesLabel"
tools:text="100000" tools:text="100000"
tools:visibility="visible" /> tools:visibility="visible" />
<Space
android:layout_width="match_parent"
android:layout_height="72dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/listeners" />
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout> </code.name.monkey.retromusic.views.insets.InsetsConstraintLayout>

View file

@ -64,7 +64,7 @@
android:overScrollMode="@integer/overScrollMode" android:overScrollMode="@integer/overScrollMode"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<code.name.monkey.retromusic.views.insets.InsetsConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/contentContainer" android:id="@+id/contentContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -86,7 +86,7 @@
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/imageLayout" /> app:layout_constraintTop_toBottomOf="@id/imageLayout" />
</code.name.monkey.retromusic.views.insets.InsetsConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -12,6 +12,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:clipToPadding="false" android:clipToPadding="false"
android:overScrollMode="@integer/overScrollMode" android:overScrollMode="@integer/overScrollMode"
android:paddingBottom="@dimen/mini_player_height"
android:scrollbars="none" android:scrollbars="none"
android:transitionGroup="true" android:transitionGroup="true"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"

View file

@ -38,6 +38,7 @@
android:overScrollMode="@integer/overScrollMode" android:overScrollMode="@integer/overScrollMode"
android:scrollbars="none" android:scrollbars="none"
android:layoutAnimation="@anim/layout_anim_fade" android:layoutAnimation="@anim/layout_anim_fade"
android:paddingBottom="@dimen/mini_player_height"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
<LinearLayout <LinearLayout

View file

@ -138,6 +138,7 @@
android:overScrollMode="@integer/overScrollMode" android:overScrollMode="@integer/overScrollMode"
android:scrollbarStyle="outsideOverlay" android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical" android:scrollbars="vertical"
android:paddingBottom="@dimen/mini_player_height"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView

View file

@ -12,7 +12,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/colorSurface" android:background="?attr/colorSurface"
android:paddingBottom="@dimen/mini_player_height"
app:defaultNavHost="true" app:defaultNavHost="true"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
app:navGraph="@navigation/settings_graph" /> app:navGraph="@navigation/settings_graph" />

View file

@ -29,21 +29,20 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<include android:id="@+id/suggestions" layout="@layout/item_suggestions" /> <include
android:id="@+id/suggestions"
layout="@layout/item_suggestions" />
<androidx.recyclerview.widget.RecyclerView <code.name.monkey.retromusic.views.insets.InsetsRecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:nestedScrollingEnabled="false" android:nestedScrollingEnabled="false"
android:overScrollMode="@integer/overScrollMode" android:overScrollMode="@integer/overScrollMode"
android:paddingBottom="@dimen/mini_player_height"
tools:itemCount="10" tools:itemCount="10"
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager" tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/item_album_card" tools:listitem="@layout/item_album_card"
tools:spanCount="3" /> tools:spanCount="3" />
<Space
android:layout_width="match_parent"
android:layout_height="@dimen/mini_player_height_expanded" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View file

@ -12,10 +12,8 @@
<dimen name="list_item_image_icon_padding">8dp</dimen> <dimen name="list_item_image_icon_padding">8dp</dimen>
<dimen name="mini_player_height">56dp</dimen> <dimen name="mini_player_height">56dp</dimen>
<dimen name="mini_player_height_expanded">128dp</dimen>
<dimen name="bottom_nav_height">72dp</dimen> <dimen name="bottom_nav_height">72dp</dimen>
<dimen name="bottom_nav_mini_player_height">128dp</dimen>
<dimen name="app_widget_classic_height">96dp</dimen> <dimen name="app_widget_classic_height">96dp</dimen>
<dimen name="app_widget_classic_image_size">96dp</dimen> <dimen name="app_widget_classic_image_size">96dp</dimen>