1package eu.siacs.conversations.utils;
2
3import android.app.Activity;
4import android.content.SharedPreferences;
5import android.os.RemoteException;
6import android.preference.PreferenceManager;
7import android.util.Log;
8
9import com.android.installreferrer.api.InstallReferrerClient;
10import com.android.installreferrer.api.InstallReferrerStateListener;
11import com.android.installreferrer.api.ReferrerDetails;
12
13import eu.siacs.conversations.Config;
14import eu.siacs.conversations.ui.WelcomeActivity;
15
16public class InstallReferrerUtils implements InstallReferrerStateListener {
17
18 private static final String PROCESSED_INSTALL_REFERRER = "processed_install_referrer";
19
20
21 private final WelcomeActivity welcomeActivity;
22 private final InstallReferrerClient installReferrerClient;
23
24
25 public InstallReferrerUtils(WelcomeActivity welcomeActivity) {
26 this.welcomeActivity = welcomeActivity;
27 final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(welcomeActivity);
28 if (preferences.getBoolean(PROCESSED_INSTALL_REFERRER, false)) {
29 Log.d(Config.LOGTAG, "install referrer already processed");
30 this.installReferrerClient = null;
31 return;
32 }
33 this.installReferrerClient = InstallReferrerClient.newBuilder(welcomeActivity).build();
34 this.installReferrerClient.startConnection(this);
35 }
36
37 public static void markInstallReferrerExecuted(final Activity context) {
38 final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
39 preferences.edit().putBoolean(PROCESSED_INSTALL_REFERRER, true).apply();
40 }
41
42 @Override
43 public void onInstallReferrerSetupFinished(int responseCode) {
44 switch (responseCode) {
45 case InstallReferrerClient.InstallReferrerResponse.OK:
46 try {
47 final ReferrerDetails referrerDetails = installReferrerClient.getInstallReferrer();
48 final String referrer = referrerDetails.getInstallReferrer();
49 welcomeActivity.onInstallReferrerDiscovered(referrer);
50 } catch (RemoteException e) {
51 Log.d(Config.LOGTAG, "unable to get install referrer", e);
52 }
53 break;
54 default:
55 Log.d(Config.LOGTAG, "unable to setup install referrer client. code=" + responseCode);
56 }
57 }
58
59 @Override
60 public void onInstallReferrerServiceDisconnected() {
61
62 }
63}