Change settings screen to object (#8604)

(cherry picked from commit 7d34ff214cad896abc2a834300d632ddce0a732f)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt
This commit is contained in:
Ivan Iskandar 2022-11-23 21:14:55 +07:00 committed by Jobobby04
parent 36b1b4ed5f
commit 46b0bec926
16 changed files with 171 additions and 175 deletions

View File

@ -54,7 +54,7 @@ import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import java.util.TimeZone import java.util.TimeZone
class AboutScreen : Screen { object AboutScreen : Screen {
@Composable @Composable
override fun Content() { override fun Content() {
@ -205,58 +205,56 @@ class AboutScreen : Screen {
} }
} }
companion object { fun getVersionName(withBuildDate: Boolean): String {
fun getVersionName(withBuildDate: Boolean): String { return when {
return when { BuildConfig.DEBUG -> {
BuildConfig.DEBUG -> { "Debug ${BuildConfig.COMMIT_SHA}".let {
"Debug ${BuildConfig.COMMIT_SHA}".let { if (withBuildDate) {
if (withBuildDate) { "$it (${getFormattedBuildTime()})"
"$it (${getFormattedBuildTime()})" } else {
} else { it
it
}
}
}
// SY -->
isPreviewBuildType -> {
"Preview r$syDebugVersion".let {
if (withBuildDate) {
"$it (${BuildConfig.COMMIT_SHA}, ${getFormattedBuildTime()})"
} else {
"$it (${BuildConfig.COMMIT_SHA})"
}
}
}
// SY <--
else -> {
"Stable ${BuildConfig.VERSION_NAME}".let {
if (withBuildDate) {
"$it (${getFormattedBuildTime()})"
} else {
it
}
} }
} }
} }
} // SY -->
isPreviewBuildType -> {
private fun getFormattedBuildTime(): String { "Preview r$syDebugVersion".let {
return try { if (withBuildDate) {
val inputDf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US) "$it (${BuildConfig.COMMIT_SHA}, ${getFormattedBuildTime()})"
inputDf.timeZone = TimeZone.getTimeZone("UTC") } else {
val buildTime = inputDf.parse(BuildConfig.BUILD_TIME) "$it (${BuildConfig.COMMIT_SHA})"
}
val outputDf = DateFormat.getDateTimeInstance( }
DateFormat.MEDIUM, }
DateFormat.SHORT, // SY <--
Locale.getDefault(), else -> {
) "Stable ${BuildConfig.VERSION_NAME}".let {
outputDf.timeZone = TimeZone.getDefault() if (withBuildDate) {
"$it (${getFormattedBuildTime()})"
buildTime!!.toDateTimestampString(UiPreferences.dateFormat(Injekt.get<UiPreferences>().dateFormat().get())) } else {
} catch (e: Exception) { it
BuildConfig.BUILD_TIME }
}
} }
} }
} }
private fun getFormattedBuildTime(): String {
return try {
val inputDf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US)
inputDf.timeZone = TimeZone.getTimeZone("UTC")
val buildTime = inputDf.parse(BuildConfig.BUILD_TIME)
val outputDf = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM,
DateFormat.SHORT,
Locale.getDefault(),
)
outputDf.timeZone = TimeZone.getDefault()
buildTime!!.toDateTimestampString(UiPreferences.dateFormat(Injekt.get<UiPreferences>().dateFormat().get()))
} catch (e: Exception) {
BuildConfig.BUILD_TIME
}
}
} }

View File

@ -98,7 +98,7 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.io.File import java.io.File
class SettingsAdvancedScreen : SearchableSettings { object SettingsAdvancedScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable
@StringRes @StringRes
@ -735,8 +735,6 @@ class SettingsAdvancedScreen : SearchableSettings {
) )
} }
companion object { private var job: Job? = null
private var job: Job? = null
}
// SY <-- // SY <--
} }

View File

@ -27,7 +27,7 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.util.Date import java.util.Date
class SettingsAppearanceScreen : SearchableSettings { object SettingsAppearanceScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -59,7 +59,7 @@ import kotlinx.coroutines.launch
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsBackupScreen : SearchableSettings { object SettingsBackupScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -26,7 +26,7 @@ import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsBrowseScreen : SearchableSettings { object SettingsBrowseScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -32,7 +32,7 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.io.File import java.io.File
class SettingsDownloadScreen : SearchableSettings { object SettingsDownloadScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -83,7 +83,7 @@ import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
class SettingsEhScreen : SearchableSettings { object SettingsEhScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -27,7 +27,7 @@ import org.xmlpull.v1.XmlPullParser
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsGeneralScreen : SearchableSettings { object SettingsGeneralScreen : SearchableSettings {
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable

View File

@ -64,7 +64,7 @@ import kotlinx.coroutines.runBlocking
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsLibraryScreen : SearchableSettings { object SettingsLibraryScreen : SearchableSettings {
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable

View File

@ -181,98 +181,98 @@ object SettingsMainScreen : Screen {
private fun Navigator.navigate(screen: Screen, twoPane: Boolean) { private fun Navigator.navigate(screen: Screen, twoPane: Boolean) {
if (twoPane) replaceAll(screen) else push(screen) if (twoPane) replaceAll(screen) else push(screen)
} }
private data class Item(
@StringRes val titleRes: Int,
@StringRes val subtitleRes: Int,
val formatSubtitle: @Composable () -> String = { stringResource(subtitleRes) },
val icon: ImageVector,
val screen: Screen,
)
private val items = listOf(
Item(
titleRes = R.string.pref_category_general,
subtitleRes = R.string.pref_general_summary,
icon = Icons.Outlined.Tune,
screen = SettingsGeneralScreen,
),
Item(
titleRes = R.string.pref_category_appearance,
subtitleRes = R.string.pref_appearance_summary,
icon = Icons.Outlined.Palette,
screen = SettingsAppearanceScreen,
),
Item(
titleRes = R.string.pref_category_library,
subtitleRes = R.string.pref_library_summary,
icon = Icons.Outlined.CollectionsBookmark,
screen = SettingsLibraryScreen,
),
Item(
titleRes = R.string.pref_category_reader,
subtitleRes = R.string.pref_reader_summary,
icon = Icons.Outlined.ChromeReaderMode,
screen = SettingsReaderScreen,
),
Item(
titleRes = R.string.pref_category_downloads,
subtitleRes = R.string.pref_downloads_summary,
icon = Icons.Outlined.GetApp,
screen = SettingsDownloadScreen,
),
Item(
titleRes = R.string.pref_category_tracking,
subtitleRes = R.string.pref_tracking_summary,
icon = Icons.Outlined.Sync,
screen = SettingsTrackingScreen,
),
Item(
titleRes = R.string.browse,
subtitleRes = R.string.pref_browse_summary,
icon = Icons.Outlined.Explore,
screen = SettingsBrowseScreen,
),
Item(
titleRes = R.string.label_backup,
subtitleRes = R.string.pref_backup_summary,
icon = Icons.Outlined.SettingsBackupRestore,
screen = SettingsBackupScreen,
),
Item(
titleRes = R.string.pref_category_security,
subtitleRes = R.string.pref_security_summary,
icon = Icons.Outlined.Security,
screen = SettingsSecurityScreen,
),
// SY -->
Item(
titleRes = R.string.pref_category_eh,
subtitleRes = R.string.pref_ehentai_summary,
icon = EhAssets.EhLogo,
screen = SettingsEhScreen,
),
Item(
titleRes = R.string.pref_category_mangadex,
subtitleRes = R.string.pref_mangadex_summary,
icon = EhAssets.MangadexLogo,
screen = SettingsMangadexScreen,
),
// SY <--
Item(
titleRes = R.string.pref_category_advanced,
subtitleRes = R.string.pref_advanced_summary,
icon = Icons.Outlined.Code,
screen = SettingsAdvancedScreen,
),
Item(
titleRes = R.string.pref_category_about,
subtitleRes = 0,
formatSubtitle = {
"${stringResource(R.string.app_name)} ${AboutScreen.getVersionName(withBuildDate = false)}"
},
icon = Icons.Outlined.Info,
screen = AboutScreen,
),
)
} }
private data class Item(
@StringRes val titleRes: Int,
@StringRes val subtitleRes: Int,
val formatSubtitle: @Composable () -> String = { stringResource(subtitleRes) },
val icon: ImageVector,
val screen: Screen,
)
private val items = listOf(
Item(
titleRes = R.string.pref_category_general,
subtitleRes = R.string.pref_general_summary,
icon = Icons.Outlined.Tune,
screen = SettingsGeneralScreen(),
),
Item(
titleRes = R.string.pref_category_appearance,
subtitleRes = R.string.pref_appearance_summary,
icon = Icons.Outlined.Palette,
screen = SettingsAppearanceScreen(),
),
Item(
titleRes = R.string.pref_category_library,
subtitleRes = R.string.pref_library_summary,
icon = Icons.Outlined.CollectionsBookmark,
screen = SettingsLibraryScreen(),
),
Item(
titleRes = R.string.pref_category_reader,
subtitleRes = R.string.pref_reader_summary,
icon = Icons.Outlined.ChromeReaderMode,
screen = SettingsReaderScreen(),
),
Item(
titleRes = R.string.pref_category_downloads,
subtitleRes = R.string.pref_downloads_summary,
icon = Icons.Outlined.GetApp,
screen = SettingsDownloadScreen(),
),
Item(
titleRes = R.string.pref_category_tracking,
subtitleRes = R.string.pref_tracking_summary,
icon = Icons.Outlined.Sync,
screen = SettingsTrackingScreen(),
),
Item(
titleRes = R.string.browse,
subtitleRes = R.string.pref_browse_summary,
icon = Icons.Outlined.Explore,
screen = SettingsBrowseScreen(),
),
Item(
titleRes = R.string.label_backup,
subtitleRes = R.string.pref_backup_summary,
icon = Icons.Outlined.SettingsBackupRestore,
screen = SettingsBackupScreen(),
),
Item(
titleRes = R.string.pref_category_security,
subtitleRes = R.string.pref_security_summary,
icon = Icons.Outlined.Security,
screen = SettingsSecurityScreen(),
),
// SY -->
Item(
titleRes = R.string.pref_category_eh,
subtitleRes = R.string.pref_ehentai_summary,
icon = EhAssets.EhLogo,
screen = SettingsEhScreen(),
),
Item(
titleRes = R.string.pref_category_mangadex,
subtitleRes = R.string.pref_mangadex_summary,
icon = EhAssets.MangadexLogo,
screen = SettingsMangadexScreen(),
),
// SY <--
Item(
titleRes = R.string.pref_category_advanced,
subtitleRes = R.string.pref_advanced_summary,
icon = Icons.Outlined.Code,
screen = SettingsAdvancedScreen(),
),
Item(
titleRes = R.string.pref_category_about,
subtitleRes = 0,
formatSubtitle = {
"${stringResource(R.string.app_name)} ${AboutScreen.getVersionName(withBuildDate = false)}"
},
icon = Icons.Outlined.Info,
screen = AboutScreen(),
),
)

View File

@ -58,7 +58,7 @@ import logcat.LogPriority
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsMangadexScreen : SearchableSettings { object SettingsMangadexScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -23,7 +23,7 @@ import eu.kanade.tachiyomi.util.system.isReleaseBuildType
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsReaderScreen : SearchableSettings { object SettingsReaderScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -285,20 +285,20 @@ private fun getLocalizedBreadcrumb(path: String, node: String?): String {
} }
private val settingScreens = listOf( private val settingScreens = listOf(
SettingsGeneralScreen(), SettingsGeneralScreen,
SettingsAppearanceScreen(), SettingsAppearanceScreen,
SettingsLibraryScreen(), SettingsLibraryScreen,
SettingsReaderScreen(), SettingsReaderScreen,
SettingsDownloadScreen(), SettingsDownloadScreen,
SettingsTrackingScreen(), SettingsTrackingScreen,
SettingsBrowseScreen(), SettingsBrowseScreen,
SettingsBackupScreen(), SettingsBackupScreen,
SettingsSecurityScreen(), SettingsSecurityScreen,
// SY --> // SY -->
SettingsEhScreen(), SettingsEhScreen,
SettingsMangadexScreen(), SettingsMangadexScreen,
// SY <-- // SY <--
SettingsAdvancedScreen(), SettingsAdvancedScreen,
) )
private data class SettingsData( private data class SettingsData(

View File

@ -40,7 +40,7 @@ import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupport
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsSecurityScreen : SearchableSettings { object SettingsSecurityScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -59,7 +59,7 @@ import eu.kanade.tachiyomi.util.system.toast
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
class SettingsTrackingScreen : SearchableSettings { object SettingsTrackingScreen : SearchableSettings {
@ReadOnlyComposable @ReadOnlyComposable
@Composable @Composable

View File

@ -45,9 +45,9 @@ class SettingsMainController(bundle: Bundle = bundleOf()) : BasicFullComposeCont
if (!isTabletUi) { if (!isTabletUi) {
Navigator( Navigator(
screen = if (toBackupScreen) { screen = if (toBackupScreen) {
SettingsBackupScreen() SettingsBackupScreen
} else if (toAboutScreen) { } else if (toAboutScreen) {
AboutScreen() AboutScreen
} else { } else {
SettingsMainScreen SettingsMainScreen
}, },
@ -63,11 +63,11 @@ class SettingsMainController(bundle: Bundle = bundleOf()) : BasicFullComposeCont
} else { } else {
Navigator( Navigator(
screen = if (toBackupScreen) { screen = if (toBackupScreen) {
SettingsBackupScreen() SettingsBackupScreen
} else if (toAboutScreen) { } else if (toAboutScreen) {
AboutScreen() AboutScreen
} else { } else {
SettingsGeneralScreen() SettingsGeneralScreen
}, },
) { ) {
TwoPanelBox( TwoPanelBox(