Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f24143c authored by Moez Bhatti's avatar Moez Bhatti
Browse files

Use install referrer api

parent c3c7b495
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -82,6 +82,7 @@ dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-reactive:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-reactive:$coroutines_version"


    implementation 'com.android.installreferrer:installreferrer:1.1'
    implementation 'com.callcontrol:datashare:1.2.0'
    implementation 'com.callcontrol:datashare:1.2.0'
    implementation "com.f2prateek.rx.preferences2:rx-preferences:$rx_preferences_version"
    implementation "com.f2prateek.rx.preferences2:rx-preferences:$rx_preferences_version"
    implementation "com.jakewharton.timber:timber:$timber_version"
    implementation "com.jakewharton.timber:timber:$timber_version"
+57 −0
Original line number Original line Diff line number Diff line
package com.moez.QKSMS.manager

import android.content.Context
import com.android.installreferrer.api.InstallReferrerClient
import com.android.installreferrer.api.InstallReferrerStateListener
import com.moez.QKSMS.util.Preferences
import kotlinx.coroutines.suspendCancellableCoroutine
import javax.inject.Inject
import kotlin.coroutines.resume

class ReferralManagerImpl @Inject constructor(
    private val analytics: AnalyticsManager,
    private val context: Context,
    private val prefs: Preferences
) : ReferralManager {

    override suspend fun trackReferrer() {
        if (prefs.didSetReferrer.get()) {
            return
        }

        context.packageManager.getInstallerPackageName(context.packageName)?.let { installer ->
            analytics.setUserProperty("Installer", installer)
        }

        val referrerClient = InstallReferrerClient.newBuilder(context).build()
        val responseCode = suspendCancellableCoroutine<Int> { cont ->
            referrerClient.startConnection(object : InstallReferrerStateListener {
                override fun onInstallReferrerSetupFinished(responseCode: Int) {
                    cont.resume(responseCode)
                }

                override fun onInstallReferrerServiceDisconnected() {
                    cont.resume(InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED)
                }
            })

            cont.invokeOnCancellation {
                referrerClient.endConnection()
            }
        }

        when (responseCode) {
            InstallReferrerClient.InstallReferrerResponse.OK -> {
                analytics.setUserProperty("Referrer", referrerClient.installReferrer.installReferrer)
                prefs.didSetReferrer.set(true)
            }

            InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
                prefs.didSetReferrer.set(true)
            }
        }

        referrerClient.endConnection()
    }

}
+7 −0
Original line number Original line Diff line number Diff line
package com.moez.QKSMS.manager

interface ReferralManager {

    suspend fun trackReferrer()

}
+1 −0
Original line number Original line Diff line number Diff line
@@ -75,6 +75,7 @@ class Preferences @Inject constructor(
    }
    }


    // Internal
    // Internal
    val didSetReferrer = rxPrefs.getBoolean("didSetReferrer", false)
    val night = rxPrefs.getBoolean("night", false)
    val night = rxPrefs.getBoolean("night", false)
    val canUseSubId = rxPrefs.getBoolean("canUseSubId", true)
    val canUseSubId = rxPrefs.getBoolean("canUseSubId", true)
    val version = rxPrefs.getInteger("version", context.versionCode)
    val version = rxPrefs.getInteger("version", context.versionCode)
+7 −2
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import com.moez.QKSMS.common.util.FileLoggingTree
import com.moez.QKSMS.injection.AppComponentManager
import com.moez.QKSMS.injection.AppComponentManager
import com.moez.QKSMS.injection.appComponent
import com.moez.QKSMS.injection.appComponent
import com.moez.QKSMS.manager.AnalyticsManager
import com.moez.QKSMS.manager.AnalyticsManager
import com.moez.QKSMS.manager.ReferralManager
import com.moez.QKSMS.migration.QkMigration
import com.moez.QKSMS.migration.QkMigration
import com.moez.QKSMS.migration.QkRealmMigration
import com.moez.QKSMS.migration.QkRealmMigration
import com.moez.QKSMS.util.NightModeManager
import com.moez.QKSMS.util.NightModeManager
@@ -43,6 +44,9 @@ import dagger.android.HasBroadcastReceiverInjector
import dagger.android.HasServiceInjector
import dagger.android.HasServiceInjector
import io.realm.Realm
import io.realm.Realm
import io.realm.RealmConfiguration
import io.realm.RealmConfiguration
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import timber.log.Timber
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Inject


@@ -62,6 +66,7 @@ class QKApplication : Application(), HasActivityInjector, HasBroadcastReceiverIn
    @Inject lateinit var fileLoggingTree: FileLoggingTree
    @Inject lateinit var fileLoggingTree: FileLoggingTree
    @Inject lateinit var nightModeManager: NightModeManager
    @Inject lateinit var nightModeManager: NightModeManager
    @Inject lateinit var realmMigration: QkRealmMigration
    @Inject lateinit var realmMigration: QkRealmMigration
    @Inject lateinit var referralManager: ReferralManager


    override fun onCreate() {
    override fun onCreate() {
        super.onCreate()
        super.onCreate()
@@ -76,8 +81,8 @@ class QKApplication : Application(), HasActivityInjector, HasBroadcastReceiverIn
                .schemaVersion(QkRealmMigration.SchemaVersion)
                .schemaVersion(QkRealmMigration.SchemaVersion)
                .build())
                .build())


        packageManager.getInstallerPackageName(packageName)?.let { installer ->
        GlobalScope.launch(Dispatchers.IO) {
            analyticsManager.setUserProperty("Installer", installer)
            referralManager.trackReferrer()
        }
        }


        nightModeManager.updateCurrentTheme()
        nightModeManager.updateCurrentTheme()
Loading