// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2009-2011 Google, All Rights reserved
// Copyright 2011-2012 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0
package com.google.appinventor.client.tracking;
import com.google.appinventor.client.Ode;
import com.google.appinventor.common.version.AppInventorFeatures;
import com.google.gwt.core.client.JavaScriptObject;
/**
* Methods for tracking/logging with Google Analytics.
*
*/
public class Tracking {
/**
* Pre-defined events and actions.
*/
public static final String PROJECT_EVENT = "Project";
public static final String PROJECT_ACTION_PREFIX = "Project_";
public static final String PROJECT_ACTION_NEW_YA = PROJECT_ACTION_PREFIX +
"New-YA";
public static final String PROJECT_ACTION_DELETE_PROJECT_YA = PROJECT_ACTION_PREFIX +
"DeleteProject-YA";
public static final String PROJECT_ACTION_DELETE_FILE_YA = PROJECT_ACTION_PREFIX +
"DeleteFile-YA";
public static final String PROJECT_ACTION_BUILD_BARCODE_YA = PROJECT_ACTION_PREFIX +
"BuildBarcode-YA";
public static final String PROJECT_ACTION_BUILD_DOWNLOAD_YA = PROJECT_ACTION_PREFIX +
"BuildDownload-YA";
public static final String PROJECT_ACTION_BUILD_YAIL_YA = PROJECT_ACTION_PREFIX +
"BuildYail-YA";
public static final String PROJECT_ACTION_DOWNLOAD_PROJECT_SOURCE_YA = PROJECT_ACTION_PREFIX +
"DownloadProjectSource-YA";
public static final String PROJECT_ACTION_DOWNLOAD_FILE_YA = PROJECT_ACTION_PREFIX +
"DownloadFile-YA";
public static final String PROJECT_ACTION_DOWNLOAD_ALL_PROJECTS_SOURCE_YA =
PROJECT_ACTION_PREFIX + "DownloadAllProjectsSource-YA";
public static final String PROJECT_ACTION_SAVE_YA = PROJECT_ACTION_PREFIX +
"Save-YA";
public static final String PROJECT_ACTION_SAVE_AS_YA = PROJECT_ACTION_PREFIX +
"SaveAs-YA";
public static final String PROJECT_ACTION_CHECKPOINT_YA = PROJECT_ACTION_PREFIX +
"Checkpoint-YA";
public static final String PROJECT_ACTION_ADDFORM_YA = PROJECT_ACTION_PREFIX +
"AddForm-YA";
public static final String PROJECT_ACTION_REMOVEFORM_YA = PROJECT_ACTION_PREFIX +
"RemoveForm-YA";
public static final String PROJECT_SUBACTION_BUILD_YA = PROJECT_ACTION_PREFIX +
"Build-Subcommand-YA";
public static final String USER_EVENT = "User";
public static final String USER_ACTION_PREFIX = "User_";
public static final String USER_ACTION_DOWNLOAD_KEYSTORE = USER_ACTION_PREFIX + "DownloadKeystore";
public static final String USER_ACTION_UPLOAD_KEYSTORE = USER_ACTION_PREFIX + "UploadKeystore";
public static final String USER_ACTION_DELETE_KEYSTORE = USER_ACTION_PREFIX + "DeleteKeystore";
// Google Analytics account
private static final String GA_ACCOUNT = "UA-5856106-2";
// Google Analytics tracker object
@SuppressWarnings("unused")
private static JavaScriptObject gaTracker;
static {
if (trackingAvailable()) {
gaInit(GA_ACCOUNT);
}
}
private Tracking() {
}
/**
* Track a page view.
*/
public static void trackPageview() {
if (trackingAvailable()) {
gaTrackPageview();
}
}
/**
* Track an event.
*
* @param event event category
* @param action event action
*/
public static void trackEvent(String event, String action) {
if (trackingAvailable()) {
gaTrackEvent(event, action);
// Should we continue to log every "event" as a page view (which is how
// Herbert set it up) in addition to logging it as an actual event?
gaTrackEventAsPage("/event/" + event + '/' + action);
}
}
/**
* Track an event.
*
* @param event event category
* @param action event action
* @param label event label
*/
public static void trackEvent(String event, String action, String label) {
if (trackingAvailable()) {
gaTrackEvent(event, action, label);
// Should we continue to log every "event" as a page view (which is how
// Herbert set it up) in addition to logging it as an actual event?
gaTrackEventAsPage("/event/" + event + '/' + action);
}
}
/**
* Track an event.
*
* @param event event category
* @param action event action
* @param label event label
* @param value event value (latency)
*/
public static void trackEvent(String event, String action, String label, int value) {
if (trackingAvailable()) {
gaTrackEvent(event, action, label, value);
}
}
/*
* Indicates whether to track or not.
*/
private static boolean trackingAvailable() {
return AppInventorFeatures.trackClientEvents();
}
/*
* Initializes the tracker object.
*/
private static native void gaInit(String key) /*-{
var _gat = $wnd["Ode.Tracking"];
if (_gat != null) {
var tracker = _gat._getTracker(key);
if (tracker != null) {
tracker._initData();
@com.google.appinventor.client.tracking.Tracking::gaTracker = tracker;
}
}
}-*/;
/*
* Tracks a page view.
*/
private static native void gaTrackPageview() /*-{
var tracker = @com.google.appinventor.client.tracking.Tracking::gaTracker;
if (tracker != null) {
tracker._trackPageview();
}
}-*/;
/*
* Track an event as a pageview. For backwards compatibility purposes only.
*/
private static native void gaTrackEventAsPage(String event) /*-{
var tracker = @com.google.appinventor.client.tracking.Tracking::gaTracker;
if (tracker != null) {
tracker._trackPageview(event);
}
}-*/;
/*
* Track an event.
*/
private static native void gaTrackEvent(String event, String action) /*-{
var tracker = @com.google.appinventor.client.tracking.Tracking::gaTracker;
if (tracker != null) {
tracker._trackEvent(event, action);
}
}-*/;
/*
* Track an event.
*/
private static native void gaTrackEvent(String event, String action, String label) /*-{
var tracker = @com.google.appinventor.client.tracking.Tracking::gaTracker;
if (tracker != null) {
tracker._trackEvent(event, action, label);
}
}-*/;
/*
* Track an event.
*/
private static native void gaTrackEvent(String event, String action, String label, int value) /*-{
var tracker = @com.google.appinventor.client.tracking.Tracking::gaTracker;
if (tracker != null) {
tracker._trackEvent(event, action, label, value);
}
}-*/;
}