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 try {
35 this.installReferrerClient.startConnection(this);
36 } catch (SecurityException e) {
37 Log.e(Config.LOGTAG, "unable to start connection to InstallReferrerClient", e);
38 }
39 }
40
41 public static void markInstallReferrerExecuted(final Activity context) {
42 final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
43 preferences.edit().putBoolean(PROCESSED_INSTALL_REFERRER, true).apply();
44 }
45
46 @Override
47 public void onInstallReferrerSetupFinished(int responseCode) {
48 if (responseCode == InstallReferrerClient.InstallReferrerResponse.OK) {
49 try {
50 final ReferrerDetails referrerDetails = installReferrerClient.getInstallReferrer();
51 final String referrer = referrerDetails.getInstallReferrer();
52 welcomeActivity.onInstallReferrerDiscovered(referrer);
53 } catch (final RemoteException e) {
54 Log.d(Config.LOGTAG, "unable to get install referrer", e);
55 }
56 } else {
57 Log.d(Config.LOGTAG, "unable to setup install referrer client. code=" + responseCode);
58 }
59 }
60
61 @Override
62 public void onInstallReferrerServiceDisconnected() {
63
64 }
65}