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 4c0a112 commit 9023eaa
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 @@ -280,6 +280,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\"")
dimension = "versionCode"
}
create("obf") {
Expand All @@ -291,6 +292,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\"")
dimension = "versionCode"
}
create("opff") {
Expand All @@ -302,6 +304,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\"")
dimension = "versionCode"
}
create("opf") {
Expand All @@ -313,6 +316,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\"")
dimension = "versionCode"
}
create("playstore") {
Expand Down
Expand Up @@ -58,6 +58,9 @@ import io.reactivex.schedulers.Schedulers
import openfoodfacts.github.scrachx.openfood.AppFlavors.OFF
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.AnalyticsView
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.app.OFFApplication
import openfoodfacts.github.scrachx.openfood.databinding.ActivityContinuousScanBinding
import openfoodfacts.github.scrachx.openfood.features.ImagesManageActivity
Expand Down Expand Up @@ -217,7 +220,7 @@ class ContinuousScanActivity : AppCompatActivity() {
putExtra(ProductCompareActivity.KEY_PRODUCT_ALREADY_EXISTS, true)
} else {
productsToCompare.add(product)
AnalyticsEvent.AddProductToComparison(product.code).track()
MatomoAnalytics.trackEvent(AnalyticsEvent.AddProductToComparison(product.code))
}
putExtra(ProductCompareActivity.KEY_PRODUCTS_TO_COMPARE, productsToCompare)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Expand Down Expand Up @@ -508,7 +511,7 @@ class ContinuousScanActivity : AppCompatActivity() {
if (quickViewBehavior.state != BottomSheetBehavior.STATE_EXPANDED) {
binding.barcodeScanner.resume()
}
AnalyticsService.getInstance().trackView(AnalyticsView.SCANNER)
MatomoAnalytics.trackView(AnalyticsView.Scanner)
}

override fun onSaveInstanceState(outState: Bundle) {
Expand Down Expand Up @@ -703,7 +706,7 @@ class ContinuousScanActivity : AppCompatActivity() {
}
BottomSheetBehavior.STATE_EXPANDED -> {
binding.barcodeScanner.pause()
AnalyticsService.getInstance().trackEvent(AnalyticsEvent.ScannedBarcodeResultExpanded(lastBarcode))
MatomoAnalytics.trackEvent(AnalyticsEvent.ScannedBarcodeResultExpanded(lastBarcode))
}
else -> binding.barcodeScanner.pause()
}
Expand Down Expand Up @@ -791,7 +794,7 @@ class ContinuousScanActivity : AppCompatActivity() {
lastBarcode = result.text
if (!isFinishing) {
setShownProduct(result.text)
AnalyticsService.getInstance().trackEvent(AnalyticsEvent.ScannedBarcode(result.text))
MatomoAnalytics.trackEvent(AnalyticsEvent.ScannedBarcode(result.text))
}

}
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

0 comments on commit 9023eaa

Please sign in to comment.