Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: disable sentry if user does not grant anonymous metric collection #4339

Merged
merged 1 commit into from Nov 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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"
}
}
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
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