mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Allow more flexible custom preference composables
This commit is contained in:
		@@ -13,8 +13,6 @@ import androidx.compose.runtime.rememberCoroutineScope
 | 
			
		||||
import androidx.compose.runtime.structuralEqualityPolicy
 | 
			
		||||
import androidx.compose.ui.unit.dp
 | 
			
		||||
import eu.kanade.domain.track.service.TrackPreferences
 | 
			
		||||
import eu.kanade.domain.ui.UiPreferences
 | 
			
		||||
import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget
 | 
			
		||||
import eu.kanade.presentation.more.settings.widget.EditTextPreferenceWidget
 | 
			
		||||
import eu.kanade.presentation.more.settings.widget.InfoWidget
 | 
			
		||||
import eu.kanade.presentation.more.settings.widget.ListPreferenceWidget
 | 
			
		||||
@@ -158,16 +156,6 @@ internal fun PreferenceItem(
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
            is Preference.PreferenceItem.AppThemePreference -> {
 | 
			
		||||
                val value by item.pref.collectAsState()
 | 
			
		||||
                val amoled by Injekt.get<UiPreferences>().themeDarkAmoled().collectAsState()
 | 
			
		||||
                AppThemePreferenceWidget(
 | 
			
		||||
                    title = item.title,
 | 
			
		||||
                    value = value,
 | 
			
		||||
                    amoled = amoled,
 | 
			
		||||
                    onItemClick = { scope.launch { item.pref.set(it) } },
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
            is Preference.PreferenceItem.TrackingPreference -> {
 | 
			
		||||
                val uName by Injekt.get<PreferenceStore>()
 | 
			
		||||
                    .getString(TrackPreferences.trackUsername(item.service.id))
 | 
			
		||||
@@ -183,6 +171,9 @@ internal fun PreferenceItem(
 | 
			
		||||
            is Preference.PreferenceItem.InfoPreference -> {
 | 
			
		||||
                InfoWidget(text = item.title)
 | 
			
		||||
            }
 | 
			
		||||
            is Preference.PreferenceItem.CustomPreference -> {
 | 
			
		||||
                item.content(item)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.remember
 | 
			
		||||
import androidx.compose.ui.graphics.vector.ImageVector
 | 
			
		||||
import androidx.compose.ui.res.stringResource
 | 
			
		||||
import eu.kanade.domain.ui.model.AppTheme
 | 
			
		||||
import eu.kanade.presentation.more.settings.Preference.PreferenceItem
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.track.TrackService
 | 
			
		||||
@@ -133,19 +132,6 @@ sealed class Preference {
 | 
			
		||||
            override val onValueChanged: suspend (newValue: String) -> Boolean = { true },
 | 
			
		||||
        ) : PreferenceItem<String>()
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * A [PreferenceItem] that shows previews of [AppTheme] selection.
 | 
			
		||||
         */
 | 
			
		||||
        data class AppThemePreference(
 | 
			
		||||
            val pref: PreferenceData<AppTheme>,
 | 
			
		||||
            override val title: String,
 | 
			
		||||
        ) : PreferenceItem<AppTheme>() {
 | 
			
		||||
            override val enabled: Boolean = true
 | 
			
		||||
            override val subtitle: String? = null
 | 
			
		||||
            override val icon: ImageVector? = null
 | 
			
		||||
            override val onValueChanged: suspend (newValue: AppTheme) -> Boolean = { true }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * A [PreferenceItem] for individual tracking service.
 | 
			
		||||
         */
 | 
			
		||||
@@ -169,6 +155,16 @@ sealed class Preference {
 | 
			
		||||
            override val icon: ImageVector? = null
 | 
			
		||||
            override val onValueChanged: suspend (newValue: String) -> Boolean = { true }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data class CustomPreference(
 | 
			
		||||
            override val title: String,
 | 
			
		||||
            val content: @Composable (PreferenceItem<String>) -> Unit,
 | 
			
		||||
        ) : PreferenceItem<String>() {
 | 
			
		||||
            override val enabled: Boolean = true
 | 
			
		||||
            override val subtitle: String? = null
 | 
			
		||||
            override val icon: ImageVector? = null
 | 
			
		||||
            override val onValueChanged: suspend (newValue: String) -> Boolean = { true }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    data class PreferenceGroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import eu.kanade.domain.ui.model.TabletUiMode
 | 
			
		||||
import eu.kanade.domain.ui.model.ThemeMode
 | 
			
		||||
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
 | 
			
		||||
import eu.kanade.presentation.more.settings.Preference
 | 
			
		||||
import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.toast
 | 
			
		||||
@@ -59,8 +60,11 @@ object SettingsAppearanceScreen : SearchableSettings {
 | 
			
		||||
    ): Preference.PreferenceGroup {
 | 
			
		||||
        val themeModePref = uiPreferences.themeMode()
 | 
			
		||||
        val themeMode by themeModePref.collectAsState()
 | 
			
		||||
 | 
			
		||||
        val appThemePref = uiPreferences.appTheme()
 | 
			
		||||
 | 
			
		||||
        val amoledPref = uiPreferences.themeDarkAmoled()
 | 
			
		||||
        val amoled by amoledPref.collectAsState()
 | 
			
		||||
 | 
			
		||||
        LaunchedEffect(themeMode) {
 | 
			
		||||
            setAppCompatDelegateThemeMode(themeMode)
 | 
			
		||||
@@ -91,10 +95,17 @@ object SettingsAppearanceScreen : SearchableSettings {
 | 
			
		||||
                        )
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
                Preference.PreferenceItem.AppThemePreference(
 | 
			
		||||
                Preference.PreferenceItem.CustomPreference(
 | 
			
		||||
                    title = stringResource(R.string.pref_app_theme),
 | 
			
		||||
                    pref = appThemePref,
 | 
			
		||||
                ),
 | 
			
		||||
                ) { item ->
 | 
			
		||||
                    val value by appThemePref.collectAsState()
 | 
			
		||||
                    AppThemePreferenceWidget(
 | 
			
		||||
                        title = item.title,
 | 
			
		||||
                        value = value,
 | 
			
		||||
                        amoled = amoled,
 | 
			
		||||
                        onItemClick = { appThemePref.set(it) },
 | 
			
		||||
                    )
 | 
			
		||||
                },
 | 
			
		||||
                Preference.PreferenceItem.SwitchPreference(
 | 
			
		||||
                    pref = amoledPref,
 | 
			
		||||
                    title = stringResource(R.string.pref_dark_theme_pure_black),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user