Bug 1830401 - add Adjust event for Activated Users
parent
bdf2cb4c40
commit
fa51e99d75
@ -0,0 +1,74 @@
|
||||
package org.mozilla.fenix.components.metrics
|
||||
|
||||
import android.content.Context
|
||||
import androidx.work.ExistingWorkPolicy
|
||||
import androidx.work.OneTimeWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import mozilla.components.support.utils.ext.getPackageInfoCompat
|
||||
import org.mozilla.fenix.ext.metrics
|
||||
import org.mozilla.fenix.ext.settings
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* Worker that will send the User Activated event at the end of the first week.
|
||||
*/
|
||||
class GrowthDataWorker(
|
||||
context: Context,
|
||||
workerParameters: WorkerParameters,
|
||||
) : Worker(context, workerParameters) {
|
||||
|
||||
override fun doWork(): Result {
|
||||
val settings = applicationContext.settings()
|
||||
|
||||
if (!System.currentTimeMillis().isAfterFirstWeekFromInstall(applicationContext) ||
|
||||
settings.growthUserActivatedSent
|
||||
) {
|
||||
return Result.success()
|
||||
}
|
||||
|
||||
applicationContext.metrics.track(Event.GrowthData.UserActivated(fromSearch = false))
|
||||
|
||||
return Result.success()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val GROWTH_USER_ACTIVATED_WORK_NAME = "org.mozilla.fenix.growth.work"
|
||||
private const val DAY_MILLIS: Long = 1000 * 60 * 60 * 24
|
||||
private const val FULL_WEEK_MILLIS: Long = DAY_MILLIS * 7
|
||||
|
||||
/**
|
||||
* Schedules the Activated User event if needed.
|
||||
*/
|
||||
fun sendActivatedSignalIfNeeded(context: Context) {
|
||||
val instanceWorkManager = WorkManager.getInstance(context)
|
||||
|
||||
if (context.settings().growthUserActivatedSent) {
|
||||
return
|
||||
}
|
||||
|
||||
val growthSignalWork = OneTimeWorkRequest.Builder(GrowthDataWorker::class.java)
|
||||
.setInitialDelay(FULL_WEEK_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.build()
|
||||
|
||||
instanceWorkManager.beginUniqueWork(
|
||||
GROWTH_USER_ACTIVATED_WORK_NAME,
|
||||
ExistingWorkPolicy.KEEP,
|
||||
growthSignalWork,
|
||||
).enqueue()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns [Boolean] value signaling if current time is after the first week after install.
|
||||
*/
|
||||
private fun Long.isAfterFirstWeekFromInstall(context: Context): Boolean {
|
||||
val timeDifference = this - getInstalledTime(context)
|
||||
return (FULL_WEEK_MILLIS <= timeDifference)
|
||||
}
|
||||
|
||||
private fun getInstalledTime(context: Context): Long = context.packageManager
|
||||
.getPackageInfoCompat(context.packageName, 0)
|
||||
.firstInstallTime
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue