InstallReferrerUtils.java

 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}