package hecosire.com.hecosireapp;
import android.app.AlarmManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import java.util.Calendar;
public class DailyNotificationAlarm extends BroadcastReceiver {
private static final String TAG = "DailyNotificationAlarm";
public static int NOTIFICATION_ID = 001;
public static int ALARM_ID = 002;
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
newReportNotification(context, intent);
wl.release();
}
private void newReportNotification(Context context, Intent intent) {
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_white)
.setContentTitle("How are you?")
.setContentText("Report how are you feeling..");
Intent resultIntent = new Intent(context, NewReportActivity.class);
PendingIntent resultPendingIntent =
PendingIntent.getActivity(
context,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotifyMgr =
(NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
mNotifyMgr.notify(NOTIFICATION_ID, mBuilder.build());
}
public void SetAlarm(Context context) {
CancelAlarm(context);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Calendar nextAlarm = getNextAlarmCalendar();
PendingIntent pi = createAlarmPendingIntent(context);
Log.d(TAG, "Alarm set to: " + nextAlarm.getTime().toString());
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, nextAlarm.getTimeInMillis(), AlarmManager.INTERVAL_HALF_DAY, pi); // Millisec * Second * Minute
}
private Calendar getNextAlarmCalendar() {
Calendar now = Calendar.getInstance();
Calendar nextAlarm = Calendar.getInstance();
nextAlarm.setTimeInMillis(System.currentTimeMillis());
nextAlarm.set(Calendar.HOUR_OF_DAY, 20);
nextAlarm.set(Calendar.MINUTE, 00);
nextAlarm.set(Calendar.SECOND, 00);
if (shouldBeTomorrow(now, nextAlarm)) {
nextAlarm.add(Calendar.DAY_OF_MONTH, 1);
nextAlarm.set(Calendar.HOUR_OF_DAY, 8);
}
if (shouldBeInTheMorning(now, nextAlarm)) {
nextAlarm.set(Calendar.HOUR_OF_DAY, 8);
}
return nextAlarm;
}
private boolean shouldBeInTheMorning(Calendar now, Calendar nextAlarm) {
return now.get(Calendar.HOUR_OF_DAY) < 8;
}
private boolean shouldBeTomorrow(Calendar now, Calendar nextAlarm) {
return now.get(Calendar.HOUR_OF_DAY) >= nextAlarm.get(Calendar.HOUR_OF_DAY) &&
now.get(Calendar.MINUTE) >= nextAlarm.get(Calendar.MINUTE);
}
public void CancelAlarm(Context context) {
try {
PendingIntent sender = createAlarmPendingIntent(context);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
} catch (Exception ex) {
Log.e("DailyNotificationAlarm", "Cancel Alarm exception",ex);
}
}
private PendingIntent createAlarmPendingIntent(Context context) {
Intent i = new Intent(context, DailyNotificationAlarm.class);
return PendingIntent.getBroadcast(context, ALARM_ID, i, 0);
}
}