Newer
Older
package com.notificationFramework.stimulus;

Peter Joseph De Jonckheere CESM2014
committed

Peter Joseph De Jonckheere CESM2014
committed
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

Peter Joseph De Jonckheere CESM2014
committed
import android.content.SharedPreferences;

Peter Joseph De Jonckheere CESM2014
committed
import android.util.Log;

Peter Joseph De Jonckheere CESM2014
committed
import com.notificationFramework.sedentary.frontEnd.R;
import com.notificationFramework.stimulusStrategy.StimulusStrategy;

Peter Joseph De Jonckheere CESM2014
committed
import java.util.Calendar;

Peter Joseph De Jonckheere CESM2014
committed
/**
* Created by Peter De Jonckheere on 09/01/2018.

Peter Joseph De Jonckheere CESM2014
committed
*/
public class SedentaryStimulus extends BroadcastReceiver implements Stimulus {

Peter Joseph De Jonckheere CESM2014
committed
private static StimulusStrategy strategy;

Peter Joseph De Jonckheere CESM2014
committed

Peter Joseph De Jonckheere CESM2014
committed
public SedentaryStimulus(){
}

Peter Joseph De Jonckheere CESM2014
committed
public SedentaryStimulus(Context context){

Peter Joseph De Jonckheere CESM2014
committed
chooseStrategy(null, context);

Peter Joseph De Jonckheere CESM2014
committed
}

Peter Joseph De Jonckheere CESM2014
committed
public SedentaryStimulus(Context context, StimulusStrategy s){

Peter Joseph De Jonckheere CESM2014
committed
chooseStrategy(s, context);

Peter Joseph De Jonckheere CESM2014
committed
}

Peter Joseph De Jonckheere CESM2014
committed
private void chooseStrategy(StimulusStrategy s, Context context) {

Peter Joseph De Jonckheere CESM2014
committed
if(s != null){
strategy = s;
} else{

Peter Joseph De Jonckheere CESM2014
committed
strategy = defaultStrategy;

Peter Joseph De Jonckheere CESM2014
committed
}

Peter Joseph De Jonckheere CESM2014
committed
Intent intent = new Intent(context, strategy.getClass());
context.startService(intent);

Peter Joseph De Jonckheere CESM2014
committed
}

Peter Joseph De Jonckheere CESM2014
committed

Peter Joseph De Jonckheere CESM2014
committed
@Override

Peter Joseph De Jonckheere CESM2014
committed
public void onReceive(Context context, Intent intent) {

Peter Joseph De Jonckheere CESM2014
committed
SharedPreferences shared = context.getSharedPreferences(context.getString(R.string.preference_file_key), Context.MODE_PRIVATE);
if((shared.getBoolean(context.getString(R.string.notf_switch), true)) && (checkTime(shared, context))) {
Intent i = new Intent(context.getApplicationContext(), com.notificationFramework.notification.SedentaryNotification.class);

Peter Joseph De Jonckheere CESM2014
committed
context.getApplicationContext().startService(i);
if(strategy == null){
strategy = defaultStrategy;
}

Peter Joseph De Jonckheere CESM2014
committed
Intent intent1 = new Intent(context, strategy.getClass());
context.stopService(intent1);

Peter Joseph De Jonckheere CESM2014
committed
chooseStrategy(strategy, context.getApplicationContext());

Peter Joseph De Jonckheere CESM2014
committed
}

Peter Joseph De Jonckheere CESM2014
committed
private boolean checkTime(SharedPreferences shared, Context context){
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, shared.getInt(context.getString(R.string.dnd_shour), 23));

Peter Joseph De Jonckheere CESM2014
committed
cal.set(Calendar.MINUTE, shared.getInt(context.getString(R.string.dnd_smin), 0));
Calendar cal2 = Calendar.getInstance();
int days = checkMonth(cal2.get(Calendar.MONTH));

Peter Joseph De Jonckheere CESM2014
committed
if(shared.getInt(context.getString(R.string.dnd_shour), 23) > shared.getInt(context.getString(R.string.dnd_ehour), 9)) {
cal2.set(Calendar.DATE, ((cal2.get(Calendar.DATE) + 1) % days));
}
cal2.set(Calendar.HOUR_OF_DAY, shared.getInt(context.getString(R.string.dnd_ehour), 9));

Peter Joseph De Jonckheere CESM2014
committed
cal2.set(Calendar.MINUTE, shared.getInt(context.getString(R.string.dnd_emin), 0));
Calendar curCal = Calendar.getInstance();
if(curCal.getTime().after(cal.getTime()) && curCal.getTime().before(cal2.getTime())){

Peter Joseph De Jonckheere CESM2014
committed
return false;
} else {
return true;
}
}
private int checkMonth(int month){
switch (month){
case Calendar.JANUARY:
case Calendar.MARCH:
case Calendar.MAY:
case Calendar.JULY:
case Calendar.AUGUST:
case Calendar.OCTOBER:
case Calendar.DECEMBER:
return 31;
case Calendar.APRIL:
case Calendar.JUNE:
case Calendar.SEPTEMBER:
case Calendar.NOVEMBER:
return 30;
case Calendar.FEBRUARY:
Calendar cal = Calendar.getInstance();
if (cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365){
return 29;
} else {
return 28;
}
}
return -1;
}