Lets see how many more we can add (we're up to 6 if you're keeping score)pull/3117/head
parent
ba30882291
commit
6a22c18fab
@ -0,0 +1,119 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.catalogue.browse
|
||||||
|
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
|
import android.animation.ValueAnimator
|
||||||
|
import android.app.Activity
|
||||||
|
import android.os.Build
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
|
import eu.kanade.tachiyomi.R
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
|
import eu.kanade.tachiyomi.util.view.setEdgeToEdge
|
||||||
|
import kotlinx.android.synthetic.main.catalogue_drawer_content.*
|
||||||
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
|
||||||
|
class CatalogueSearchSheet(private val activity: Activity) :
|
||||||
|
BottomSheetDialog(activity, R.style.BottomSheetDialogThemeCovered) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preferences helper.
|
||||||
|
*/
|
||||||
|
private val preferences by injectLazy<PreferencesHelper>()
|
||||||
|
|
||||||
|
private var sheetBehavior: BottomSheetBehavior<*>
|
||||||
|
|
||||||
|
private var elevationAnimator: ValueAnimator? = null
|
||||||
|
|
||||||
|
var filterChanged = true
|
||||||
|
|
||||||
|
var isNotElevated = false
|
||||||
|
|
||||||
|
val adapter: FlexibleAdapter<IFlexible<*>> = FlexibleAdapter<IFlexible<*>>(null)
|
||||||
|
.setDisplayHeadersAtStartUp(true)
|
||||||
|
|
||||||
|
var onSearchClicked = {}
|
||||||
|
|
||||||
|
var onResetClicked = {}
|
||||||
|
|
||||||
|
init {
|
||||||
|
val view = activity.layoutInflater.inflate(R.layout.catalogue_drawer_content, null)
|
||||||
|
setContentView(view)
|
||||||
|
toolbar_title.text = context.getString(R.string.source_search_options)
|
||||||
|
dismiss_button.setOnClickListener { dismiss() }
|
||||||
|
reset_btn.setOnClickListener { onResetClicked() }
|
||||||
|
/*view.search_layout.setOnApplyWindowInsetsListener { v, insets ->
|
||||||
|
view.updatePaddingRelative(bottom = insets.systemWindowInsetBottom)
|
||||||
|
insets
|
||||||
|
}*/
|
||||||
|
|
||||||
|
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
|
||||||
|
recycler.clipToPadding = false
|
||||||
|
recycler.adapter = adapter
|
||||||
|
recycler.setHasFixedSize(true)
|
||||||
|
sheetBehavior = BottomSheetBehavior.from(view.parent as ViewGroup)
|
||||||
|
sheetBehavior.skipCollapsed = true
|
||||||
|
sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
|
||||||
|
setEdgeToEdge(
|
||||||
|
activity, recycler, view, 50.dpToPx
|
||||||
|
)
|
||||||
|
// window?.findViewById<View>(com.google.android.material.R.id.container)?.fitsSystemWindows =
|
||||||
|
// false
|
||||||
|
window?.navigationBarColor = activity.window.navigationBarColor
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && preferences.readerTheme()
|
||||||
|
.getOrDefault() == 0 && activity.window.decorView.rootWindowInsets.systemWindowInsetRight == 0 && activity.window.decorView.rootWindowInsets.systemWindowInsetLeft == 0
|
||||||
|
) window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
|
||||||
|
val height = activity.window.decorView.rootWindowInsets.systemWindowInsetBottom
|
||||||
|
|
||||||
|
sheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
||||||
|
override fun onSlide(bottomSheet: View, progress: Float) {}
|
||||||
|
|
||||||
|
override fun onStateChanged(p0: View, state: Int) {
|
||||||
|
if (state == BottomSheetBehavior.STATE_EXPANDED) {
|
||||||
|
sheetBehavior.skipCollapsed = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
recycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy)
|
||||||
|
val atTop = !recycler.canScrollVertically(-1)
|
||||||
|
if (atTop != isNotElevated) {
|
||||||
|
elevationAnimator?.cancel()
|
||||||
|
isNotElevated = atTop
|
||||||
|
elevationAnimator?.cancel()
|
||||||
|
elevationAnimator = ObjectAnimator.ofFloat(
|
||||||
|
title_layout,
|
||||||
|
"elevation",
|
||||||
|
title_layout.elevation,
|
||||||
|
if (atTop) 0f else 10f.dpToPx
|
||||||
|
)
|
||||||
|
elevationAnimator?.duration = 100
|
||||||
|
elevationAnimator?.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun dismiss() {
|
||||||
|
super.dismiss()
|
||||||
|
if (filterChanged)
|
||||||
|
onSearchClicked()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setFilters(items: List<IFlexible<*>>) {
|
||||||
|
adapter.updateDataSet(items)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners
|
||||||
|
android:topLeftRadius="14dp"
|
||||||
|
android:topRightRadius="14dp" />
|
||||||
|
<solid android:color="?android:attr/statusBarColor" />
|
||||||
|
</shape>
|
@ -1,75 +1,68 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
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"
|
||||||
android:clickable="true"
|
android:background="@drawable/bg_bottom_sheet_primary"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/title_background"
|
android:id="@+id/recycler"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/listPreferredItemHeightSmall"
|
android:layout_height="match_parent"
|
||||||
android:background="?colorPrimary"
|
android:layout_marginTop="?attr/actionBarSize"
|
||||||
android:elevation="2dp"
|
android:clipToPadding="false"
|
||||||
android:gravity="center_vertical"
|
android:fitsSystemWindows="true" />
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingStart="?attr/listPreferredItemPaddingStart"
|
|
||||||
android:paddingEnd="?attr/listPreferredItemPaddingEnd">
|
|
||||||
|
|
||||||
<TextView
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/title"
|
android:id="@+id/title_layout"
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:maxLines="1"
|
|
||||||
tools:text="Title"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
|
|
||||||
android:textColor="?attr/actionBarTintColor"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="3"
|
|
||||||
android:layout_gravity="top"/>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/divider"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="?android:attr/divider"/>
|
android:layout_gravity="top"
|
||||||
|
android:background="@drawable/bg_bottom_sheet_primary"
|
||||||
|
android:clickable="true"
|
||||||
|
android:elevation="0dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/search_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="0"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
tools:paddingBottom="20dp">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/reset_btn"
|
android:id="@+id/reset_btn"
|
||||||
style="@style/Theme.Widget.Button.Borderless"
|
style="@style/Theme.Widget.Button.TextButton"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:text="@string/action_reset"
|
||||||
android:text="@string/action_reset"/>
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<Button
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/search_btn"
|
android:id="@+id/toolbar_title"
|
||||||
style="@style/Theme.Widget.Button.Colored"
|
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textColor="@android:color/white"
|
android:layout_gravity="center"
|
||||||
android:layout_weight="1"
|
android:ellipsize="end"
|
||||||
android:text="@string/action_search"/>
|
android:maxLines="1"
|
||||||
|
android:textColor="?actionBarTintColor"
|
||||||
</LinearLayout>
|
android:textSize="20sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="Title Text" />
|
||||||
|
|
||||||
</LinearLayout>
|
<ImageView
|
||||||
|
android:id="@+id/dismiss_button"
|
||||||
|
style="@style/Theme.Widget.CustomImageButton"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:layout_marginEnd="12dp"
|
||||||
|
android:src="@drawable/ic_expand_more_white_24dp"
|
||||||
|
android:tint="?android:attr/textColorPrimary"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
</FrameLayout>
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<eu.kanade.tachiyomi.ui.catalogue.browse.CatalogueSearchSheet xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/diplay_bottom_sheet"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
</eu.kanade.tachiyomi.ui.catalogue.browse.CatalogueSearchSheet>
|
Loading…
Reference in new issue