From f27b798e33e6adbe7ee9363010ca9b6ae244c87a Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Thu, 4 Aug 2022 14:30:33 -0600 Subject: [PATCH] ui: remove coordinatorlayout workarounds Remove EdgeCoordinatorLayout in favor of using fitsSystemWindows when needed. EdgeCoordinatorLayout was derived from a misunderstanding about how window insets worked. Remove it. --- app/build.gradle | 2 +- .../auxio/detail/AlbumDetailFragment.kt | 2 +- .../auxio/detail/ArtistDetailFragment.kt | 2 +- .../auxio/detail/DetailAppBarLayout.kt | 6 +- .../oxycblt/auxio/music/StorageFramework.kt | 4 +- ...geAppBarLayout.kt => AuxioAppBarLayout.kt} | 14 +---- .../ui/coordinator/EdgeCoordinatorLayout.kt | 56 ------------------- app/src/main/res/layout/fragment_about.xml | 8 +-- app/src/main/res/layout/fragment_detail.xml | 47 +++++++--------- app/src/main/res/layout/fragment_home.xml | 10 ++-- app/src/main/res/layout/fragment_main.xml | 8 +-- app/src/main/res/layout/fragment_search.xml | 8 +-- app/src/main/res/layout/fragment_settings.xml | 9 ++- 13 files changed, 52 insertions(+), 124 deletions(-) rename app/src/main/java/org/oxycblt/auxio/ui/{coordinator/EdgeAppBarLayout.kt => AuxioAppBarLayout.kt} (88%) delete mode 100644 app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeCoordinatorLayout.kt diff --git a/app/build.gradle b/app/build.gradle index a86e6d3ab..61ea11c7f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,9 +14,9 @@ android { versionName "2.5.0" versionCode 19 + minSdk 21 // API 33 is still busted, waiting until the XML element issue is fixed // noinspection OldTargetApi - minSdk 21 targetSdk 32 buildFeatures { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index d6f72ae03..3f5caac1c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -86,7 +86,7 @@ class AlbumDetailFragment : setOnMenuItemClickListener(this@AlbumDetailFragment) } - requireBinding().detailRecycler.apply { + binding.detailRecycler.apply { adapter = detailAdapter applySpans { pos -> val item = detailAdapter.data.currentList[pos] diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 2b99446a5..b964c92ff 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -81,7 +81,7 @@ class ArtistDetailFragment : setOnMenuItemClickListener(this@ArtistDetailFragment) } - requireBinding().detailRecycler.apply { + binding.detailRecycler.apply { adapter = detailAdapter applySpans { pos -> // If the item is an ActionHeader we need to also make the item full-width diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt index 988e857b7..d208a4df0 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt @@ -32,13 +32,13 @@ import com.google.android.material.appbar.AppBarLayout import java.lang.Exception import java.lang.reflect.Field import org.oxycblt.auxio.R -import org.oxycblt.auxio.ui.coordinator.EdgeAppBarLayout +import org.oxycblt.auxio.ui.AuxioAppBarLayout import org.oxycblt.auxio.util.lazyReflectedField import org.oxycblt.auxio.util.logE import org.oxycblt.auxio.util.logTraceOrThrow /** - * An [EdgeAppBarLayout] variant that also shows the name of the toolbar whenever the detail + * An [AuxioAppBarLayout] variant that also shows the name of the toolbar whenever the detail * recyclerview is scrolled beyond it's first item (a.k.a the header). This is used instead of * CollapsingToolbarLayout since that thing is a mess with crippling bugs and state issues. This * just works. @@ -47,7 +47,7 @@ import org.oxycblt.auxio.util.logTraceOrThrow class DetailAppBarLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : - EdgeAppBarLayout(context, attrs, defStyleAttr) { + AuxioAppBarLayout(context, attrs, defStyleAttr) { private var titleView: AppCompatTextView? = null private var recycler: RecyclerView? = null diff --git a/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt b/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt index 13576aa97..b24b347eb 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt @@ -147,9 +147,7 @@ val StorageVolume.isInternalCompat: Boolean val StorageVolume.uuidCompat: String? @SuppressLint("NewApi") get() = uuid -/* - * Returns the state of the volume in a compatible manner. - */ +/** Returns the state of the volume in a compatible manner. */ val StorageVolume.stateCompat: String @SuppressLint("NewApi") get() = state diff --git a/app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt similarity index 88% rename from app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeAppBarLayout.kt rename to app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt index acaa17230..4494ec98c 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt @@ -15,20 +15,17 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.ui.coordinator +package org.oxycblt.auxio.ui import android.content.Context import android.util.AttributeSet import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver -import android.view.WindowInsets import androidx.annotation.AttrRes import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.res.ResourcesCompat -import androidx.core.view.updatePadding import com.google.android.material.appbar.AppBarLayout -import org.oxycblt.auxio.util.systemBarInsetsCompat /** * An [AppBarLayout] that fixes a bug with the default implementation where the lifted state will @@ -37,7 +34,7 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat * **Note:** This layout relies on [AppBarLayout.liftOnScrollTargetViewId] to figure out what * scrolling view to use. Failure to specify this will result in the layout not working. */ -open class EdgeAppBarLayout +open class AuxioAppBarLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : AppBarLayout(context, attrs, defStyleAttr) { @@ -58,15 +55,10 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr } init { + fitsSystemWindows = true viewTreeObserver.addOnPreDrawListener(onPreDraw) } - override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { - super.onApplyWindowInsets(insets) - updatePadding(top = insets.systemBarInsetsCompat.top) - return insets - } - override fun onDetachedFromWindow() { super.onDetachedFromWindow() viewTreeObserver.removeOnPreDrawListener(onPreDraw) diff --git a/app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeCoordinatorLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeCoordinatorLayout.kt deleted file mode 100644 index 7fe6d4b63..000000000 --- a/app/src/main/java/org/oxycblt/auxio/ui/coordinator/EdgeCoordinatorLayout.kt +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2021 Auxio Project - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.auxio.ui.coordinator - -import android.content.Context -import android.util.AttributeSet -import android.view.WindowInsets -import androidx.annotation.AttrRes -import androidx.coordinatorlayout.widget.CoordinatorLayout -import androidx.core.view.children - -/** - * Class that manually overrides the busted window inset functionality of CoordinatorLayout in favor - * of a simple "delegate to child views" implementation. - * - * @author OxygenCobalt - */ -class EdgeCoordinatorLayout -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : - CoordinatorLayout(context, attrs, defStyleAttr) { - override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets { - super.dispatchApplyWindowInsets(insets) - - for (child in children) { - child.dispatchApplyWindowInsets(insets) - } - - return insets - } - - override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { - super.onApplyWindowInsets(insets) - - for (child in children) { - child.onApplyWindowInsets(insets) - } - - return insets - } -} diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 39be7bcd3..ebb893ee5 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -1,5 +1,5 @@ - - @@ -20,7 +20,7 @@ app:navigationIcon="@drawable/ic_back_24" app:title="@string/lbl_about" /> - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_detail.xml b/app/src/main/res/layout/fragment_detail.xml index 657488c00..32e5f023b 100644 --- a/app/src/main/res/layout/fragment_detail.xml +++ b/app/src/main/res/layout/fragment_detail.xml @@ -1,36 +1,31 @@ - - + - - - - - - - + android:layout_height="wrap_content" + app:navigationIcon="@drawable/ic_back_24" /> - - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index b687b876d..29ca7f05b 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,5 +1,5 @@ - - + android:fitsSystemWindows="true"> - + - + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 73f5adf98..71e862468 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -1,5 +1,5 @@ - - - + - + diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 60c9dd43e..4d994b52f 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -1,12 +1,12 @@ - - @@ -43,7 +43,7 @@ - + - + diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index dc9f84e6e..ad63ac67f 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,13 +1,12 @@ - - - - + - +