Visual changes to Search

This commit is contained in:
Prathamesh More 2021-09-26 17:09:46 +05:30
parent fb603bc0c5
commit 4054d89f46
6 changed files with 93 additions and 129 deletions

View file

@ -19,6 +19,7 @@ import androidx.lifecycle.*
import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.db.*
import code.name.monkey.retromusic.fragments.ReloadType.*
import code.name.monkey.retromusic.fragments.search.Filter
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener
import code.name.monkey.retromusic.model.*
@ -139,9 +140,9 @@ class LibraryViewModel(
}
}
fun search(query: String?, filters: List<Boolean>) {
fun search(query: String?, filter: Filter) {
viewModelScope.launch(IO) {
val result = repository.search(query, filters)
val result = repository.search(query, filter)
searchResults.postValue(result)
}
}

View file

@ -25,7 +25,7 @@ import android.text.TextWatcher
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.CompoundButton
import androidx.annotation.IdRes
import androidx.core.view.*
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -36,14 +36,17 @@ import code.name.monkey.retromusic.adapter.SearchAdapter
import code.name.monkey.retromusic.databinding.FragmentSearchBinding
import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.views.addAlpha
import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.transition.MaterialSharedAxis
import java.util.*
import kotlin.collections.ArrayList
class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher,
CompoundButton.OnCheckedChangeListener {
ChipGroup.OnCheckedChangeListener {
companion object {
const val QUERY = "query"
const val REQ_CODE_SPEECH_INPUT = 9001
@ -96,27 +99,22 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
private fun setupChips() {
val chips = binding.searchFilterGroup.children.map { it as Chip }
val states = arrayOf(
intArrayOf(-android.R.attr.state_checked),
intArrayOf(android.R.attr.state_checked)
)
if (!PreferenceUtil.materialYou) {
val states = arrayOf(
intArrayOf(-android.R.attr.state_checked),
intArrayOf(android.R.attr.state_checked)
)
val colors = intArrayOf(
android.R.color.transparent,
ThemeStore.accentColor(requireContext())
)
val colors = intArrayOf(
android.R.color.transparent,
ThemeStore.accentColor(requireContext()).addAlpha(0.5F)
)
chips.forEach {
it.chipBackgroundColor = ColorStateList(states, colors)
it.chipIconTint = ColorStateList.valueOf(ThemeStore.textColorPrimary(requireContext()))
it.chipStrokeColor =
ColorStateList.valueOf(ThemeStore.textColorSecondary(requireContext()))
.withAlpha(30)
it.closeIconTint =
ColorStateList.valueOf(ThemeStore.textColorPrimaryInverse(requireContext()))
it.chipStrokeWidth = 2F
it.setOnCheckedChangeListener(this)
chips.forEach {
it.chipBackgroundColor = ColorStateList(states, colors)
}
}
binding.searchFilterGroup.setOnCheckedChangeListener(this)
}
private fun showData(data: List<Any>) {
@ -168,13 +166,18 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
TransitionManager.beginDelayedTransition(binding.appBarLayout)
binding.voiceSearch.isGone = query.isNotEmpty()
binding.clearText.isVisible = query.isNotEmpty()
val filters = getFilters()
libraryViewModel.search(query, filters)
val filter = getFilter()
libraryViewModel.search(query, filter)
}
private fun getFilters(): List<Boolean> {
return binding.searchFilterGroup.children.toList().map {
(it as Chip).isChecked
private fun getFilter(): Filter {
return when (binding.searchFilterGroup.checkedChipId) {
R.id.chip_audio -> Filter.SONGS
R.id.chip_artists -> Filter.ARTISTS
R.id.chip_albums -> Filter.ALBUMS
R.id.chip_album_artists -> Filter.ALBUM_ARTISTS
R.id.chip_genres -> Filter.GENRES
else -> Filter.NO_FILTER
}
}
@ -221,28 +224,20 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
}
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
val checkedChip = (buttonView as Chip)
checkedChip.isCloseIconVisible = isChecked
if (isChecked) {
val color = ThemeStore.textColorPrimaryInverse(requireContext())
checkedChip.apply {
setTextColor(color)
chipIconTint = ColorStateList.valueOf(color)
chipStrokeWidth = 0F
}
} else {
val color = ThemeStore.textColorPrimary(requireContext())
checkedChip.apply {
setTextColor(color)
chipIconTint = ColorStateList.valueOf(color)
chipStrokeWidth = 2F
}
}
override fun onCheckedChanged(group: ChipGroup?, @IdRes checkedId: Int) {
search(binding.searchView.text.toString())
}
}
enum class Filter {
SONGS,
ARTISTS,
ALBUMS,
ALBUM_ARTISTS,
GENRES,
NO_FILTER
}
fun TextInputEditText.clearText() {
text = null
}