package de.saxsys.android.projectiler.app.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
import android.util.Log;
import java.util.Calendar;
import java.util.Date;
import de.saxsys.android.projectiler.app.R;
import de.saxsys.android.projectiler.app.utils.BusinessProcess;
import de.saxsys.android.projectiler.app.utils.NotificationUtils;
import de.saxsys.android.projectiler.app.utils.SettingsUtils;
public class NotificationReceiver extends BroadcastReceiver {
private final String TAG = NotificationReceiver.class.getSimpleName();
private BusinessProcess businessProcess;
public NotificationReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
//Log.i("BootCompleteReceiver", "NotificationReceiver");
boolean sendNotification = SettingsUtils.isSendNotification(context);
boolean vibration = SettingsUtils.isVibration(context);
String startWork = SettingsUtils.startWork(context);
String endWork = SettingsUtils.endWork(context);
String startBreak = SettingsUtils.startBreak(context);
String endBreak = SettingsUtils.endBreak(context);
// sind alle Werte gesetzt?
if(!startBreak.equals("") && !endBreak.equals("") && !startWork.equals("") && !endWork.equals("")){
//Log.i(TAG, "alle Daten gesetzt");
if(sendNotification){
//Log.i(TAG, "send notification");
Date currentTime = new Date(System.currentTimeMillis());
// samstag und sonntag fallen raus
if(!isWeekend(currentTime)){
Date startWorkDate = getDate(startWork);
Date endWorkDate = getDate(endWork);
Date startBreakDate = getDate(startBreak);
Date endBreakDate = getDate(endBreak);
businessProcess = BusinessProcess.getInstance(context);
boolean isProjectStarted = isProjectStarted();
if(isProjectStarted){
//Log.i(TAG, "Projekt gestartet");
//Log.i(TAG, "startWork: " + getDate(startWork).toString());
// projekt ist gestartet und endWork ist vorbei
if(currentTime.after(endWorkDate)){
sendNotification(context, 101, context.getString(R.string.work_is_over_title), context.getString(R.string.work_is_over_message), vibration);
}
// Projekt gestartet und startBreak ist vorbei
if(currentTime.after(startBreakDate) && currentTime.before(endBreakDate)){
sendNotification(context, 102, context.getString(R.string.time_for_break_title), context.getString(R.string.time_for_break_message), vibration);
}
}else{
//Log.i(TAG, "kein Projekt gestartet");
// projekt ist nicht gestartet und es ist arbeitszeit
if((currentTime.after(startWorkDate) && currentTime.before(startBreakDate) || (currentTime.after(endBreakDate) && currentTime.before(endWorkDate)))){
sendNotification(context, 103, context.getString(R.string.no_track_started_title), context.getString(R.string.no_track_started_message), vibration);
}
}
}
}
}else{
Log.i(TAG, "es sind nicht alle Daten gesetzt!");
}
}
private Date getDate(String time) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
String[] timeSplit = time.split(":");
calendar.set(Calendar.HOUR, Integer.parseInt(timeSplit[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(timeSplit[1]));
calendar.set(Calendar.AM_PM, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
private boolean isWeekend(final Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int day = calendar.get(Calendar.DAY_OF_WEEK);
if(day == Calendar.SATURDAY || day == Calendar.SUNDAY){
return true;
}
return false;
}
private boolean isProjectStarted() {
Date startDate = businessProcess.getStartDate();
if(startDate == null){
return false;
}
return true;
}
private void sendNotification(Context context, int mNotificationId, String title, String text, boolean vibrate) {
NotificationUtils.sendNotification(context, mNotificationId, title, text);
if(vibrate){
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(1000);
}
}
}