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