diff --git a/app/src/main/java/net/foucry/pilldroid/PillDroidJobService.java b/app/src/main/java/net/foucry/pilldroid/PillDroidJobService.java index f85e486..45e1155 100644 --- a/app/src/main/java/net/foucry/pilldroid/PillDroidJobService.java +++ b/app/src/main/java/net/foucry/pilldroid/PillDroidJobService.java @@ -1,42 +1,105 @@ package net.foucry.pilldroid; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.app.job.JobParameters; import android.app.job.JobService; -import android.os.Handler; -import android.os.Message; +import android.content.Context; +import android.content.Intent; +import android.icu.util.Calendar; +import android.os.SystemClock; import android.util.Log; +import java.util.Date; +import java.util.List; + +import static net.foucry.pilldroid.NotificationPublisher.NOTIFICATION_ID; + /** * Created by jacques on 17/09/16. */ + public class PillDroidJobService extends JobService { - private static final String TAG = "JobService"; + private static final String TAG = JobService.class.getName(); + private boolean jobCancelled = false; - private Handler mJobHandler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { -// Toast.makeText( getApplicationContext(), "PillDroid - Calcul nouveau stocks", Toast.LENGTH_SHORT).show(); -// MedicamentListActivity.newStockCalculation(getApplicationContext()); - - jobFinished( (JobParameters) msg.obj,false); - return true; - } - }); + private List medicaments = null; + private DBHelper dbHelper = new DBHelper(this); @Override - public boolean onStartJob (JobParameters params) { - Log.d(TAG, "on Start Job: " + params.getJobId()); - mJobHandler.sendMessage(Message.obtain(mJobHandler, 1,params)); - return false; + public boolean onStartJob(JobParameters params) { + Log.d(TAG, "Job started"); + doBackgroundWork(params); + + return true; } + private void doBackgroundWork(final JobParameters params) { + + if (jobCancelled) { + return; + } + medicaments = dbHelper.getAllDrugs(); + + Calendar calendar = Calendar.getInstance(); + Date now = calendar.getTime(); + + long dateSchedule; + + Medicament firstMedicament = null; + + try { + firstMedicament = medicaments.get(0); + } + catch (Exception ignored){} + + if (firstMedicament != null) { + Date dateAlert = UtilDate.removeDaysToDate(firstMedicament.getAlertThreshold(), firstMedicament.getDateEndOfStock()); + + if (dateAlert.getTime() < now.getTime()) { + dateSchedule = now.getTime() + 120000; // If dateAlert < now we schedule an alert for now + 120 seconds + } else { + dateSchedule = dateAlert.getTime(); // If dateAlert > now we use dateAlert as scheduleDate + } + + long delay = dateSchedule - now.getTime(); + scheduleNotification(getApplicationContext(), delay); + } + + Log.d(TAG, "Job finished"); + jobFinished(params, false); + } + + @Override public boolean onStopJob(JobParameters params) { - mJobHandler.removeMessages(1); - return false; + Log.d(TAG, "Job cancelled before completion"); + jobCancelled = true; + return true; } + /** + * Schedule Notification for the delay + * @param Context context + * @param long delay - date for the notification in milliseconds + * @param context + */ + private void scheduleNotification(Context context, long delay) { + Log.d(TAG, "scheduleNotification delay == " + delay); -} + Intent notificationIntent = new Intent(context, NotificationPublisher.class); + notificationIntent.putExtra(NOTIFICATION_ID, 1); + notificationIntent.putExtra(NotificationPublisher.KEY_MESSAGE, getString(R.string.pharmacy)); + notificationIntent.putExtra(NotificationPublisher.KEY_TITLE, getString(R.string.app_name)); + notificationIntent.putExtra(NotificationPublisher.KEY_SOUND, true); + PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + long futureInMillis = SystemClock.elapsedRealtime() + delay; + AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + if (alarmManager != null) { + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); + } + } +} \ No newline at end of file