package de.saxsys.android.projectiler.app.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import org.droidparts.concurrent.task.AsyncTaskResultListener; import java.util.Date; import de.saxsys.android.projectiler.app.R; import de.saxsys.android.projectiler.app.asynctasks.StartAsyncTask; import de.saxsys.android.projectiler.app.asynctasks.StopAsyncTask; import de.saxsys.android.projectiler.app.utils.BusinessProcess; import de.saxsys.android.projectiler.app.utils.NotificationUtils; public class ProjectilerBroadcastReceiver extends BroadcastReceiver { private final String TAG = ProjectilerBroadcastReceiver.class.getSimpleName(); public static final String ACTION_START = "de.saxsys.android.businessProcess.app.action.START"; public static final String ACTION_STOP = "de.saxsys.android.businessProcess.app.action.STOP"; public static final String ACTION_RESET = "de.saxsys.android.businessProcess.app.action.RESET"; public static final String EXTRAS_START_DATE = "de.saxsys.android.businessProcess.app.extras.START_DATE"; public static final String EXTRAS_END_DATE = "de.saxsys.android.businessProcess.app.extras.END_DATE"; private BusinessProcess businessProcess; private Context context; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, ""); this.context = context; businessProcess = BusinessProcess.getInstance(context); if (intent != null) { final String action = intent.getAction(); if (ACTION_START.equals(action)) { handleActionStart(context); } else if (ACTION_STOP.equals(action)) { Date startDate = null; Date endDate = null; long startLong = intent.getLongExtra(EXTRAS_START_DATE, 0); long endLong = intent.getLongExtra(EXTRAS_END_DATE, 0); if(startLong != 0){ startDate = new Date(startLong); } if(endLong != 0){ endDate = new Date(endLong); } handleActionStop(context, startDate, endDate); }else if (ACTION_RESET.equals(action)) { handleActionReset(context); } } } /** * Handle action Foo in the provided background thread with the provided * parameters. */ private void handleActionStart(final Context context) { if(!businessProcess.getProjectName().equals("")) { businessProcess.showProgressBarOnWidget(context); new StartAsyncTask(context, startTaskResultListener).execute(); } } /** * Handle action Baz in the provided background thread with the provided * parameters. * @param startDate * @param endDate */ private void handleActionStop(final Context context, Date startDate, Date endDate) { businessProcess.showProgressBarOnWidget(context); new StopAsyncTask(context, businessProcess.getProjectName(), startDate, endDate, stopTaskResultListener).execute(); } private void handleActionReset(final Context context) { businessProcess.resetProject(context, false); } private AsyncTaskResultListener<Date> startTaskResultListener = new AsyncTaskResultListener<Date>() { @Override public void onAsyncTaskSuccess(Date aDate) { businessProcess.hideProgressBarOnWidget(context); } @Override public void onAsyncTaskFailure(Exception e) { businessProcess.hideProgressBarOnWidget(context); } }; private AsyncTaskResultListener<String> stopTaskResultListener = new AsyncTaskResultListener<String>() { @Override public void onAsyncTaskSuccess(String projectName) { businessProcess.hideProgressBarOnWidget(context); } @Override public void onAsyncTaskFailure(Exception e) { if(e instanceof IllegalStateException){ // notification schicken NotificationUtils.sendNotification(context, 111, context.getString(R.string.error_stop_tracking), e.getMessage()); } businessProcess.hideProgressBarOnWidget(context); } }; }