More settings stuff (#8226)

* title size

* move about screen to settings

keeping shortcut inside more screen

* more

* shrink texts

* scrollable create backup dialog choices

* search back button

* cleanups

* delay changes that require activity recreate

* lessen horizontal padding
This commit is contained in:
Ivan Iskandar
2022-10-18 20:35:10 +07:00
committed by GitHub
parent ea092fa175
commit f5bde3726a
28 changed files with 552 additions and 649 deletions

View File

@@ -1,86 +0,0 @@
package eu.kanade.tachiyomi.ui.more
import androidx.compose.runtime.Composable
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.more.about.AboutScreen
import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.updater.AppUpdateChecker
import eu.kanade.tachiyomi.data.updater.AppUpdateResult
import eu.kanade.tachiyomi.ui.base.controller.BasicFullComposeController
import eu.kanade.tachiyomi.ui.base.controller.pushController
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.toDateTimestampString
import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.system.logcat
import eu.kanade.tachiyomi.util.system.toast
import logcat.LogPriority
import uy.kohesive.injekt.injectLazy
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.TimeZone
class AboutController : BasicFullComposeController() {
private val preferences: UiPreferences by injectLazy()
private val updateChecker by lazy { AppUpdateChecker() }
@Composable
override fun ComposeContent() {
AboutScreen(
navigateUp = router::popCurrentController,
checkVersion = this::checkVersion,
getFormattedBuildTime = this::getFormattedBuildTime,
onClickLicenses = { router.pushController(LicensesController()) },
)
}
/**
* Checks version and shows a user prompt if an update is available.
*/
private fun checkVersion() {
if (activity == null) return
activity!!.toast(R.string.update_check_look_for_updates)
viewScope.launchIO {
try {
val result = updateChecker.checkForUpdate(activity!!, isUserPrompt = true)
withUIContext {
when (result) {
is AppUpdateResult.NewUpdate -> {
NewUpdateDialogController(result).showDialog(router)
}
is AppUpdateResult.NoNewUpdate -> {
activity?.toast(R.string.update_check_no_new_updates)
}
else -> {}
}
}
} catch (e: Exception) {
withUIContext { activity?.toast(e.message) }
logcat(LogPriority.ERROR, e)
}
}
}
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(preferences.dateFormat().get()))
} catch (e: Exception) {
BuildConfig.BUILD_TIME
}
}
}

View File

@@ -1,15 +0,0 @@
package eu.kanade.tachiyomi.ui.more
import androidx.compose.runtime.Composable
import eu.kanade.presentation.more.about.LicensesScreen
import eu.kanade.tachiyomi.ui.base.controller.BasicFullComposeController
class LicensesController : BasicFullComposeController() {
@Composable
override fun ComposeContent() {
LicensesScreen(
navigateUp = router::popCurrentController,
)
}
}

View File

@@ -21,9 +21,9 @@ class MoreController :
presenter = presenter,
onClickDownloadQueue = { router.pushController(DownloadController()) },
onClickCategories = { router.pushController(CategoryController()) },
onClickBackupAndRestore = { router.pushController(SettingsMainController(toBackupScreen = true)) },
onClickBackupAndRestore = { router.pushController(SettingsMainController.toBackupScreen()) },
onClickSettings = { router.pushController(SettingsMainController()) },
onClickAbout = { router.pushController(AboutController()) },
onClickAbout = { router.pushController(SettingsMainController.toAboutScreen()) },
)
}

View File

@@ -9,6 +9,7 @@ import cafe.adriel.voyager.core.stack.StackEvent
import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.transitions.ScreenTransition
import eu.kanade.presentation.components.TwoPanelBox
import eu.kanade.presentation.more.settings.screen.AboutScreen
import eu.kanade.presentation.more.settings.screen.SettingsBackupScreen
import eu.kanade.presentation.more.settings.screen.SettingsGeneralScreen
import eu.kanade.presentation.more.settings.screen.SettingsMainScreen
@@ -19,14 +20,10 @@ import eu.kanade.tachiyomi.ui.base.controller.BasicFullComposeController
import soup.compose.material.motion.animation.materialSharedAxisX
import soup.compose.material.motion.animation.rememberSlideDistance
class SettingsMainController : BasicFullComposeController {
@Suppress("unused")
constructor(bundle: Bundle) : this(bundle.getBoolean(TO_BACKUP_SCREEN))
constructor(toBackupScreen: Boolean = false) : super(bundleOf(TO_BACKUP_SCREEN to toBackupScreen))
class SettingsMainController(bundle: Bundle = bundleOf()) : BasicFullComposeController(bundle) {
private val toBackupScreen = args.getBoolean(TO_BACKUP_SCREEN)
private val toAboutScreen = args.getBoolean(TO_ABOUT_SCREEN)
@Composable
override fun ComposeContent() {
@@ -34,7 +31,13 @@ class SettingsMainController : BasicFullComposeController {
val widthSizeClass = calculateWindowWidthSizeClass()
if (widthSizeClass == WindowWidthSizeClass.Compact) {
Navigator(
screen = if (toBackupScreen) SettingsBackupScreen() else SettingsMainScreen,
screen = if (toBackupScreen) {
SettingsBackupScreen()
} else if (toAboutScreen) {
AboutScreen()
} else {
SettingsMainScreen
},
content = {
CompositionLocalProvider(LocalBackPress provides this::back) {
val slideDistance = rememberSlideDistance()
@@ -52,7 +55,13 @@ class SettingsMainController : BasicFullComposeController {
)
} else {
Navigator(
screen = if (toBackupScreen) SettingsBackupScreen() else SettingsGeneralScreen(),
screen = if (toBackupScreen) {
SettingsBackupScreen()
} else if (toAboutScreen) {
AboutScreen()
} else {
SettingsGeneralScreen()
},
) {
TwoPanelBox(
startContent = {
@@ -81,6 +90,17 @@ class SettingsMainController : BasicFullComposeController {
private fun back() {
activity?.onBackPressed()
}
companion object {
fun toBackupScreen(): SettingsMainController {
return SettingsMainController(bundleOf(TO_BACKUP_SCREEN to true))
}
fun toAboutScreen(): SettingsMainController {
return SettingsMainController(bundleOf(TO_ABOUT_SCREEN to true))
}
}
}
private const val TO_BACKUP_SCREEN = "to_backup_screen"
private const val TO_ABOUT_SCREEN = "to_about_screen"