More onboarding screen additions 2: Electric Boogaloo

This commit is contained in:
arkon 2023-12-09 18:20:58 -05:00
parent e3404cd3d3
commit f7c5b42435
6 changed files with 49 additions and 20 deletions

View file

@ -22,7 +22,7 @@ android {
defaultConfig { defaultConfig {
applicationId = "eu.kanade.tachiyomi" applicationId = "eu.kanade.tachiyomi"
versionCode = 111 versionCode = 112
versionName = "0.14.7" versionName = "0.14.7"
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")

View file

@ -6,11 +6,14 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.presentation.theme.TachiyomiTheme
import tachiyomi.i18n.MR import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.i18n.stringResource
@ -32,7 +35,9 @@ internal fun GuidesStep(
Text(stringResource(MR.strings.getting_started_guide)) Text(stringResource(MR.strings.getting_started_guide))
} }
HorizontalDivider() HorizontalDivider(
color = MaterialTheme.colorScheme.onPrimaryContainer,
)
Text(stringResource(MR.strings.onboarding_guides_returning_user, stringResource(MR.strings.app_name))) Text(stringResource(MR.strings.onboarding_guides_returning_user, stringResource(MR.strings.app_name)))
Button( Button(
@ -45,3 +50,13 @@ internal fun GuidesStep(
} }
const val GETTING_STARTED_URL = "https://tachiyomi.org/docs/guides/getting-started" const val GETTING_STARTED_URL = "https://tachiyomi.org/docs/guides/getting-started"
@PreviewLightDark
@Composable
private fun GuidesStepPreview() {
TachiyomiTheme {
GuidesStep(
onRestoreBackup = {},
)
}
}

View file

@ -16,7 +16,9 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
import eu.kanade.tachiyomi.util.system.toast
import soup.compose.material.motion.animation.materialSharedAxisX import soup.compose.material.motion.animation.materialSharedAxisX
import soup.compose.material.motion.animation.rememberSlideDistance import soup.compose.material.motion.animation.rememberSlideDistance
import tachiyomi.domain.storage.service.StoragePreferences import tachiyomi.domain.storage.service.StoragePreferences
@ -32,15 +34,19 @@ fun OnboardingScreen(
onComplete: () -> Unit, onComplete: () -> Unit,
onRestoreBackup: () -> Unit, onRestoreBackup: () -> Unit,
) { ) {
val context = LocalContext.current
val slideDistance = rememberSlideDistance()
var currentStep by remember { mutableIntStateOf(0) } var currentStep by remember { mutableIntStateOf(0) }
val steps: List<@Composable () -> Unit> = listOf( val steps: List<@Composable () -> Unit> = remember {
listOf(
{ ThemeStep(uiPreferences = uiPreferences) }, { ThemeStep(uiPreferences = uiPreferences) },
{ StorageStep(storagePref = storagePreferences.baseStorageDirectory()) }, { StorageStep(storagePref = storagePreferences.baseStorageDirectory()) },
// TODO: prompt for notification permissions when bumping target to Android 13 // TODO: prompt for notification permissions when bumping target to Android 13
{ GuidesStep(onRestoreBackup = onRestoreBackup) }, { GuidesStep(onRestoreBackup = onRestoreBackup) },
) )
}
val isLastStep = currentStep == steps.size - 1 val isLastStep = currentStep == steps.size - 1
val slideDistance = rememberSlideDistance()
BackHandler(enabled = currentStep != 0, onBack = { currentStep-- }) BackHandler(enabled = currentStep != 0, onBack = { currentStep-- })
@ -56,10 +62,15 @@ fun OnboardingScreen(
}, },
), ),
onAcceptClick = { onAcceptClick = {
if (!isLastStep) { if (isLastStep) {
currentStep++
} else {
onComplete() onComplete()
} else {
// TODO: this is kind of janky
if (currentStep == 1 && !storagePreferences.baseStorageDirectory().isSet()) {
context.toast(MR.strings.onboarding_storage_selection_required)
} else {
currentStep++
}
} }
}, },
rejectText = stringResource(MR.strings.onboarding_action_skip), rejectText = stringResource(MR.strings.onboarding_action_skip),

View file

@ -396,7 +396,12 @@ object Migrations {
newKey = { Preference.privateKey(it) }, newKey = { Preference.privateKey(it) },
) )
} }
if (oldVersion < 110) { if (oldVersion < 111) {
File(context.cacheDir, "dl_index_cache")
.takeIf { it.exists() }
?.delete()
}
if (oldVersion < 112) {
val prefsToReplace = listOf( val prefsToReplace = listOf(
"pref_download_only", "pref_download_only",
"incognito_mode", "incognito_mode",
@ -409,6 +414,7 @@ object Migrations {
"last_app_check", "last_app_check",
"last_ext_check", "last_ext_check",
"last_version_code", "last_version_code",
"storage_dir",
) )
replacePreferences( replacePreferences(
preferenceStore = preferenceStore, preferenceStore = preferenceStore,
@ -416,11 +422,6 @@ object Migrations {
newKey = { Preference.appStateKey(it) }, newKey = { Preference.appStateKey(it) },
) )
} }
if (oldVersion < 111) {
File(context.cacheDir, "dl_index_cache")
.takeIf { it.exists() }
?.delete()
}
return true return true
} }

View file

@ -1,5 +1,6 @@
package tachiyomi.domain.storage.service package tachiyomi.domain.storage.service
import tachiyomi.core.preference.Preference
import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.storage.FolderProvider import tachiyomi.core.storage.FolderProvider
@ -8,5 +9,5 @@ class StoragePreferences(
private val preferenceStore: PreferenceStore, private val preferenceStore: PreferenceStore,
) { ) {
fun baseStorageDirectory() = preferenceStore.getString("storage_dir", folderProvider.path()) fun baseStorageDirectory() = preferenceStore.getString(Preference.appStateKey("storage_dir"), folderProvider.path())
} }

View file

@ -182,6 +182,7 @@
<string name="onboarding_action_skip">Skip</string> <string name="onboarding_action_skip">Skip</string>
<string name="onboarding_storage_info">Select a folder where %1$s will store chapter downloads, backups, and more.\n\nA dedicated folder is recommended.\n\nSelected folder: %2$s</string> <string name="onboarding_storage_info">Select a folder where %1$s will store chapter downloads, backups, and more.\n\nA dedicated folder is recommended.\n\nSelected folder: %2$s</string>
<string name="onboarding_storage_action_select">Select a folder</string> <string name="onboarding_storage_action_select">Select a folder</string>
<string name="onboarding_storage_selection_required">A folder must be selected</string>
<string name="onboarding_guides_new_user">New to %s? We recommend checking out the getting started guide.</string> <string name="onboarding_guides_new_user">New to %s? We recommend checking out the getting started guide.</string>
<string name="onboarding_guides_returning_user">Already used %s before?</string> <string name="onboarding_guides_returning_user">Already used %s before?</string>