|
|
@ -13,15 +13,12 @@ import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.runtime.mutableIntStateOf
|
|
|
|
import androidx.compose.runtime.mutableIntStateOf
|
|
|
|
import androidx.compose.runtime.remember
|
|
|
|
import androidx.compose.runtime.remember
|
|
|
|
|
|
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
|
|
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.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.i18n.MR
|
|
|
|
import tachiyomi.i18n.MR
|
|
|
|
import tachiyomi.presentation.core.components.material.padding
|
|
|
|
import tachiyomi.presentation.core.components.material.padding
|
|
|
|
import tachiyomi.presentation.core.i18n.stringResource
|
|
|
|
import tachiyomi.presentation.core.i18n.stringResource
|
|
|
@ -29,24 +26,21 @@ import tachiyomi.presentation.core.screens.InfoScreen
|
|
|
|
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
@Composable
|
|
|
|
fun OnboardingScreen(
|
|
|
|
fun OnboardingScreen(
|
|
|
|
storagePreferences: StoragePreferences,
|
|
|
|
|
|
|
|
uiPreferences: UiPreferences,
|
|
|
|
|
|
|
|
onComplete: () -> Unit,
|
|
|
|
onComplete: () -> Unit,
|
|
|
|
onRestoreBackup: () -> Unit,
|
|
|
|
onRestoreBackup: () -> Unit,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
val context = LocalContext.current
|
|
|
|
|
|
|
|
val slideDistance = rememberSlideDistance()
|
|
|
|
val slideDistance = rememberSlideDistance()
|
|
|
|
|
|
|
|
|
|
|
|
var currentStep by remember { mutableIntStateOf(0) }
|
|
|
|
var currentStep by rememberSaveable { mutableIntStateOf(0) }
|
|
|
|
val steps: List<@Composable () -> Unit> = remember {
|
|
|
|
val steps = remember {
|
|
|
|
listOf(
|
|
|
|
listOf(
|
|
|
|
{ ThemeStep(uiPreferences = uiPreferences) },
|
|
|
|
ThemeStep(),
|
|
|
|
{ StorageStep(storagePref = storagePreferences.baseStorageDirectory()) },
|
|
|
|
StorageStep(),
|
|
|
|
// 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.lastIndex
|
|
|
|
|
|
|
|
|
|
|
|
BackHandler(enabled = currentStep != 0, onBack = { currentStep-- })
|
|
|
|
BackHandler(enabled = currentStep != 0, onBack = { currentStep-- })
|
|
|
|
|
|
|
|
|
|
|
@ -61,17 +55,13 @@ fun OnboardingScreen(
|
|
|
|
MR.strings.onboarding_action_next
|
|
|
|
MR.strings.onboarding_action_next
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
canAccept = steps[currentStep].isComplete,
|
|
|
|
onAcceptClick = {
|
|
|
|
onAcceptClick = {
|
|
|
|
if (isLastStep) {
|
|
|
|
if (isLastStep) {
|
|
|
|
onComplete()
|
|
|
|
onComplete()
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// TODO: this is kind of janky
|
|
|
|
|
|
|
|
if (currentStep == 1 && !storagePreferences.baseStorageDirectory().isSet()) {
|
|
|
|
|
|
|
|
context.toast(MR.strings.onboarding_storage_selection_required)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
currentStep++
|
|
|
|
currentStep++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
Box(
|
|
|
|
Box(
|
|
|
@ -91,7 +81,7 @@ fun OnboardingScreen(
|
|
|
|
},
|
|
|
|
},
|
|
|
|
label = "stepContent",
|
|
|
|
label = "stepContent",
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
steps[it]()
|
|
|
|
steps[it].Content()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|