package com.rapidftr.task;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.widget.RemoteViews;
import android.widget.Toast;
import com.rapidftr.R;
import com.rapidftr.RapidFtrApplication;
import com.rapidftr.activity.RapidFtrActivity;
import com.rapidftr.utils.StringUtils;
import lombok.Getter;
import lombok.Setter;
import java.util.Random;
import static java.lang.System.currentTimeMillis;
public abstract class AsyncTaskWithDialog<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
@Getter
@Setter
protected String successMessage = "";
@Getter
@Setter
protected String failureMessage = "";
protected Notification notification;
protected NotificationManager notificationManager;
protected int notificationId = 1021 + new Random().nextInt(10);
public abstract void cancel();
public static <Params, Progress, Result> AsyncTask<Params, Progress, Result> wrap(
final Context context, final AsyncTaskWithDialog<Params, Progress, Result> actualTask,
final int progressMessage, final int defaultSuccessMessage, final int defaultFailureMessage) {
final ProgressDialog dialog = new ProgressDialog(context);
return new AsyncTaskWithDialog<Params, Progress, Result>() {
@Override
protected void onPreExecute() {
dialog.setMessage(context.getString(progressMessage));
dialog.setCancelable(false);
dialog.show();
actualTask.onPreExecute();
}
@Override
protected Result doInBackground(Params... params) {
try {
return actualTask.doInBackground(params);
} catch (Exception e) {
dialog.dismiss();
return null;
}
}
@Override
protected void onPostExecute(Result result) {
dialog.dismiss();
String message = null;
if (result == null || result.equals(false)) {
message = StringUtils.isNotEmpty(failureMessage) ? failureMessage :
RapidFtrApplication.getApplicationInstance().getString(defaultFailureMessage);
} else {
message = StringUtils.isNotEmpty(successMessage) ? successMessage :
RapidFtrApplication.getApplicationInstance().getString(defaultSuccessMessage);
}
try {
actualTask.onPostExecute(result);
} catch (Exception e) {
message = RapidFtrApplication.getApplicationInstance().getString(defaultFailureMessage);
}
Toast.makeText(RapidFtrApplication.getApplicationInstance(), message, Toast.LENGTH_LONG).show();
}
public void cancel() {
dialog.dismiss();
actualTask.cancel(false);
}
};
}
}