Skip to content

Commit

Permalink
rebase
Browse files Browse the repository at this point in the history
  • Loading branch information
naivekook committed Mar 11, 2021
1 parent a202226 commit d22463c
Show file tree
Hide file tree
Showing 28 changed files with 348 additions and 197 deletions.
4 changes: 4 additions & 0 deletions app/build.gradle.kts
Expand Up @@ -276,6 +276,7 @@ android {
buildConfigField("String", "OFWEBSITE", "\"https://world.openfoodfacts.org/\"")
buildConfigField("String", "WIKIDATA", "\"https://www.wikidata.org/wiki/Special:EntityData/\"")
buildConfigField("String", "STATICURL", "\"https://static.openfoodfacts.org\"")
buildConfigField("String", "MATOMO_URL", "\"https://analytics.openfoodfacts.org/piwik.php\"")
}
create("obf") {
applicationId = "openfoodfacts.github.scrachx.openbeauty"
Expand All @@ -286,6 +287,7 @@ android {
buildConfigField("String", "OFWEBSITE", "\"https://world.openbeautyfacts.org/\"")
buildConfigField("String", "WIKIDATA", "\"https://www.wikidata.org/wiki/Special:EntityData/\"")
buildConfigField("String", "STATICURL", "\"https://static.openbeautyfacts.org\"")
buildConfigField("String", "MATOMO_URL", "\"https://analytics.openfoodfacts.org/piwik.php\"")
}
create("opff") {
applicationId = "org.openpetfoodfacts.scanner"
Expand All @@ -296,6 +298,7 @@ android {
buildConfigField("String", "OFWEBSITE", "\"https://world.openpetfoodfacts.org/\"")
buildConfigField("String", "WIKIDATA", "\"https://www.wikidata.org/wiki/Special:EntityData/\"")
buildConfigField("String", "STATICURL", "\"https://static.openpetfoodfacts.org\"")
buildConfigField("String", "MATOMO_URL", "\"https://analytics.openfoodfacts.org/piwik.php\"")
}
create("opf") {
applicationId = "org.openproductsfacts.scanner"
Expand All @@ -306,6 +309,7 @@ android {
buildConfigField("String", "OFWEBSITE", "\"https://world.openproductsfacts.org/\"")
buildConfigField("String", "WIKIDATA", "\"https://www.wikidata.org/wiki/Special:EntityData/\"")
buildConfigField("String", "STATICURL", "\"https://static.openproductsfacts.org\"")
buildConfigField("String", "MATOMO_URL", "\"https://analytics.openfoodfacts.org/piwik.php\"")
}
}

Expand Down
@@ -0,0 +1,111 @@
package openfoodfacts.github.scrachx.openfood.analytics

sealed class AnalyticsEvent {

abstract val category: String
abstract val action: String
abstract val name: String?
abstract val value: Float?

data class ScannedBarcode(override val name: String) : AnalyticsEvent() {
override val category = "scanner"
override val action = "scanned"
override val value: Float? = null
}

data class ScannedBarcodeResultExpanded(override val name: String?) : AnalyticsEvent() {
override val category = "scanner"
override val action = "result-expanded"
override val value: Float? = null
}

data class AllergenAlertCreated(override val name: String) : AnalyticsEvent() {
override val category = "allergen-alerts"
override val action = "created"
override val value: Float? = null
}

data class ProductCreated(override val name: String?) : AnalyticsEvent() {
override val category = "products"
override val action = "created"
override val value: Float? = null
}

data class ProductEdited(override val name: String?) : AnalyticsEvent() {
override val category = "products"
override val action = "edited"
override val value: Float? = null
}

data class ProductIngredientsPictureEdited(override val name: String?) : AnalyticsEvent() {
override val category = "products"
override val action = "edited-ingredients-picture"
override val value: Float? = null
}

object UserLogin : AnalyticsEvent() {
override val category = "user-account"
override val action = "login"
override val name: String? = null
override val value: Float? = null
}

object UserLogout : AnalyticsEvent() {
override val category = "user-account"
override val action = "logout"
override val name: String? = null
override val value: Float? = null
}

object RobotoffLoginPrompt : AnalyticsEvent() {
override val category = "user-account"
override val action = "login-prompt"
override val name = "robotoff"
override val value: Float? = null
}

object RobotoffLoggedInAfterPrompt : AnalyticsEvent() {
override val category = "user-account"
override val action = "logged-in-after-prompt"
override val name = "robotoff"
override val value: Float? = null
}

object ShoppingListCreated : AnalyticsEvent() {
override val category = "shopping-lists"
override val action = "created"
override val name: String? = null
override val value: Float? = null
}

object ShoppingListExported : AnalyticsEvent() {
override val category = "shopping-lists"
override val action = "exported"
override val name: String? = null
override val value: Float? = null
}

data class IngredientAnalysisEnabled(override val name: String) : AnalyticsEvent() {
override val category = "ingredient-analysis"
override val action = "enabled"
override val value: Float? = null
}

data class IngredientAnalysisDisabled(override val name: String) : AnalyticsEvent() {
override val category = "ingredient-analysis"
override val action = "disabled"
override val value: Float? = null
}

data class AddProductToComparison(override val name: String) : AnalyticsEvent() {
override val category = "products"
override val action = "compare-add"
override val value: Float? = null
}

data class CompareProducts(override val value: Float) : AnalyticsEvent() {
override val category = "products"
override val action = "compare-multiple"
override val name: String? = null
}
}
@@ -0,0 +1,8 @@
package openfoodfacts.github.scrachx.openfood.analytics

enum class AnalyticsView(val path: String) {
Scanner("scanner"),
ProductEditOverview("products/edit/overview"),
ProductEditIngredients("products/edit/ingredients"),
ProductEditNutritionFacts("products/edit/nutrition_facts");
}
@@ -0,0 +1,54 @@
package openfoodfacts.github.scrachx.openfood.analytics

import androidx.fragment.app.FragmentManager
import androidx.preference.PreferenceManager
import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.app.OFFApplication
import openfoodfacts.github.scrachx.openfood.features.analyticsusage.AnalyticsUsageDialogFragment
import org.matomo.sdk.Matomo
import org.matomo.sdk.TrackerBuilder
import org.matomo.sdk.extra.TrackHelper


object MatomoAnalytics {

//TODO: change matomo url and id from properties
private val tracker = TrackerBuilder
.createDefault(BuildConfig.MATOMO_URL, 1)
.build(Matomo.getInstance(OFFApplication.instance))
.apply {
isOptOut = PreferenceManager.getDefaultSharedPreferences(OFFApplication.instance)
.getBoolean(OFFApplication.instance.getString(R.string.pref_analytics_reporting_key), false)
}
.also {
TrackHelper.track().download().with(it)
}

fun trackView(view: AnalyticsView) {
TrackHelper.track()
.screen(view.path)
.with(tracker)
}

fun trackEvent(event: AnalyticsEvent) {
TrackHelper.track()
.event(event.category, event.action)
.name(event.name)
.value(event.value)
.with(tracker)
}

fun showAnalyticsBottomSheetIfNeeded(childFragmentManager: FragmentManager) {
if (PreferenceManager.getDefaultSharedPreferences(OFFApplication.instance).contains(OFFApplication.instance.getString(R.string.pref_analytics_reporting_key))) {
//key already exists, do not show
return
}
val bottomSheet = AnalyticsUsageDialogFragment()
bottomSheet.show(childFragmentManager, AnalyticsUsageDialogFragment.TAG)
}

fun onAnalyticsEnabledToggled(enabled: Boolean) {
tracker.isOptOut = !enabled
}
}
@@ -0,0 +1,43 @@
package openfoodfacts.github.scrachx.openfood.analytics

import androidx.preference.PreferenceManager
import io.sentry.Sentry
import io.sentry.android.core.SentryAndroid
import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.app.OFFApplication


object SentryAnalytics {

// 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 {
PreferenceManager.getDefaultSharedPreferences(OFFApplication.instance)
.getBoolean(OFFApplication.instance.getString(R.string.pref_crash_reporting_key), true)
}

fun init() {
if (isCrashReportingEnabled) {
SentryAndroid.init(OFFApplication.instance)
Sentry.configureScope { scope ->
scope.setTag("flavor", BuildConfig.FLAVOR)
}
}
}

fun setBarcode(barcode: String) {
setTag("barcode", barcode)
}

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

fun record(exception: Throwable) {
if (isCrashReportingEnabled) {
Sentry.captureException(exception)
}
}
}

This file was deleted.

Expand Up @@ -34,7 +34,7 @@ import openfoodfacts.github.scrachx.openfood.utils.OFFDatabaseHelper
import org.greenrobot.eventbus.EventBus
import org.greenrobot.greendao.query.QueryBuilder
import java.io.IOException
import openfoodfacts.github.scrachx.openfood.app.AnalyticsService.init as initAnalytics
import openfoodfacts.github.scrachx.openfood.analytics.SentryAnalytics.init as initAnalytics

class OFFApplication : MultiDexApplication() {
override fun onCreate() {
Expand Down Expand Up @@ -102,4 +102,4 @@ class OFFApplication : MultiDexApplication() {
private set

}
}
}
Expand Up @@ -38,13 +38,14 @@ import openfoodfacts.github.scrachx.openfood.AppFlavors.OFF
import openfoodfacts.github.scrachx.openfood.AppFlavors.isFlavors
import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabsHelper
import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
import openfoodfacts.github.scrachx.openfood.databinding.ActivityLoginBinding
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
import openfoodfacts.github.scrachx.openfood.network.CommonApiManager.productsApi
import openfoodfacts.github.scrachx.openfood.utils.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.utils.Utils
import openfoodfacts.github.scrachx.openfood.utils.getLoginPreferences
import retrofit2.Response
Expand Down Expand Up @@ -149,7 +150,7 @@ class LoginActivity : BaseActivity() {
binding.txtInfoLogin.setTextColor(ContextCompat.getColor(this, R.color.green_500))
binding.txtInfoLogin.setText(R.string.txtInfoLoginOk)

AnalyticsEvent.UserLogin().track()
MatomoAnalytics.trackEvent(AnalyticsEvent.UserLogin)

setResult(RESULT_OK)
finish()
Expand Down
Expand Up @@ -71,16 +71,18 @@ import openfoodfacts.github.scrachx.openfood.AppFlavors
import openfoodfacts.github.scrachx.openfood.AppFlavors.isFlavors
import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabsHelper
import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
import openfoodfacts.github.scrachx.openfood.databinding.ActivityMainBinding
import openfoodfacts.github.scrachx.openfood.features.changelog.ChangelogDialog
import openfoodfacts.github.scrachx.openfood.features.LoginActivity.Companion.LoginContract
import openfoodfacts.github.scrachx.openfood.features.adapters.PhotosAdapter
import openfoodfacts.github.scrachx.openfood.features.additives.AdditiveListActivity
import openfoodfacts.github.scrachx.openfood.features.allergensalert.AllergensAlertFragment
import openfoodfacts.github.scrachx.openfood.features.categories.activity.CategoryActivity
import openfoodfacts.github.scrachx.openfood.features.changelog.ChangelogDialog
import openfoodfacts.github.scrachx.openfood.features.compare.ProductCompareActivity
import openfoodfacts.github.scrachx.openfood.features.listeners.CommonBottomListenerInstaller.installBottomNavigation
import openfoodfacts.github.scrachx.openfood.features.listeners.CommonBottomListenerInstaller.selectNavigationItem
Expand Down Expand Up @@ -513,7 +515,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
private fun logout() {
getSharedPreferences(PreferencesFragment.LOGIN_PREF, MODE_PRIVATE).edit { clear() }
updateConnectedState()
AnalyticsEvent.UserLogout().track()
MatomoAnalytics.trackEvent(AnalyticsEvent.UserLogout)
}

override fun onSaveInstanceState(outState: Bundle) {
Expand Down Expand Up @@ -723,7 +725,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
public override fun onResume() {
super.onResume()
binding.bottomNavigationInclude.bottomNavigation.selectNavigationItem(R.id.home_page)
AnalyticsService.getInstance().showAnalyticsBottomSheetIfNeeded(supportFragmentManager)
MatomoAnalytics.showAnalyticsBottomSheetIfNeeded(supportFragmentManager)

// change drawer menu item from "install" to "open" when navigating back from play store.
if (isApplicationInstalled(this@MainActivity, BuildConfig.OFOTHERLINKAPP)) {
Expand Down
Expand Up @@ -52,6 +52,8 @@ import openfoodfacts.github.scrachx.openfood.AppFlavors.OFF
import openfoodfacts.github.scrachx.openfood.AppFlavors.OPFF
import openfoodfacts.github.scrachx.openfood.AppFlavors.isFlavors
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.app.OFFApplication
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
Expand Down Expand Up @@ -241,7 +243,9 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare


// Disable photo mode for OpenProductFacts
if (isFlavors(AppFlavors.OPF)) requirePreference<Preference>(getString(R.string.pref_show_product_photos_key)).isVisible = false
if (isFlavors(AppFlavors.OPF)) {
requirePreference<Preference>(getString(R.string.pref_show_product_photos_key)).isVisible = false
}

// Preference to show version name
requirePreference<Preference>(getString(R.string.pref_version_key)).let {
Expand All @@ -260,6 +264,13 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare
preferenceScreen.removePreference(preferenceScreen.requirePreference(getString(R.string.pref_key_display)))
}
}

requirePreference<SwitchPreference>(getString(R.string.pref_analytics_reporting_key)).let {
it.setOnPreferenceChangeListener { _, newValue ->
MatomoAnalytics.onAnalyticsEnabledToggled(newValue == true)
true
}
}
}

private fun buildDisplayCategory(configs: List<AnalysisTagConfig>?) {
Expand Down Expand Up @@ -305,6 +316,15 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare
summaryOn = null
summaryOff = null
title = getString(R.string.display_analysis_tag_status, config.typeName.toLowerCase(Locale.getDefault()))
setOnPreferenceChangeListener { _, newValue ->
val event = if (newValue == true) {
AnalyticsEvent.IngredientAnalysisEnabled(config.type)
} else {
AnalyticsEvent.IngredientAnalysisDisabled(config.type)
}
MatomoAnalytics.trackEvent(event)
true
}
})
}
}
Expand Down

0 comments on commit d22463c

Please sign in to comment.