From 11e9f1749acc1338ed7ee3e32e5c239e6b49e3d6 Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Tue, 5 Jul 2022 02:45:23 +0300 Subject: [PATCH] Some lifting magic (when tabs visible != app bar lifted) --- .../ui/widgets/KotatsuCoordinatorLayout.kt | 6 +- .../ui/FavouritesContainerFragment.kt | 4 -- .../koitharu/kotatsu/main/ui/MainActivity.kt | 26 +++---- app/src/main/res/drawable/ic_notification.xml | 11 +++ .../main/res/layout-w600dp/activity_main.xml | 69 ++++++++----------- app/src/main/res/layout/activity_main.xml | 1 + 6 files changed, 57 insertions(+), 60 deletions(-) create mode 100644 app/src/main/res/drawable/ic_notification.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/KotatsuCoordinatorLayout.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/KotatsuCoordinatorLayout.kt index c6b90405b..d91cc85fd 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/KotatsuCoordinatorLayout.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/KotatsuCoordinatorLayout.kt @@ -23,7 +23,6 @@ class KotatsuCoordinatorLayout @JvmOverloads constructor( ) : CoordinatorLayout(context, attrs, defStyleAttr) { private var appBarLayout: AppBarLayout? = null - private var tabLayout: TabLayout? = null /** * If true, [AppBarLayout] child will be lifted on nested scroll. @@ -46,22 +45,19 @@ class KotatsuCoordinatorLayout @JvmOverloads constructor( consumed: IntArray ) { super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type, consumed) - // Disable elevation overlay when tabs are visible if (canLiftAppBarOnScroll) { - appBarLayout?.isLifted = dyConsumed != 0 || dyUnconsumed > 0 && tabLayout?.isVisible == false + appBarLayout?.isLifted = dyConsumed != 0 || dyUnconsumed >= 0 } } override fun onAttachedToWindow() { super.onAttachedToWindow() appBarLayout = findChild() - tabLayout = appBarLayout?.findChild() } override fun onDetachedFromWindow() { super.onDetachedFromWindow() appBarLayout = null - tabLayout = null } override fun onSaveInstanceState(): Parcelable? { diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt index 383ed6b74..5d2e88751 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt @@ -9,7 +9,6 @@ import androidx.appcompat.widget.PopupMenu import androidx.core.graphics.Insets import androidx.core.view.children import androidx.core.view.isVisible -import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import com.google.android.material.snackbar.Snackbar import com.google.android.material.tabs.TabLayout @@ -25,11 +24,8 @@ import org.koitharu.kotatsu.favourites.ui.categories.CategoriesEditDelegate import org.koitharu.kotatsu.favourites.ui.categories.FavouritesCategoriesViewModel import org.koitharu.kotatsu.favourites.ui.categories.adapter.CategoryListModel import org.koitharu.kotatsu.favourites.ui.categories.edit.FavouritesCategoryEditActivity -import org.koitharu.kotatsu.main.ui.AppBarOwner import org.koitharu.kotatsu.utils.ext.addMenuProvider import org.koitharu.kotatsu.utils.ext.getDisplayMessage -import org.koitharu.kotatsu.utils.ext.measureHeight -import org.koitharu.kotatsu.utils.ext.resolveDp class FavouritesContainerFragment : BaseFragment(), diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index f8e13a4d2..d0fa9cf53 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.main.ui -import android.app.ActivityOptions import android.os.Bundle import android.view.MenuItem import android.view.View @@ -91,12 +90,12 @@ class MainActivity : } navBar.setOnItemSelectedListener(this) - binding.fab.setOnClickListener(this) + binding.fab?.setOnClickListener(this) binding.navRail?.headerView?.setOnClickListener(this) binding.searchView.isVoiceSearchEnabled = voiceInputLauncher.resolve(this, null) != null supportFragmentManager.findFragmentByTag(TAG_PRIMARY)?.let { - if (it is LibraryFragment) binding.fab.show() else binding.fab.hide() + if (it is LibraryFragment) binding.fab?.show() else binding.fab?.hide() } ?: onNavigationItemSelected(navBar.selectedItemId) if (savedInstanceState == null) { onFirstStart() @@ -233,25 +232,28 @@ class MainActivity : override fun onSupportActionModeStarted(mode: ActionMode) { super.onSupportActionModeStarted(mode) adjustFabVisibility() - showBottomNav(false) + showNav(false) } override fun onSupportActionModeFinished(mode: ActionMode) { super.onSupportActionModeFinished(mode) adjustFabVisibility() - showBottomNav(true) + showNav(true) } private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean { when (itemId) { R.id.nav_library -> { setPrimaryFragment(LibraryFragment.newInstance()) + binding.root.isLiftAppBarOnScroll = true // придумать лучше } R.id.nav_explore -> { setPrimaryFragment(FavouritesContainerFragment.newInstance()) + binding.root.isLiftAppBarOnScroll = false // --//-- } R.id.nav_feed -> { setPrimaryFragment(FeedFragment.newInstance()) + binding.root.isLiftAppBarOnScroll = true // --//-- } else -> return false } @@ -270,7 +272,7 @@ class MainActivity : } private fun onLoadingStateChanged(isLoading: Boolean) { - binding.fab.isEnabled = !isLoading + binding.fab?.isEnabled = !isLoading } private fun onResumeEnabledChanged(isEnabled: Boolean) { @@ -295,13 +297,13 @@ class MainActivity : binding.appbar.updatePadding(left = 0, right = 0) adjustFabVisibility(isSearchOpened = true) supportActionBar?.setHomeAsUpIndicator(materialR.drawable.abc_ic_ab_back_material) - showBottomNav(false) + showNav(false) } private fun onSearchClosed() { TransitionManager.beginDelayedTransition(binding.appbar) binding.toolbarCard.updateLayoutParams { - scrollFlags = SCROLL_FLAG_SCROLL or SCROLL_FLAG_ENTER_ALWAYS + scrollFlags = SCROLL_FLAG_SCROLL or SCROLL_FLAG_ENTER_ALWAYS or SCROLL_FLAG_SNAP } binding.toolbarCard.setBackgroundResource(R.drawable.toolbar_background) binding.appbar.background = null @@ -309,10 +311,10 @@ class MainActivity : binding.appbar.updatePadding(left = padding, right = padding) adjustFabVisibility(isSearchOpened = false) supportActionBar?.setHomeAsUpIndicator(materialR.drawable.abc_ic_search_api_material) - showBottomNav(true) + showNav(true) } - private fun showBottomNav(visible: Boolean) { + private fun showNav(visible: Boolean) { binding.bottomNav?.run { if (visible) { slideUp() @@ -357,11 +359,11 @@ class MainActivity : !isSearchOpened && topFragment is LibraryFragment ) { - if (!fab.isVisible) { + if (fab?.isVisible == false) { fab.show() } } else { - if (fab.isVisible) { + if (fab?.isVisible == true) { fab.hide() } } diff --git a/app/src/main/res/drawable/ic_notification.xml b/app/src/main/res/drawable/ic_notification.xml new file mode 100644 index 000000000..1bbf44939 --- /dev/null +++ b/app/src/main/res/drawable/ic_notification.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/layout-w600dp/activity_main.xml b/app/src/main/res/layout-w600dp/activity_main.xml index 3b1eee055..e85c414df 100644 --- a/app/src/main/res/layout-w600dp/activity_main.xml +++ b/app/src/main/res/layout-w600dp/activity_main.xml @@ -1,5 +1,5 @@ - - - - - - + android:clipToPadding="false" + android:stateListAnimator="@null" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/navRail" + app:layout_constraintTop_toTopOf="parent"> + android:theme="@style/ThemeOverlay.Kotatsu.MainToolbar"> - + android:layout_height="match_parent" + app:elevation="1dp" + app:headerLayout="@layout/navigation_rail_fab" + app:labelVisibilityMode="labeled" + app:layout_constraintStart_toStartOf="parent" + app:menu="@menu/nav_bottom" /> - - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 33921d8c5..321f2d767 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -18,6 +18,7 @@ android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" + android:clipToPadding="false" android:fitsSystemWindows="true" android:paddingLeft="16dp" android:paddingRight="16dp"