feat(filter): revamping search for anime and manga (#272)
* feat: revamping search filter part1 * fix: sortBy dropdown now also calls search instead of only updating image * feat: added longclick listener to reset and apply + cleaned up code * feat: status filter fully functional * chore: upgrade AGP to 8.3.1 * fix: splitted status list and cleaned up * fix(search): underscore * feat: attempt to add backend for countryOfOrigin filter * fix: countryOfOrigin query and gradle * feat: source filter fully functional * fix(source): underscore * feat: swap source with status * fix: add searchSource to reset fun * fix: clear underline after reopening bottom sheet * chore: remove unnecessary declaration * feat: add global to countryOfOrigin dropdown * feat: floating cancel and apply button * fix: added searchStatus and searchYear back to manga filter * feat: desperate attempt for manga year filter * feat(sortBy): added new releases item * fix: year filter --------- Co-authored-by: aayush262 <aayushthakur262006@gmail.com>
This commit is contained in:
parent
aabbe9198a
commit
146805af49
28 changed files with 971 additions and 333 deletions
|
@ -13,6 +13,8 @@ import android.view.animation.AlphaAnimation
|
|||
import android.view.animation.Animation
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.ImageView
|
||||
import android.widget.PopupMenu
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
|
@ -45,6 +47,19 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
private lateinit var searchHistoryAdapter: SearchHistoryAdapter
|
||||
private lateinit var binding: ItemSearchHeaderBinding
|
||||
|
||||
private fun updateFilterTextViewDrawable() {
|
||||
val filterDrawable = when (activity.result.sort) {
|
||||
Anilist.sortBy[0] -> R.drawable.ic_round_area_chart_24
|
||||
Anilist.sortBy[1] -> R.drawable.ic_round_filter_peak_24
|
||||
Anilist.sortBy[2] -> R.drawable.ic_round_star_graph_24
|
||||
Anilist.sortBy[3] -> R.drawable.ic_round_new_releases_24
|
||||
Anilist.sortBy[4] -> R.drawable.ic_round_filter_list_24
|
||||
Anilist.sortBy[5] -> R.drawable.ic_round_filter_list_24_reverse
|
||||
Anilist.sortBy[6] -> R.drawable.ic_round_assist_walker_24
|
||||
else -> R.drawable.ic_round_filter_alt_24
|
||||
}
|
||||
binding.filterTextView.setCompoundDrawablesWithIntrinsicBounds(filterDrawable, 0, 0, 0)
|
||||
}
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchHeaderViewHolder {
|
||||
val binding =
|
||||
ItemSearchHeaderBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
|
@ -93,7 +108,7 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
binding.searchAdultCheck.isChecked = adult
|
||||
binding.searchList.isChecked = listOnly == true
|
||||
|
||||
binding.searchChipRecycler.adapter = SearchChipAdapter(activity).also {
|
||||
binding.searchChipRecycler.adapter = SearchChipAdapter(activity, this).also {
|
||||
activity.updateChips = { it.update() }
|
||||
}
|
||||
|
||||
|
@ -103,6 +118,59 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
binding.searchFilter.setOnClickListener {
|
||||
SearchFilterBottomDialog.newInstance().show(activity.supportFragmentManager, "dialog")
|
||||
}
|
||||
binding.searchFilter.setOnLongClickListener {
|
||||
val popupMenu = PopupMenu(activity, binding.searchFilter)
|
||||
popupMenu.menuInflater.inflate(R.menu.sortby_filter_menu, popupMenu.menu)
|
||||
popupMenu.setOnMenuItemClickListener { item ->
|
||||
when (item.itemId) {
|
||||
R.id.sort_by_score -> {
|
||||
activity.result.sort = Anilist.sortBy[0]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_popular -> {
|
||||
activity.result.sort = Anilist.sortBy[1]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_trending -> {
|
||||
activity.result.sort = Anilist.sortBy[2]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_recent -> {
|
||||
activity.result.sort = Anilist.sortBy[3]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_a_z -> {
|
||||
activity.result.sort = Anilist.sortBy[4]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_z_a -> {
|
||||
activity.result.sort = Anilist.sortBy[5]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
R.id.sort_by_pure_pain -> {
|
||||
activity.result.sort = Anilist.sortBy[6]
|
||||
activity.updateChips.invoke()
|
||||
activity.search()
|
||||
updateFilterTextViewDrawable()
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
popupMenu.show()
|
||||
true
|
||||
}
|
||||
binding.searchByImage.setOnClickListener {
|
||||
activity.startActivity(Intent(activity, ImageSearchActivity::class.java))
|
||||
}
|
||||
|
@ -257,7 +325,7 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
}
|
||||
|
||||
|
||||
class SearchChipAdapter(val activity: SearchActivity) :
|
||||
class SearchChipAdapter(val activity: SearchActivity, private val searchAdapter: SearchAdapter) :
|
||||
RecyclerView.Adapter<SearchChipAdapter.SearchChipViewHolder>() {
|
||||
private var chips = activity.result.toChipList()
|
||||
|
||||
|
@ -274,11 +342,12 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
override fun onBindViewHolder(holder: SearchChipViewHolder, position: Int) {
|
||||
val chip = chips[position]
|
||||
holder.binding.root.apply {
|
||||
text = chip.text
|
||||
text = chip.text.replace("_", " ")
|
||||
setOnClickListener {
|
||||
activity.result.removeChip(chip)
|
||||
update()
|
||||
activity.search()
|
||||
searchAdapter.updateFilterTextViewDrawable()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -287,6 +356,7 @@ class SearchAdapter(private val activity: SearchActivity, private val type: Stri
|
|||
fun update() {
|
||||
chips = activity.result.toChipList()
|
||||
notifyDataSetChanged()
|
||||
searchAdapter.updateFilterTextViewDrawable()
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = chips.size
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue