Move CheckboxState to core module
This commit is contained in:
parent
779df32e98
commit
fd7c993b0b
@ -1,55 +1,12 @@
|
|||||||
package eu.kanade.core.prefs
|
package eu.kanade.core.prefs
|
||||||
|
|
||||||
import androidx.compose.ui.state.ToggleableState
|
import androidx.compose.ui.state.ToggleableState
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
|
|
||||||
sealed class CheckboxState<T>(open val value: T) {
|
fun <T> CheckboxState.TriState<T>.asState(): ToggleableState {
|
||||||
abstract fun next(): CheckboxState<T>
|
return when (this) {
|
||||||
|
is CheckboxState.TriState.Exclude -> ToggleableState.Indeterminate
|
||||||
sealed class State<T>(override val value: T) : CheckboxState<T>(value) {
|
is CheckboxState.TriState.Include -> ToggleableState.On
|
||||||
data class Checked<T>(override val value: T) : State<T>(value)
|
is CheckboxState.TriState.None -> ToggleableState.Off
|
||||||
data class None<T>(override val value: T) : State<T>(value)
|
|
||||||
|
|
||||||
val isChecked: Boolean
|
|
||||||
get() = this is Checked
|
|
||||||
|
|
||||||
override fun next(): CheckboxState<T> {
|
|
||||||
return when (this) {
|
|
||||||
is Checked -> None(value)
|
|
||||||
is None -> Checked(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sealed class TriState<T>(override val value: T) : CheckboxState<T>(value) {
|
|
||||||
data class Include<T>(override val value: T) : TriState<T>(value)
|
|
||||||
data class Exclude<T>(override val value: T) : TriState<T>(value)
|
|
||||||
data class None<T>(override val value: T) : TriState<T>(value)
|
|
||||||
|
|
||||||
override fun next(): CheckboxState<T> {
|
|
||||||
return when (this) {
|
|
||||||
is Exclude -> None(value)
|
|
||||||
is Include -> Exclude(value)
|
|
||||||
is None -> Include(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun asState(): ToggleableState {
|
|
||||||
return when (this) {
|
|
||||||
is Exclude -> ToggleableState.Indeterminate
|
|
||||||
is Include -> ToggleableState.On
|
|
||||||
is None -> ToggleableState.Off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <T> T.asCheckboxState(condition: (T) -> Boolean): CheckboxState.State<T> {
|
|
||||||
return if (condition(this)) {
|
|
||||||
CheckboxState.State.Checked(this)
|
|
||||||
} else {
|
|
||||||
CheckboxState.State.None(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <T> List<T>.mapAsCheckboxState(condition: (T) -> Boolean): List<CheckboxState.State<T>> {
|
|
||||||
return this.map { it.asCheckboxState(condition) }
|
|
||||||
}
|
|
||||||
|
@ -21,8 +21,9 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.core.prefs.CheckboxState
|
import eu.kanade.core.prefs.asState
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.presentation.core.components.material.TextButton
|
import tachiyomi.presentation.core.components.material.TextButton
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
|
@ -16,8 +16,8 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.core.prefs.CheckboxState
|
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DeleteLibraryMangaDialog(
|
fun DeleteLibraryMangaDialog(
|
||||||
|
@ -13,11 +13,11 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import eu.kanade.core.util.toDurationString
|
|
||||||
import eu.kanade.presentation.more.stats.components.StatsItem
|
import eu.kanade.presentation.more.stats.components.StatsItem
|
||||||
import eu.kanade.presentation.more.stats.components.StatsOverviewItem
|
import eu.kanade.presentation.more.stats.components.StatsOverviewItem
|
||||||
import eu.kanade.presentation.more.stats.components.StatsSection
|
import eu.kanade.presentation.more.stats.components.StatsSection
|
||||||
import eu.kanade.presentation.more.stats.data.StatsData
|
import eu.kanade.presentation.more.stats.data.StatsData
|
||||||
|
import eu.kanade.presentation.util.toDurationString
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import tachiyomi.presentation.core.components.LazyColumn
|
import tachiyomi.presentation.core.components.LazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package eu.kanade.core.util
|
package eu.kanade.presentation.util
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
@ -15,9 +15,7 @@ import androidx.paging.map
|
|||||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||||
import cafe.adriel.voyager.core.model.coroutineScope
|
import cafe.adriel.voyager.core.model.coroutineScope
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.kanade.core.prefs.CheckboxState
|
|
||||||
import eu.kanade.core.prefs.asState
|
import eu.kanade.core.prefs.asState
|
||||||
import eu.kanade.core.prefs.mapAsCheckboxState
|
|
||||||
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
|
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
|
||||||
import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
|
import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
|
||||||
import eu.kanade.domain.library.service.LibraryPreferences
|
import eu.kanade.domain.library.service.LibraryPreferences
|
||||||
@ -60,6 +58,8 @@ import kotlinx.coroutines.flow.stateIn
|
|||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
|
import tachiyomi.core.preference.mapAsCheckboxState
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
import tachiyomi.core.util.lang.withNonCancellableContext
|
import tachiyomi.core.util.lang.withNonCancellableContext
|
||||||
|
@ -7,7 +7,6 @@ import androidx.compose.ui.util.fastAny
|
|||||||
import androidx.compose.ui.util.fastMap
|
import androidx.compose.ui.util.fastMap
|
||||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||||
import cafe.adriel.voyager.core.model.coroutineScope
|
import cafe.adriel.voyager.core.model.coroutineScope
|
||||||
import eu.kanade.core.prefs.CheckboxState
|
|
||||||
import eu.kanade.core.prefs.PreferenceMutableState
|
import eu.kanade.core.prefs.PreferenceMutableState
|
||||||
import eu.kanade.core.prefs.asState
|
import eu.kanade.core.prefs.asState
|
||||||
import eu.kanade.core.util.fastDistinctBy
|
import eu.kanade.core.util.fastDistinctBy
|
||||||
@ -45,6 +44,7 @@ import kotlinx.coroutines.flow.launchIn
|
|||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
|
@ -8,9 +8,7 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import cafe.adriel.voyager.core.model.StateScreenModel
|
import cafe.adriel.voyager.core.model.StateScreenModel
|
||||||
import cafe.adriel.voyager.core.model.coroutineScope
|
import cafe.adriel.voyager.core.model.coroutineScope
|
||||||
import eu.kanade.core.prefs.CheckboxState
|
|
||||||
import eu.kanade.core.prefs.asState
|
import eu.kanade.core.prefs.asState
|
||||||
import eu.kanade.core.prefs.mapAsCheckboxState
|
|
||||||
import eu.kanade.core.util.addOrRemove
|
import eu.kanade.core.util.addOrRemove
|
||||||
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
|
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
|
||||||
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
||||||
@ -53,6 +51,8 @@ import kotlinx.coroutines.flow.update
|
|||||||
import kotlinx.coroutines.isActive
|
import kotlinx.coroutines.isActive
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
|
import tachiyomi.core.preference.CheckboxState
|
||||||
|
import tachiyomi.core.preference.mapAsCheckboxState
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package tachiyomi.core.preference
|
||||||
|
|
||||||
|
sealed class CheckboxState<T>(open val value: T) {
|
||||||
|
|
||||||
|
abstract fun next(): CheckboxState<T>
|
||||||
|
|
||||||
|
sealed class State<T>(override val value: T) : CheckboxState<T>(value) {
|
||||||
|
data class Checked<T>(override val value: T) : State<T>(value)
|
||||||
|
data class None<T>(override val value: T) : State<T>(value)
|
||||||
|
|
||||||
|
val isChecked: Boolean
|
||||||
|
get() = this is Checked
|
||||||
|
|
||||||
|
override fun next(): CheckboxState<T> {
|
||||||
|
return when (this) {
|
||||||
|
is Checked -> None(value)
|
||||||
|
is None -> Checked(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed class TriState<T>(override val value: T) : CheckboxState<T>(value) {
|
||||||
|
data class Include<T>(override val value: T) : TriState<T>(value)
|
||||||
|
data class Exclude<T>(override val value: T) : TriState<T>(value)
|
||||||
|
data class None<T>(override val value: T) : TriState<T>(value)
|
||||||
|
|
||||||
|
override fun next(): CheckboxState<T> {
|
||||||
|
return when (this) {
|
||||||
|
is Exclude -> None(value)
|
||||||
|
is Include -> Exclude(value)
|
||||||
|
is None -> Include(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <T> T.asCheckboxState(condition: (T) -> Boolean): CheckboxState.State<T> {
|
||||||
|
return if (condition(this)) {
|
||||||
|
CheckboxState.State.Checked(this)
|
||||||
|
} else {
|
||||||
|
CheckboxState.State.None(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <T> List<T>.mapAsCheckboxState(condition: (T) -> Boolean): List<CheckboxState.State<T>> {
|
||||||
|
return this.map { it.asCheckboxState(condition) }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user