RustAssistant/app/src/main/java/com/coldmint/rust/pro/SearchActivity.kt
2022-09-01 16:47:39 +08:00

121 lines
5.4 KiB
Kotlin

package com.coldmint.rust.pro
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import androidx.appcompat.widget.SearchView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import com.coldmint.rust.core.dataBean.HotSearchData
import com.coldmint.rust.core.dataBean.SearchSuggestionsData
import com.coldmint.rust.core.interfaces.ApiCallBack
import com.coldmint.rust.core.web.Search
import com.coldmint.rust.pro.adapters.HotSearchAdapter
import com.coldmint.rust.pro.adapters.SearchSuggestionsAdapter
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.databinding.ActivitySearchBinding
/**
* 搜索界面
*/
class SearchActivity : BaseActivity<ActivitySearchBinding>() {
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
title = getString(R.string.search)
setReturnButton()
viewBinding.recyclerView.layoutManager = LinearLayoutManager(this)
viewBinding.hotSearchView.layoutManager = LinearLayoutManager(this)
loadSearchView()
loadHotSearch()
}
private fun loadHotSearch() {
Search.instance.hotSearch(object : ApiCallBack<HotSearchData> {
override fun onResponse(t: HotSearchData) {
val adapter = HotSearchAdapter(this@SearchActivity, t.data)
adapter.setItemEvent { i, itemHotSearchBinding, viewHolder, data ->
itemHotSearchBinding.root.setOnClickListener {
val intent = Intent(this@SearchActivity, SearchResultActivity::class.java)
intent.putExtra("key", data.keyword)
startActivity(intent)
}
}
viewBinding.hotSearchView.adapter = adapter
}
override fun onFailure(e: Exception) {
}
})
}
private fun loadSearchView() {
viewBinding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener,
android.widget.SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
if (query != null && query.isNotBlank()) {
val intent = Intent(this@SearchActivity, SearchResultActivity::class.java)
intent.putExtra("key", query)
startActivity(intent)
}
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (newText != null && newText.isNotBlank()) {
viewBinding.searchSuggestionsView.setText(R.string.search_suggestions_loading)
Search.instance.suggestions(newText,
object : ApiCallBack<SearchSuggestionsData> {
override fun onResponse(t: SearchSuggestionsData) {
val dataList = t.data
if (dataList.isEmpty()) {
viewBinding.recyclerView.isVisible = false
viewBinding.searchSuggestionsView.setText(R.string.search_suggestions_null)
} else {
val adapter =
SearchSuggestionsAdapter(
this@SearchActivity,
newText,
dataList
)
adapter.setItemEvent { i, itemSearchSuggestionsBinding, viewHolder, s ->
itemSearchSuggestionsBinding.root.setOnClickListener {
val intent = Intent(
this@SearchActivity,
SearchResultActivity::class.java
)
intent.putExtra("key", s)
startActivity(intent)
}
}
viewBinding.recyclerView.adapter = adapter
viewBinding.recyclerView.isVisible = true
val s = String.format(getString(R.string.search_suggestions_number),dataList.size)
viewBinding.searchSuggestionsView.text = s
}
}
override fun onFailure(e: Exception) {
viewBinding.recyclerView.isVisible = false
viewBinding.searchSuggestionsView.setText(R.string.search_suggestions_null)
}
})
} else {
viewBinding.searchSuggestionsView.setText(R.string.search_suggestions_null)
viewBinding.recyclerView.isVisible = false
}
return true
}
})
}
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivitySearchBinding {
return ActivitySearchBinding.inflate(layoutInflater)
}
}