diff --git a/core/src/main/kotlin/com/melih/core/extensions/UtilityExtension.kt b/core/src/main/kotlin/com/melih/core/extensions/UtilityExtension.kt index 4413e8a..0b69ae2 100644 --- a/core/src/main/kotlin/com/melih/core/extensions/UtilityExtension.kt +++ b/core/src/main/kotlin/com/melih/core/extensions/UtilityExtension.kt @@ -1,3 +1,11 @@ package com.melih.core.extensions +import androidx.appcompat.widget.SearchView +import com.melih.core.utils.ClearFocusQueryTextListener + +/** + * Shorthand for [contains] with ignoreCase set [true] + */ fun CharSequence.containsIgnoreCase(other: CharSequence) = contains(other, true) + +fun SearchView.setOnQueryChangedListener(block: (String?) -> Unit) = setOnQueryTextListener(ClearFocusQueryTextListener(this, block)) diff --git a/core/src/main/kotlin/com/melih/core/utils/ClearFocusQueryTextListener.kt b/core/src/main/kotlin/com/melih/core/utils/ClearFocusQueryTextListener.kt new file mode 100644 index 0000000..16ad6a2 --- /dev/null +++ b/core/src/main/kotlin/com/melih/core/utils/ClearFocusQueryTextListener.kt @@ -0,0 +1,23 @@ +package com.melih.core.utils + +import androidx.appcompat.widget.SearchView + + +/** + * Simplifying [OnQueryTextListener][android.widget.SearchView.OnQueryTextListener] + */ +class ClearFocusQueryTextListener( + private val view: SearchView, + private val onQueryChangeBlock: (String?) -> Unit +) : SearchView.OnQueryTextListener { + + override fun onQueryTextSubmit(query: String?): Boolean { + view.clearFocus() + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + onQueryChangeBlock(newText) + return true + } +} diff --git a/features/list/src/main/kotlin/com/melih/list/ui/LaunchesFragment.kt b/features/list/src/main/kotlin/com/melih/list/ui/LaunchesFragment.kt index c3e8a65..f7900e2 100644 --- a/features/list/src/main/kotlin/com/melih/list/ui/LaunchesFragment.kt +++ b/features/list/src/main/kotlin/com/melih/list/ui/LaunchesFragment.kt @@ -11,6 +11,7 @@ import com.melih.core.base.lifecycle.BaseDaggerFragment import com.melih.core.extensions.containsIgnoreCase import com.melih.core.extensions.createFor import com.melih.core.extensions.observe +import com.melih.core.extensions.setOnQueryChangedListener import com.melih.list.R import com.melih.list.databinding.ListBinding import com.melih.repository.entities.LaunchEntity @@ -44,22 +45,7 @@ class LaunchesFragment : BaseDaggerFragment(), SwipeRefreshLayout.O override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.menu_rocket_list, menu) - - (menu.findItem(R.id.search).actionView as SearchView).apply { - setOnQueryTextListener(object : SearchView.OnQueryTextListener { - - override fun onQueryTextSubmit(query: String?): Boolean { - clearFocus() - return true - } - - override fun onQueryTextChange(newText: String?): Boolean { - launchesAdapter.submitList(filterItemListBy(newText)) - return true - } - }) - } - + setSearchQueryListener((menu.findItem(R.id.search).actionView as SearchView)) super.onCreateOptionsMenu(menu, inflater) } @@ -89,6 +75,12 @@ class LaunchesFragment : BaseDaggerFragment(), SwipeRefreshLayout.O startActivity(Actions.openDetailFor(item.id)) } + private fun setSearchQueryListener(searchView: SearchView) { + searchView.setOnQueryChangedListener { + filterItemListBy(it) + } + } + private fun filterItemListBy(query: String?) = if (!query.isNullOrBlank()) { itemList.filter {