diff --git a/app/src/androidTest/java/org/tasks/injection/TestModule.kt b/app/src/androidTest/java/org/tasks/injection/TestModule.kt index d4bf3c9ae..a7037a45f 100644 --- a/app/src/androidTest/java/org/tasks/injection/TestModule.kt +++ b/app/src/androidTest/java/org/tasks/injection/TestModule.kt @@ -1,12 +1,20 @@ package org.tasks.injection import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.PreferenceDataStoreFactory +import androidx.datastore.preferences.core.edit import androidx.room.Room import dagger.Module import dagger.Provides import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import dagger.hilt.testing.TestInstallIn +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.runBlocking +import okio.Path.Companion.toPath import org.mockito.Mockito.mock import org.tasks.TestUtilities import org.tasks.data.db.Database @@ -16,7 +24,9 @@ import org.tasks.location.MockLocationManager import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissivePermissionChecker import org.tasks.preferences.Preferences +import org.tasks.preferences.TasksPreferences import javax.inject.Singleton +import androidx.datastore.preferences.core.Preferences as DataStorePreferences @Module @TestInstallIn( @@ -52,4 +62,26 @@ class TestModule { @Provides fun getWorkManager(): WorkManager = mock(WorkManager::class.java) -} \ No newline at end of file + + @Singleton + @Provides + fun getTasksPreferences(@ApplicationContext context: Context): TasksPreferences { + val dataStore = synchronized(dataStoreLock) { + dataStoreInstance + ?: PreferenceDataStoreFactory + .createWithPath( + scope = CoroutineScope(Dispatchers.IO + SupervisorJob()), + produceFile = { context.filesDir.resolve("test_tasks.preferences_pb").absolutePath.toPath() } + ) + .also { dataStoreInstance = it } + } + runBlocking { dataStore.edit { it.clear() } } + return TasksPreferences(dataStore) + } + + companion object { + @Volatile + private var dataStoreInstance: DataStore? = null + private val dataStoreLock = Any() + } +} diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index 28ed0c604..343aa2698 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -16,6 +16,7 @@ import org.tasks.analytics.Firebase import org.tasks.billing.BillingClient import org.tasks.billing.BillingClientImpl import org.tasks.billing.Inventory +import org.tasks.broadcast.RefreshBroadcaster import org.tasks.caldav.FileStorage import org.tasks.caldav.VtodoCache import org.tasks.compose.drawer.DrawerConfiguration @@ -37,7 +38,6 @@ import org.tasks.data.db.Database import org.tasks.filters.FilterProvider import org.tasks.filters.PreferenceDrawerConfiguration import org.tasks.jobs.WorkManager -import org.tasks.kmp.createDataStore import org.tasks.preferences.Preferences import org.tasks.preferences.TasksPreferences import org.tasks.security.AndroidKeyStoreEncryption @@ -45,8 +45,6 @@ import org.tasks.security.KeyStoreEncryption import java.util.Locale import javax.inject.Singleton -import org.tasks.broadcast.RefreshBroadcaster - @Module @InstallIn(SingletonComponent::class) class ApplicationModule { @@ -147,11 +145,6 @@ class ApplicationModule { fun providesNotificationManager(@ApplicationContext context: Context) = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - @Singleton - @Provides - fun providesTasksPreferences(@ApplicationContext context: Context) = - TasksPreferences(createDataStore(context)) - @Provides fun providesDrawerConfiguration(preferences: Preferences): DrawerConfiguration = PreferenceDrawerConfiguration(preferences) @@ -192,4 +185,4 @@ class ApplicationModule { @Provides fun providesBroadcastRefresh(localBroadcastManager: LocalBroadcastManager): RefreshBroadcaster = localBroadcastManager -} \ No newline at end of file +} diff --git a/app/src/main/java/org/tasks/injection/ProductionModule.kt b/app/src/main/java/org/tasks/injection/ProductionModule.kt index 3fd3b3b41..b7867eaae 100644 --- a/app/src/main/java/org/tasks/injection/ProductionModule.kt +++ b/app/src/main/java/org/tasks/injection/ProductionModule.kt @@ -23,9 +23,11 @@ import org.tasks.data.db.Database import org.tasks.db.Migrations import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManagerImpl +import org.tasks.kmp.createDataStore import org.tasks.location.AndroidLocationManager import org.tasks.location.LocationManager import org.tasks.preferences.Preferences +import org.tasks.preferences.TasksPreferences import timber.log.Timber import javax.inject.Singleton @@ -56,6 +58,11 @@ internal class ProductionModule { @Provides fun getPreferences(@ApplicationContext context: Context): Preferences = Preferences(context) + @Singleton + @Provides + fun getTasksPreferences(@ApplicationContext context: Context): TasksPreferences = + TasksPreferences(createDataStore(context)) + @Provides fun locationManager(locationManager: AndroidLocationManager): LocationManager = locationManager