package com.citrus.analytics;
import android.content.Context;
import android.os.Build;
import com.citrus.mobile.Config;
import com.citrus.retrofit.API;
import com.citrus.retrofit.RetroFitClient;
import com.citrus.sdk.CitrusClient;
import com.citrus.sdk.Constants;
import com.citrus.sdk.Environment;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.orhanobut.logger.Logger;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by MANGESH KADAM on 4/24/2015.
*/
public class EventsManager {
private final static String WEBVIEW_EVENTS = "WEBVIEW_EVENTS";
private final static String PAYMENT_EVENTS = "PAYMENT_EVENTS";
private final static String INIT_EVENTS = "SDK_VERSION";
/**
* This function will be called to log WebView related events
*
* @param context
* @param webViewEvents
* @param paymentType
*/
public static void logWebViewEvents(Context context, WebViewEvents webViewEvents, PaymentType paymentType) {
ConnectionType connectionType = ConnectionManager.getNetworkClass(context);
Tracker t = (CitrusLibraryApp.getTracker(
CitrusLibraryApp.TrackerName.APP_TRACKER, context));
t.send(new HitBuilders.EventBuilder().setCategory(Config.getVanity())
.setAction(WEBVIEW_EVENTS).setLabel(getWebViewEventLabel(webViewEvents, connectionType, paymentType))
.setValue(getWebViewEventValue(webViewEvents, connectionType, paymentType)).build());
//WebViewEvent*ConnectionType*PaymentType*BuildVersion
}
/**
* This function will be called to log payment related events
*
* @param context
* @param paymentType
* @param transactionType
*/
public static void logPaymentEvents(Context context, PaymentType paymentType, TransactionType transactionType) {
ConnectionType connectionType = ConnectionManager.getNetworkClass(context);
Tracker t = CitrusLibraryApp.getTracker(CitrusLibraryApp.TrackerName.APP_TRACKER, context);
t.send(new HitBuilders.EventBuilder().setCategory(Config.getVanity())
.setAction(PAYMENT_EVENTS).setLabel(getPaymentEventLabel(connectionType, paymentType, transactionType))
.setValue(getPaymentEventValue(connectionType, paymentType, transactionType)).build());
//ConnectionType*PaymentType*BuildVersion*TransactionType
}
public static void logPaymentEvents(Context context, PaymentType paymentType, String failureReason) {
ConnectionType connectionType = ConnectionManager.getNetworkClass(context);
Tracker t = CitrusLibraryApp.getTracker(CitrusLibraryApp.TrackerName.APP_TRACKER, context);
t.send(new HitBuilders.EventBuilder().setCategory(Config.getVanity())
.setAction(PAYMENT_EVENTS).setLabel(getPaymentEventLabel(connectionType, paymentType, failureReason))
.setValue(getPaymentEventValue(connectionType, paymentType, TransactionType.FAIL)).build());
//ConnectionType*PaymentType*BuildVersion*TransactionType
}
public static void logInitSDKEvents(final Context context) {
CitrusClient client = CitrusClient.getInstance(context);
Environment environment = client.getEnvironment();
if (environment != null) {
API citrusBaseURLClient = RetroFitClient.getCitrusBaseUrlClient(client.getEnvironment().getBaseCitrusUrl());
citrusBaseURLClient.getMerchantName(Config.getVanity(), new Callback<String>() {
@Override
public void success(String s, Response response) {
Logger.d("Merchant Name is ****" + s);
Tracker t = CitrusLibraryApp.getTracker(CitrusLibraryApp.TrackerName.APP_TRACKER, context);
t.send(new HitBuilders.EventBuilder().setCategory(s)
.setAction(INIT_EVENTS).setLabel(String.valueOf(Constants.SDK_VERSION))
.setValue(Long.valueOf(Constants.SDK_VERSION)).build());
}
@Override
public void failure(RetrofitError error) {
Logger.d("Failed to get Merchant name *****");
Tracker t = CitrusLibraryApp.getTracker(CitrusLibraryApp.TrackerName.APP_TRACKER, context);
t.send(new HitBuilders.EventBuilder().setCategory(Config.getVanity())
.setAction(INIT_EVENTS).setLabel(String.valueOf(Constants.SDK_VERSION))
.setValue(Long.valueOf(Constants.SDK_VERSION)).build());
}
});
}
}
/**
* This function will return value for webview events
*
* @param webViewEvents
* @param connectionType
* @param paymentType
* @return WebViewEvent*ConnectionType*PaymentType*BuildVersion
*/
private static long getWebViewEventValue(WebViewEvents webViewEvents, ConnectionType connectionType, PaymentType paymentType) {
//long value = webViewEvents.getValue()*connectionType.getValue()*paymentType.getValue()*APILevel.getValue(Build.VERSION.SDK_INT);
// return 5L;
switch (webViewEvents) {
case OPEN:
return 1L;
case BACK_KEY:
return 2L;
case CLOSE:
return 3L;
default:
return 0L;
}
}
/**
* This function will return value for Payment events
*
* @param connectionType
* @param paymentType
* @param transactionType
* @return ConnectionType*PaymentType*BuildVersion*TransactionType
*/
private static long getPaymentEventValue(ConnectionType connectionType, PaymentType paymentType, TransactionType transactionType) {
//long value = connectionType.getValue()*paymentType.getValue()*APILevel.getValue(Build.VERSION.SDK_INT)*transactionType.getValue();
switch (transactionType) {
case SUCCESS:
return 4L;
case FAIL:
return 5L;
default:
return 0L;
}
}
/**
* This function will return Label for WebViewEvents
*
* @param webViewEvents
* @param connectionType
* @param paymentType
* @return consolidated String to log into events
*/
public static String getWebViewEventLabel(WebViewEvents webViewEvents, ConnectionType connectionType, PaymentType paymentType) {
String eventLabel = null;
if (paymentType == PaymentType.NET_BANKING) {
if (paymentType.getName() != null) {
eventLabel = webViewEvents.toString() + "_" + connectionType.toString() + "_" + paymentType.toString() + "_" + paymentType.getName() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + String.valueOf(Constants.SDK_VERSION);
} else {
eventLabel = webViewEvents.toString() + "_" + connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + String.valueOf(Constants.SDK_VERSION);
}
} else {
eventLabel = webViewEvents.toString() + "_" + connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + String.valueOf(Constants.SDK_VERSION);
}
return eventLabel;
}
/**
* This function will return Label for PaymentEvents
*
* @param connectionType
* @param paymentType
* @param transactionType
* @return consolidated String to log into events
*/
public static String getPaymentEventLabel(ConnectionType connectionType, PaymentType paymentType, TransactionType transactionType) {
String eventLabel = null;
if (paymentType == PaymentType.NET_BANKING) {
if (paymentType.getName() != null) {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + paymentType.getName() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + transactionType.toString() + "_" + String.valueOf(Constants.SDK_VERSION);
} else {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + transactionType.toString() + "_" + String.valueOf(Constants.SDK_VERSION);
}
} else {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + transactionType.toString() + "_" + String.valueOf(Constants.SDK_VERSION);
}
return eventLabel;
}
/**
* This function will return Label for PaymentEvents
*
* @param connectionType
* @param paymentType
* @param failureReason
* @return consolidated String to log into events
*/
public static String getPaymentEventLabel(ConnectionType connectionType, PaymentType paymentType, String failureReason) {
String eventLabel = null;
if (paymentType == PaymentType.NET_BANKING) {
if (paymentType.getName() != null) {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + paymentType.getName() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + TransactionType.FAIL.toString() + "_" + failureReason + "_" + String.valueOf(Constants.SDK_VERSION);
} else {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + TransactionType.FAIL.toString() + "_" + failureReason + "_" + String.valueOf(Constants.SDK_VERSION);
}
} else {
eventLabel = connectionType.toString() + "_" + paymentType.toString() + "_" + String.valueOf(Build.VERSION.SDK_INT) + "_" + TransactionType.FAIL.toString() + "_" + failureReason + "_" + String.valueOf(Constants.SDK_VERSION);
}
return eventLabel;
}
}