Disable Firebase data collection in debug builds

This commit is contained in:
Kirill Kamakin
2022-11-05 12:00:51 +01:00
parent b84406d384
commit f98de3784e
6 changed files with 76 additions and 0 deletions

View File

@@ -2,6 +2,8 @@ package gq.kirmanak.mealient
import android.app.Application import android.app.Application
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import gq.kirmanak.mealient.data.analytics.Analytics
import gq.kirmanak.mealient.data.configuration.BuildConfiguration
import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.logging.Logger
import javax.inject.Inject import javax.inject.Inject
@@ -11,8 +13,15 @@ class App : Application() {
@Inject @Inject
lateinit var logger: Logger lateinit var logger: Logger
@Inject
lateinit var buildConfiguration: BuildConfiguration
@Inject
lateinit var analytics: Analytics
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
logger.v { "onCreate() called" } logger.v { "onCreate() called" }
analytics.setIsEnabled(!buildConfiguration.isDebug())
} }
} }

View File

@@ -0,0 +1,6 @@
package gq.kirmanak.mealient.data.analytics
interface Analytics {
fun setIsEnabled(enabled: Boolean)
}

View File

@@ -0,0 +1,21 @@
package gq.kirmanak.mealient.data.analytics
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.crashlytics.FirebaseCrashlytics
import gq.kirmanak.mealient.logging.Logger
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class AnalyticsImpl @Inject constructor(
private val firebaseAnalytics: FirebaseAnalytics,
private val firebaseCrashlytics: FirebaseCrashlytics,
private val logger: Logger,
) : Analytics {
override fun setIsEnabled(enabled: Boolean) {
logger.v { "setIsEnabled() called with: enabled = $enabled" }
firebaseAnalytics.setAnalyticsCollectionEnabled(enabled)
firebaseCrashlytics.setCrashlyticsCollectionEnabled(enabled)
}
}

View File

@@ -0,0 +1,5 @@
package gq.kirmanak.mealient.data.configuration
interface BuildConfiguration {
fun isDebug(): Boolean
}

View File

@@ -0,0 +1,11 @@
package gq.kirmanak.mealient.data.configuration
import gq.kirmanak.mealient.BuildConfig
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class BuildConfigurationImpl @Inject constructor() : BuildConfiguration {
override fun isDebug(): Boolean = BuildConfig.DEBUG
}

View File

@@ -5,12 +5,18 @@ import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.PreferenceDataStoreFactory import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStoreFile import androidx.datastore.preferences.preferencesDataStoreFile
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.crashlytics.FirebaseCrashlytics
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import gq.kirmanak.mealient.data.analytics.Analytics
import gq.kirmanak.mealient.data.analytics.AnalyticsImpl
import gq.kirmanak.mealient.data.configuration.BuildConfiguration
import gq.kirmanak.mealient.data.configuration.BuildConfigurationImpl
import gq.kirmanak.mealient.data.storage.PreferencesStorage import gq.kirmanak.mealient.data.storage.PreferencesStorage
import gq.kirmanak.mealient.data.storage.PreferencesStorageImpl import gq.kirmanak.mealient.data.storage.PreferencesStorageImpl
import javax.inject.Singleton import javax.inject.Singleton
@@ -24,9 +30,27 @@ interface AppModule {
@Singleton @Singleton
fun provideDataStore(@ApplicationContext context: Context): DataStore<Preferences> = fun provideDataStore(@ApplicationContext context: Context): DataStore<Preferences> =
PreferenceDataStoreFactory.create { context.preferencesDataStoreFile("settings") } PreferenceDataStoreFactory.create { context.preferencesDataStoreFile("settings") }
@Provides
@Singleton
fun provideFirebaseAnalytics(@ApplicationContext context: Context): FirebaseAnalytics =
FirebaseAnalytics.getInstance(context)
@Provides
@Singleton
fun provideFirebaseCrashlytics(): FirebaseCrashlytics =
FirebaseCrashlytics.getInstance()
} }
@Binds @Binds
@Singleton @Singleton
fun bindPreferencesStorage(preferencesStorage: PreferencesStorageImpl): PreferencesStorage fun bindPreferencesStorage(preferencesStorage: PreferencesStorageImpl): PreferencesStorage
@Binds
@Singleton
fun bindBuildConfiguration(buildConfigurationImpl: BuildConfigurationImpl): BuildConfiguration
@Binds
@Singleton
fun bindAnalytics(analyticsImpl: AnalyticsImpl): Analytics
} }