diff --git a/app/androidApp/src/main/java/tt/co/jesses/moonlight/android/app/MainActivity.kt b/app/androidApp/src/main/java/tt/co/jesses/moonlight/android/app/MainActivity.kt index 2d1827c..0249eeb 100644 --- a/app/androidApp/src/main/java/tt/co/jesses/moonlight/android/app/MainActivity.kt +++ b/app/androidApp/src/main/java/tt/co/jesses/moonlight/android/app/MainActivity.kt @@ -59,12 +59,10 @@ class MainActivity : ComponentActivity() { LaunchedEffect(key1 = hasSwiped) { if (!hasSwiped) { - coroutineScope.launch { - delay(5000) - scaffoldState.snackbarHostState.showSnackbar( - message = getString(R.string.swipe_to_see_more) - ) - } + delay(5000) + scaffoldState.snackbarHostState.showSnackbar( + message = getString(R.string.swipe_to_see_more) + ) } } diff --git a/app/common/src/main/java/tt/co/jesses/moonlight/common/data/model/UserPreferences.kt b/app/common/src/main/java/tt/co/jesses/moonlight/common/data/model/UserPreferences.kt index c68a0e6..2bbb9f6 100644 --- a/app/common/src/main/java/tt/co/jesses/moonlight/common/data/model/UserPreferences.kt +++ b/app/common/src/main/java/tt/co/jesses/moonlight/common/data/model/UserPreferences.kt @@ -2,6 +2,7 @@ package tt.co.jesses.moonlight.common.data.model data class UserPreferences( val analyticsAcceptance: Int = AnalyticsAcceptance.UNSET.ordinal, + val hasSwiped: Boolean = false, ) enum class AnalyticsAcceptance { diff --git a/app/common/src/main/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepository.kt b/app/common/src/main/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepository.kt index 09f1b61..c17a4bd 100644 --- a/app/common/src/main/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepository.kt +++ b/app/common/src/main/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepository.kt @@ -18,9 +18,10 @@ class UserPreferencesRepository @Inject constructor( ) { private val _isAnalyticsPreferencePending = MutableStateFlow(true) - val hasSwiped: Flow = dataStore.data.map { preferences -> - preferences[PreferencesKeys.HAS_SWIPED] ?: false - } + val hasSwiped: Flow = dataStore.data + .map { preferences -> + preferences[PreferencesKeys.HAS_SWIPED] ?: false + } suspend fun setHasSwiped(hasSwiped: Boolean) { dataStore.edit { preferences -> @@ -29,9 +30,10 @@ class UserPreferencesRepository @Inject constructor( } suspend fun fetchInitialPreferences(): UserPreferences { - val preferences = dataStore.data.first().toPreferences() + val preferences = dataStore.data.first() return UserPreferences( - analyticsAcceptance = preferences[PreferencesKeys.ANALYTICS_ACCEPTANCE] ?: AnalyticsAcceptance.UNSET.ordinal + analyticsAcceptance = preferences[PreferencesKeys.ANALYTICS_ACCEPTANCE] ?: AnalyticsAcceptance.UNSET.ordinal, + hasSwiped = preferences[PreferencesKeys.HAS_SWIPED] ?: false ) } diff --git a/app/common/src/test/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepositoryTest.kt b/app/common/src/test/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepositoryTest.kt index 404f991..5d32284 100644 --- a/app/common/src/test/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepositoryTest.kt +++ b/app/common/src/test/java/tt/co/jesses/moonlight/common/data/repository/UserPreferencesRepositoryTest.kt @@ -1,14 +1,18 @@ package tt.co.jesses.moonlight.common.data.repository import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.MutablePreferences import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.mutablePreferencesOf +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.kotlin.any @@ -26,6 +30,7 @@ class UserPreferencesRepositoryTest { @BeforeEach fun setUp() { dataStore = mock() + whenever(dataStore.data).thenReturn(flowOf(emptyPreferences())) repository = UserPreferencesRepository(dataStore) } @@ -65,8 +70,49 @@ class UserPreferencesRepositoryTest { repository.updateAnalyticsAcceptance(acceptance) // Then - argumentCaptor Unit>().apply { + argumentCaptor Unit>().apply { verify(dataStore).edit(capture()) } } + + @Test + fun hasSwipedShouldEmitValueFromDatastore() = runTest { + // Given + val key = booleanPreferencesKey("has_swiped") + val preferences = mutablePreferencesOf(key to true) + whenever(dataStore.data).thenReturn(flowOf(preferences)) + val repository = UserPreferencesRepository(dataStore) + + // When + val result = repository.hasSwiped.first() + + // Then + assertEquals(true, result) + } + + @Test + fun `setHasSwiped should update datastore`() = runTest { + // When + repository.setHasSwiped(true) + + // Then + argumentCaptor Unit>().apply { + verify(dataStore).edit(capture()) + } + } + + @Test + fun `fetchInitialPreferences should return correct hasSwiped`() = runTest { + // Given + val key = booleanPreferencesKey("has_swiped") + val preferences = mutablePreferencesOf(key to true) + whenever(dataStore.data).thenReturn(flowOf(preferences)) + val repository = UserPreferencesRepository(dataStore) + + // When + val result = repository.fetchInitialPreferences() + + // Then + assertTrue(result.hasSwiped) + } } diff --git a/app/gradle.properties b/app/gradle.properties index 2941d20..3d76eef 100644 --- a/app/gradle.properties +++ b/app/gradle.properties @@ -1,5 +1,5 @@ ### Gradle -org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 --add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED # When set to true, Gradle will try to reuse outputs from previous builds org.gradle.caching=true