package com.truckmuncher.app.data.sync; import android.content.SyncResult; import android.os.RemoteException; public abstract class SyncTask { public final void execute(SyncResult syncResult) { try { ApiResult apiResult = sync(syncResult); translateApiResultToSyncResult(apiResult, syncResult); } catch (RemoteException e) { syncResult.databaseError = true; } } protected abstract ApiResult sync(SyncResult syncResult) throws RemoteException; private void translateApiResultToSyncResult(ApiResult apiResult, SyncResult syncResult) { switch (apiResult) { case NEEDS_USER_INPUT: syncResult.tooManyRetries = true; break; case SHOULD_RETRY: syncResult.fullSyncRequested = true; break; case TEMPORARY_ERROR: syncResult.stats.numIoExceptions++; break; case PERMANENT_ERROR: syncResult.stats.numParseExceptions++; break; case OK: // No-op break; default: throw new IllegalStateException("Got an unhandled ApiResult type"); } } }