ui: make toolbar fix dedicated class

Make the toolbar spacing fixes a dedicated class.

This resolves an issue on lollipop devices where the ripple would be
clipped.
This commit is contained in:
OxygenCobalt 2022-07-03 16:15:20 -06:00
parent 9647b53f78
commit b1a8544b73
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
17 changed files with 78 additions and 78 deletions

View file

@ -27,6 +27,7 @@ finished saving
- Fixed crash when search filter mode was changed - Fixed crash when search filter mode was changed
- Fixed shuffle button appearing below playback bar on Android 10 and lower - Fixed shuffle button appearing below playback bar on Android 10 and lower
- Fixed incorrect song being shown in the notification in some cases [#179] - Fixed incorrect song being shown in the notification in some cases [#179]
- Fixed issue where toolbar will be clipped on Lollipop devices
#### What's Changed #### What's Changed
- Reworked typography and iconography to be more aligned with material design guidelines - Reworked typography and iconography to be more aligned with material design guidelines

View file

@ -0,0 +1,50 @@
/*
* Copyright (c) 2022 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 <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.ui
import android.content.Context
import android.util.AttributeSet
import androidx.annotation.AttrRes
import androidx.core.view.updatePaddingRelative
import com.google.android.material.appbar.MaterialToolbar
import org.oxycblt.auxio.R
import org.oxycblt.auxio.util.getDimenSizeSafe
/** [MaterialToolbar] that automatically fixes padding in order to align with the M3 specs. */
class M3Toolbar : MaterialToolbar {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(
context: Context,
attrs: AttributeSet?,
@AttrRes defStyleAttr: Int
) : super(context, attrs, defStyleAttr)
init {
val tinySpacing = context.getDimenSizeSafe(R.dimen.spacing_tiny)
if (navigationIcon != null) {
updatePaddingRelative(start = tinySpacing)
}
if (menu != null) {
updatePaddingRelative(end = tinySpacing)
}
}
}

View file

@ -5,9 +5,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/playback_toolbar" android:id="@+id/playback_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down.Actions" style="@style/Widget.Auxio.Toolbar.Icon.Down"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/menu_playback" app:menu="@menu/menu_playback"

View file

@ -5,9 +5,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/playback_toolbar" android:id="@+id/playback_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down.Actions" style="@style/Widget.Auxio.Toolbar.Icon.Down"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/menu_playback" app:menu="@menu/menu_playback"

View file

@ -6,9 +6,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/playback_toolbar" android:id="@+id/playback_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down.Actions" style="@style/Widget.Auxio.Toolbar.Icon.Down"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/menu_playback" app:menu="@menu/menu_playback"

View file

@ -1,14 +1,13 @@
<?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" <androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/playback_toolbar" android:id="@+id/playback_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down.Actions" style="@style/Widget.Auxio.Toolbar.Icon.Down"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/menu_playback" app:menu="@menu/menu_playback"

View file

@ -12,7 +12,7 @@
style="@style/Widget.Auxio.AppBarLayout" style="@style/Widget.Auxio.AppBarLayout"
app:liftOnScroll="true"> app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/about_toolbar" android:id="@+id/about_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon" style="@style/Widget.Auxio.Toolbar.Icon"
app:title="@string/lbl_about" /> app:title="@string/lbl_about" />

View file

@ -15,9 +15,9 @@
app:liftOnScroll="true" app:liftOnScroll="true"
app:liftOnScrollTargetViewId="@id/detail_recycler"> app:liftOnScrollTargetViewId="@id/detail_recycler">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/detail_toolbar" android:id="@+id/detail_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Actions" /> style="@style/Widget.Auxio.Toolbar.Icon" />
</org.oxycblt.auxio.detail.DetailAppBarLayout> </org.oxycblt.auxio.detail.DetailAppBarLayout>

View file

@ -11,9 +11,10 @@
style="@style/Widget.Auxio.AppBarLayout" style="@style/Widget.Auxio.AppBarLayout"
app:liftOnScroll="true"> app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/home_toolbar" android:id="@+id/home_toolbar"
style="@style/Widget.Auxio.Toolbar.Actions" android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:menu="@menu/menu_home" app:menu="@menu/menu_home"
app:title="@string/info_app_name" /> app:title="@string/info_app_name" />

View file

@ -5,9 +5,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/playback_toolbar" android:id="@+id/playback_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down.Actions" style="@style/Widget.Auxio.Toolbar.Icon.Down"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/menu_playback" app:menu="@menu/menu_playback"

View file

@ -12,7 +12,7 @@
app:liftOnScroll="true" app:liftOnScroll="true"
app:liftOnScrollTargetViewId="@id/queue_recycler"> app:liftOnScrollTargetViewId="@id/queue_recycler">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/queue_toolbar" android:id="@+id/queue_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Down" style="@style/Widget.Auxio.Toolbar.Icon.Down"
android:elevation="0dp" android:elevation="0dp"

View file

@ -10,9 +10,9 @@
app:liftOnScroll="true" app:liftOnScroll="true"
app:liftOnScrollTargetViewId="@id/search_recycler"> app:liftOnScrollTargetViewId="@id/search_recycler">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/search_toolbar" android:id="@+id/search_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon.Actions" style="@style/Widget.Auxio.Toolbar.Icon"
app:menu="@menu/menu_search"> app:menu="@menu/menu_search">
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
@ -38,7 +38,7 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
</com.google.android.material.appbar.MaterialToolbar> </org.oxycblt.auxio.ui.M3Toolbar>
</org.oxycblt.auxio.ui.coordinator.EdgeAppBarLayout> </org.oxycblt.auxio.ui.coordinator.EdgeAppBarLayout>

View file

@ -13,7 +13,7 @@
android:focusable="true" android:focusable="true"
app:liftOnScroll="true"> app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar <org.oxycblt.auxio.ui.M3Toolbar
android:id="@+id/settings_toolbar" android:id="@+id/settings_toolbar"
style="@style/Widget.Auxio.Toolbar.Icon" style="@style/Widget.Auxio.Toolbar.Icon"
app:title="@string/set_title" /> app:title="@string/set_title" />

View file

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Auxio.Toolbar.Actions" parent="Widget.Auxio.Toolbar.Base">
<item name="android:layout_marginEnd">@dimen/spacing_tiny_inv</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon" parent="Widget.Auxio.Toolbar.Base">
<!-- TODO: Margin clips ripples on lollipop, replace w/new impl -->
<item name="navigationIcon">@drawable/ic_back_24</item>
<item name="android:layout_marginStart">@dimen/spacing_small_inv</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon.Actions" parent="Widget.Auxio.Toolbar.Actions">
<item name="navigationIcon">@drawable/ic_back_24</item>
<item name="android:layout_marginStart">@dimen/spacing_small_inv</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon.Down" parent="Widget.Auxio.Toolbar.Base">
<item name="navigationIcon">@drawable/ic_down_24</item>
<item name="android:layout_marginStart">@dimen/spacing_small_inv</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon.Down.Actions" parent="Widget.Auxio.Toolbar.Actions">
<item name="navigationIcon">@drawable/ic_down_24</item>
<item name="android:layout_marginStart">@dimen/spacing_small_inv</item>
</style>
<style name="Widget.Auxio.RecyclerView.WithAdaptiveFab" parent="">
<item name="android:paddingBottom">@dimen/recycler_fab_space_large</item>
</style>
</resources>

View file

@ -1,7 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="Widget.Auxio.FloatingActionButton.Adaptive" parent="Widget.Material3.FloatingActionButton.Large.Primary"> <style name="Widget.Auxio.FloatingActionButton.Adaptive" parent="Widget.Material3.FloatingActionButton.Large.Primary">
<item name="fabSize">normal</item> <item name="fabSize">normal</item>
</style> </style>
<style name="Widget.Auxio.RecyclerView.WithAdaptiveFab" parent="">
<item name="android:paddingBottom">@dimen/recycler_fab_space_large</item>
</style>
</resources> </resources>

View file

@ -55,6 +55,4 @@
<dimen name="widget_height_min">110dp</dimen> <dimen name="widget_height_min">110dp</dimen>
<dimen name="widget_width_def">@dimen/widget_width_min</dimen> <dimen name="widget_width_def">@dimen/widget_width_min</dimen>
<dimen name="widget_height_def">@dimen/widget_height_min</dimen> <dimen name="widget_height_def">@dimen/widget_height_min</dimen>
<dimen name="abc_action_bar_default_padding_start_material">4dp</dimen>
</resources> </resources>

View file

@ -13,30 +13,14 @@
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
</style> </style>
<style name="Widget.Auxio.Toolbar.Actions" parent="Widget.Auxio.Toolbar.Base">
<!--
Material guidelines state that there should be 16dp end padding with actions,
but Toolbar only has 12dp. Fix that by adding a 4dp margin.
-->
<item name="android:layout_marginEnd">@dimen/spacing_tiny</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon" parent="Widget.Auxio.Toolbar.Base"> <style name="Widget.Auxio.Toolbar.Icon" parent="Widget.Auxio.Toolbar.Base">
<item name="navigationIcon">@drawable/ic_back_24</item> <item name="navigationIcon">@drawable/ic_back_24</item>
</style> </style>
<style name="Widget.Auxio.Toolbar.Icon.Actions" parent="Widget.Auxio.Toolbar.Actions">
<item name="navigationIcon">@drawable/ic_back_24</item>
</style>
<style name="Widget.Auxio.Toolbar.Icon.Down" parent="Widget.Auxio.Toolbar.Base"> <style name="Widget.Auxio.Toolbar.Icon.Down" parent="Widget.Auxio.Toolbar.Base">
<item name="navigationIcon">@drawable/ic_down_24</item> <item name="navigationIcon">@drawable/ic_down_24</item>
</style> </style>
<style name="Widget.Auxio.Toolbar.Icon.Down.Actions" parent="Widget.Auxio.Toolbar.Actions">
<item name="navigationIcon">@drawable/ic_down_24</item>
</style>
<style name="Widget.Auxio.Slider" parent="Widget.Material3.Slider"> <style name="Widget.Auxio.Slider" parent="Widget.Material3.Slider">
<item name="trackColorInactive">@color/sel_track</item> <item name="trackColorInactive">@color/sel_track</item>
<item name="haloRadius">@dimen/spacing_medium</item> <item name="haloRadius">@dimen/spacing_medium</item>
@ -220,13 +204,9 @@
<!-- BUTTON STYLES --> <!-- BUTTON STYLES -->
<style name="Widget.Auxio.Button.Primary" parent="Widget.Material3.Button"> <style name="Widget.Auxio.Button.Primary" parent="Widget.Material3.Button" />
</style> <style name="Widget.Auxio.Button.Secondary" parent="Widget.Material3.Button.OutlinedButton" />
<style name="Widget.Auxio.Button.Secondary" parent="Widget.Material3.Button.OutlinedButton">
<item name="strokeColor">?attr/colorOutline</item>
</style>
<style name="Widget.Auxio.FloatingActionButton.PlayPause" parent="Widget.Material3.FloatingActionButton.Large.Secondary"> <style name="Widget.Auxio.FloatingActionButton.PlayPause" parent="Widget.Material3.FloatingActionButton.Large.Secondary">
<!-- <!--