forked from EVOgeek/Vmeda.Online
149 lines
5.7 KiB
Java
149 lines
5.7 KiB
Java
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package com.moodle.moodlemobile;
|
|
|
|
import android.util.Log;
|
|
import android.os.RemoteException;
|
|
import org.json.JSONArray;
|
|
import org.json.JSONObject;
|
|
import org.apache.cordova.CordovaPlugin;
|
|
import org.apache.cordova.CallbackContext;
|
|
import org.apache.cordova.PluginResult;
|
|
|
|
import com.android.installreferrer.api.InstallReferrerClient;
|
|
import com.android.installreferrer.api.InstallReferrerStateListener;
|
|
import com.android.installreferrer.api.ReferrerDetails;
|
|
|
|
public class InstallReferrer extends CordovaPlugin implements InstallReferrerStateListener {
|
|
|
|
private static final String TAG = "InstallReferrer";
|
|
private static final int UNKNOWN_ERROR = 1;
|
|
private static final int FEATURE_NOT_SUPPORTED = 2;
|
|
private static final int SERVICE_UNAVAILABLE = 3;
|
|
|
|
private InstallReferrerClient referrerClient;
|
|
private CallbackContext callbackContext;
|
|
private JSONObject referrerResult;
|
|
|
|
@Override
|
|
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
|
|
try {
|
|
switch (action) {
|
|
case "getReferrer":
|
|
this.getReferrer(callbackContext);
|
|
|
|
return true;
|
|
}
|
|
} catch (Throwable e) {
|
|
Log.e(TAG, "Failed executing action: " + action, e);
|
|
callbackContext.error(e.getMessage());
|
|
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR));
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Connect to the referrer client and obtain the referrer data when connected.
|
|
*
|
|
* @param callbackContext The callback context used when calling back into JavaScript.
|
|
*/
|
|
private void getReferrer(CallbackContext callbackContext) {
|
|
if (this.referrerResult != null) {
|
|
callbackContext.success(this.referrerResult);
|
|
|
|
return;
|
|
}
|
|
|
|
this.callbackContext = callbackContext;
|
|
|
|
try {
|
|
if (this.referrerClient == null) {
|
|
this.referrerClient = InstallReferrerClient.newBuilder(this.cordova.getActivity().getApplicationContext()).build();
|
|
}
|
|
|
|
this.referrerClient.startConnection(this);
|
|
} catch (Exception exception) {
|
|
Log.e(TAG, "startConnection error: " + exception.getMessage());
|
|
callbackContext.error(exception.getMessage());
|
|
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get referral data from an already established connection and pass it to current callback context.
|
|
*/
|
|
private void getReferralData() {
|
|
try {
|
|
ReferrerDetails response = referrerClient.getInstallReferrer();
|
|
JSONObject referrerResult = new JSONObject();
|
|
|
|
referrerResult.put("referrer", response.getInstallReferrer());
|
|
referrerResult.put("clickTime", response.getReferrerClickTimestampSeconds());
|
|
referrerResult.put("appInstallTime", response.getInstallBeginTimestampSeconds());
|
|
referrerResult.put("instantExperienceLaunched", response.getGooglePlayInstantParam());
|
|
this.referrerResult = referrerResult;
|
|
|
|
if (this.callbackContext != null) {
|
|
this.callbackContext.success(this.referrerResult);
|
|
}
|
|
} catch (Exception exception) {
|
|
Log.e(TAG, "getReferralData error: " + exception.getMessage());
|
|
if (this.callbackContext != null) {
|
|
this.callbackContext.error(exception.getMessage());
|
|
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, UNKNOWN_ERROR));
|
|
}
|
|
|
|
this.referrerClient.endConnection();
|
|
}
|
|
|
|
try {
|
|
this.referrerClient.endConnection();
|
|
} catch (Exception exception) {
|
|
// Ignore errors.
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onInstallReferrerSetupFinished(int responseCode) {
|
|
switch (responseCode) {
|
|
case InstallReferrerClient.InstallReferrerResponse.OK:
|
|
// Connection established.
|
|
this.getReferralData();
|
|
break;
|
|
case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
|
|
// API not available on the current Play Store app.
|
|
if (this.callbackContext != null) {
|
|
this.callbackContext.error("Referrer feature not supported.");
|
|
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, FEATURE_NOT_SUPPORTED));
|
|
}
|
|
break;
|
|
case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
|
|
// Connection couldn't be established.
|
|
if (this.callbackContext != null) {
|
|
this.callbackContext.error("Referrer service unavailable.");
|
|
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, SERVICE_UNAVAILABLE));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onInstallReferrerServiceDisconnected() {
|
|
// Nothing to do.
|
|
}
|
|
|
|
}
|