Skip to content

Instantly share code, notes, and snippets.

@Aracem
Created July 21, 2015 21:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Aracem/5d7be915af98d8ab9f11 to your computer and use it in GitHub Desktop.
Save Aracem/5d7be915af98d8ab9f11 to your computer and use it in GitHub Desktop.
Aspect Oriented Development with a Tracking Sample
package com.aracem.sample.tracking;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.aracem.sample.tracking.trackingservice.MixpanelTrackingHelper;
import com.aracem.sample.tracking.trackingservice.GoogleAnalyticsTrackingHelper;
import com.aracem.sample.tracking.trackingservice.FlurryTrackingHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Master {@link TrackingHelper} that encapsulates all tracking implementations and helps you call all the
* tracking libraries without doing nothing.
* <p/>
* Please use this implementation instead of other more specific.
*/
public class MasterTrackingHelper implements TrackingHelper {
private List<TrackingHelper> mTrackersList = new ArrayList<>();
public MasterTrackingHelper() {
mTrackersList.add(new MixpanelTrackingHelper());
mTrackersList.add(new GoogleAnalyticsTrackingHelper());
mTrackersList.add(new FlurryTrackingHelper());
}
@Override
public void initializeTrackingInApplication(Application application) {
for (TrackingHelper tracker : mTrackersList) {
tracker.initializeTrackingInApplication(application);
}
}
@Override
public void onFinalizeAppTracking(Activity activity) {
for (TrackingHelper tracker : mTrackersList) {
tracker.onFinalizeAppTracking(activity);
}
}
@Override
public void onStartPage(Context context) {
for (TrackingHelper tracker : mTrackersList) {
tracker.onStartPage(context);
}
}
@Override
public void onResumePage(Context context) {
for (TrackingHelper tracker : mTrackersList) {
tracker.onResumePage(context);
}
}
@Override
public void onPausePage(Context context) {
for (TrackingHelper tracker : mTrackersList) {
tracker.onPausePage(context);
}
}
@Override
public void trackEvent(@NonNull String eventName, @Nullable Map<String, Object> eventInfo) {
for (TrackingHelper tracker : mTrackersList) {
tracker.trackEvent(eventName, eventInfo);
}
}
@Override
public void trackVisitEvent(Context context, VisitEventInfo eventInfo) {
for (TrackingHelper tracker : mTrackersList) {
tracker.trackVisitEvent(context, eventInfo);
}
}
@Override
public void trackClickEvent(Context context, ClickEventInfo eventInfo) {
for (TrackingHelper tracker : mTrackersList) {
tracker.trackClickEvent(context, eventInfo);
}
}
@Override
public void identifyUser(@Nullable User user) {
for (TrackingHelper tracker : mTrackersList) {
tracker.identifyUser(user);
}
}
@Override
public void resetUser() {
for (TrackingHelper tracker : mTrackersList) {
tracker.resetUser();
}
}
@Override
public void updateSuperproperties(@Nullable User user) {
for (TrackingHelper tracker : mTrackersList) {
tracker.updateSuperproperties(user);
}
}
}
package com.aracem.sample.tracking;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Map;
public interface TrackingHelper {
void initializeTrackingInApplication(Application application);
/**
* Track the end of an application session. We know that there aren't any form to know when the app finish but some
* trackers needs to know when more or less the user exit the app to flush the info or other stuff.
* Call this method in your onDestroy MainActivity method
*/
void onFinalizeAppTracking(Activity activity);
void onStartPage(Context context);
void onResumePage(Context context);
void onPausePage(Context context);
void trackVisitEvent(Context context, VisitEventInfo eventInfo);
void trackClickEvent(Context context, ClickEventInfo eventInfo);
void trackEvent(@NonNull String eventName, @Nullable Map<String, Object> eventInfo);
void identifyUser(@Nullable User user);
void resetUser();
void updateSuperproperties(@Nullable User user);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment