import android.database.Cursor;
import android.media.AudioManager;
import android.net.Uri;
-import android.os.Build;
import android.os.Handler;
import android.os.Message;
-import android.os.Messenger;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.enqualcomm.support.bean.StheartRate;
import com.enqualcomm.support.provider.ICAlarmProvider;
import com.enqualcomm.support.provider.ICContentProvider;
+import com.enqualcomm.support.provider.ICDatabaseHelper;
+import com.enqualcomm.support.provider.ICForbiddenProvider;
import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
import com.enqualcomm.support.utils.AlarmHelper;
import com.enqualcomm.support.utils.Connection;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
import static com.enqualcomm.support.Constants.ACTION_ALARM_DELETE_ALARM;
import static com.enqualcomm.support.Constants.ACTION_ALARM_DELETE_ALARM_RESULT;
+import static com.enqualcomm.support.Constants.ACTION_ALARM_SILENT2_UPDATE;
import static com.enqualcomm.support.Constants.ACTION_ANTIOFF_ALARM_CHANGE;
import static com.enqualcomm.support.Constants.ACTION_CLOSE_UNREAD_MSG;
import static com.enqualcomm.support.Constants.ACTION_IC_ALARM;
public SilentManager() {
}
- private void callback(Messenger var1, boolean var2) {
- short var3;
- if (var2) {
- var3 = 600;
- } else {
- var3 = 700;
- }
-
- if (var1 != null) {
- try {
- var1.send(Message.obtain((Handler) null, var3));
- } catch (Exception e) {
- e.printStackTrace();
- ICLogger.e(e.getMessage(), e);
- }
- }
- }
public void cancelAlarm(List<Alarm> alarms) {
for (Alarm alarmItem : alarms) {
return PendingIntent.getService(this.mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
- private PendingIntent getPendingIntent(String time,
- String week,
- String ring,
- String name,
- int dayOfWeek, long tmpTimeInMillis, boolean repeat) {
- StringBuilder sb = new StringBuilder("alarm:");
- sb.append(time);
- sb.append(",");
- sb.append(week);
- sb.append(",");
- sb.append(ring);
- sb.append(",");
- sb.append(name);
- sb.append(",");
- sb.append(dayOfWeek);
- week = sb.toString();
- ICLogger.d("alarm data == > " + week);
- Intent intent = new Intent(this.mContext, CoreService.class);
- intent.setAction(ACTION_IC_ALARM);
- intent.putExtra("IS_REPEAT", repeat);
- intent.putExtra("TIME_STAMP", tmpTimeInMillis);
- intent.setData(Uri.parse(week));
- return PendingIntent.getService(this.mContext,
- 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- }
private PendingIntent getPendingIntent(String var1, String var2,
String var3, String var4, String var5, String var6, String var7
}
- public static void setAlarmTime(Context context, long timeInMillis, Intent intent) {
- AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- PendingIntent sender = PendingIntent.getBroadcast(context,
- intent.getIntExtra("id", 0),
- intent, PendingIntent.FLAG_CANCEL_CURRENT);
- int interval = (int) intent.getLongExtra("intervalMillis", 0);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- am.setWindow(AlarmManager.RTC_WAKEUP, timeInMillis, interval, sender);
- }
- }
-
public static void cancelAlarm(Context context, String action, int id) {
Intent intent = new Intent(action);
PendingIntent pi = PendingIntent.getBroadcast(context, id, intent, PendingIntent
intentFilter.addAction(ACTION_NOTICE_ALARM_CHANGE);
intentFilter.addAction(ACTION_ALARM_ALARM_CHANGE);
intentFilter.addAction(ACTION_ALARM_DELETE_ALARM);
+ intentFilter.addAction(ACTION_ALARM_SILENT2_UPDATE);
this.mContext.registerReceiver(this.mAlarmReceiver, intentFilter);
runtime.getContextProxy().getTelephonyManager().listen(this.phoneStateListener, 32);
}
}
query.close();
}
+ } else if (ACTION_ALARM_SILENT2_UPDATE.equals(action)) {
+ SilentManager.getInstance().handleSilentFromDb();
}
}
}
+
+ //处理静默时间段的数据
+ //从数据库中查出数据,判断当前的状态
+ //设置下一个改变值的Alarm
+ //Alarm的前缀段是:500,后缀段是id组成alarm的requestCode
+ public void handleSilentFromDb() {
+ //当前时间小时,分钟,当前星期
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
+ int week = calendar.get(Calendar.DAY_OF_WEEK);
+ ICLogger.d("current hour ==> " + hour + " minute ==> " + minute + " week ==> " + week);
+ //遍历数据
+ Cursor query = mContext.getContentResolver().query(Uri.parse(ICForbiddenProvider.FORBIDDEN), null, null, null, null);
+ if (query != null) {
+ while (query.moveToNext()) {
+ //获取数据
+ String idValue = query.getString(query.getColumnIndex(ICDatabaseHelper.forbidden_id));
+ String startValue = query.getString(query.getColumnIndex(ICDatabaseHelper.forbidden_start));
+ String endValue = query.getString(query.getColumnIndex(ICDatabaseHelper.forbidden_end));
+ String weekValue = query.getString(query.getColumnIndex(ICDatabaseHelper.forbidden_week));
+ String statusValue = query.getString(query.getColumnIndex(ICDatabaseHelper.forbidden_status));
+ ICLogger.d("startValue ==> " + startValue);
+ ICLogger.d("endValue ==> " + endValue);
+ ICLogger.d("weekValue ==> " + weekValue);
+ ICLogger.d("statusValue ==> " + statusValue);
+ //判断开关
+ try {
+ int startHour = Integer.parseInt(startValue.replace("ST", "").substring(0, 2));
+ int startMinute = Integer.parseInt(startValue.replace("ST", "").substring(3));
+ ICLogger.d("startHour ==> " + startHour);
+ ICLogger.d("startMinute ==> " + startMinute);
+ if ("ON".equals(statusValue)) {
+ //开启时间的Alarm
+ //创建开始的alarm
+ char[] chars = weekValue.toCharArray();
+ if (chars.length > 0) {
+ for (char aChar : chars) {
+ ICLogger.d("aChar==> " + aChar);
+ //设置N个,ID为:前缀+id+星期
+ String targetAlarm = SILENT_ALARM_REQUEST_CODE_START_PREFIX + idValue + aChar;
+ int alarmId = Integer.parseInt(targetAlarm);
+ ICLogger.d("alarmId ==> " + alarmId);
+ //AlarmManagerUtil.setAlarm(mContext, 2, );
+ }
+ } else {
+ //单次
+ }
+ //AlarmManagerUtil.setAlarm();
+ } else {
+ //关闭时间的Alarm
+
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ //如果关的,那么就取消alarm
+ //对比数据
+ //设置Alarm
+ }
+ query.close();
+ }
+ }
+
+ //开始Alarm的前缀段
+ private final int SILENT_ALARM_REQUEST_CODE_START_PREFIX = 500;
+ //结束Alarm的前缀段
+ private final int SILENT_ALARM_REQUEST_CODE_END_PREFIX = 600;
+
+ /**
+ * 取消静音时间段的Alarm
+ *
+ * @param id
+ */
+ public void cancelSilentAlarmById(String id) {
+
+ }
}
\ No newline at end of file
import com.enqualcomm.support.provider.ICAlarmProvider;
import com.enqualcomm.support.provider.ICDatabaseHelper;
import com.enqualcomm.support.provider.ICFollowProvider;
+import com.enqualcomm.support.provider.ICForbiddenProvider;
import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
import com.enqualcomm.support.provider.ICMembersProvider;
import com.enqualcomm.support.provider.WeTalkMessageProvider;
import java.util.UUID;
import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
+import static com.enqualcomm.support.Constants.ACTION_ALARM_SILENT2_UPDATE;
import static com.enqualcomm.support.Constants.ALARM_POWER_OFF;
import static com.enqualcomm.support.Constants.FROM_SERVER;
import static com.enqualcomm.support.Constants.contact;
* 关于自定义星期几的规则:最左边是周日,最右边是周六,即 0111110 的顺序是:周日,周一,周二,周三,周四,周五,周六(1 为打开,0 为关闭),所以上面的意思是周一至周五打开上课禁用。
*/
public void handleSILENCETIME2(Connection connection, Runtime runtime, String cmd, String data) {
+ //回复收到数据
connection.send(SILENCETIME2(runtime));
+ //切割数据
String[] silent_items = data.split(CMD_SPLIT);
- ArrayList<Silent> slist = new ArrayList<>();
+ //解析数据
if (silent_items.length > 0) {
+ //先删除数据库中的数据
+ Uri uri = Uri.parse(ICForbiddenProvider.FORBIDDEN);
+ Cursor query = runtime.getContextProxy().getResolver().query(uri, new String[]{ICDatabaseHelper.forbidden_id},
+ null, null, null);
+ if (query != null) {
+ SilentManager silentManager = SilentManager.getInstance();
+ while (query.moveToNext()) {
+ String id = query.getString(0);
+ silentManager.cancelSilentAlarmById(id);
+ }
+ query.close();
+ }
+ //取消对应的Alarm
+ runtime.getContextProxy().getResolver().delete(uri, null, null);
for (String si : silent_items) {
String[] sl = si.split("-");
if (sl.length == 4) {
StringBuilder week_sb = new StringBuilder();
for (int i = 0; i < week.length; i++) {
if (week[i] == '1') {
- week_sb.append(i + 1);
+ if (i == 0) {
+ week_sb.append(7);
+ } else {
+ week_sb.append(i);
+ }
}
}
Silent silent = new Silent(start, end, week_sb.toString(), status);
- slist.add(silent);
ICLogger.i("set silence " +
start + " " + end + " "
+ week_sb.toString() + " " + status);
+ //存储到数据库中
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ICDatabaseHelper.forbidden_start, silent.start);
+ contentValues.put(ICDatabaseHelper.forbidden_end, silent.end);
+ contentValues.put(ICDatabaseHelper.forbidden_status, silent.status);
+ contentValues.put(ICDatabaseHelper.forbidden_week, silent.week);
+ runtime.getContextProxy().getResolver().insert(uri, contentValues);
} else {
ICLogger.i("免打扰时间格式错误,skip");
}
+ //存完以后去处理,从数据库中拿出来,然后对状态进行更新
+ //并且设置好下一个Alarm,来更新状态
+ mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_SILENT2_UPDATE));
}
+ } else {
+ ICLogger.d("no data..");
}
- runtime.getDbHelper().saveSilent(slist);
}
public static StringMessage LGZONE(Runtime runtime) {