package com.gaiagps.iburn.service;
import android.content.Context;
import android.transition.Explode;
import com.gaiagps.iburn.api.IBurnService;
import com.google.android.gms.gcm.GcmNetworkManager;
import com.google.android.gms.gcm.GcmTaskService;
import com.google.android.gms.gcm.PeriodicTask;
import com.google.android.gms.gcm.Task;
import com.google.android.gms.gcm.TaskParams;
import net.hockeyapp.android.ExceptionHandler;
import timber.log.Timber;
/**
* This service gets awoken by the Google Cloud Messaging Network Manager
* and allows us to perform our update task at opportune times.
* <p>
* Created by davidbrodsky on 7/2/15.
*/
public class DataUpdateService extends GcmTaskService {
public static final String AUTO_UPDATE_TASK_NAME = "iburn-auto-update";
public static void scheduleAutoUpdate(Context context) {
long periodSecs = 60 * 60 * 24; // Auto-update should be performed no more than once per 24 hours
PeriodicTask dailyUpdate = new PeriodicTask.Builder()
.setService(DataUpdateService.class)
.setPeriod(periodSecs)
.setTag(AUTO_UPDATE_TASK_NAME)
.setPersisted(true)
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
.setRequiresCharging(false)
.setUpdateCurrent(true)
.build();
GcmNetworkManager.getInstance(context).schedule(dailyUpdate);
Timber.d("Scheduled auto-update");
}
/**
* Called on application or Google Play Services update
*/
@Override
public void onInitializeTasks() {
scheduleAutoUpdate(getApplicationContext());
}
@Override
public int onRunTask(TaskParams taskParams) {
try {
if (taskParams.getTag().equals(AUTO_UPDATE_TASK_NAME)) {
Timber.d("GCM invoked update task");
IBurnService service = new IBurnService(getApplicationContext());
boolean success = service.updateData().singleOrDefault(true).toBlocking().single();
Timber.d("GCM invoked task finished with success %b", success);
return success ? GcmNetworkManager.RESULT_SUCCESS : GcmNetworkManager.RESULT_RESCHEDULE;
}
Timber.w("Unknown task (%s) invoked", taskParams.getTag());
return GcmNetworkManager.RESULT_FAILURE;
} catch (Exception e) {
ExceptionHandler.saveException(e, null);
Timber.e(e, "GCM task failed: %s", e.getClass().getSimpleName());
return GcmNetworkManager.RESULT_RESCHEDULE;
}
}
}