package cn.scau.scautreasure;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import java.util.Calendar;
import java.util.List;
import cn.scau.scautreasure.helper.ClassHelper_;
import cn.scau.scautreasure.model.ClassModel;
import cn.scau.scautreasure.util.CacheUtil;
import cn.scau.scautreasure.util.ClassUtil;
import cn.scau.scautreasure.util.DateUtil;
/**
* 情景模式,顺序请于arrays.xml中的ringer_mode保持一致<br/>
* Created by robust on 14-4-7.
*/
public enum RingerMode {
/**
* 未设置
*/
NOT_SET(-1),
/**
* 正常模式(声音、震动开启)
*/
NORMAL(AudioManager.RINGER_MODE_NORMAL),
/**
* 震动模式
*/
VIBRATE(AudioManager.RINGER_MODE_VIBRATE),
/**
* 静音
*/
SILENT(AudioManager.RINGER_MODE_SILENT);
private final int value;
private RingerMode(int value){
this.value = value;
}
public int getValue(){
return value;
}
public static final boolean isSet(int value){
return value != -1;
}
public static RingerMode getModeByValue(int value){
for(RingerMode mode : RingerMode.values()){
if(mode.getValue() == value){
return mode;
}
}
return NOT_SET;
}
/**
* 设置上课时的情景模式
* @param context
* @param mode
* @param offsetMinute 上课前触发的时间
*/
public static final void duringClassOn(Context context, RingerMode mode, int offsetMinute){
int value = mode.getValue();
ClassHelper_ helper = ClassHelper_.getInstance_(context);
List<ClassModel> klasses = helper.getDayLessonWithParams(new DateUtil().getDayOfWeek());
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AppConstant.ACTION_RINGER_MODE_ALARM_DURING);
PendingIntent pendIntent;
Calendar c = Calendar.getInstance();
int node;
for(ClassModel classModel : klasses){
node = Integer.parseInt(classModel.getNode().split(",")[0]);
pendIntent = PendingIntent.getBroadcast(context,
node, intent, PendingIntent.FLAG_CANCEL_CURRENT);
if(isSet(value)){
ClassUtil.genClassBeginTime(c, node);
c.add(Calendar.MINUTE, offsetMinute);
alarmMgr.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendIntent);
} else {
alarmMgr.cancel(pendIntent);
}
}
}
/**
* 设置下课后的情景模式
* @param context
* @param mode
* @param offsetMinute 下课后触发的时间
*/
public static final void afterClassOn(Context context, RingerMode mode, int offsetMinute){
int value = mode.getValue();
ClassHelper_ helper = ClassHelper_.getInstance_(context);
List<ClassModel> klasses = helper.getDayLessonWithParams(new DateUtil().getDayOfWeek());
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AppConstant.ACTION_RINGER_MODE_ALARM_AFTER);
PendingIntent pendIntent;
Calendar c = Calendar.getInstance();
int node;
String[] nodes;
for(ClassModel classModel : klasses){
nodes = classModel.getNode().split(",");
node = Integer.parseInt(nodes[nodes.length - 1]);
//节次作为reqCode
pendIntent = PendingIntent.getBroadcast(context,
node, intent, PendingIntent.FLAG_CANCEL_CURRENT);
if(isSet(value)){
ClassUtil.genClassOverTime(c, node);
c.add(Calendar.MINUTE, offsetMinute);
alarmMgr.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendIntent);
} else {
alarmMgr.cancel(pendIntent);
}
}
}
/**
* 设置每天0:00触发的闹钟
*/
public static void setDateChangedAlarm(Context context){
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AppConstant.ACTION_DATE_CHANGED);
PendingIntent pendIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), CacheUtil.TIME_DAY * 1000, pendIntent);
}
/**
* 取消每天0:00触发的闹钟
* @param context
*/
public static void cancelDateChangedAlarm(Context context){
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AppConstant.ACTION_DATE_CHANGED);
PendingIntent pendIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.cancel(pendIntent);
}
}