diff --git a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/Onboarding.kt b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/Onboarding.kt new file mode 100644 index 0000000..d8996df --- /dev/null +++ b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/Onboarding.kt @@ -0,0 +1,11 @@ +package com.nativeapptemplate.nativeapptemplatefree.ui.app_root + +enum class ImageOrientation { + PORTRAIT, + LANDSCAPE, +} + +data class Onboarding( + val id: Int, + val imageOrientation: ImageOrientation = ImageOrientation.LANDSCAPE, +) diff --git a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingView.kt b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingView.kt index 0f60a77..8a72683 100644 --- a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingView.kt +++ b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingView.kt @@ -46,8 +46,9 @@ internal fun OnboardingView( ) { val fontSizeLarge = 24 val lineHeightLarge = 26 + val onboardings = OnboardingViewModel.onboardings val pagerState = rememberPagerState(pageCount = { - 8 + onboardings.size }) Scaffold( @@ -64,6 +65,8 @@ internal fun OnboardingView( modifier = Modifier .fillMaxSize(), ) { page -> + val onboarding = onboardings[page] + val imageBottomPadding = if (onboarding.imageOrientation == ImageOrientation.LANDSCAPE) 192.dp else 0.dp Box( modifier = Modifier .fillMaxSize() @@ -71,11 +74,12 @@ internal fun OnboardingView( .padding(top = 12.dp), ) { Image( - painter = painterResource(OnboardingViewModel.onboardingImageId(page)), + painter = painterResource(OnboardingViewModel.onboardingImageId(onboarding.id)), contentDescription = null, contentScale = ContentScale.Fit, modifier = Modifier - .align(Alignment.TopCenter), + .align(Alignment.TopCenter) + .padding(bottom = imageBottomPadding), ) Card( shape = RoundedCornerShape(16.dp), @@ -85,7 +89,7 @@ internal fun OnboardingView( .align(Alignment.BottomCenter), ) { Text( - stringResource(OnboardingViewModel.onboardingDescription(page)), + stringResource(OnboardingViewModel.onboardingDescription(onboarding.id)), color = MaterialTheme.colorScheme.onSurfaceVariant, fontSize = fontSizeLarge.sp.nonScaledSp, lineHeight = lineHeightLarge.sp.nonScaledSp, diff --git a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModel.kt b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModel.kt index f2c3666..0561b9e 100644 --- a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModel.kt +++ b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModel.kt @@ -8,36 +8,27 @@ import javax.inject.Inject @HiltViewModel class OnboardingViewModel @Inject constructor() : ViewModel() { companion object { - fun onboardingDescription(index: Int): Int { - val description = when (index) { - 0 -> R.string.onboarding_description1 - 1 -> R.string.onboarding_description2 - 2 -> R.string.onboarding_description3 - 3 -> R.string.onboarding_description4 - 4 -> R.string.onboarding_description5 - 5 -> R.string.onboarding_description6 - 6 -> R.string.onboarding_description7 - 7 -> R.string.onboarding_description8 - else -> R.string.onboarding_description1 - } + val onboardings: List = listOf( + Onboarding(id = 1, imageOrientation = ImageOrientation.LANDSCAPE), + Onboarding(id = 2, imageOrientation = ImageOrientation.LANDSCAPE), + Onboarding(id = 3, imageOrientation = ImageOrientation.PORTRAIT), + Onboarding(id = 4, imageOrientation = ImageOrientation.PORTRAIT), + ) - return description + fun onboardingDescription(id: Int): Int = when (id) { + 1 -> R.string.onboarding_description1 + 2 -> R.string.onboarding_description2 + 3 -> R.string.onboarding_description3 + 4 -> R.string.onboarding_description4 + else -> R.string.onboarding_description1 } - fun onboardingImageId(index: Int): Int { - val imageId = when (index) { - 0 -> R.drawable.ic_overview1 - 1 -> R.drawable.ic_overview2 - 2 -> R.drawable.ic_overview3 - 3 -> R.drawable.ic_overview4 - 4 -> R.drawable.ic_overview5 - 5 -> R.drawable.ic_overview6 - 6 -> R.drawable.ic_overview7 - 7 -> R.drawable.ic_overview8 - else -> R.drawable.ic_overview1 - } - - return imageId + fun onboardingImageId(id: Int): Int = when (id) { + 1 -> R.drawable.ic_overview1 + 2 -> R.drawable.ic_overview2 + 3 -> R.drawable.ic_overview3 + 4 -> R.drawable.ic_overview4 + else -> R.drawable.ic_overview1 } } } diff --git a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/SignUpOrSignInView.kt b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/SignUpOrSignInView.kt index 8d3d870..73d1a23 100644 --- a/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/SignUpOrSignInView.kt +++ b/app/src/main/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/SignUpOrSignInView.kt @@ -70,7 +70,7 @@ internal fun SignUpOrSignInView( ) Image( - painter = painterResource(R.drawable.ic_overview1_slim), + painter = painterResource(R.drawable.ic_hero), contentDescription = null, contentScale = ContentScale.FillWidth, modifier = Modifier diff --git a/app/src/main/res/drawable/ic_hero.png b/app/src/main/res/drawable/ic_hero.png new file mode 100644 index 0000000..67d6409 Binary files /dev/null and b/app/src/main/res/drawable/ic_hero.png differ diff --git a/app/src/main/res/drawable/ic_overview1.png b/app/src/main/res/drawable/ic_overview1.png index 981debb..8dd36f4 100644 Binary files a/app/src/main/res/drawable/ic_overview1.png and b/app/src/main/res/drawable/ic_overview1.png differ diff --git a/app/src/main/res/drawable/ic_overview10.png b/app/src/main/res/drawable/ic_overview10.png deleted file mode 100644 index 5e3b376..0000000 Binary files a/app/src/main/res/drawable/ic_overview10.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview11.png b/app/src/main/res/drawable/ic_overview11.png deleted file mode 100644 index 1a21a15..0000000 Binary files a/app/src/main/res/drawable/ic_overview11.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview12.png b/app/src/main/res/drawable/ic_overview12.png deleted file mode 100644 index 2be7d25..0000000 Binary files a/app/src/main/res/drawable/ic_overview12.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview13.png b/app/src/main/res/drawable/ic_overview13.png deleted file mode 100644 index 2f796d3..0000000 Binary files a/app/src/main/res/drawable/ic_overview13.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview1_slim.png b/app/src/main/res/drawable/ic_overview1_slim.png deleted file mode 100644 index 0db8518..0000000 Binary files a/app/src/main/res/drawable/ic_overview1_slim.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview2.png b/app/src/main/res/drawable/ic_overview2.png index 5688e42..7d67de5 100644 Binary files a/app/src/main/res/drawable/ic_overview2.png and b/app/src/main/res/drawable/ic_overview2.png differ diff --git a/app/src/main/res/drawable/ic_overview3.png b/app/src/main/res/drawable/ic_overview3.png index e6851de..a7554f8 100644 Binary files a/app/src/main/res/drawable/ic_overview3.png and b/app/src/main/res/drawable/ic_overview3.png differ diff --git a/app/src/main/res/drawable/ic_overview4.png b/app/src/main/res/drawable/ic_overview4.png index bbbcf98..bcb4417 100644 Binary files a/app/src/main/res/drawable/ic_overview4.png and b/app/src/main/res/drawable/ic_overview4.png differ diff --git a/app/src/main/res/drawable/ic_overview5.png b/app/src/main/res/drawable/ic_overview5.png deleted file mode 100644 index 44b4331..0000000 Binary files a/app/src/main/res/drawable/ic_overview5.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview6.png b/app/src/main/res/drawable/ic_overview6.png deleted file mode 100644 index 4a42338..0000000 Binary files a/app/src/main/res/drawable/ic_overview6.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview7.png b/app/src/main/res/drawable/ic_overview7.png deleted file mode 100644 index 121547b..0000000 Binary files a/app/src/main/res/drawable/ic_overview7.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview8.png b/app/src/main/res/drawable/ic_overview8.png deleted file mode 100644 index 670d83b..0000000 Binary files a/app/src/main/res/drawable/ic_overview8.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_overview9.png b/app/src/main/res/drawable/ic_overview9.png deleted file mode 100644 index 56ad329..0000000 Binary files a/app/src/main/res/drawable/ic_overview9.png and /dev/null differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 90f93e5..c715ee9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,14 +66,10 @@ Terms of Use Updated - Welcome to NativeAppTemplate. - Sign in to manage your shops and item tags. - Organize your work across multiple organizations. - Invite teammates to collaborate. - Track item tags with a simple idle/completed state. - Create, edit, and delete item tags from your shop. - Switch between personal and shared organizations. - Have fun! + Onboarding description 1. + Onboarding description 2. + Onboarding description 3. + Onboarding description 4. Add Shop diff --git a/app/src/test/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModelTest.kt b/app/src/test/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModelTest.kt index 60b7af9..ef0eaf4 100644 --- a/app/src/test/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModelTest.kt +++ b/app/src/test/kotlin/com/nativeapptemplate/nativeapptemplatefree/ui/app_root/OnboardingViewModelTest.kt @@ -8,11 +8,16 @@ import org.junit.Test class OnboardingViewModelTest { @Test fun onboardingDescription_isValid() = runTest { - assertEquals(OnboardingViewModel.onboardingDescription(0), R.string.onboarding_description1) + assertEquals(OnboardingViewModel.onboardingDescription(1), R.string.onboarding_description1) } @Test fun onboardingImageId_isValid() = runTest { - assertEquals(OnboardingViewModel.onboardingImageId(0), R.drawable.ic_overview1) + assertEquals(OnboardingViewModel.onboardingImageId(1), R.drawable.ic_overview1) + } + + @Test + fun onboardings_hasFourSlides() = runTest { + assertEquals(4, OnboardingViewModel.onboardings.size) } }