DataStore singleton for test module

Clear for each injection
renovate/fastlane-2.x-lockfile
Alex Baker 6 days ago
parent 660e831725
commit 73563d3ac3

@ -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)
}
@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<DataStorePreferences>? = null
private val dataStoreLock = Any()
}
}

@ -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
}
}

@ -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

Loading…
Cancel
Save