diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/MainActivity.kt b/app/src/main/java/us/kikin/android/gamingbacklog/MainActivity.kt index 235d657..c72e5bd 100644 --- a/app/src/main/java/us/kikin/android/gamingbacklog/MainActivity.kt +++ b/app/src/main/java/us/kikin/android/gamingbacklog/MainActivity.kt @@ -5,6 +5,7 @@ import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.activity.viewModels import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.material3.MaterialTheme @@ -19,6 +20,7 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import us.kikin.android.gamingbacklog.domain.usecase.AppEntryUseCases import us.kikin.android.gamingbacklog.presentation.onboarding.OnboardingScreen +import us.kikin.android.gamingbacklog.presentation.onboarding.OnboardingViewModel import us.kikin.android.gamingbacklog.ui.theme.AppTheme import javax.inject.Inject @@ -28,6 +30,8 @@ class MainActivity : ComponentActivity() { @Inject lateinit var appEntryUseCases: AppEntryUseCases + private val onboardingViewModel: OnboardingViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) @@ -41,25 +45,13 @@ class MainActivity : ComponentActivity() { setContent { AppTheme { Box(modifier = Modifier.background(color = MaterialTheme.colorScheme.background)) { - OnboardingScreen() + OnboardingScreen( + event = { event -> + onboardingViewModel.onEvent(event) + } + ) } } } } } - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -private fun GreetingPreview() { - AppTheme { - Greeting("Android") - } -} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingEvent.kt b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingEvent.kt new file mode 100644 index 0000000..b7cd4ec --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingEvent.kt @@ -0,0 +1,6 @@ +package us.kikin.android.gamingbacklog.presentation.onboarding + +sealed class OnboardingEvent { + + object SaveAppEntry: OnboardingEvent() +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingScreen.kt b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingScreen.kt index 0b8f0e4..2936c8e 100644 --- a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingScreen.kt +++ b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingScreen.kt @@ -30,7 +30,8 @@ import us.kikin.android.gamingbacklog.ui.theme.AppTheme @OptIn(ExperimentalFoundationApi::class) @Composable fun OnboardingScreen( - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + event: (OnboardingEvent) -> Unit, ) { Column(modifier = modifier.fillMaxSize()) { val pagerState = rememberPagerState(initialPage = 0) { @@ -79,6 +80,9 @@ fun OnboardingScreen( } PrimaryButton(text = buttonState.value[1], onClick = { + if (pagerState.currentPage == pages.size - 1) { + event(OnboardingEvent.SaveAppEntry) + } scope.launch { pagerState.animateScrollToPage(pagerState.currentPage + 1) } }) } @@ -91,6 +95,6 @@ fun OnboardingScreen( @Preview(showBackground = true) internal fun OnboardingScreenPreview() { AppTheme { - OnboardingScreen() + OnboardingScreen(event = {}) } } diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingViewModel.kt b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingViewModel.kt new file mode 100644 index 0000000..4094a9c --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/onboarding/OnboardingViewModel.kt @@ -0,0 +1,28 @@ +package us.kikin.android.gamingbacklog.presentation.onboarding + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import us.kikin.android.gamingbacklog.domain.usecase.AppEntryUseCases +import javax.inject.Inject + +@HiltViewModel +class OnboardingViewModel @Inject constructor( + private val appEntryUseCases: AppEntryUseCases +) : ViewModel() { + + fun onEvent(event: OnboardingEvent) { + when (event) { + OnboardingEvent.SaveAppEntry -> { + saveAppEntry() + } + } + } + + private fun saveAppEntry() { + viewModelScope.launch { + appEntryUseCases.saveAppEntry() + } + } +}