Skip to content

Commit f78eec3

Browse files
committed
Fix AutoComplete filter crash, dark mode, and live chip updates
- BrowseSourceController: check `sourceFilter is Filter.Group` instead of `filter is List<*>` when comparing old vs new filter state; the old check matched Filter.AutoComplete (state is List<String>) and tried to cast it to Filter.Group, causing ClassCastException on Search button click - AutoCompleteItem: replace bare MaterialTheme with YokaiTheme so the autocomplete/select UI inherits the app's dark/light color scheme via createMdc3Theme instead of always rendering light - AutoCompleteContent: add local `var chips by remember(initialState)` so added/removed tags render immediately as chips without needing to close and reopen the filter sheet
1 parent f2690b9 commit f78eec3

2 files changed

Lines changed: 21 additions & 9 deletions

File tree

app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -412,13 +412,14 @@ open class BrowseSourceController(bundle: Bundle) :
412412
var matches = true
413413
for (i in presenter.sourceFilters.indices) {
414414
val filter = oldFilters.getOrNull(i)
415-
if (filter is List<*>) {
415+
val sourceFilter = presenter.sourceFilters[i]
416+
if (sourceFilter is Filter.Group<*> && filter is List<*>) {
416417
for (j in filter.indices) {
417-
if (filter[j] != ((presenter.sourceFilters[i] as Filter.Group<*>).state[j] as Filter<*>).state) {
418+
if (filter[j] != (sourceFilter.state[j] as Filter<*>).state) {
418419
matches = false; break
419420
}
420421
}
421-
} else if (filter != presenter.sourceFilters[i].state) { matches = false; break }
422+
} else if (filter != sourceFilter.state) { matches = false; break }
422423
if (!matches) break
423424
}
424425
if (!matches) { applyFilters() }

app/src/main/java/eu/kanade/tachiyomi/ui/source/filter/AutoCompleteItem.kt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.compose.runtime.setValue
3131
import androidx.compose.ui.Modifier
3232
import androidx.compose.ui.platform.ComposeView
3333
import androidx.compose.ui.platform.LocalFocusManager
34+
import yokai.presentation.theme.YokaiTheme
3435
import androidx.compose.ui.text.TextRange
3536
import androidx.compose.ui.text.input.ImeAction
3637
import androidx.compose.ui.text.input.TextFieldValue
@@ -72,11 +73,11 @@ class AutoCompleteItem(val filter: Filter.AutoComplete) : AbstractFlexibleItem<A
7273
payloads: MutableList<Any?>?,
7374
) {
7475
(holder.itemView as ComposeView).setContent {
75-
MaterialTheme {
76+
YokaiTheme {
7677
AutoCompleteContent(
7778
name = filter.name,
7879
hint = filter.hint,
79-
state = filter.state.toImmutableList(),
80+
initialState = filter.state.toImmutableList(),
8081
values = filter.values.toImmutableList(),
8182
skipAutoFillTags = filter.skipAutoFillTags.toImmutableList(),
8283
validPrefixes = filter.validPrefixes.toImmutableList(),
@@ -102,12 +103,16 @@ class AutoCompleteItem(val filter: Filter.AutoComplete) : AbstractFlexibleItem<A
102103
private fun AutoCompleteContent(
103104
name: String,
104105
hint: String,
105-
state: ImmutableList<String>,
106+
initialState: ImmutableList<String>,
106107
values: ImmutableList<String>,
107108
skipAutoFillTags: ImmutableList<String>,
108109
validPrefixes: ImmutableList<String>,
109110
onChange: (List<String>) -> Unit,
110111
) {
112+
// Local reactive state so chips update immediately on add/remove.
113+
// `remember(initialState)` resets when the sheet is reset from outside.
114+
var chips by remember(initialState) { mutableStateOf(initialState) }
115+
111116
Column(
112117
Modifier
113118
.fillMaxWidth()
@@ -125,7 +130,9 @@ private fun AutoCompleteContent(
125130
onSubmit = { tag ->
126131
val tagNoPrefix = validPrefixes.find { tag.startsWith(it) }?.let { tag.removePrefix(it).trim() } ?: tag
127132
if (tagNoPrefix !in skipAutoFillTags) {
128-
onChange(state + tag)
133+
val newState = (chips + tag).toImmutableList()
134+
chips = newState
135+
onChange(newState)
129136
true
130137
} else {
131138
false
@@ -136,10 +143,14 @@ private fun AutoCompleteContent(
136143
modifier = Modifier.padding(end = 8.dp),
137144
horizontalArrangement = Arrangement.spacedBy(4.dp),
138145
) {
139-
state.forEach {
146+
chips.forEach {
140147
InputChip(
141148
selected = false,
142-
onClick = { onChange(state - it) },
149+
onClick = {
150+
val newState = (chips - it).toImmutableList()
151+
chips = newState
152+
onChange(newState)
153+
},
143154
label = {
144155
Text(
145156
text = it,

0 commit comments

Comments
 (0)