package com.jdroid.android.analytics; import android.app.Activity; import com.jdroid.android.social.AccountType; import com.jdroid.android.social.SocialAction; import com.jdroid.android.usecase.AbstractUseCase; import com.jdroid.java.analytics.BaseAnalyticsSender; import com.jdroid.java.concurrent.ExecutorUtils; import com.jdroid.java.utils.LoggerUtils; import org.slf4j.Logger; import java.util.List; import java.util.Map; /** * * @param <T> */ public class AnalyticsSender<T extends AnalyticsTracker> extends BaseAnalyticsSender<T> implements AnalyticsTracker { private static final Logger LOGGER = LoggerUtils.getLogger(AnalyticsSender.class); @SafeVarargs public AnalyticsSender(T... trackers) { super(trackers); } public AnalyticsSender(List<T> trackers) { super(trackers); } @Override public void onInitExceptionHandler(Map<String, String> metadata) { try { for (T tracker : getTrackers()) { if (tracker.isEnabled()) { tracker.onInitExceptionHandler(metadata); } } } catch (Exception e) { LOGGER.error("Error when initializing the exception handler", e); } } @Override public void trackErrorBreadcrumb(final String message) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackErrorBreadcrumb(message); } }); } @Override public void onActivityStart(final Class<? extends Activity> activityClass, final String referrer, final Object data) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onActivityStart(activityClass, referrer, data); } }); } @Override public void onActivityResume(final Activity activity) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onActivityResume(activity); } }); } @Override public void onActivityPause(final Activity activity) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onActivityPause(activity); } }); } @Override public void onActivityStop(final Activity activity) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onActivityStop(activity); } }); } @Override public void onActivityDestroy(final Activity activity) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onActivityDestroy(activity); } }); } @Override public void onFragmentStart(final String screenViewName) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.onFragmentStart(screenViewName); } }); } @Override public void trackFatalException(final Throwable throwable, final List<String> tags) { ExecutorUtils.execute(new Runnable() { @Override public void run() { for (T tracker : getTrackers()) { if (tracker.isEnabled()) { tracker.trackFatalException(throwable, tags); } } } }); } @Override public void trackHandledException(final Throwable throwable, final List<String> tags) { ExecutorUtils.execute(new Runnable() { @Override public void run() { for (T tracker : getTrackers()) { try { if (tracker.isEnabled()) { tracker.trackHandledException(throwable, tags); } } catch (Exception e) { LOGGER.error("Error when trying to track the exception.", e); } } } }); } @Override public void trackUriOpened(final String screenName, final String referrer) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackUriOpened(screenName, referrer); } }); } @Override public void trackSocialInteraction(final AccountType accountType, final SocialAction socialAction, final String socialTarget) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackSocialInteraction(accountType, socialAction, socialTarget); } }); } @Override public void trackNotificationDisplayed(final String notificationName) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackNotificationDisplayed(notificationName); } }); } @Override public void trackNotificationOpened(final String notificationName) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackNotificationOpened(notificationName); } }); } @Override public void trackEnjoyingApp(final Boolean enjoying) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackEnjoyingApp(enjoying); } }); } @Override public void trackRateOnGooglePlay(final Boolean rate) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackRateOnGooglePlay(rate); } }); } @Override public void trackGiveFeedback(final Boolean feedback) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackGiveFeedback(feedback); } }); } @Override public void trackUseCaseTiming(final Class<? extends AbstractUseCase> useCaseClass, final long executionTime) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackUseCaseTiming(useCaseClass, executionTime); } }); } @Override public void trackServiceTiming(final String trackingVariable, final String trackingLabel, final long executionTime) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackServiceTiming(trackingVariable, trackingLabel, executionTime); } }); } // Widgets @Override public void trackWidgetAdded(final String widgetName) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackWidgetAdded(widgetName); } }); } @Override public void trackWidgetRemoved(final String widgetName) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackWidgetRemoved(widgetName); } }); } @Override public void trackSendAppInvitation(final String invitationId) { ExecutorUtils.execute(new TrackerRunnable() { @Override protected void track(T tracker) { tracker.trackSendAppInvitation(invitationId); } }); } }