Skip to content

Commit

Permalink
feat: disable sentry if user does not grant anonymous metric collecti…
Browse files Browse the repository at this point in the history
…on (#4339)

Related to #4211
  • Loading branch information
VaiTon committed Nov 1, 2021
1 parent d5e33f7 commit 0ab43cd
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,48 @@ import javax.inject.Singleton

@Singleton
class SentryAnalytics @Inject constructor(
@ApplicationContext private val context: Context,
private val sharedPreferences: SharedPreferences,
@ApplicationContext private val context: Context,
private val sharedPreferences: SharedPreferences,
) {

// isCrashReportingEnabled is not dynamic, as sentry can not be enabled / disabled, so it takes the value at startup, and changes will only be taken into account after an app restart
private val isCrashReportingEnabled by lazy {
sharedPreferences.getBoolean(context.getString(R.string.pref_crash_reporting_key), true)
val prefKey = context.getString(R.string.pref_crash_reporting_key)

private val enabledFromPrefs get() = sharedPreferences.getBoolean(prefKey, false)

private val listener: (SharedPreferences, String) -> Unit = { _, key ->
if (key == prefKey) refresh()
}

init {
if (isCrashReportingEnabled) {
// Init sharedPrefs listener
sharedPreferences.registerOnSharedPreferenceChangeListener(listener)
refresh()
}

private fun refresh() {
if (enabledFromPrefs) {
SentryAndroid.init(context)
Sentry.configureScope { scope ->
scope.setTag("flavor", BuildConfig.FLAVOR)
Sentry.configureScope {
it.setTag(FLAVOR_TAG, BuildConfig.FLAVOR)
}
} else {
// Init with null dsn == disable sentry
Sentry.init("")
}
}

fun setBarcode(barcode: String) {
setTag("barcode", barcode)
fun record(exception: Throwable) {
Sentry.captureException(exception)
}

fun setTag(key: String, value: String) {
if (isCrashReportingEnabled) {
Sentry.setTag(key, value)
}
Sentry.setTag(key, value)
}

fun record(exception: Throwable) {
if (isCrashReportingEnabled) {
Sentry.captureException(exception)
}
fun setBarcode(barcode: String) = setTag(BARCODE_TAG, barcode)

companion object {
private const val FLAVOR_TAG = "flavor"
private const val BARCODE_TAG = "barcode"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import androidx.viewpager.widget.ViewPager.OnPageChangeListener
import dagger.hilt.android.AndroidEntryPoint
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.analytics.SentryAnalytics
import openfoodfacts.github.scrachx.openfood.databinding.ActivityWelcomeBinding
import openfoodfacts.github.scrachx.openfood.features.MainActivity
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
Expand Down Expand Up @@ -64,6 +65,9 @@ class WelcomeActivity : BaseActivity() {
@Inject
lateinit var matomoAnalytics: MatomoAnalytics

@Inject
lateinit var sentryAnalytics: SentryAnalytics

@Inject
lateinit var sharedPreferences: SharedPreferences

Expand All @@ -76,7 +80,7 @@ class WelcomeActivity : BaseActivity() {
refreshBottomBar(position)

when (WelcomeScreen[position]) {
WelcomeScreen.MATOMO -> {
WelcomeScreen.ANALYTICS -> {
binding.btnNext.setText(R.string.preference_analytics_bottom_sheet_grant_button)
binding.btnSkip.setText(R.string.preference_analytics_bottom_sheet_decline_button)

Expand Down Expand Up @@ -136,15 +140,16 @@ class WelcomeActivity : BaseActivity() {
binding.btnNext.setOnClickListener { binding.viewPager.currentItem = nextItem }
}

private fun saveThenLaunchHome(grant: Boolean) {
saveAnalyticsReportingPref(grant)
matomoAnalytics.setEnabled(grant)
private fun saveThenLaunchHome(analyticsEnabled: Boolean) {
saveAnalyticsReportingPref(analyticsEnabled)
matomoAnalytics.setEnabled(analyticsEnabled)
launchHome()
}

private fun saveAnalyticsReportingPref(value: Boolean) {
private fun saveAnalyticsReportingPref(enabled: Boolean) {
sharedPreferences.edit {
putBoolean(getString(R.string.pref_analytics_reporting_key), value)
putBoolean(getString(R.string.pref_analytics_reporting_key), enabled)
putBoolean(sentryAnalytics.prefKey, enabled)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,15 @@ import androidx.annotation.ColorRes
import androidx.annotation.StringRes
import openfoodfacts.github.scrachx.openfood.R

internal enum class WelcomeScreen(@StringRes layoutRes: Int, @ColorRes colorRes: Int) {
internal enum class WelcomeScreen(
@field:StringRes @StringRes val layout: Int,
@field:ColorRes @ColorRes val color: Int
) {
INTRO(R.layout.welcome_slide_intro, R.color.bg_welcome_intro),
SCREEN_1(R.layout.welcome_slide_1, R.color.bg_welcome_nutriscore),
SCREEN_2(R.layout.welcome_slide_2, R.color.bg_welcome_nova),
SCREEN_3(R.layout.welcome_slide_3, R.color.bg_welcome_ecoscore),
MATOMO(R.layout.welcome_slide_matomo, R.color.bg_welcome_matomo);

@StringRes
val layout = layoutRes

@ColorRes
val color = colorRes
ANALYTICS(R.layout.welcome_slide_matomo, R.color.bg_welcome_matomo);

companion object {
operator fun get(position: Int) = values()[position]
Expand Down

0 comments on commit 0ab43cd

Please sign in to comment.