Skip to content

Instantly share code, notes, and snippets.

@xulz
Forked from nicobo/GAEventTracker.java
Created November 22, 2013 07:06
Show Gist options
  • Save xulz/7596013 to your computer and use it in GitHub Desktop.
Save xulz/7596013 to your computer and use it in GitHub Desktop.
package nicommons.android.analytics;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.view.View;
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
import com.google.android.apps.analytics.easytracking.EasyTracker;
/**
* Wraps a concrete *ClickListener to trigger a
* {@link GoogleAnalyticsTracker#trackEvent(String, String, String, int)}
*
* <p>
* Works for {@link OnClickListener}, {@link android.view.View.OnClickListener}
* and {@link OnPreferenceClickListener}.
* </p>
*
* <p>
* NOTE: everything is public, but using only the corresponding full constructor
* depending on the listener to wrap should be enough.
* </p>
*/
public class GAEventTracker implements OnClickListener, android.view.View.OnClickListener, OnPreferenceClickListener {
private OnClickListener delegateDialogOnClickListener;
private android.view.View.OnClickListener delegateViewOnClickListener;
private OnPreferenceClickListener delegateOnPreferenceClickListener;
private GoogleAnalyticsTracker tracker;
private EasyTracker easyTracker;
private final String category;
private final String action;
private final String label;
private final int value;
public GAEventTracker(String _category, String _action, String _label, int _value) {
category = _category;
action = _action;
label = _label;
value = _value;
}
// CONSTRUCTORS for EasyTracker
public GAEventTracker(EasyTracker _tracker, String _category, String _action, String _label, int _value) {
this(_category, _action, _label, _value);
easyTracker = _tracker;
}
public GAEventTracker(OnClickListener _delegateDialogOnClickListener, EasyTracker _tracker, String _category,
String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateDialogOnClickListener = _delegateDialogOnClickListener;
}
public GAEventTracker(android.view.View.OnClickListener _delegateViewOnClickListener, EasyTracker _tracker,
String _category, String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateViewOnClickListener = _delegateViewOnClickListener;
}
public GAEventTracker(OnPreferenceClickListener _delegateOnPreferenceClickListener, EasyTracker _tracker,
String _category, String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateOnPreferenceClickListener = _delegateOnPreferenceClickListener;
}
// CONSTRUCTORS for GoogleAnalyticsTracker
public GAEventTracker(GoogleAnalyticsTracker _tracker, String _category, String _action, String _label, int _value) {
this(_category, _action, _label, _value);
tracker = _tracker;
}
public GAEventTracker(OnClickListener _delegateDialogOnClickListener, GoogleAnalyticsTracker _tracker,
String _category, String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateDialogOnClickListener = _delegateDialogOnClickListener;
}
public GAEventTracker(android.view.View.OnClickListener _delegateViewOnClickListener,
GoogleAnalyticsTracker _tracker, String _category, String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateViewOnClickListener = _delegateViewOnClickListener;
}
public GAEventTracker(OnPreferenceClickListener _delegateOnPreferenceClickListener,
GoogleAnalyticsTracker _tracker, String _category, String _action, String _label, int _value) {
this(_tracker, _category, _action, _label, _value);
delegateOnPreferenceClickListener = _delegateOnPreferenceClickListener;
}
// CHAIN SETTERS FOR THE TRACKER
public GAEventTracker setTracker(EasyTracker _tracker) {
easyTracker = _tracker;
tracker = null;
return this;
}
public GAEventTracker setTracker(GoogleAnalyticsTracker _tracker) {
tracker = _tracker;
easyTracker = null;
return this;
}
// CHAIN SETTERS FOR THE WRAPPED LISTENER
public GAEventTracker setListener(OnPreferenceClickListener _listener) {
delegateOnPreferenceClickListener = _listener;
return this;
}
public GAEventTracker setListener(android.view.View.OnClickListener _listener) {
delegateViewOnClickListener = _listener;
return this;
}
public GAEventTracker setListener(OnClickListener _listener) {
delegateDialogOnClickListener = _listener;
return this;
}
// UTILITY METHODS
private void trackEvent() {
if (tracker != null) {
tracker.trackEvent(category, action, label, value);
} else if (easyTracker != null) {
easyTracker.trackEvent(category, action, label, value);
} else {
throw new IllegalStateException("No tracker was set !");
}
}
// LISTENER IMPLEMENTATIONS
@Override
public boolean onPreferenceClick(Preference preference) {
trackEvent();
return delegateOnPreferenceClickListener.onPreferenceClick(preference);
}
@Override
public void onClick(View view) {
trackEvent();
delegateViewOnClickListener.onClick(view);
}
@Override
public void onClick(DialogInterface dialog, int which) {
trackEvent();
delegateDialogOnClickListener.onClick(dialog, which);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment