Improve thumbnail sheet

This commit is contained in:
Zakhar Timoshenko
2021-07-29 22:37:08 +03:00
committed by Koitharu
parent 57111f628d
commit 7bb809f227
3 changed files with 28 additions and 44 deletions

View File

@@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
@@ -53,6 +54,15 @@ class PagesThumbnailsSheet : BaseBottomSheet<SheetPagesBinding>(),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val title = arguments?.getString(ARG_TITLE)
binding.toolbar.title = title
binding.toolbar.setNavigationOnClickListener { dismiss() }
binding.toolbar.subtitle =
resources.getQuantityString(R.plurals.pages, thumbnails.size, thumbnails.size)
val initialTopPosition = binding.recyclerView.top
with(binding.recyclerView) { with(binding.recyclerView) {
addItemDecoration( addItemDecoration(
SpacingItemDecoration(view.resources.getDimensionPixelOffset(R.dimen.grid_spacing)) SpacingItemDecoration(view.resources.getDimensionPixelOffset(R.dimen.grid_spacing))
@@ -64,42 +74,27 @@ class PagesThumbnailsSheet : BaseBottomSheet<SheetPagesBinding>(),
get(), get(),
this@PagesThumbnailsSheet this@PagesThumbnailsSheet
) )
addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) = Unit
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
binding.appbar.isLifted = getChildAt(0).top < initialTopPosition
}
})
addOnLayoutChangeListener(spanResolver) addOnLayoutChangeListener(spanResolver)
spanResolver.setGridSize(get<AppSettings>().gridSize / 100f, this) spanResolver.setGridSize(get<AppSettings>().gridSize / 100f, this)
} }
val title = arguments?.getString(ARG_TITLE)
binding.toolbar.title = title
binding.toolbar.setNavigationOnClickListener { dismiss() }
binding.toolbar.subtitle =
resources.getQuantityString(R.plurals.pages, thumbnails.size, thumbnails.size)
binding.textViewTitle.text = title
if (dialog !is BottomSheetDialog) {
binding.toolbar.isVisible = true
binding.textViewTitle.isVisible = false
binding.appbar.elevation = resources.getDimension(R.dimen.elevation_large)
}
} }
override fun onCreateDialog(savedInstanceState: Bundle?) = override fun onCreateDialog(savedInstanceState: Bundle?) =
super.onCreateDialog(savedInstanceState).also { super.onCreateDialog(savedInstanceState).also {
val behavior = (it as? BottomSheetDialog)?.behavior ?: return@also val behavior = (it as? BottomSheetDialog)?.behavior ?: return@also
behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
private val elevation = resources.getDimension(R.dimen.elevation_large)
override fun onSlide(bottomSheet: View, slideOffset: Float) = Unit override fun onSlide(bottomSheet: View, slideOffset: Float) = Unit
override fun onStateChanged(bottomSheet: View, newState: Int) { override fun onStateChanged(bottomSheet: View, newState: Int) = Unit
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
binding.toolbar.isVisible = true
binding.textViewTitle.isVisible = false
binding.appbar.elevation = elevation
} else {
binding.toolbar.isVisible = false
binding.textViewTitle.isVisible = true
binding.appbar.elevation = 0f
}
}
}) })
} }

View File

@@ -9,33 +9,17 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
style="@style/Widget.Kotatsu.Sheet.AppBar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="?android:windowBackground" app:liftOnScroll="true">
android:elevation="0dp"
app:elevation="0dp">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
style="@style/Widget.MaterialComponents.Toolbar.Surface" style="@style/Widget.Kotatsu.Toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:elevation="0dp" app:navigationIcon="@drawable/ic_cross" />
android:outlineProvider="@null"
android:visibility="gone"
app:elevation="0dp"
app:navigationIcon="@drawable/ic_cross"
tools:visibility="visible" />
<TextView
android:id="@+id/textView_title"
style="@style/MaterialAlertDialog.MaterialComponents.Title.Text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:padding="16dp"
android:textColor="?android:textColorSecondary"
tools:visibility="gone" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
@@ -47,6 +31,7 @@
android:padding="@dimen/grid_spacing" android:padding="@dimen/grid_spacing"
android:scrollbars="vertical" android:scrollbars="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
app:spanCount="3" app:spanCount="3"
tools:listitem="@layout/item_page_thumb" /> tools:listitem="@layout/item_page_thumb" />

View File

@@ -9,6 +9,10 @@
<item name="android:elevation">8dp</item> <item name="android:elevation">8dp</item>
</style> </style>
<style name="Widget.Kotatsu.Sheet.AppBar" parent="@style/Widget.Kotatsu.AppBar">
<item name="android:elevation">0dp</item>
</style>
<style name="Widget.Kotatsu.Toolbar" parent="Widget.MaterialComponents.Toolbar"> <style name="Widget.Kotatsu.Toolbar" parent="Widget.MaterialComponents.Toolbar">
<item name="android:paddingEnd">8dp</item> <item name="android:paddingEnd">8dp</item>
<item name="popupTheme">@style/ThemeOverlay.Kotatsu</item> <item name="popupTheme">@style/ThemeOverlay.Kotatsu</item>