com.passwordboss.android.analytics.AnalyticsHelperSegment.java Source code

Java tutorial

Introduction

Here is the source code for com.passwordboss.android.analytics.AnalyticsHelperSegment.java

Source

package com.passwordboss.android.analytics;

import android.content.Context;

import com.passwordboss.android.constants.Constants;
import com.passwordboss.android.database.DatabaseHelperSecure;
import com.passwordboss.android.database.beans.UserSubscription;
import com.passwordboss.android.database.bll.UserSubscriptionBll;
import com.passwordboss.android.http.beans.ServerResponseHttpBean;
import com.passwordboss.android.utils.Pref;
import com.passwordboss.android.utils.Utils;
import com.segment.analytics.Analytics;
import com.segment.analytics.Options;
import com.segment.analytics.Properties;
import com.segment.analytics.Traits;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;

import java.util.TreeMap;

public class AnalyticsHelperSegment {

    public static String MESSAGE_TEMPLATE = "Message Template";
    public static String MESSAGE_TEMPLATE_VALUE = "Buy Screen v1";
    public static String BUY_BUTTON_NOV = "Bottom Nav";
    public static String BUY_BUTTON_LEFT_NAV = "Left Nav";
    public static String BUY_BUTTON_TOP_NAV = "Top Nav";
    public static String BUY_BUTTON_SETTINGS_PROFILE = "Settings-Profile";
    public static String BUY_BUTTON_SETUP_WIZARD = "Setup Wizard";
    public static String CAMPAING_NAME = "Campaign Name";
    public static String STEP_NAME_LANGUAGE_SELECTION = "Language selection";
    public static String STEP_NAME_ENTER_EMAIL = "Enter email";
    public static String STEP_NAME_CONFIRM_MP = "Confirm MP";
    public static String SW_SCREEN_NAME_GET_STARTED = "Get Started";
    public static String SW_SCREEN_NAME_PERSONAL_INFO = "Personal Info";
    public static String SW_SCREEN_NAME_ADD_TO_MOBILE = "Add to mobile";
    public static String SW_SCREEN_NAME_DIGITAL_WALLET = "Digital Wallet";
    public static String SW_SCREEN_NAME_TRY_ONE_CLICK_LOGIN = "Try One-Click Login";
    public static String SW_SCREEN_NAME_GET_PREMIUM = "Get Premium";
    public static String BUTTON_CLICKED_VALUE_COUNTINUE = "Continue";
    public static String BUTTON_CLICKED_VALUE_CLOSE = "Close";
    public static String BUTTON_CLICKED_VALUE_CANCELED = "Canceled";
    public static String BUTTON_CLICKED_VALUE_ONE_YEAR = "1 Year";
    public static String BUTTON_CLICKED_VALUE_TWO_YEAR = "2 Years";
    public static String BUTTON_CLICKED_VALUE_THREE_YEAR = "3 Years";
    public static String ACTION_ADDED = "Added";
    public static String ACTION_DELETED = "Deleted";
    public static String ACTION_SHARED = "Shared";
    public static String ACTION_ACCEPTED = "Accepted";
    public static String ACTION_REJECTED = "Rejected";
    public static String ACTION_EXPIRED = "Expired";
    public static String ACTION_CANCELED = "Canceled";
    public static String TYPE = "Type";
    public static String TYPE_NAME = "Name";
    public static String TYPE_ADDRESS = "Address";
    public static String TYPE_PHONE_NUMBER = "Phone Number";
    public static String TYPE_EMAIL = "Email";
    public static String TYPE_DRIVER_LICENSE = "Drivers License";
    public static String TYPE_MEMBER_ID = "Member ID";
    public static String TYPE_SOCIAL_SECURITY = "Social Security";
    public static String TYPE_PASSPORT = "Passport";
    public static String TYPE_COMPANY = "Company";
    public static String TYPE_SECURE_NOTE = "Secure Note";
    public static String TYPE_BANK_ACCUNT = "Bank Account";
    public static String TYPE_CREDIT_CARD = "Credit Card";
    public static String TYPE_PASSWORD = "Password";
    public static String SOURCE_MAIN_UI = "Main UI";
    public static String SOURCE_BROWSER_EXTENSION = "Browser Extension";
    public static String SOURCE_PASSWORD_VAULT = "Password Vault";
    public static String STATUS_ENABLE = "Enabled";
    public static String STATUS_DISABLED = "Disabled";
    public static String STATUS_CANCEL = "Cancel";
    public static String STATUS_COMPLETED = "Completed";
    public static String STATUS_SKIPPED = "Skipped";
    public static String STATUS_GET_PREMIUM = "Get Premium";
    // Install
    private static String INSTALL = "Install";
    private static String PLATFOR = "Platform";
    private static String PLATFOR_VALUE = "Android";
    private static String DEVICE_CATEGORY = "Device Category";
    private static String DEVICE_TYPE = "Device Type";
    private static String CHANNEL_ID = "Channel ID";
    private static String CHANNEL_ID_VALUE = "10000";
    private static String PRODUCTION_VERSION = "Product Version";
    private static String OS_LANGUAGE = "OS Language";
    // In-App Marketing
    private static String IN_APP_MARKETING = "In-App Marketing";
    private static String MESSAGE = "Message #";
    private static String MESSAGE_TYPE = "Message Type";
    private static String BUY_BUTTON = "Buy Button";
    private static String DAYS_SINCE_ACCOUNT_CREATED = "Days Since Account Created";
    //Free To Paid
    private static String FREE_TO_PAID = "Free to Paid";
    private static String IN_APP_MESSAGE_SHOWN = "In-app messages shown";
    private static String SUBSCIPTION_TYPE = "Subscription Type";
    private static String SUBSCIPTION_LEVEL = "Subscription Level";
    private static String SUBSCIPTION_PROVIDER = "Subscription Provider";
    private static String SUBSCIPTION_SOURCE = "Subscription Source";
    private static String SUBSCIPTION_MEDIUM = "Medium";
    private static String CAMPAIGN = "Campaign";
    // Account Creation Flow
    private static String ACCOUNT_CREATION_FLOW = "Account Creation Flow";
    private static String STEP = "Step #";
    private static String STEP_NAME = "Step Name";
    private static String LANGUAGE_SELECTED = "Language Selected";
    // Account Created
    private static String ACCOUNT_CREATED = "Account Created";
    // Setup Wizard
    private static String SETUP_WIZARD = "Setup Wizard";
    private static String SW_WIZARD_VERSION = "Wizard Version";
    private static String SCREEN = "Screen #";
    private static String SCREEN_NAME = "Screen Name";
    // PRODUCT_TOUR
    private static String PRODUCT_TOUR = "Product Tour";
    // Password Vault
    private static String PASSWORD_VAULT = "Password Vault";
    // Digital Wallet
    private static String DIGITAL_WALLET = "Digital Wallet";
    // Personal Info
    private static String PERSONAL_INFO = "Personal Info";
    // Sharing
    private static String SHARING = "Sharing";
    // Password Generator
    private static String PASSWORD_GENERATOR = "Password Generator";
    private static String CREATE_PASSWORD = "Create Password";
    // In-App Browser
    private static String IN_APP_BROWSER = "In-App Browser";
    private static String OPEN_SITE_FROM_PV = "Opened Site from PV";
    // 2-Factor Verification
    private static String TWO_FACTOR_VERIFICATION = "2-Factor Verification";
    //Analytics
    private static String ANALYTICS = "Analytics";
    //Analytics
    private static String ACTIVE_USER = "Active User";
    private static String LOGIN_TODAY = "Login Today";
    //Online Checkout
    private static String ONLINE_CHECKOUT = "Online Checkout";
    private static String BROWSER = "Browser";
    private static String BROWSER_VERSION = "In-App Browser";
    // COMMON
    private static String BUTTON_CLICKED = "Button Clicked";
    private static String ACTION = "Action";
    private static String SOURCE = "Source";
    private static String STATUS = "Status";

    public static boolean checkTime(Context mContext, String item) {
        String storedDate = "";
        boolean sendData = false;
        if (Pref.SEGMENT_FLUSH.equals(item)) {
            storedDate = Pref.getValue(mContext, Pref.SEGMENT_FLUSH, "");
        } else if (Constants.ACTIVE_USER_ANALYTIC.equals(item)) {
            storedDate = Pref.getValue(mContext, Constants.ACTIVE_USER_ANALYTIC, "");
        }

        if (storedDate.length() > 0) {
            DateTime d1 = DateTime.now();
            DateTime d2 = DateTime.parse(storedDate, DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss"));
            long diff = d1.getMillis() - d2.getMillis();
            if (diff > diff) { // // TODO: 3/4/2016 figure out what would be implemented there
                sendData = true;
            }
        } else {
            sendData = true;
        }
        return sendData;
    }

    public static void logAccountCreated(Context mContext) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            DatabaseHelperSecure mDatabaseHelperSecure = DatabaseHelperSecure.getHelper(mContext,
                    Pref.DATABASE_KEY);
            UserSubscriptionBll mUserSubscriptionBll = new UserSubscriptionBll(mDatabaseHelperSecure);
            UserSubscription mSubscription = mUserSubscriptionBll.getUserInfoByEmail(Pref.EMAIL);

            if (mSubscription != null) {
                events.put(SUBSCIPTION_TYPE, mSubscription.getName());
            }
            logCustomEvents(mContext, ACCOUNT_CREATED, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logAccountCreationFlow(Context mContext, int step, String stepName, String language,
            String button) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(STEP, STEP + step);
            events.put(STEP_NAME, stepName);
            if (language != null) {
                events.put(LANGUAGE_SELECTED, language);
            }
            events.put(BUTTON_CLICKED, button);
            logCustomEvents(mContext, ACCOUNT_CREATION_FLOW, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logActiveUser(Context mContext) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(LOGIN_TODAY, "Yes");
            if (checkTime(mContext, Constants.ACTIVE_USER_ANALYTIC)) {
                logCustomEvents(mContext, ACTIVE_USER, events);
                Pref.setValue(mContext, Constants.ACTIVE_USER_ANALYTIC,
                        DateTime.now().toString("MM/dd/yyyy HH:mm:ss"));
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logAnalytics(Context mContext, String securityScore, String duplicatePass, String weakPass,
            String oldPass, String total) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put("1", securityScore);
            events.put("2", duplicatePass);
            events.put("3", weakPass);
            events.put("4", oldPass);
            events.put("5", total);
            logCustomEvents(mContext, ANALYTICS, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logCustomEvents(Context mContext, String event, TreeMap<String, String> events) {
        Properties prop = new Properties();
        prop.putAll(events);
        Analytics.with(mContext).track(event, prop);
        Analytics.with(mContext).flush();

    }

    public static void logDigitalWallet(Context mContext, String action, String type) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(ACTION, action);
            events.put(TYPE, type);
            logCustomEvents(mContext, DIGITAL_WALLET, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logFreeToPaid(Context mContext, String subsciptionType, String subsciptionLevel,
            String subsciptionProvider, String subscriptionSource, String subscriptionMedium, String campaign) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            DatabaseHelperSecure mDatabaseHelperSecure = DatabaseHelperSecure.getHelper(mContext,
                    Pref.DATABASE_KEY);
            UserSubscriptionBll mUserSubscriptionBll = new UserSubscriptionBll(mDatabaseHelperSecure);
            UserSubscription mSubscription = mUserSubscriptionBll.getUserInfoByEmail(Pref.EMAIL);
            int days = Utils.calculateNumberOfDaySinceAccountCreated(
                    new DateTime(mSubscription.getCreatedDate(), DateTimeZone.UTC));
            events.put(SUBSCIPTION_TYPE, mSubscription.getName());
            events.put(DAYS_SINCE_ACCOUNT_CREATED, days + "");
            int messageNumber = Integer.parseInt(Pref.getMessageNumber(mContext));
            if (messageNumber > 0) {
                messageNumber--;
            }
            events.put(IN_APP_MESSAGE_SHOWN, messageNumber + "");
            events.put(MESSAGE, MESSAGE + Pref.getMessageNumber(mContext));
            events.put(SUBSCIPTION_TYPE, subsciptionType);
            events.put(SUBSCIPTION_LEVEL, subsciptionLevel);
            events.put(SUBSCIPTION_PROVIDER, subsciptionProvider);
            events.put(SUBSCIPTION_SOURCE, subscriptionSource);
            events.put(SUBSCIPTION_MEDIUM, subscriptionMedium);
            events.put(CAMPAIGN, campaign);
            logCustomEvents(mContext, FREE_TO_PAID, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logInAppBrowser(Context mContext) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(OPEN_SITE_FROM_PV, "True");
            logCustomEvents(mContext, IN_APP_BROWSER, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logInAppMarketing(Context mContext, String button, String buyButton) {
        try {
            DatabaseHelperSecure mDatabaseHelperSecure = DatabaseHelperSecure.getHelper(mContext,
                    Pref.DATABASE_KEY);
            UserSubscriptionBll mUserSubscriptionBll = new UserSubscriptionBll(mDatabaseHelperSecure);
            UserSubscription mSubscription = mUserSubscriptionBll.getUserInfoByEmail(Pref.EMAIL);
            int days = Utils.calculateNumberOfDaySinceAccountCreated(
                    new DateTime(mSubscription.getCreatedDate(), DateTimeZone.UTC));
            Pref.incrementMessageNumber(mContext);
            TreeMap<String, String> events = new TreeMap<>();
            events.put(MESSAGE, MESSAGE + Pref.getMessageNumber(mContext));
            events.put(BUTTON_CLICKED, button);
            if (BUTTON_CLICKED_VALUE_ONE_YEAR.equalsIgnoreCase(button)
                    || BUTTON_CLICKED_VALUE_TWO_YEAR.equalsIgnoreCase(button)
                    || BUTTON_CLICKED_VALUE_THREE_YEAR.equalsIgnoreCase(button)
                    || BUTTON_CLICKED_VALUE_CANCELED.equalsIgnoreCase(button)) {
                events.put(MESSAGE_TEMPLATE, MESSAGE_TEMPLATE_VALUE);
            }
            if (!"".equals(buyButton)) {
                events.put(BUY_BUTTON, buyButton);
            }
            events.put(DAYS_SINCE_ACCOUNT_CREATED, days + "");
            logCustomEvents(mContext, IN_APP_MARKETING, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logInstallEvents(Context mContext, ServerResponseHttpBean response) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(PLATFOR, PLATFOR_VALUE);
            events.put(PRODUCTION_VERSION, Pref.getAppVersion(mContext));
            events.put(DEVICE_CATEGORY, response.getInstallations()[0].getDeviceCategory().getName());
            events.put(DEVICE_TYPE, response.getInstallations()[0].getDeviceType().getName());
            events.put(OS_LANGUAGE, response.getInstallations()[0].getLanguage().getName());
            events.put(CHANNEL_ID, response.getInstallations()[0].getChannel().getChannelId());
            logCustomEvents(mContext, INSTALL, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logOnlineCheckout(Context mContext) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(BROWSER, BROWSER_VERSION);
            logCustomEvents(mContext, ONLINE_CHECKOUT, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logPasswordGenerator(Context mContext, String source) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(CREATE_PASSWORD, "True");
            events.put(SOURCE, source);
            logCustomEvents(mContext, PASSWORD_GENERATOR, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logPasswordVault(Context mContext, String action) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(ACTION, action);
            logCustomEvents(mContext, PASSWORD_VAULT, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logPersonalInfo(Context mContext, String action, String type) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(ACTION, action);
            events.put(TYPE, type);
            logCustomEvents(mContext, PERSONAL_INFO, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logProductTour(Context mContext, int step, String screenName, String button) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(SCREEN, SCREEN + step);
            events.put(SCREEN_NAME, screenName);
            events.put(BUTTON_CLICKED, button);
            logCustomEvents(mContext, PRODUCT_TOUR, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logSharing(Context mContext, String action) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(ACTION, action);
            events.put(TYPE, "");
            logCustomEvents(mContext, SHARING, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void logTwoFactorVerification(Context mContext, String status) {
        try {
            TreeMap<String, String> events = new TreeMap<>();
            events.put(STATUS, status);
            logCustomEvents(mContext, TWO_FACTOR_VERIFICATION, events);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void register(Context mContext) {
        String email = Pref.getValue(mContext, Constants.EMAIL, "UNKNOWN");
        String identify = email;

        boolean isUnknown = "UNKNOWN".equals(email);
        if (isUnknown) {
            identify = Pref.INSTALLATION_UUID;
        }
        if (!isUnknown) {
            if (Pref.getValue(mContext, "_isFirstRun_", true)) {
                Analytics.with(mContext).alias(email, new Options());
                Pref.setValue(mContext, "_isFirstRun_", false);
            } else {
                Traits traits = (Traits) Analytics.with(mContext).getAnalyticsContext().get("traits");
                String userId = (String) traits.get("userId");
                String anonymousId = (String) traits.get("anonymousId");
                if (userId == null) {
                    Analytics.with(mContext).alias(email, new Options());
                }
            }
        }

        if (!isUnknown) {
            Analytics.with(mContext).identify(identify, new Traits().putName(email), null);
        } else {
            Analytics.with(mContext).identify(identify);
        }
    }

}