refactor alarm codes.
authorTrillGates <williamtrillgates@gmail.com>
Wed, 8 Sep 2021 12:47:00 +0000 (20:47 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Wed, 8 Sep 2021 12:47:00 +0000 (20:47 +0800)
18 files changed:
app/release/ICSer_V947_2109081949_release.apk [moved from app/release/ICSer_V946_2109041740_release.apk with 77% similarity]
app/release/output.json
app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/AlarmReceiver.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/provider/ICAlarmProvider.java
app/src/main/java/com/enqualcomm/support/service/AlarmManagerUtil.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/service/SilentManager.java
app/src/main/java/com/enqualcomm/support/utils/AlarmHelper.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocol_anan.java
app/src/main/java/com/ic/protocols/protocol_beehome.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_gator.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_jiai.java
app/src/main/java/com/ic/protocols/protocol_s123.java
app/version_code.properties

similarity index 77%
rename from app/release/ICSer_V946_2109041740_release.apk
rename to app/release/ICSer_V947_2109081949_release.apk
index 7646eb2..ce76cf4 100644 (file)
Binary files a/app/release/ICSer_V946_2109041740_release.apk and b/app/release/ICSer_V947_2109081949_release.apk differ
index 9bd395f..d3900c2 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":946,"versionName":"2109041740","enabled":true,"outputFile":"ICSer_V946_2109041740_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V946_2109041740_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":947,"versionName":"2109081949","enabled":true,"outputFile":"ICSer_V947_2109081949_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V947_2109081949_release.apk","properties":{}}]
\ No newline at end of file
index 7e5597d..b3e5c7c 100644 (file)
                 <action android:name="com.ic.mqtt.startsrv" />
             </intent-filter>
         </service>
+
+        <receiver android:name=".AlarmReceiver">
+            <intent-filter>
+                <action android:name="com.ic.alarm.action.ALARM_CLOCK" />
+            </intent-filter>
+        </receiver>
+
         <service android:name=".CoreService"> <!-- 协议通讯服务 -->
             <intent-filter>
                 <action android:name="com.enqualcomm.support.startsrv" />
diff --git a/app/src/main/java/com/enqualcomm/support/AlarmReceiver.java b/app/src/main/java/com/enqualcomm/support/AlarmReceiver.java
new file mode 100644 (file)
index 0000000..a41923e
--- /dev/null
@@ -0,0 +1,34 @@
+package com.enqualcomm.support;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.enqualcomm.support.service.AlarmManagerUtil;
+import com.enqualcomm.support.service.SilentManager;
+import com.enqualcomm.support.utils.ICLogger;
+
+public class AlarmReceiver extends BroadcastReceiver {
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String msg = intent.getStringExtra("msg");
+        String id = intent.getStringExtra("id");
+        long intervalMillis = intent.getLongExtra("intervalMillis", 0);
+        if (intervalMillis != 0) {
+            AlarmManagerUtil.setAlarmTime(context,
+                    System.currentTimeMillis() + intervalMillis,
+                    intent);
+        }
+        boolean idle = SilentManager.getInstance().isIdle(context);
+        ICLogger.d("idle ==> " + idle);
+        if (idle) {
+            Intent targetIntent = new Intent("com.ic.alarm.action.ALARM_RING");
+            targetIntent.putExtra("closeAlarm", 0);
+            targetIntent.putExtra("msg", msg);
+            targetIntent.putExtra("id", id);
+            targetIntent.addCategory(Intent.CATEGORY_DEFAULT);
+            targetIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(targetIntent);
+        }
+    }
+}
index 744a096..bd6dc55 100644 (file)
@@ -1280,6 +1280,7 @@ public class CoreService extends Service {
         }
     }
 
+    @Override
     public int onStartCommand(Intent paramIntent, int paramInt1, int paramInt2) {
         if (paramIntent != null && paramIntent.getAction() != null) {
             StringBuilder stringBuilder = new StringBuilder();
index 414adbb..593cd58 100644 (file)
@@ -11,6 +11,8 @@ import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
+import com.enqualcomm.support.utils.ICLogger;
+
 import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 
 public class ICAlarmProvider extends ContentProvider {
@@ -88,6 +90,7 @@ public class ICAlarmProvider extends ContentProvider {
             }
             long insert = writableDatabase.insert(ICDatabaseHelper.tb_alarm, null, values);
             //设置闹钟
+            ICLogger.d("notify alarm insert ..." + getContext());
             if (getContext() != null) {
                 getContext().getContentResolver().notifyChange(uri, null);
             }
diff --git a/app/src/main/java/com/enqualcomm/support/service/AlarmManagerUtil.java b/app/src/main/java/com/enqualcomm/support/service/AlarmManagerUtil.java
new file mode 100644 (file)
index 0000000..206f12c
--- /dev/null
@@ -0,0 +1,123 @@
+package com.enqualcomm.support.service;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+
+import com.enqualcomm.support.utils.ICLogger;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class AlarmManagerUtil {
+
+    public static final String ALARM_ACTION = "com.ic.alarm.action.ALARM_CLOCK";
+
+    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
+                .FLAG_CANCEL_CURRENT);
+        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        am.cancel(pi);
+    }
+
+    /**
+     * @param flag            周期性时间间隔的标志,flag = 0 表示一次性的闹钟, flag = 1 表示每天提醒的闹钟(1天的时间间隔),flag = 2
+     *                        表示按周每周提醒的闹钟(一周的周期性时间间隔)
+     * @param hour            时
+     * @param minute          分
+     * @param id              闹钟的id
+     * @param week            week=0表示一次性闹钟或者按天的周期性闹钟,非0 的情况下是几就代表以周为周期性的周几的闹钟
+     * @param tips            闹钟提示信息
+     * @param soundOrVibrator 2表示声音和震动都执行,1表示只有铃声提醒,0表示只有震动提醒
+     */
+    public static void setAlarm(Context context, int flag, int hour, int minute, int id, int
+            week, String tips, int soundOrVibrator) {
+        ICLogger.d("flag ==> " + flag + " hour ==> " + hour + " minute ==> " +
+                minute + " week ==> " + week + " tips==> " +
+                tips + " soundOrVibrator==> " + soundOrVibrator);
+        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        long intervalMillis = 0;
+        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get
+                (Calendar.DAY_OF_MONTH), hour, minute, 0);
+        if (flag == 1) {
+            intervalMillis = 24 * 60 * 60 * 1000;
+        } else if (flag == 2) {
+            intervalMillis = 24 * 60 * 60 * 1000 * 7;
+        }
+        Intent intent = new Intent(ALARM_ACTION);
+        intent.putExtra("intervalMillis", intervalMillis);
+        intent.putExtra("msg", tips);
+        intent.putExtra("id", id);
+        intent.putExtra("soundOrVibrator", soundOrVibrator);
+        PendingIntent sender = PendingIntent.getBroadcast(context, id, intent, PendingIntent
+                .FLAG_UPDATE_CURRENT);
+        ICLogger.d("intervalMillis ==> " + intervalMillis);
+        //4.4以上的
+        long targetTime = calMethod(week, calendar.getTimeInMillis());
+        ICLogger.d("targetTime ==> " + targetTime);
+        am.setExact(AlarmManager.RTC_WAKEUP, targetTime, sender);
+    }
+
+
+    /**
+     * @param weekFlag 传入的是周几
+     * @param dateTime 传入的是时间戳(设置当天的年月日+从选择框拿来的时分秒)
+     * @return 返回起始闹钟时间的时间戳
+     */
+    private static long calMethod(int weekFlag, long dateTime) {
+        long time = 0;
+        //weekflag == 0表示是按天为周期性的时间间隔或者是一次行的,weekfalg非0时表示每周几的闹钟并以周为时间间隔
+        if (weekFlag != 0) {
+            Calendar c = Calendar.getInstance();
+            int week = c.get(Calendar.DAY_OF_WEEK);
+            if (1 == week) {
+                week = 7;
+            } else if (2 == week) {
+                week = 1;
+            } else if (3 == week) {
+                week = 2;
+            } else if (4 == week) {
+                week = 3;
+            } else if (5 == week) {
+                week = 4;
+            } else if (6 == week) {
+                week = 5;
+            } else if (7 == week) {
+                week = 6;
+            }
+            if (weekFlag == week) {
+                if (dateTime > System.currentTimeMillis()) {
+                    time = dateTime;
+                } else {
+                    time = dateTime + 7 * 24 * 3600 * 1000;
+                }
+            } else if (weekFlag > week) {
+                time = dateTime + (weekFlag - week) * 24 * 3600 * 1000;
+            } else {
+                time = dateTime + (weekFlag - week + 7) * 24 * 3600 * 1000;
+            }
+        } else {
+            if (dateTime > System.currentTimeMillis()) {
+                time = dateTime;
+            } else {
+                time = dateTime + 24 * 3600 * 1000;
+            }
+        }
+        return time;
+    }
+}
index 7531d90..ab6545e 100644 (file)
@@ -10,12 +10,14 @@ import android.database.ContentObserver;
 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 android.util.Log;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
@@ -42,7 +44,6 @@ import com.enqualcomm.support.utils.VibrateUtil;
 
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -61,10 +62,6 @@ import static com.enqualcomm.support.Constants.OTHER_ALARM_START;
 public class SilentManager extends AbstractInvokeHandlerService {
     private static final long ONE_WEEK = 604800000L;
     private static final long ONE_DAY = 86400000L;
-
-    private List<Alarm> alarms;
-    private boolean haveHandSilence;
-    private boolean isCalling;
     AlarmManager mAlarmManager;
     private AlarmReceiver mAlarmReceiver;
     Connection mConnection;
@@ -115,7 +112,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
         return mSilentManger;
     }
 
-    private PhoneStateListener phoneStateListener = new PhoneStateListener() {
+    private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
         public void onCallStateChanged(int state, String incomingNumber) {
             super.onCallStateChanged(state, incomingNumber);
 
@@ -123,15 +120,11 @@ public class SilentManager extends AbstractInvokeHandlerService {
             switch (state) {
                 case PRECISE_CALL_STATE_DISCONNECTING: //挂电话
                 case PRECISE_CALL_STATE_DISCONNECTED: //挂电话
-                    isCalling = false;
                     if (ICAudioManager.needMute == true) {
                         //2秒后恢复音量
-                        mHandler.postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                ICAudioManager.restoreVolume(mContext); //2秒后恢复音量
-                                ICAudioManager.needMute = false;
-                            }
+                        mHandler.postDelayed(() -> {
+                            ICAudioManager.restoreVolume(mContext); //2秒后恢复音量
+                            ICAudioManager.needMute = false;
                         }, 2000);
                     }
                     ICLogger.i("========Hung up!");
@@ -139,7 +132,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
                 case PRECISE_CALL_STATE_INCOMING: //来电
                 case PRECISE_CALL_STATE_ALERTING:
                 case PRECISE_CALL_STATE_DIALING:
-                    isCalling = true;
                     Intent var3 = new Intent();
                     var3.setAction(ACTION_CLOSE_UNREAD_MSG);
                     mContext.sendBroadcast(var3);
@@ -165,7 +157,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
                 }
                 case PRECISE_CALL_STATE_HOLDING://接电话
                 case PRECISE_CALL_STATE_WAITING:
-                    isCalling = true;
                     ICLogger.i("========Answer Call !");
                     if (ICAudioManager.needMute == true) {
                         ICAudioManager.setVolumnMute(mContext);
@@ -205,35 +196,35 @@ public class SilentManager extends AbstractInvokeHandlerService {
                 ICLogger.e(e.getMessage(), e);
             }
         }
-
     }
 
     public void cancelAlarm(List<Alarm> alarms) {
-        Iterator alarmsIterator = alarms.iterator();
-
-        while (alarmsIterator.hasNext()) {
-            Alarm alarmItem = (Alarm) alarmsIterator.next();
+        for (Alarm alarmItem : alarms) {
             doCancelAlarm(alarmItem);
         }
-
     }
 
-    private void doCancelAlarm(Alarm alarmItem) {
-        String time = alarmItem.time;
-        String week = alarmItem.week;
-        String ring = alarmItem.ring;
-        String name = alarmItem.name;
-        ICLogger.d("alarmItem  ==> " + alarmItem);
-        if (!TextUtils.isEmpty(week)) {
-            week = week.replace("W", "");
-        }
-        char[] result = week.toCharArray();
-        int length = result.length;
-        for (int i = 1; i < length; ++i) {
-            char weekItem = result[i];
-            ICLogger.d("cancel alarm ==> " + alarmItem);
-            this.mAlarmManager.cancel(this.getPendingIntent(time, week,
-                    ring, name, weekItem - 47, 0, false));
+    public void doCancelAlarm(Alarm alarmItem) {
+        try {
+            String week = alarmItem.week.replace("W", "");
+            ICLogger.d("alarmItem week==> " + week);
+            int id = Integer.parseInt(alarmItem.id);
+            ICLogger.d("do cancel id ==> " + id);
+            if (TextUtils.isEmpty(week)) {
+                AlarmManagerUtil.cancelAlarm(mContext, AlarmManagerUtil.ALARM_ACTION, id);
+            } else {
+                char[] weekList = week.toCharArray();
+                int weekListLen = weekList.length;
+                for (int i = 0; i < weekListLen; i++) {
+                    char item = weekList[i];
+                    String alarmIdStr = id + "" + item;
+                    ICLogger.d("cancel id ==> " + alarmIdStr);
+                    AlarmManagerUtil.cancelAlarm(mContext, AlarmManagerUtil.ALARM_ACTION,
+                            Integer.parseInt(alarmIdStr));
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 
@@ -250,7 +241,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
             String var10 = var3.noticeContent;
             this.mAlarmManager.cancel(this.getPendingIntent(var4, var9, var5, var6, var7, var8, var10, false));
         }
-
     }
 
     private PendingIntent getPendingIntent(String args, boolean repeat) {
@@ -427,16 +417,15 @@ public class SilentManager extends AbstractInvokeHandlerService {
         // this.isStheartRateTime(var2);
     }
 
-    private boolean isIdle(Context context) {
-        int callstate = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();
-        boolean isidle;
-        if (CALL_STATE_RINGING != callstate && CALL_STATE_OFFHOOK != callstate) {
-            isidle = true;
+    public boolean isIdle(Context context) {
+        int callState = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getCallState();
+        boolean isIdle;
+        if (CALL_STATE_RINGING != callState && CALL_STATE_OFFHOOK != callState) {
+            isIdle = true;
         } else {
-            isidle = false;
+            isIdle = false;
         }
-
-        return isidle && !this.mInSilent && !this.mRuntime.getBatteryLow();
+        return isIdle && !this.mInSilent && !this.mRuntime.getBatteryLow();
     }
 
     private boolean isAntioffTime(boolean var1) {
@@ -622,18 +611,8 @@ public class SilentManager extends AbstractInvokeHandlerService {
     private void onSilentStateChange(boolean var1) {
         SharePreferenceUtil.setPrefBoolean(mContext, "KEY_ISSILENCE", var1);
         setSilentConfig(mContext, var1);
-        try {
-            if (this.alarms != null) {
-                if (var1) {
-                    this.cancelAlarm(this.alarms);
-                } else {
-                    this.setNewAlarm(this.alarms);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
+        //TODO:静音模式按W100的去实现
+        //http://icfota.snicker.com.cn:8888/www/index.php?m=doc&f=view&docID=11
         if (this.voiceNotice != null) {
             if (var1) {
                 this.cancelNoticeAlarm(this.voiceNotice);
@@ -644,6 +623,25 @@ public class SilentManager extends AbstractInvokeHandlerService {
 
     }
 
+    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
+                .FLAG_CANCEL_CURRENT);
+        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        am.cancel(pi);
+    }
+
     /**
      * 这个是设置闹钟的,数据库是英卡的库,不是EQC的
      *
@@ -651,11 +649,11 @@ public class SilentManager extends AbstractInvokeHandlerService {
      */
     private List<Alarm> updateIcAlarm() {
         List<Alarm> alarmList = this.mDbHelper.queryIcAlarm();
+        Log.d("updateIcAlarm===", "old list size ==> " + alarmList.size());
+        this.cancelAlarm(alarmList);
+        //取消当前所有的闹钟,重新设置
         ICLogger.d("this.mInSilent == > " + this.mInSilent);
         if (!this.mInSilent) {
-            if (this.alarms != null) {
-                this.cancelAlarm(this.alarms);
-            }
             try {
                 this.setNewAlarm(alarmList);
             } catch (Exception e) {
@@ -667,22 +665,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
     }
 
 
-    public List<Alarm> queryAlarm() {
-        List<Alarm> alarmList = this.mDbHelper.queryAlarm();
-        if (!this.mInSilent) {
-            if (this.alarms != null) {
-                this.cancelAlarm(this.alarms);
-            }
-            try {
-                this.setNewAlarm(alarmList);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return alarmList;
-    }
-
-    private ArrayList<Antioff> queryAntioff() {
+    private ArrayList<Antioff> queryAntiOff() {
         return this.mDbHelper.queryAntioff(true);
     }
 
@@ -709,63 +692,45 @@ public class SilentManager extends AbstractInvokeHandlerService {
     }
 
     private void setNewAlarm(List<Alarm> alarmArrayList) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(Calendar.SECOND, 0);
-        long currentTime = System.currentTimeMillis();
-        Iterator itAlarm = alarmArrayList.iterator();
-        while (itAlarm.hasNext()) {
-            Alarm alarm = (Alarm) itAlarm.next();
-            ICLogger.d("alarm == > " + alarm);
+        for (Alarm alarm : alarmArrayList) {
+            Log.d("setNewAlarm======", "alarm == > " + alarm);
             if ("ON".equals(alarm.status)) {
                 alarm.time = alarm.time.replace(":", "");
                 int hour = Integer.parseInt(alarm.time.substring(2, 4));
                 int minute = Integer.parseInt(alarm.time.substring(5, 7));
-                calendar.set(Calendar.HOUR_OF_DAY, hour);
-                calendar.set(Calendar.MINUTE, minute);
-                calendar.set(Calendar.SECOND, 0);
                 alarm.week = alarm.week.replace("W", "");
-                char[] weeklist = alarm.week.toCharArray();
-                int weeklistlen = weeklist.length;
-                ICLogger.i("repeat = " + alarm.week + ", list size = " + weeklistlen);
-                if (weeklistlen > 1) {
+                ICLogger.d("alarm.week  ==> " + alarm.week);
+                char[] weekList = alarm.week.toCharArray();
+                int weekListLen = weekList.length;
+                ICLogger.i("repeat = " + alarm.week + ", list size = " + weekListLen);
+                if (weekListLen > 0) {
                     //如果week大于0 则证明有循环,没有循环就证明只是一次的闹铃。
-                    for (int i = 0; i < weeklistlen; i++) {
-                        long tmpTimeInMillis;
-                        int dayofweek = weeklist[i] - 47;
-                        calendar.set(Calendar.DAY_OF_WEEK, dayofweek);
-                        tmpTimeInMillis = calendar.getTimeInMillis();
-                        if (tmpTimeInMillis <= currentTime) {
-                            tmpTimeInMillis += ONE_WEEK;
-                        }
-                        Date date = new Date(tmpTimeInMillis);
-                        ICLogger.i("set date " + date.toLocaleString());
-                        PendingIntent pendingIntent = this.getPendingIntent(alarm.time,
-                                alarm.week, alarm.ring, alarm.name, dayofweek, tmpTimeInMillis, true);
-                        AlarmHelper.setAlarm(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
+                    for (int i = 0; i < weekListLen; i++) {
+                        String itemWeek = weekList[i] + "";
+                        ICLogger.d("itemWeek ==> " + itemWeek);
+                        String idStr = alarm.id + itemWeek;
+                        ICLogger.d("idStr ==> " + idStr);
+                        //Id==> 闹钟ID+星期
+                        int flag = itemWeek.equals("0") ? 0 : 2;
+                        AlarmManagerUtil.setAlarm(mContext, flag,
+                                hour,
+                                minute,
+                                Integer.parseInt(idStr),
+                                Integer.parseInt(itemWeek),
+                                alarm.name,
+                                1);
                     }
                 } else {
-                    //只是一次的闹铃
-                    long tmpTimeInMillis;
-                    Date date = new Date(System.currentTimeMillis());
-                    ICLogger.i("date " + date.toLocaleString());
-                    Calendar c = Calendar.getInstance();
-                    c.setTime(date);
-                    int wek = c.get(Calendar.DAY_OF_WEEK);
-                    calendar.set(Calendar.DAY_OF_WEEK, wek);
-                    tmpTimeInMillis = calendar.getTimeInMillis();
-                    if (tmpTimeInMillis <= currentTime) {
-                        tmpTimeInMillis += ONE_DAY;
-                    }
-                    date = new Date(tmpTimeInMillis);
-                    c = Calendar.getInstance();
-                    c.setTime(date);
-                    wek = c.get(Calendar.DAY_OF_WEEK);
+                    //单次
+                    //flag周期性时间间隔的标志,flag = 0 表示一次性的闹钟, flag = 1 表示每天提醒的闹钟(1天的时间间隔),flag = 2
+                    //表示按周每周提醒的闹钟(一周的周期性时间间隔)
+                    AlarmManagerUtil.setAlarm(mContext, 0,
+                            hour,
+                            minute,
+                            Integer.parseInt(alarm.id),
+                            0, alarm.name, 1
+                    );
 
-                    ICLogger.i("set date " + date.toLocaleString());
-
-                    PendingIntent pendingIntent = this.getPendingIntent(alarm.time,
-                            alarm.week, alarm.ring, alarm.name, wek, tmpTimeInMillis, false);
-                    AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);
                 }
             }
         }
@@ -830,7 +795,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
         }
         var3.upDateorInsertDeviceStatus(var4);
         this.handSilence(this.mContext, this.mInSilent);
-        this.alarms = this.queryAlarm();
         this.voiceNotice = this.queryNotice();
         runtime.getContextProxy().context.getContentResolver().registerContentObserver(ICContentProvider.SILENT_URI, false, this.mContentObserver);
         this.mAlarmReceiver = new AlarmReceiver();
@@ -908,10 +872,8 @@ public class SilentManager extends AbstractInvokeHandlerService {
             } else {
                 silentchange = true;
             }
-
             //this.handleSilent(runtime, silentchange ^ true);
         }
-
         return false;
     }
 
@@ -921,9 +883,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
     }
 
     class AlarmReceiver extends BroadcastReceiver {
-        AlarmReceiver() {
-        }
-
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
             StringBuilder var3 = new StringBuilder();
@@ -934,11 +893,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
                 SilentManager.this.voiceNotice = SilentManager.this.queryNotice();
             } else if (ACTION_ALARM_ALARM_CHANGE.equals(action)) {
                 //这是英卡的闹钟库
-                List<Alarm> alarms = updateIcAlarm();
-                if (alarms.size() == 0) {
-                    //这是EQC的
-                    SilentManager.this.alarms = queryAlarm();
-                }
+                updateIcAlarm();
             } else if ("com.enqualcomm.support.STHEART_RATE_ALARM_CHANGE".equals(action)) {
                 SilentManager.this.stheartRateList = SilentManager.this.queryStheartRate();
                 SilentManager.this.getStartAndEndStheartRateTime();
@@ -956,7 +911,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
                 var7.append(var5);
                 var7.append(")");
             } else if (ACTION_ANTIOFF_ALARM_CHANGE.equals(action)) {
-                SilentManager.this.sAntioffList = SilentManager.this.queryAntioff();
+                SilentManager.this.sAntioffList = SilentManager.this.queryAntiOff();
                 SilentManager.this.getStartAndEndSantioffTime();
                 SilentManager.this.mIsNeedAntioff = SilentManager.this.isAntioffTime(false);
             } else if (ACTION_ALARM_DELETE_ALARM.equals(action)) {
index a6bb83b..48cd31f 100644 (file)
@@ -33,7 +33,8 @@ public class AlarmHelper {
     }\r
 \r
     //设置闹铃\r
-    public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis, PendingIntent paramPendingIntent) {\r
+    public static void setAlarm(AlarmManager paramAlarmManager, long triggerAtMillis,\r
+                                PendingIntent paramPendingIntent) {\r
         //循环闹钟\r
         paramAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, paramPendingIntent);\r
         //paramAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, paramPendingIntent);\r
index c73f142..7f18319 100644 (file)
@@ -712,27 +712,6 @@ public class DBHelper {
         this.cr.delete(ICContentProvider.UNREAD_MSG_URI, (String) null, (String[]) null);
     }
 
-    public void saveAlarm(ArrayList<Alarm> paramArrayList) {
-        this.cr.delete(ICContentProvider.ALARM_URI, null, null);
-        int i = paramArrayList.size();
-        ICLogger.d("alarm size == > " + i);
-        if (i != 0) {
-            ContentValues[] arrayOfContentValues = new ContentValues[i];
-            for (byte b = 0; b < i; b++) {
-                Alarm alarm = paramArrayList.get(b);
-                ContentValues contentValues = new ContentValues();
-                arrayOfContentValues[b] = contentValues;
-                contentValues.put("TIME", alarm.time);
-                contentValues.put("WEEK", alarm.week);
-                contentValues.put("RING", alarm.ring);
-                contentValues.put("STATUS", alarm.status);
-                contentValues.put("NAME", alarm.name);
-                ICLogger.d("alarm is == > " + alarm);
-            }
-            this.cr.bulkInsert(ICContentProvider.ALARM_URI, arrayOfContentValues);
-        }
-        this.context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
-    }
 
     public void saveAntioff(ArrayList<Antioff> paramArrayList) {
         String str;
index 31a79d7..03636e6 100644 (file)
@@ -3,6 +3,7 @@ package com.ic.protocols;
 import android.Manifest;
 import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -31,10 +32,12 @@ import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.provider.ICAlarmProvider;
 import com.enqualcomm.support.provider.ICDatabaseHelper;
-import com.enqualcomm.support.provider.ICMembersProvider;
 import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+import com.enqualcomm.support.provider.ICMembersProvider;
 import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.ProfileManager;
@@ -53,6 +56,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static com.ic.protocols.protocol_anan.CMD_TYPE.AP32;
@@ -1278,7 +1282,26 @@ public class protocol_anan {
                             cmd.replace(cmdMap.get(BP75), cmdMap.get(CMD_TYPE.AP75)).replace(imeiCode + ",", "") + CMDEND)
             );
             //闹钟入库
-            mRuntime.getDbHelper().saveAlarm(alarmList);
+            ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+            //删除之前先取消已经设置的闹钟
+            List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+            //取消掉上次的闹钟,再进行设置新的
+            SilentManager.getInstance().cancelAlarm(oldAlarmList);
+            //先删除所有的闹钟
+            contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+            for (Alarm alarm : alarmList) {
+                ContentValues contentValues = new ContentValues();
+                contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+            }
+            //设置闹钟
+            mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
         } catch (Exception e) {
             e.printStackTrace();
             ICLogger.d("闹钟指令解析出错...");
index 5aa1530..b6b835e 100644 (file)
@@ -1,6 +1,8 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Environment;
@@ -15,7 +17,10 @@ import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.provider.ICAlarmProvider;
+import com.enqualcomm.support.provider.ICDatabaseHelper;
 import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.ICLogger;
@@ -27,7 +32,9 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
@@ -846,20 +853,20 @@ public class protocol_beehome {
 
     //设置闹钟
     public void handleBP85(String cmd, Connection connection, Runtime runtime) {
-//        IWBP85,867155030001063,155312,1,1,0235,12,1,1
-//        IWBP85,867155030002145,945166,1,0,
-//        IWBP85,867155030001064,265960,1,1,1130,,1,1
-//        IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#
-//353456789012345:IMEI号,设备唯一ID
-//080835 :指令流水号
-//1: 表示闹钟总开关,1为开,0 为关
-//3: 表示闹钟个数
-//0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制
-//1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
-//1表示吃药提醒
-//2 表示喝水提醒
-//3 表示久坐提醒
-//多组闹钟之间用”@”符号分隔
+        //IWBP85,867155030001063,155312,1,1,0235,12,1,1
+        //IWBP85,867155030002145,945166,1,0,
+        //IWBP85,867155030001064,265960,1,1,1130,,1,1
+        //IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#
+        //353456789012345:IMEI号,设备唯一ID
+        //080835 :指令流水号
+        //1: 表示闹钟总开关,1为开,0 为关
+        //3: 表示闹钟个数
+        //0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制
+        //1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
+        //1表示吃药提醒
+        //2 表示喝水提醒
+        //3 表示久坐提醒
+        //多组闹钟之间用”@”符号分隔
 
         String imei = "", cmdindex = "0"/*指令流水号*/;
         int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,
@@ -930,8 +937,27 @@ public class protocol_beehome {
 
                     }
                 }//循环获取alarm数据结束
-                runtime.getDbHelper().saveAlarm(alarmlist);
-
+                //闹钟入库
+                ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+                //删除之前先取消已经设置的闹钟
+                List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+                //取消掉上次的闹钟,再进行设置新的
+                SilentManager.getInstance().cancelAlarm(oldAlarmList);
+                //先删除所有的闹钟
+                contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+                for (Alarm alarm : alarmlist) {
+                    ContentValues contentValues = new ContentValues();
+                    contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                    contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                    contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                    contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                    contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                    contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                    contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                    contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+                }
+                //设置闹钟
+                mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
                 //do clean and set alarm things
             } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
index 46e8fbb..9085ca4 100644 (file)
@@ -34,12 +34,14 @@ import com.enqualcomm.support.bean.HealthInfo;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.StringMessage;
+import com.enqualcomm.support.provider.ICAlarmProvider;
 import com.enqualcomm.support.provider.ICDatabaseHelper;
 import com.enqualcomm.support.provider.ICFollowProvider;
+import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
 import com.enqualcomm.support.provider.ICMembersProvider;
 import com.enqualcomm.support.provider.WeTalkMessageProvider;
-import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
 import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.AlarmHelper;
 import com.enqualcomm.support.utils.CameraUtil;
 import com.enqualcomm.support.utils.Connection;
@@ -65,8 +67,10 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.UUID;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.ALARM_POWER_OFF;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.Constants.contact;
@@ -2231,7 +2235,27 @@ public class protocol_fzd {
                 alarmList.add(new Alarm("ST" + time.substring(0, 2) + "." + time.substring(3),
                         "W" + weekValue, "CON", "1".equals(state) ? "ON" : "OFF", "闹铃"));
             }
-            mRuntime.getDbHelper().saveAlarm(alarmList);
+            //闹钟入库
+            ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+            //删除之前先取消已经设置的闹钟
+            List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+            //取消掉上次的闹钟,再进行设置新的
+            SilentManager.getInstance().cancelAlarm(oldAlarmList);
+            //先删除所有的闹钟
+            contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+            for (Alarm alarm : alarmList) {
+                ContentValues contentValues = new ContentValues();
+                contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+            }
+            //设置闹钟
+            mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
         }
     }
 
index aac9e81..ee58d4d 100644 (file)
@@ -3,6 +3,7 @@ package com.ic.protocols;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Intent;
+import android.database.Cursor;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.Handler;
@@ -20,9 +21,11 @@ import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.provider.ICAlarmProvider;
 import com.enqualcomm.support.provider.ICDatabaseHelper;
 import com.enqualcomm.support.provider.ICMembersProvider;
 import com.enqualcomm.support.provider.WeTalkMessageProvider;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.AESCipher;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.DeviceInfoUtil;
@@ -41,6 +44,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;
 
@@ -669,48 +673,73 @@ public class protocol_gator {
 
     //设置闹钟
     public void handleAP09(Runtime runtime, Connection connection, String cmd) {
-
         // AP09,A,B,C,YYMMDD,HHMMSS
         //A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
         //B:闹铃索引(0-4)
         //C:表示闹钟类型(0-0x7F),如下:
         //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
         //如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
-        // (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
+        //(0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
         //增加(修改)一条索引为0的闹铃,每天15:29:00响铃
         //(002E357593060153353AP09,0,0,0000000000000008)
         //删除一条索引为0的闹铃
-        String cmdlist[] = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 7) {
-            String cmdindex = cmdlist[6];
+        String cmdList[] = cmd.split(CMDSPLIT);
+        if (cmdList.length == 7) {
+            String cmdIndex = cmdList[6];
             try {
-                String do_cmd = "";
-                int alarmindex = 0 /*alarm索引*/;
-                int alarmswitch = 1 /*1为开,0 为关*/;
-                int alarmcount = 0 /*表示闹钟个数*/;
-                String alarmtime = "";//0900表示早上09:00
+                String doCmd = "";
+                String alarmTime = "";//0900表示早上09:00
                 // 0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
-                do_cmd = cmdlist[1];//0删除、1添加(修改)闹钟功能
-                alarmtime = cmdlist[5]; //HHMMSS
-                alarmindex = Integer.parseInt(cmdlist[2]);
-                String repeatStr = cmdlist[3];
+                doCmd = cmdList[1];//0删除、1添加(修改)闹钟功能
+                String alarmIndex = cmdList[2];
+                ICLogger.d("alarmIndex ==> " + alarmIndex);
+                alarmTime = cmdList[5]; //HHMMSS
+                String repeatStr = cmdList[3];
                 String repeat = parseWeek(repeatStr);
-                ArrayList<Alarm> alarmList = new ArrayList<>();
-                if ("1".equals(do_cmd)) {
-                    alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
+                Alarm alarmItem = new Alarm("ST" + alarmTime.substring(0, 2) + "." + alarmTime.substring(2, 4),
+                        "W" + repeat, "CON", doCmd.equals("1") ? "ON" : "OFF", "闹铃" + alarmIndex);
+                Log.d("handleAP09=====", "alarmItem == > " + alarmItem);
+                ContentResolver resolver = runtime.getContextProxy().getResolver();
+                //添加之前,先删除时间一样的
+                Cursor query = resolver.query(Uri.parse(ICAlarmProvider.ALARMS),
+                        new String[]{ICDatabaseHelper.alarm_id},
+                        ICDatabaseHelper.alarm_name + "=?",
+                        new String[]{
+                                alarmItem.name
+                        }, null
+                );
+                if (query != null) {
+                    if (query.moveToNext()) {
+                        alarmItem.id = query.getString(0);
+                        ICLogger.d("target delete id ==> " + alarmItem.id);
+                        SilentManager.getInstance().doCancelAlarm(alarmItem);
+                    }
+                    query.close();
+                }
+                resolver.delete(Uri.parse(ICAlarmProvider.ALARMS),
+                        ICDatabaseHelper.alarm_name + "=?",
+                        new String[]{
+                                alarmItem.name
+                        });
+                ICLogger.d("do_cmd ==> " + doCmd + " alarmItem.name ==> " + alarmItem.name);
+                if ("1".equals(doCmd)) {
+                    //入库
+                    ContentValues contentValues = new ContentValues();
+                    contentValues.put(ICDatabaseHelper.alarm_name, alarmItem.name);
+                    contentValues.put(ICDatabaseHelper.alarm_week, alarmItem.week);
+                    contentValues.put(ICDatabaseHelper.alarm_ring, alarmItem.ring);
+                    contentValues.put(ICDatabaseHelper.alarm_time, alarmItem.time);
+                    contentValues.put(ICDatabaseHelper.alarm_status, alarmItem.status);
+                    contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                    contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                    resolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+                    //设置闹钟
+                    mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
                 }
-                //do clean and set alarm things
-                runtime.getDbHelper().saveAlarm(alarmList);
-                connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdindex, true));
+                connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdIndex, true));
             } catch (Exception e) {
-                connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdindex, false));
+                connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdIndex, false));
             }
-            connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdlist[6], true));
-        } else if (cmdlist.length == 4) {
-            //(002E357593060153353AP09,0,0,0000000000000008)
-            //删除一条索引为0的闹铃
-            log("AP09 删除闹铃 ");
-            connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdlist[3], true));
         } else {
             ICLogger.e("AP09 format error!");
         }
index 56c0464..06e5512 100644 (file)
@@ -1,6 +1,8 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
@@ -21,7 +23,10 @@ import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.provider.ICAlarmProvider;
+import com.enqualcomm.support.provider.ICDatabaseHelper;
 import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.CameraUtil;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICAudioManager;
@@ -41,6 +46,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
@@ -1052,13 +1058,30 @@ public class protocol_ic {
 
                 }
             }//循环获取alarm数据结束
-            runtime.getDbHelper().saveAlarm(alarmList);
-
+            //闹钟入库
+            ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+            //删除之前先取消已经设置的闹钟
+            List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+            //取消掉上次的闹钟,再进行设置新的
+            SilentManager.getInstance().cancelAlarm(oldAlarmList);
+            //先删除所有的闹钟
+            contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+            for (Alarm alarm : alarmList) {
+                ContentValues contentValues = new ContentValues();
+                contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+            }
             //do clean and set alarm things
-
+            //设置闹钟
+            mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
         }
-//IWBP85,867155030002145,410385,1,0,#
-
+        //IWBP85,867155030002145,410385,1,0,#
         String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();
         String replycmd = cmd.replace(replacement, "");
         ICLogger.i("gen reply " + replacement + " " + replycmd);
index 67319c5..c017ca5 100644 (file)
@@ -1,6 +1,8 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Environment;
@@ -15,7 +17,10 @@ import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.provider.ICAlarmProvider;
+import com.enqualcomm.support.provider.ICDatabaseHelper;
 import com.enqualcomm.support.service.HeartRateManager;
+import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.LanguageUtils;
@@ -26,7 +31,9 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 
+import static com.enqualcomm.support.Constants.ACTION_ALARM_ALARM_CHANGE;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
@@ -828,20 +835,20 @@ public class protocol_jiai {
 
     //设置闹钟
     public void handleBP85(String cmd, Connection connection, Runtime runtime) {
-//        IWBP85,867155030001063,155312,1,1,0235,12,1,1
-//        IWBP85,867155030002145,945166,1,0,
-//        IWBP85,867155030001064,265960,1,1,1130,,1,1
-//        IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#
-//353456789012345:IMEI号,设备唯一ID
-//080835 :指令流水号
-//1: 表示闹钟总开关,1为开,0 为关
-//3: 表示闹钟个数
-//0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制
-//1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
-//1表示吃药提醒
-//2 表示喝水提醒
-//3 表示久坐提醒
-//多组闹钟之间用”@”符号分隔
+        //        IWBP85,867155030001063,155312,1,1,0235,12,1,1
+        //        IWBP85,867155030002145,945166,1,0,
+        //        IWBP85,867155030001064,265960,1,1,1130,,1,1
+        //        IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#
+        //353456789012345:IMEI号,设备唯一ID
+        //080835 :指令流水号
+        //1: 表示闹钟总开关,1为开,0 为关
+        //3: 表示闹钟个数
+        //0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制
+        //1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
+        //1表示吃药提醒
+        //2 表示喝水提醒
+        //3 表示久坐提醒
+        //多组闹钟之间用”@”符号分隔
 
         String imei = "", cmdindex = "0"/*指令流水号*/;
         int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,
@@ -924,14 +931,32 @@ public class protocol_jiai {
                     }
 
                 }
-            }//循环获取alarm数据结束
-            runtime.getDbHelper().saveAlarm(alarmlist);
-
+            }
+            //闹钟入库
+            ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+            //删除之前先取消已经设置的闹钟
+            List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+            //取消掉上次的闹钟,再进行设置新的
+            SilentManager.getInstance().cancelAlarm(oldAlarmList);
+            //先删除所有的闹钟
+            contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+            for (Alarm alarm : alarmlist) {
+                ContentValues contentValues = new ContentValues();
+                contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+            }
+            //do clean and set alarm things
+            //设置闹钟
+            mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
             //do clean and set alarm things
-
         }
-//IWBP85,867155030002145,410385,1,0,#
-
+        //IWBP85,867155030002145,410385,1,0,#
         String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();
         String replycmd = cmd.replace(replacement, "");
         ICLogger.i("gen reply " + replacement + " " + replycmd);
@@ -1165,9 +1190,9 @@ public class protocol_jiai {
         //示例数据:IWAP50,36.7,90#
         return genStringMessage(cmdMap.get(CMD_TYPE.AP50),
                 new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP50))
-                .append(CMDSPLIT).append(ds.tempInfo.currentBodyTemp)
-                .append(CMDSPLIT).append("100")
-                .append(CMDEND).toString());
+                        .append(CMDSPLIT).append(ds.tempInfo.currentBodyTemp)
+                        .append(CMDSPLIT).append("100")
+                        .append(CMDEND).toString());
 
     }
 
index 5fa7340..addba2b 100644 (file)
@@ -1327,7 +1327,6 @@ public class protocol_s123 {
         //2 表示喝水提醒
         //3 表示久坐提醒
         //多组闹钟之间用”@”符号分隔
-
         String imei = "", cmdindex = "0"/*指令流水号*/;
         int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,
                 alarmswitch = 0 /*1为开,0 为关*/,
@@ -1416,11 +1415,26 @@ public class protocol_s123 {
                     }
 
                 }
-            }//循环获取alarm数据结束
-            runtime.getDbHelper().saveAlarm(alarmList);
+            }
+            //闹钟入库
+            ContentResolver contentResolver = mRuntime.getContextProxy().getResolver();
+            //先删除所有的闹钟
+            contentResolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+            for (Alarm alarm : alarmList) {
+                ContentValues contentValues = new ContentValues();
+                contentValues.put(ICDatabaseHelper.alarm_name, alarm.name);
+                contentValues.put(ICDatabaseHelper.alarm_week, alarm.week);
+                contentValues.put(ICDatabaseHelper.alarm_ring, alarm.ring);
+                contentValues.put(ICDatabaseHelper.alarm_time, alarm.time);
+                contentValues.put(ICDatabaseHelper.alarm_status, alarm.status);
+                contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+                contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+                contentResolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+            }
+            //设置闹钟
+            mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
         }
         //IWBP85,867155030002145,410385,1,0,#
-
         String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();
         String replycmd = cmd.replace(replacement, "");
         ICLogger.i("gen reply " + replacement + " " + replycmd);
@@ -4197,13 +4211,9 @@ public class protocol_s123 {
             String[] alarmItemArray = substring.split("@");
             ContentResolver resolver = mRuntime.getContextProxy().getResolver();
             //删除之前先取消已经设置的闹钟
-            List<Alarm> alarmList = mRuntime.getDbHelper().queryIcAlarm();
-            if (alarmList == null || alarmList.size() == 0) {
-                //如果没有的话就去另外一个获取
-                alarmList = SilentManager.getInstance().queryAlarm();
-            }
+            List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
             //取消掉上次的闹钟,再进行设置新的
-            SilentManager.getInstance().cancelAlarm(alarmList);
+            SilentManager.getInstance().cancelAlarm(oldAlarmList);
             //闹钟下发,也是要清空闹钟的
             resolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
             for (String itemStr : alarmItemArray) {
index 0f5932b..a8380af 100644 (file)
@@ -1,2 +1,2 @@
-#Sat Sep 04 17:40:07 CST 2021\r
-VERSION_CODE=946\r
+#Wed Sep 08 19:49:14 CST 2021\r
+VERSION_CODE=947\r