|
|
|
@ -1,13 +1,12 @@
|
|
|
|
package org.koitharu.kotatsu.list.ui.filter
|
|
|
|
package org.koitharu.kotatsu.list.ui.filter
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Dialog
|
|
|
|
|
|
|
|
import android.content.DialogInterface
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.*
|
|
|
|
import android.view.View
|
|
|
|
import androidx.appcompat.widget.SearchView
|
|
|
|
import android.view.ViewGroup
|
|
|
|
|
|
|
|
import androidx.core.os.bundleOf
|
|
|
|
import androidx.core.os.bundleOf
|
|
|
|
import androidx.fragment.app.FragmentManager
|
|
|
|
import androidx.fragment.app.FragmentManager
|
|
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
|
|
|
|
|
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
|
|
|
|
|
|
|
import org.koin.androidx.viewmodel.ViewModelOwner.Companion.from
|
|
|
|
import org.koin.androidx.viewmodel.ViewModelOwner.Companion.from
|
|
|
|
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
|
|
|
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
|
|
|
import org.koin.core.parameter.parametersOf
|
|
|
|
import org.koin.core.parameter.parametersOf
|
|
|
|
@ -15,9 +14,11 @@ import org.koitharu.kotatsu.R
|
|
|
|
import org.koitharu.kotatsu.base.ui.BaseBottomSheet
|
|
|
|
import org.koitharu.kotatsu.base.ui.BaseBottomSheet
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaSource
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaSource
|
|
|
|
import org.koitharu.kotatsu.databinding.SheetFilterBinding
|
|
|
|
import org.koitharu.kotatsu.databinding.SheetFilterBinding
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.utils.BottomSheetToolbarController
|
|
|
|
import org.koitharu.kotatsu.utils.ext.withArgs
|
|
|
|
import org.koitharu.kotatsu.utils.ext.withArgs
|
|
|
|
|
|
|
|
|
|
|
|
class FilterBottomSheet : BaseBottomSheet<SheetFilterBinding>() {
|
|
|
|
class FilterBottomSheet : BaseBottomSheet<SheetFilterBinding>(), MenuItem.OnActionExpandListener,
|
|
|
|
|
|
|
|
SearchView.OnQueryTextListener, DialogInterface.OnKeyListener {
|
|
|
|
|
|
|
|
|
|
|
|
private val viewModel by sharedViewModel<FilterViewModel>(
|
|
|
|
private val viewModel by sharedViewModel<FilterViewModel>(
|
|
|
|
owner = { from(requireParentFragment(), requireParentFragment()) }
|
|
|
|
owner = { from(requireParentFragment(), requireParentFragment()) }
|
|
|
|
@ -33,6 +34,12 @@ class FilterBottomSheet : BaseBottomSheet<SheetFilterBinding>() {
|
|
|
|
viewModel.updateState(state)
|
|
|
|
viewModel.updateState(state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
|
|
|
|
|
|
|
return super.onCreateDialog(savedInstanceState).also {
|
|
|
|
|
|
|
|
it.setOnKeyListener(this)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): SheetFilterBinding {
|
|
|
|
override fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): SheetFilterBinding {
|
|
|
|
return SheetFilterBinding.inflate(inflater, container, false)
|
|
|
|
return SheetFilterBinding.inflate(inflater, container, false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -40,6 +47,7 @@ class FilterBottomSheet : BaseBottomSheet<SheetFilterBinding>() {
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
binding.toolbar.setNavigationOnClickListener { dismiss() }
|
|
|
|
binding.toolbar.setNavigationOnClickListener { dismiss() }
|
|
|
|
|
|
|
|
behavior?.addBottomSheetCallback(BottomSheetToolbarController(binding.toolbar))
|
|
|
|
if (!resources.getBoolean(R.bool.is_tablet)) {
|
|
|
|
if (!resources.getBoolean(R.bool.is_tablet)) {
|
|
|
|
binding.toolbar.navigationIcon = null
|
|
|
|
binding.toolbar.navigationIcon = null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -49,24 +57,49 @@ class FilterBottomSheet : BaseBottomSheet<SheetFilterBinding>() {
|
|
|
|
viewModel.result.observe(viewLifecycleOwner) {
|
|
|
|
viewModel.result.observe(viewLifecycleOwner) {
|
|
|
|
parentFragmentManager.setFragmentResult(REQUEST_KEY, bundleOf(ARG_STATE to it))
|
|
|
|
parentFragmentManager.setFragmentResult(REQUEST_KEY, bundleOf(ARG_STATE to it))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
initOptionsMenu()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
|
|
|
|
|
|
|
|
setExpanded(isExpanded = true, isLocked = true)
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
|
|
|
|
|
|
|
val searchView = (item.actionView as? SearchView) ?: return false
|
|
|
|
|
|
|
|
searchView.setQuery("", false)
|
|
|
|
|
|
|
|
searchView.post { setExpanded(isExpanded = false, isLocked = false) }
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onCreateDialog(savedInstanceState: Bundle?) = super.onCreateDialog(savedInstanceState).also {
|
|
|
|
override fun onQueryTextSubmit(query: String?): Boolean = false
|
|
|
|
val behavior = (it as? BottomSheetDialog)?.behavior ?: return@also
|
|
|
|
|
|
|
|
behavior.addBottomSheetCallback(
|
|
|
|
|
|
|
|
object : BottomSheetBehavior.BottomSheetCallback() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onSlide(bottomSheet: View, slideOffset: Float) = Unit
|
|
|
|
override fun onQueryTextChange(newText: String?): Boolean {
|
|
|
|
|
|
|
|
viewModel.performSearch(newText?.trim().orEmpty())
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
|
|
|
override fun onKey(dialog: DialogInterface?, keyCode: Int, event: KeyEvent?): Boolean {
|
|
|
|
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
|
|
|
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
|
|
|
binding.toolbar.setNavigationIcon(R.drawable.ic_cross)
|
|
|
|
val menuItem = binding.toolbar.menu.findItem(R.id.action_search) ?: return false
|
|
|
|
} else {
|
|
|
|
if (menuItem.isActionViewExpanded) {
|
|
|
|
binding.toolbar.navigationIcon = null
|
|
|
|
if (event?.action == KeyEvent.ACTION_UP) {
|
|
|
|
}
|
|
|
|
menuItem.collapseActionView()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun initOptionsMenu() {
|
|
|
|
|
|
|
|
binding.toolbar.inflateMenu(R.menu.opt_filter)
|
|
|
|
|
|
|
|
val searchMenuItem = binding.toolbar.menu.findItem(R.id.action_search)
|
|
|
|
|
|
|
|
searchMenuItem.setOnActionExpandListener(this)
|
|
|
|
|
|
|
|
val searchView = searchMenuItem.actionView as SearchView
|
|
|
|
|
|
|
|
searchView.setOnQueryTextListener(this)
|
|
|
|
|
|
|
|
searchView.setIconifiedByDefault(false)
|
|
|
|
|
|
|
|
searchView.queryHint = searchMenuItem.title
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
companion object {
|
|
|
|
|