You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.2 KiB
Kotlin
60 lines
2.2 KiB
Kotlin
/* 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.Intent
|
|
import androidx.annotation.VisibleForTesting
|
|
import androidx.annotation.VisibleForTesting.PRIVATE
|
|
import androidx.lifecycle.Lifecycle
|
|
import androidx.lifecycle.LifecycleObserver
|
|
import androidx.lifecycle.OnLifecycleEvent
|
|
import androidx.lifecycle.ProcessLifecycleOwner
|
|
import mozilla.components.support.utils.SafeIntent
|
|
|
|
/**
|
|
* Tracks how the application was opened through [Event.AppOpenedAllSourceStartup].
|
|
* We only considered to be "opened" if it received an intent and the app was in the background.
|
|
*/
|
|
class AppAllSourceStartTelemetry(private val metrics: MetricController) : LifecycleObserver {
|
|
|
|
// default value is true to capture the first launch of the application
|
|
private var wasApplicationInBackground = true
|
|
|
|
init {
|
|
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
|
|
}
|
|
|
|
fun receivedIntentInExternalAppBrowserActivity(safeIntent: SafeIntent) {
|
|
setAppOpenedAllSourceFromIntent(safeIntent, true)
|
|
}
|
|
|
|
fun receivedIntentInHomeActivity(safeIntent: SafeIntent) {
|
|
setAppOpenedAllSourceFromIntent(safeIntent, false)
|
|
}
|
|
|
|
private fun setAppOpenedAllSourceFromIntent(intent: SafeIntent, isExternalAppBrowserActivity: Boolean) {
|
|
if (!wasApplicationInBackground) {
|
|
return
|
|
}
|
|
|
|
val source = when {
|
|
isExternalAppBrowserActivity -> Event.AppOpenedAllSourceStartup.Source.CUSTOM_TAB
|
|
intent.isLauncherIntent -> Event.AppOpenedAllSourceStartup.Source.APP_ICON
|
|
intent.action == Intent.ACTION_VIEW -> Event.AppOpenedAllSourceStartup.Source.LINK
|
|
else -> Event.AppOpenedAllSourceStartup.Source.UNKNOWN
|
|
}
|
|
|
|
metrics.track(Event.AppOpenedAllSourceStartup(source))
|
|
|
|
wasApplicationInBackground = false
|
|
}
|
|
|
|
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
|
|
@VisibleForTesting(otherwise = PRIVATE)
|
|
fun onApplicationOnStop() {
|
|
wasApplicationInBackground = true
|
|
}
|
|
}
|