InstallReferrerUtils.java

 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}