1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.referrer
3 
4 import android.content.Context
5 import android.content.Intent
6 import com.google.android.gms.analytics.CampaignTrackingReceiver
7 import host.exp.exponent.ExpoApplication
8 import host.exp.exponent.analytics.Analytics
9 import host.exp.exponent.analytics.EXL
10 import host.exp.exponent.di.NativeModuleDepsProvider
11 import host.exp.exponent.storage.ExponentSharedPreferences
12 import org.json.JSONException
13 import org.json.JSONObject
14 import javax.inject.Inject
15 
16 class InstallReferrerReceiver : CampaignTrackingReceiver() {
17   @Inject
18   lateinit var exponentSharedPreferences: ExponentSharedPreferences
19 
20   override fun onReceive(context: Context, intent: Intent) {
21     super.onReceive(context, intent)
22     if (context.applicationContext !is ExpoApplication) {
23       EXL.e(
24         TAG,
25         "InstallReferrerReceiver.context.getApplicationContext() not an instance of ExpoApplication"
26       )
27       return
28     }
29     NativeModuleDepsProvider.instance.inject(InstallReferrerReceiver::class.java, this)
30 
31     val referrer = intent.getStringExtra("referrer")
32     EXL.d(TAG, "Referrer: $referrer")
33     if (referrer != null) {
34       exponentSharedPreferences.setString(ExponentSharedPreferences.ExponentSharedPreferencesKey.REFERRER_KEY, referrer)
35     }
36 
37     // Analytics
38     val eventProperties = JSONObject().apply {
39       try {
40         put("REFERRER", referrer ?: "")
41       } catch (e: JSONException) {
42         EXL.e(TAG, e.message!!)
43       }
44     }
45     Analytics.logEvent(Analytics.AnalyticsEvent.INSTALL_REFERRER_RECEIVED, eventProperties)
46   }
47 
48   companion object {
49     private val TAG = InstallReferrerReceiver::class.java.simpleName
50   }
51 }
52