@@ -18,39 +18,37 @@ package com.google.firebase.sessions
1818
1919import android.content.Context
2020import android.util.Log
21- import androidx.datastore.core.DataMigration
2221import androidx.datastore.core.DataStore
23- import androidx.datastore.core.DataStoreFactory
24- import androidx.datastore.core.MultiProcessDataStoreFactory
25- import androidx.datastore.core.Serializer
2622import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
27- import androidx.datastore.dataStoreFile
23+ import androidx.datastore.preferences.core.PreferenceDataStoreFactory
24+ import androidx.datastore.preferences.core.Preferences
25+ import androidx.datastore.preferences.core.emptyPreferences
26+ import androidx.datastore.preferences.preferencesDataStoreFile
2827import com.google.android.datatransport.TransportFactory
2928import com.google.firebase.FirebaseApp
3029import com.google.firebase.annotations.concurrent.Background
3130import com.google.firebase.annotations.concurrent.Blocking
3231import com.google.firebase.inject.Provider
3332import com.google.firebase.installations.FirebaseInstallationsApi
33+ import com.google.firebase.sessions.ProcessDetailsProvider.getProcessName
3434import com.google.firebase.sessions.settings.CrashlyticsSettingsFetcher
3535import com.google.firebase.sessions.settings.LocalOverrideSettings
3636import com.google.firebase.sessions.settings.RemoteSettings
3737import com.google.firebase.sessions.settings.RemoteSettingsFetcher
38- import com.google.firebase.sessions.settings.SessionConfigs
39- import com.google.firebase.sessions.settings.SessionConfigsSerializer
4038import com.google.firebase.sessions.settings.SessionsSettings
41- import com.google.firebase.sessions.settings.SettingsCache
42- import com.google.firebase.sessions.settings.SettingsCacheImpl
4339import com.google.firebase.sessions.settings.SettingsProvider
4440import dagger.Binds
4541import dagger.BindsInstance
4642import dagger.Component
4743import dagger.Module
4844import dagger.Provides
49- import java.io.File
5045import javax.inject.Qualifier
5146import javax.inject.Singleton
5247import kotlin.coroutines.CoroutineContext
53- import kotlinx.coroutines.CoroutineScope
48+
49+ @Qualifier internal annotation class SessionConfigsDataStore
50+
51+ @Qualifier internal annotation class SessionDetailsDataStore
5452
5553@Qualifier internal annotation class LocalOverrideSettingsProvider
5654
@@ -121,8 +119,6 @@ internal interface FirebaseSessionsComponent {
121119 @RemoteSettingsProvider
122120 fun remoteSettings (impl : RemoteSettings ): SettingsProvider
123121
124- @Binds @Singleton fun settingsCache (impl : SettingsCacheImpl ): SettingsCache
125-
126122 companion object {
127123 private const val TAG = " FirebaseSessions"
128124
@@ -137,67 +133,30 @@ internal interface FirebaseSessionsComponent {
137133
138134 @Provides
139135 @Singleton
140- fun sessionConfigsDataStore (
141- appContext : Context ,
142- @Blocking blockingDispatcher : CoroutineContext ,
143- ): DataStore <SessionConfigs > =
144- createDataStore(
145- serializer = SessionConfigsSerializer ,
136+ @SessionConfigsDataStore
137+ fun sessionConfigsDataStore (appContext : Context ): DataStore <Preferences > =
138+ PreferenceDataStoreFactory .create(
146139 corruptionHandler =
147140 ReplaceFileCorruptionHandler { ex ->
148- Log .w(TAG , " CorruptionException in session configs DataStore" , ex)
149- SessionConfigsSerializer .defaultValue
150- },
151- scope = CoroutineScope (blockingDispatcher),
152- produceFile = { appContext.dataStoreFile( " aqs/sessionConfigsDataStore.data " ) },
153- )
141+ Log .w(TAG , " CorruptionException in settings DataStore in ${getProcessName()} . " , ex)
142+ emptyPreferences()
143+ }
144+ ) {
145+ appContext.preferencesDataStoreFile( SessionDataStoreConfigs . SETTINGS_CONFIG_NAME )
146+ }
154147
155148 @Provides
156149 @Singleton
157- fun sessionDataStore (
158- appContext : Context ,
159- @Blocking blockingDispatcher : CoroutineContext ,
160- ): DataStore <SessionData > =
161- createDataStore(
162- serializer = SessionDataSerializer ,
150+ @SessionDetailsDataStore
151+ fun sessionDetailsDataStore (appContext : Context ): DataStore <Preferences > =
152+ PreferenceDataStoreFactory .create(
163153 corruptionHandler =
164154 ReplaceFileCorruptionHandler { ex ->
165- Log .w(TAG , " CorruptionException in session data DataStore" , ex)
166- SessionDataSerializer .defaultValue
167- },
168- scope = CoroutineScope (blockingDispatcher),
169- produceFile = { appContext.dataStoreFile(" aqs/sessionDataStore.data" ) },
170- )
171-
172- private fun <T > createDataStore (
173- serializer : Serializer <T >,
174- corruptionHandler : ReplaceFileCorruptionHandler <T >,
175- migrations : List <DataMigration <T >> = listOf(),
176- scope : CoroutineScope ,
177- produceFile : () -> File ,
178- ): DataStore <T > =
179- if (loadDataStoreSharedCounter()) {
180- MultiProcessDataStoreFactory .create(
181- serializer,
182- corruptionHandler,
183- migrations,
184- scope,
185- produceFile,
186- )
187- } else {
188- DataStoreFactory .create(serializer, corruptionHandler, migrations, scope, produceFile)
189- }
190-
191- /* * This native library in unavailable in some conditions, for example, Robolectric tests */
192- // TODO(mrober): Remove this when b/392626815 is resolved
193- private fun loadDataStoreSharedCounter (): Boolean =
194- try {
195- System .loadLibrary(" datastore_shared_counter" )
196- true
197- } catch (_: UnsatisfiedLinkError ) {
198- false
199- } catch (_: SecurityException ) {
200- false
155+ Log .w(TAG , " CorruptionException in sessions DataStore in ${getProcessName()} ." , ex)
156+ emptyPreferences()
157+ }
158+ ) {
159+ appContext.preferencesDataStoreFile(SessionDataStoreConfigs .SESSIONS_CONFIG_NAME )
201160 }
202161 }
203162 }
0 commit comments