Suggestion

This commit is contained in:
tom5079
2020-12-02 09:57:16 +09:00
parent 26c5e07f04
commit 730a3baedc
17 changed files with 227 additions and 241 deletions

View File

@@ -22,9 +22,10 @@ import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import kotlinx.coroutines.channels.Channel
import kotlinx.parcelize.Parcelize
import xyz.quaver.floatingsearchview.databinding.SearchSuggestionItemBinding
import xyz.quaver.floatingsearchview.suggestions.model.SearchSuggestion
import xyz.quaver.pupil.R
import xyz.quaver.pupil.sources.hitomi.Hitomi
import xyz.quaver.pupil.sources.hitomi.Hiyobi
data class SearchResult(
val id: String,
@@ -56,15 +57,24 @@ data class SearchResult(
enum class DefaultSortMode {
DEFAULT
}
interface Source<Query_SortMode : Enum<Query_SortMode>> {
val name: String
val iconResID: Int
val availableSortMode: Array<Query_SortMode>
suspend fun query(query: String, range: IntRange, sortMode: Enum<*>) : Pair<Channel<SearchResult>, Int>
@Parcelize
class DefaultSearchSuggestion(override val body: String) : SearchSuggestion
abstract class Source<Query_SortMode: Enum<Query_SortMode>, Suggestion: SearchSuggestion> {
abstract val name: String
abstract val iconResID: Int
abstract val availableSortMode: Array<Query_SortMode>
abstract suspend fun search(query: String, range: IntRange, sortMode: Enum<*>) : Pair<Channel<SearchResult>, Int>
abstract suspend fun suggestion(query: String) : List<Suggestion>
open fun onSuggestionBind(binding: SearchSuggestionItemBinding, item: Suggestion) {
binding.leftIcon.setImageResource(R.drawable.tag)
}
}
val sources = mutableMapOf<String, Source<*>>()
val sources = mutableMapOf<String, Source<*, SearchSuggestion>>()
val sourceIcons = mutableMapOf<String, Drawable?>()
@Suppress("UNCHECKED_CAST")
@@ -73,8 +83,8 @@ fun initSources(context: Context) {
listOf(
Hitomi(),
Hiyobi()
).forEach {
sources[it.name] = it
).forEach {
sources[it.name] = it as Source<*, SearchSuggestion>
sourceIcons[it.name] = ContextCompat.getDrawable(context, it.iconResID)
}
}