diff --git a/CHANGELOG.md b/CHANGELOG.md index edf861a3b..4fb665495 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ - Fixed broken tablet layouts - Fixed seam that would appear on some album covers - Fixed visual issue with the queue opening animation -- Fixed miscellanious startup issues +- Fixed miscellaneous startup issues - Fixed crash if settings was navigated away before playback state finished saving - Fixed broken album menu @@ -63,7 +63,7 @@ finished saving - Fixed unusable excluded directory UI - Songs with no data (i.e size of 0) are now filtered out - Fixed nonsensical menu items from appearing on songs -- Fixed issue where multiple menus would open if long-clicks occured simultaneously +- Fixed issue where multiple menus would open if long-clicks occurred simultaneously #### Dev/Meta - New translations [Fjuro -> Czech, Konstantin Tutsch -> German] diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index c25c2edf9..0b226625e 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -191,7 +191,6 @@ class GenreDetailFragment : if (parent is Genre && parent.id == unlikelyToBeNull(detailModel.currentGenre.value).id) { detailAdapter.highlightSong(song) } else { - // Clear any highlighting if playback is not occuring from this item. detailAdapter.highlightSong(null) } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt b/app/src/main/java/org/oxycblt/auxio/home/EdgeFrameLayout.kt similarity index 93% rename from app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt rename to app/src/main/java/org/oxycblt/auxio/home/EdgeFrameLayout.kt index 6cd476431..7cda03709 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/EdgeFrameLayout.kt @@ -26,10 +26,10 @@ import androidx.core.view.updatePadding import org.oxycblt.auxio.util.systemBarInsetsCompat /** - * A container for a FloatingActionButton that enables edge-to-edge support. + * A [FrameLayout] that automatically applies bottom insets. * @author OxygenCobalt */ -class EdgeFabContainer +class EdgeFrameLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 58a82eb27..5e3793a7b 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -64,7 +64,6 @@ import org.oxycblt.auxio.util.lazyReflectedField import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE import org.oxycblt.auxio.util.logTraceOrThrow -import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.textSafe /** @@ -98,7 +97,7 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI binding.homeToolbar.alpha = 1f - (abs(offset.toFloat()) / (range.toFloat() / 2)) - binding.homePager.updatePadding( + binding.homeContent.updatePadding( bottom = binding.homeAppbar.totalScrollRange + offset) } } @@ -107,11 +106,6 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI updateTabConfiguration() - binding.homeIndexingWrapper.setOnApplyWindowInsetsListener { view, insets -> - view.updatePadding(bottom = insets.systemBarInsetsCompat.bottom) - insets - } - // Load the track color in manually as it's unclear whether the track actually supports // using a ColorStateList in the resources binding.homeIndexingProgress.trackColor = @@ -141,7 +135,7 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI // --- VIEWMODEL SETUP --- - collect(homeModel.isFastScrolling) { updateFab() } + collectImmediately(homeModel.songs, homeModel.isFastScrolling, ::updateFab) collect(homeModel.recreateTabs, ::handleRecreateTabs) collectImmediately(homeModel.currentTab, ::updateCurrentTab) collectImmediately(indexerModel.state, ::handleIndexerState) @@ -265,8 +259,6 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI binding.homeIndexingContainer.visibility = View.INVISIBLE } } - - updateFab() } private fun handleIndexerResponse(binding: FragmentHomeBinding, response: Indexer.Response) { @@ -336,12 +328,9 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI } } - private fun updateFab() { + private fun updateFab(songs: List, isFastScrolling: Boolean) { val binding = requireBinding() - val fastScrolling = homeModel.isFastScrolling.value - val state = indexerModel.state.value - if (fastScrolling || - !(state is Indexer.State.Complete && state.response is Indexer.Response.Ok)) { + if (isFastScrolling || songs.isEmpty()) { binding.homeFab.hide() } else { binding.homeFab.show() diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index 7b4a2d111..052164df0 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -30,7 +30,8 @@ import org.oxycblt.auxio.util.unlikelyToBeNull /** [Item] variant that represents a music item. */ sealed class Music : Item() { - // TODO: Split ID into an ID derived from all fields and a persistent ID derived from stable fields + // TODO: Split ID into an ID derived from all fields and a persistent ID derived from stable + // fields /** The raw name of this item. Null if unknown. */ abstract val rawName: String? diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt index 1a37e550e..abb1c2bcf 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtil.kt @@ -61,7 +61,7 @@ val Long.albumCoverUri: Uri * they are invalid. */ val String.plainTrackNo: Int? - get() = toIntOrNull()?.let { if (it > 0) it else null } + get() = toIntOrNull()?.nonZeroOrNull() /** * Parse out the track number field as if the given Int is formatted as DTTT, where D Is the disc @@ -69,28 +69,28 @@ val String.plainTrackNo: Int? * invalid. */ val Int.packedTrackNo: Int? - get() = div(1000).let { if (it > 0) it else null } + get() = div(1000).nonZeroOrNull() /** * Parse out the disc number field as if the given Int is formatted as DTTT, where D Is the disc and * T is the track number. Values of zero will be ignored under the assumption that they are invalid. */ val Int.packedDiscNo: Int? - get() = mod(1000).let { if (it > 0) it else null } + get() = mod(1000).nonZeroOrNull() /** * Parse out the number field from an NN/TT string that is typically found in DISC_NUMBER and * CD_TRACK_NUMBER. Values of zero will be ignored under the assumption that they are invalid. */ val String.trackDiscNo: Int? - get() = split('/', limit = 2)[0].toIntOrNull()?.let { if (it > 0) it else null } + get() = split('/', limit = 2)[0].toIntOrNull()?.nonZeroOrNull() /** * Parse out a plain year from a string. Values of 0 will be ignored under the assumption that they * are invalid. */ val String.year: Int? - get() = toIntOrNull()?.let { if (it > 0) it else null } + get() = toIntOrNull()?.nonZeroOrNull() /** * Parse out the year field from a (presumably) ISO-8601-like date. This differs across tag formats @@ -99,7 +99,9 @@ val String.year: Int? * under the assumption that they are invalid. */ val String.iso8601year: Int? - get() = split('-', limit = 2)[0].toIntOrNull()?.let { if (it > 0) it else null } + get() = split('-', limit = 2)[0].toIntOrNull()?.nonZeroOrNull() + +private fun Int.nonZeroOrNull() = if (this > 0) this else null /** * Slice a string so that any preceding articles like The/A(n) are truncated. This is hilariously @@ -181,6 +183,7 @@ private val GENRE_RE = Regex("((?:\\(([0-9]+|RX|CR)\\))*)(.+)?") /** * A complete table of all the constant genre values for ID3(v2), including non-standard extensions. + * Note that we do not translate these, as that greatly increases technical complexity. */ private val GENRE_TABLE = arrayOf( diff --git a/app/src/main/java/org/oxycblt/auxio/playback/NoRtlFrameLayout.kt b/app/src/main/java/org/oxycblt/auxio/playback/ForcedLTRFrameLayout.kt similarity index 93% rename from app/src/main/java/org/oxycblt/auxio/playback/NoRtlFrameLayout.kt rename to app/src/main/java/org/oxycblt/auxio/playback/ForcedLTRFrameLayout.kt index b06b22c65..614c1c9b3 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/NoRtlFrameLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/ForcedLTRFrameLayout.kt @@ -35,7 +35,7 @@ import android.widget.FrameLayout * * @author OxygenCobalt */ -open class NoRtlFrameLayout +open class ForcedLTRFrameLayout @JvmOverloads constructor( context: Context, @@ -44,7 +44,7 @@ constructor( ) : FrameLayout(context, attrs, defStyleAttr) { override fun onFinishInflate() { super.onFinishInflate() - check(childCount == 1) { "This view should only contain one child" } + check(childCount == 1) { "This layout should only contain one child" } getChildAt(0).layoutDirection = View.LAYOUT_DIRECTION_LTR } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 75057f042..3f749e7d5 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -282,7 +282,10 @@ class PlaybackViewModel(application: Application) : } } - /** Force restore the last [PlaybackStateManager] saved state */ + /** + * Force restore the last [PlaybackStateManager] saved state, regardless of if a library exists + * or not. + */ fun restorePlaybackState(onDone: (Boolean) -> Unit) { viewModelScope.launch { val restored = diff --git a/app/src/main/java/org/oxycblt/auxio/playback/StyledSeekBar.kt b/app/src/main/java/org/oxycblt/auxio/playback/StyledSeekBar.kt index cf742c1b0..b5fcdb089 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/StyledSeekBar.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/StyledSeekBar.kt @@ -51,7 +51,7 @@ constructor( attrs: AttributeSet? = null, defStyleAttr: Int = 0, ) : - NoRtlFrameLayout(context, attrs, defStyleAttr), + ForcedLTRFrameLayout(context, attrs, defStyleAttr), Slider.OnSliderTouchListener, Slider.OnChangeListener { private val binding = ViewSeekBarBinding.inflate(context.inflater, this, true) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index ae1f4391b..87eea7eb0 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -387,8 +387,7 @@ class PlaybackStateManager private constructor() { suspend fun sanitize(database: PlaybackStateDatabase, newLibrary: MusicStore.Library) { // Since we need to sanitize the state and re-save it for consistency, take the // easy way out and just write a new state and restore from it. Don't really care. - // FIXME: This hack actually creates bugs if a user were to save the state at just - // the right time, replace it with something that operates at runtime + // TODO: Do we even need to save here? Doesn't seem like it's required for logD("Sanitizing state") val state = synchronized(this) { makeStateImpl() } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 26f39c84e..c35067152 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -69,6 +69,8 @@ import org.oxycblt.auxio.widgets.WidgetProvider * * TODO: Android Auto * + * TODO: Attempt to re-unify delayed actions again + * * @author OxygenCobalt */ class PlaybackService : @@ -285,10 +287,10 @@ class PlaybackService : // --- SETTINGSMANAGER OVERRIDES --- override fun onSettingChanged(key: String) { - when (key) { - getString(R.string.set_key_replay_gain), - getString(R.string.set_key_pre_amp_with), - getString(R.string.set_key_pre_amp_without) -> onTracksChanged(player.currentTracks) + if (key == getString(R.string.set_key_replay_gain) || + key == getString(R.string.set_key_pre_amp_with) || + key == getString(R.string.set_key_pre_amp_without)) { + onTracksChanged(player.currentTracks) } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/M3Toolbar.kt b/app/src/main/java/org/oxycblt/auxio/ui/M3Toolbar.kt deleted file mode 100644 index c7e023206..000000000 --- a/app/src/main/java/org/oxycblt/auxio/ui/M3Toolbar.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 . - */ - -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. - * @author OxygenCobalt - */ -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) - } - } -} diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/RecyclerFramework.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/RecyclerFramework.kt index 11d11d90a..058737fdd 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/RecyclerFramework.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/RecyclerFramework.kt @@ -26,6 +26,7 @@ import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +// TODO: Differentiate between replace and diffing w/item updates /** * An adapter for one viewholder tied to one type of data. All functionality is derived from the * overridden values. @@ -40,7 +41,7 @@ abstract class MonoAdapter>(private val liste /** * An optional override to further modify the given [viewHolder]. The normal operation is to - * bind the viewholder, with nothing more. + * bind the viewholder. */ open fun onBind(viewHolder: VH, item: T, listener: L, payload: List) { viewHolder.bind(item, listener) diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ScrollIndicatorRecyclerView.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt rename to app/src/main/java/org/oxycblt/auxio/ui/recycler/ScrollIndicatorRecyclerView.kt index fbc0cb834..86cd02269 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/DialogRecyclerView.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ScrollIndicatorRecyclerView.kt @@ -34,7 +34,7 @@ import org.oxycblt.auxio.util.getDimenSizeSafe * used in dialogs. * @author OxygenCobalt */ -class DialogRecyclerView +class ScrollIndicatorRecyclerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : RecyclerView(context, attrs, defStyleAttr) { diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt index fe198ed5f..3c1626da5 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt @@ -97,7 +97,7 @@ private fun RemoteViews.applyRoundingToBackground(context: Context): RemoteViews private fun RemoteViews.applyRoundingToBar(context: Context): RemoteViews { if (Settings(context).roundMode && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { - setInt(R.id.widget_controls, "setBackgroundResource", R.drawable.ui_widget_bg_round) + setInt(R.id.widget_controls, "setBackgroundResource", R.drawable.ui_widget_bar_round) } else { setInt(R.id.widget_controls, "setBackgroundResource", R.drawable.ui_widget_bar) } diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt index 8a641f0aa..1e0bde6aa 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt @@ -88,7 +88,7 @@ class WidgetComponent(private val context: Context) : context.getDimenSizeSafe(android.R.dimen.system_app_widget_inner_radius) } else if (settings.roundMode) { // < Android 12, but the user still enabled round mode. - context.getDimenSizeSafe(R.dimen.size_corners_large) + context.getDimenSizeSafe(R.dimen.size_corners_medium) } else { // User did not enable round mode. 0 diff --git a/app/src/main/res/drawable/ic_author_24.xml b/app/src/main/res/drawable/ic_author_24.xml new file mode 100644 index 000000000..4c9371665 --- /dev/null +++ b/app/src/main/res/drawable/ic_author_24.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_remote_default_cover_24.xml b/app/src/main/res/drawable/ic_remote_default_cover_24.xml index a9db9a52f..fa860ad09 100644 --- a/app/src/main/res/drawable/ic_remote_default_cover_24.xml +++ b/app/src/main/res/drawable/ic_remote_default_cover_24.xml @@ -5,9 +5,9 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ui_remote_fab_bg.xml b/app/src/main/res/drawable/ui_remote_fab_bg.xml index ec6599f1c..ceabcf551 100644 --- a/app/src/main/res/drawable/ui_remote_fab_bg.xml +++ b/app/src/main/res/drawable/ui_remote_fab_bg.xml @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + diff --git a/app/src/main/res/drawable/ui_widget_bar_round.xml b/app/src/main/res/drawable/ui_widget_bar_round.xml new file mode 100644 index 000000000..9fcd8308b --- /dev/null +++ b/app/src/main/res/drawable/ui_widget_bar_round.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/layout-land/fragment_playback_panel.xml b/app/src/main/res/layout-land/fragment_playback_panel.xml index 19a8330b0..8b7e74a40 100644 --- a/app/src/main/res/layout-land/fragment_playback_panel.xml +++ b/app/src/main/res/layout-land/fragment_playback_panel.xml @@ -5,9 +5,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + diff --git a/app/src/main/res/layout-sw600dp-land/fragment_playback_panel.xml b/app/src/main/res/layout-sw600dp-land/fragment_playback_panel.xml index 38d96a10c..f34840022 100644 --- a/app/src/main/res/layout-sw600dp-land/fragment_playback_panel.xml +++ b/app/src/main/res/layout-sw600dp-land/fragment_playback_panel.xml @@ -5,9 +5,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + diff --git a/app/src/main/res/layout-sw600dp/fragment_playback_bar.xml b/app/src/main/res/layout-sw600dp/fragment_playback_bar.xml index 40b2bc12a..d9f1dcb58 100644 --- a/app/src/main/res/layout-sw600dp/fragment_playback_bar.xml +++ b/app/src/main/res/layout-sw600dp/fragment_playback_bar.xml @@ -43,7 +43,7 @@ app:layout_constraintTop_toBottomOf="@+id/playback_song" tools:text="Artist Name / Album Name" /> - - + - - + diff --git a/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml b/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml index 669579f9b..a71ea9161 100644 --- a/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml +++ b/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml @@ -6,9 +6,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + diff --git a/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml b/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml index 6556cf197..2e439cbf5 100644 --- a/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml +++ b/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml @@ -5,9 +5,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + diff --git a/app/src/main/res/layout/dialog_accent.xml b/app/src/main/res/layout/dialog_accent.xml index 80277179a..ddaff0d4e 100644 --- a/app/src/main/res/layout/dialog_accent.xml +++ b/app/src/main/res/layout/dialog_accent.xml @@ -1,5 +1,5 @@ - - - @@ -77,47 +79,41 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/about_auxio_icon" /> - - + - + + + - - + app:layout_constraintTop_toBottomOf="@+id/about_version" /> - + android:layout_height="wrap_content" + android:layout_width="match_parent" + app:navigationIcon="@drawable/ic_back_24" /> diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 6b5d8293c..170e4ed7a 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -11,7 +11,7 @@ style="@style/Widget.Auxio.AppBarLayout" app:liftOnScroll="true"> - - - + + + android:layout_gravity="center"> - + android:layout_gravity="center"> - + android:animateLayoutChanges="true"> - + -