Fix queue edge-to-edge issue
Fix a problem where the last queue item would display behind the navigation bar when edge to edge is on.
This commit is contained in:
parent
391ca70822
commit
a750100aff
5 changed files with 52 additions and 30 deletions
|
@ -36,7 +36,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
setTheme(newAccent.theme)
|
setTheme(newAccent.theme)
|
||||||
|
|
||||||
if (isEdgeOn()) {
|
if (isEdgeOn()) {
|
||||||
doEdgeToEdgeSetup(binding)
|
setupEdgeToEdge(binding)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doEdgeToEdgeSetup(binding: ActivityMainBinding) {
|
private fun setupEdgeToEdge(binding: ActivityMainBinding) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
// Do modern edge to edge, which happens to be around twice the size of the
|
// Do modern edge to edge, which happens to be around twice the size of the
|
||||||
// old way of doing things. Thanks android, very cool!
|
// old way of doing things. Thanks android, very cool!
|
||||||
|
|
|
@ -53,7 +53,8 @@ private val ID3_GENRES = arrayOf(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert legacy int-based ID3 genres to their human-readable genre
|
* Convert legacy int-based ID3 genres to their human-readable genre
|
||||||
* @return The named genre for this legacy genre, null if there is no need to parse it or if the genre is invalid.
|
* @return The named genre for this legacy genre, null if there is no need to parse it
|
||||||
|
* or if the genre is invalid.
|
||||||
*/
|
*/
|
||||||
fun String.getGenreNameCompat(): String? {
|
fun String.getGenreNameCompat(): String? {
|
||||||
if (isDigitsOnly()) {
|
if (isDigitsOnly()) {
|
||||||
|
|
|
@ -43,28 +43,8 @@ class QueueFragment : Fragment() {
|
||||||
|
|
||||||
// --- UI SETUP ---
|
// --- UI SETUP ---
|
||||||
|
|
||||||
binding.queueToolbar.apply {
|
binding.queueToolbar.setNavigationOnClickListener {
|
||||||
setNavigationOnClickListener {
|
findNavController().navigateUp()
|
||||||
findNavController().navigateUp()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!requireActivity().isIrregularLandscape() && isEdgeOn()) {
|
|
||||||
setOnApplyWindowInsetsListener { _, insets ->
|
|
||||||
val top = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
||||||
insets.getInsets(WindowInsets.Type.systemBars()).top
|
|
||||||
} else {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
insets.systemWindowInsetTop
|
|
||||||
}
|
|
||||||
|
|
||||||
(parent as View).updatePadding(top = top)
|
|
||||||
|
|
||||||
insets
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Dont even bother w/edge-to-edge if the navigation bar is on the side
|
|
||||||
binding.root.fitsSystemWindows = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.queueRecycler.apply {
|
binding.queueRecycler.apply {
|
||||||
|
@ -73,6 +53,8 @@ class QueueFragment : Fragment() {
|
||||||
helper.attachToRecyclerView(this)
|
helper.attachToRecyclerView(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupEdgeForQueue(binding)
|
||||||
|
|
||||||
// --- VIEWMODEL SETUP ----
|
// --- VIEWMODEL SETUP ----
|
||||||
|
|
||||||
playbackModel.userQueue.observe(viewLifecycleOwner) { userQueue ->
|
playbackModel.userQueue.observe(viewLifecycleOwner) { userQueue ->
|
||||||
|
@ -104,6 +86,46 @@ class QueueFragment : Fragment() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupEdgeForQueue(binding: FragmentQueueBinding) {
|
||||||
|
if (isEdgeOn() && !requireActivity().isIrregularLandscape()) {
|
||||||
|
binding.queueToolbar.setOnApplyWindowInsetsListener { v, insets ->
|
||||||
|
val top = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
insets.getInsets(WindowInsets.Type.systemBars()).top
|
||||||
|
} else {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
insets.systemWindowInsetTop
|
||||||
|
}
|
||||||
|
|
||||||
|
(v.parent as View).updatePadding(top = top)
|
||||||
|
|
||||||
|
insets
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.queueRecycler.setOnApplyWindowInsetsListener { v, insets ->
|
||||||
|
val bottom = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
insets.getInsets(WindowInsets.Type.systemBars()).bottom
|
||||||
|
} else {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
insets.systemWindowInsetBottom
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply bottom padding to make sure that the last queue item isnt incorrectly lost,
|
||||||
|
// but also make sure that the added padding wont clip the child views entirely.
|
||||||
|
(v as ViewGroup).apply {
|
||||||
|
clipToPadding = false
|
||||||
|
updatePadding(bottom = bottom)
|
||||||
|
}
|
||||||
|
|
||||||
|
insets
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Don't even bother if we are in phone landscape or if edge-to-edge is off.
|
||||||
|
binding.root.fitsSystemWindows = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- QUEUE DATA ---
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the queue data that should be displayed
|
* Create the queue data that should be displayed
|
||||||
* @return The list of headers/songs that should be displayed.
|
* @return The list of headers/songs that should be displayed.
|
||||||
|
|
|
@ -48,14 +48,14 @@ class SettingsListFragment : PreferenceFragmentCompat() {
|
||||||
/**
|
/**
|
||||||
* Recursively call [handlePreference] on a preference.
|
* Recursively call [handlePreference] on a preference.
|
||||||
*/
|
*/
|
||||||
private fun recursivelyHandleChildren(pref: Preference) {
|
private fun recursivelyHandleChildren(preference: Preference) {
|
||||||
if (pref is PreferenceCategory) {
|
if (preference is PreferenceCategory) {
|
||||||
// If this preference is a category of its own, handle its own children
|
// If this preference is a category of its own, handle its own children
|
||||||
pref.children.forEach { pref ->
|
preference.children.forEach { pref ->
|
||||||
recursivelyHandleChildren(pref)
|
recursivelyHandleChildren(pref)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
handlePreference(pref)
|
handlePreference(preference)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,6 @@ org.oxycblt.auxio # Main UI's and logging utilities
|
||||||
├──.library # Library UI
|
├──.library # Library UI
|
||||||
├──.loading # Loading UI
|
├──.loading # Loading UI
|
||||||
├──.music # Music storage and loading
|
├──.music # Music storage and loading
|
||||||
│ └──.processing # Systems for music loading and organization
|
|
||||||
├──.playback # Playback UI and systems
|
├──.playback # Playback UI and systems
|
||||||
│ ├──.queue # Queue user interface
|
│ ├──.queue # Queue user interface
|
||||||
│ ├──.state # Backend/Modes for the playback state
|
│ ├──.state # Backend/Modes for the playback state
|
||||||
|
|
Loading…
Reference in a new issue