Skip to content

Commit

Permalink
For mozilla-mobile#1192: Adds telemetry for Mozilla products
Browse files Browse the repository at this point in the history
  • Loading branch information
sblatz committed Apr 25, 2019
1 parent 334a3dc commit 3d38568
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
28 changes: 28 additions & 0 deletions app/metrics.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,34 @@ metrics:
notification_emails:
- [email protected]
expires: "2019-09-01"
mozilla_products:
type: string_list
description: >
A list of all the Mozilla products installed on device. We currently scan for: Firefox, Firefox Beta,
Firefox Aurora, Firefox Nightly, Firefox Fdroid, Firefox Lite, Reference Browser, Reference Browser Debug,
Fenix, Focus, and Lockbox.
send_in_pings:
- metrics
bugs:
- 1192
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/1953/
notification_emails:
- [email protected]
expires: "2019-09-01"
default_moz_browser:
type: string
description: >
The name of the default browser on device if and only if it's a Mozilla owned product, otherwise empty string
send_in_pings:
- metrics
bugs:
- 1192
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/1953/
notification_emails:
- [email protected]
expires: "2019-09-01"

search.default_engine:
code:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ class GleanMetricsService(private val context: Context) : MetricsService {

Metrics.apply {
defaultBrowser.set(Browsers.all(context).isDefaultBrowser)
defaultMozBrowser.set(MozillaProductDetector.getMozillaBrowserDefault(context) ?: "")
mozillaProducts.set(MozillaProductDetector.getInstalledMozillaProducts(context))
}

SearchDefaultEngine.apply {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.components.metrics

import android.content.Context
import android.content.pm.PackageManager
import mozilla.components.support.utils.Browsers

object MozillaProductDetector {
enum class MozillaProducts(val productName: String) {
// Browsers
FIREFOX("org.mozilla.firefox"),
FIREFOX_BETA("org.mozilla.firefox_beta"),
FIREFOX_AURORA("org.mozilla.fennec_aurora"),
FIREFOX_NIGHTLY("org.mozilla.fennec"),
FIREFOX_FDROID("org.mozilla.fennec_fdroid"),
FIREFOX_LITE("org.mozilla.rocket"),
REFERENCE_BROWSER("org.mozilla.reference.browser"),
REFERENCE_BROWSER_DEBUG("org.mozilla.reference.browser.debug"),
FENIX("org.mozilla.fenix"),
FOCUS("org.mozilla.focus"),

// Other products
LOCKBOX("org.mozilla.lockbox")
}

fun getInstalledMozillaProducts(context: Context): List<String> {
val mozillaProducts = mutableListOf<String>()

for (product in MozillaProducts.values()) {
if (packageIsInstalled(context, product.productName)) { mozillaProducts.add(product.productName) }
}

getMozillaBrowserDefault(context)?.let {
if (!mozillaProducts.contains(it)) {
mozillaProducts.add(it)
}
}

return mozillaProducts
}

private fun packageIsInstalled(context: Context, packageName: String): Boolean {
try {
context.packageManager.getPackageInfo(packageName, 0)
} catch (e: PackageManager.NameNotFoundException) {
return false
}

return true
}

// Returns the default browser if and only if it is a Mozilla product
fun getMozillaBrowserDefault(context: Context): String? {
val browserPackageName = Browsers.all(context).defaultBrowser?.packageName
return if (isMozillaProduct(browserPackageName ?: "")) { browserPackageName } else { null }
}

// Note: we intentionally do not use a-c `firefoxBrandedBrowser` as this only gives us the first from that list
private fun isMozillaProduct(packageName: String): Boolean {
for (product in MozillaProducts.values()) {
if (product.productName == packageName) {
return true
}
}

return false
}
}

0 comments on commit 3d38568

Please sign in to comment.