66 lines
2.7 KiB
Kotlin
66 lines
2.7 KiB
Kotlin
|
|
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
|
||
|
|
}
|
||
|
|
}
|