-
-
Save xulz/7596013 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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