package com.notificationFramework.stimulus; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.util.Log; import com.notificationFramework.sedentary.frontEnd.R; import com.notificationFramework.stimulusStrategy.StimulusStrategy; import java.util.Calendar; /** * Created by Peter De Jonckheere on 09/01/2018. */ public class SedentaryStimulus extends BroadcastReceiver implements Stimulus { private static StimulusStrategy strategy; public SedentaryStimulus(){ } public SedentaryStimulus(Context context){ chooseStrategy(null, context); } public SedentaryStimulus(Context context, StimulusStrategy s){ chooseStrategy(s, context); } private void chooseStrategy(StimulusStrategy s, Context context) { if(s != null){ strategy = s; } else{ strategy = defaultStrategy; } Intent intent = new Intent(context, strategy.getClass()); context.startService(intent); } @Override public void onReceive(Context context, Intent intent) { 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); context.getApplicationContext().startService(i); } if(strategy == null){ strategy = defaultStrategy; } Intent intent1 = new Intent(context, strategy.getClass()); context.stopService(intent1); chooseStrategy(strategy, context.getApplicationContext()); } 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)); cal.set(Calendar.MINUTE, shared.getInt(context.getString(R.string.dnd_smin), 0)); Calendar cal2 = Calendar.getInstance(); int days = checkMonth(cal2.get(Calendar.MONTH)); 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)); 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())){ 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; } }