package com.jdroid.android.service;
import com.google.android.gms.gcm.GcmNetworkManager;
import com.google.android.gms.gcm.GcmTaskService;
import com.google.android.gms.gcm.TaskParams;
import com.jdroid.android.application.AbstractApplication;
import com.jdroid.java.date.DateUtils;
import com.jdroid.java.exception.ConnectionException;
import com.jdroid.java.utils.LoggerUtils;
import org.slf4j.Logger;
public abstract class AbstractGcmTaskService extends GcmTaskService {
private final static Logger LOGGER = LoggerUtils.getLogger(GcmTaskService.class);
@Override
public void onInitializeTasks() {
LOGGER.info("Initializing task: " + getClass().getSimpleName());
AbstractApplication.get().initializeGcmTasks();
}
@Override
public final int onRunTask(TaskParams taskParams) {
try {
String trackingVariable = getTrackingVariable(taskParams);
String trackingLabel = getTrackingLabel(taskParams);
LOGGER.info("Starting service. Variable: " + trackingVariable + " - Label: " + trackingLabel);
long startTime = DateUtils.nowMillis();
int result = doRunTask(taskParams);
if (result == GcmNetworkManager.RESULT_SUCCESS) {
long executionTime = DateUtils.nowMillis() - startTime;
AbstractApplication.get().getAnalyticsSender().trackServiceTiming(trackingVariable, trackingLabel, executionTime);
}
return result;
} catch (ConnectionException e) {
AbstractApplication.get().getExceptionHandler().logHandledException(e);
return GcmNetworkManager.RESULT_RESCHEDULE;
} catch (Exception e) {
AbstractApplication.get().getExceptionHandler().logHandledException(e);
return GcmNetworkManager.RESULT_FAILURE;
}
}
public abstract int doRunTask(TaskParams taskParams);
protected String getTrackingVariable(TaskParams taskParams) {
return getClass().getSimpleName();
}
protected String getTrackingLabel(TaskParams taskParams) {
return getClass().getSimpleName();
}
}