komikku/app/src/main/java/exh/recs/batch/RecommendationSearchBottomSheetDialog.kt

66 lines
2.7 KiB
Kotlin
Raw Normal View History

package exh.recs.batch
import android.view.LayoutInflater
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import eu.kanade.presentation.components.AdaptiveSheet
import eu.kanade.tachiyomi.databinding.RecommendationSearchBottomSheetBinding
import tachiyomi.domain.UnsortedPreferences
import uy.kohesive.injekt.injectLazy
@Composable
fun RecommendationSearchBottomSheetDialog(
onDismissRequest: () -> Unit,
onSearchRequest: () -> Unit,
) {
val state = remember { RecommendationSearchBottomSheetDialogState(onSearchRequest) }
AdaptiveSheet(onDismissRequest = onDismissRequest) {
AndroidView(
factory = { factoryContext ->
val binding = RecommendationSearchBottomSheetBinding.inflate(LayoutInflater.from(factoryContext))
state.initPreferences(binding)
binding.root
},
modifier = Modifier.fillMaxWidth(),
)
}
}
class RecommendationSearchBottomSheetDialogState(private val onSearchRequest: () -> Unit) {
private val preferences: UnsortedPreferences by injectLazy()
fun initPreferences(binding: RecommendationSearchBottomSheetBinding) {
val flags = preferences.recommendationSearchFlags().get()
binding.recSources.isChecked = SearchFlags.hasIncludeSources(flags)
binding.recTrackers.isChecked = SearchFlags.hasIncludeTrackers(flags)
binding.recHideLibraryEntries.isChecked = SearchFlags.hasHideLibraryResults(flags)
binding.recSources.setOnCheckedChangeListener { _, _ -> setFlags(binding) }
binding.recTrackers.setOnCheckedChangeListener { _, _ -> setFlags(binding) }
binding.recHideLibraryEntries.setOnCheckedChangeListener { _, _ -> setFlags(binding) }
binding.recSearchBtn.setOnClickListener { _ -> onSearchRequest() }
validate(binding)
}
private fun setFlags(binding: RecommendationSearchBottomSheetBinding) {
var flags = 0
if (binding.recSources.isChecked) flags = flags or SearchFlags.INCLUDE_SOURCES
if (binding.recTrackers.isChecked) flags = flags or SearchFlags.INCLUDE_TRACKERS
if (binding.recHideLibraryEntries.isChecked) flags = flags or SearchFlags.HIDE_LIBRARY_RESULTS
preferences.recommendationSearchFlags().set(flags)
validate(binding)
}
private fun validate(binding: RecommendationSearchBottomSheetBinding) {
// Only enable search button if at least one of the checkboxes is checked
binding.recSearchBtn.isEnabled = binding.recSources.isChecked || binding.recTrackers.isChecked
}
}