try to completed silent time.
authorTrillGates <williamtrillgates@gmail.com>
Mon, 13 Sep 2021 08:47:54 +0000 (16:47 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Mon, 13 Sep 2021 08:47:54 +0000 (16:47 +0800)
app/src/main/java/com/enqualcomm/support/Constants.java
app/src/main/java/com/enqualcomm/support/ICApplication.java
app/src/main/java/com/enqualcomm/support/provider/ICDatabaseHelper.java
app/src/main/java/com/enqualcomm/support/provider/ICForbiddenProvider.java
app/src/main/java/com/enqualcomm/support/service/SilentManager.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_gator.java

index 13d07f7..e1d25a3 100644 (file)
@@ -20,8 +20,9 @@ public interface Constants {
     String ACTION_ALARM_CHECK_ANTI = "com.ic.Action.ALarm.CheckAnti";
 
     String ACTION_ALARM_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ALARM_ALARM_CHANGE";
-    String ACTION_ALARM_DELETE_ALARM= "com.ic.alarm.action.DELETE_ALARM";
-    String ACTION_ALARM_DELETE_ALARM_RESULT= "com.ic.alarm.action.DELETE_ALARM_RESULT";
+    String ACTION_ALARM_DELETE_ALARM = "com.ic.alarm.action.DELETE_ALARM";
+    String ACTION_ALARM_DELETE_ALARM_RESULT = "com.ic.alarm.action.DELETE_ALARM_RESULT";
+    String ACTION_ALARM_SILENT2_UPDATE = "com.ic.alarm.action.SILENT2_UPDATE";
 
     String ACTION_ANTIOFF_ALARM_CHANGE = "com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE";
 
index d7dcf50..2963fe5 100644 (file)
@@ -28,6 +28,7 @@ public class ICApplication extends Application {
     @Override\r
     public void onCreate() {\r
         super.onCreate();\r
+        ICLogger.d("on ICProtocol application create....");\r
         ICLogger.setContext(this.getApplicationContext());\r
         String info = String.format("VERSION_CODE:%s, VERSION_NAME:%s",\r
                 BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME);\r
index 28c6e45..4744ce9 100644 (file)
@@ -339,9 +339,13 @@ public class ICDatabaseHelper extends SQLiteOpenHelper {
     public static final String tb_forbidden_time = "forbidden_time";
     public static final String forbidden_id = "_id";
     //开始时间
-    public static final String forbidden_start = "start";
+    public static final String forbidden_start = "start_time";
     //结束时间
-    public static final String forbidden_end = "end";
+    public static final String forbidden_end = "end_time";
+    //循环星期
+    public static final String forbidden_week = "week";
+    //当前状态
+    public static final String forbidden_current_status = "current_status";
     //开关状态
     public static final String forbidden_status = "status";
     //创建时间和更新时间
@@ -359,6 +363,10 @@ public class ICDatabaseHelper extends SQLiteOpenHelper {
                 " text, " +
                 forbidden_end +
                 " text, " +
+                forbidden_week +
+                " text, " +
+                forbidden_current_status +
+                " text, " +
                 forbidden_status +
                 " text, " +
                 forbidden_create_time +
index 95d1f9b..bc0d57e 100644 (file)
@@ -45,7 +45,7 @@ public class ICForbiddenProvider extends ContentProvider {
         int match = sUriMatcher.match(uri);
         if (match == MATCH_CODE) {
             SQLiteDatabase readableDatabase = mDatabase.getReadableDatabase();
-            return readableDatabase.query(ICDatabaseHelper.tSettings, projection,
+            return readableDatabase.query(ICDatabaseHelper.tb_forbidden_time, projection,
                     selection,
                     selectionArgs,
                     null, null, sortOrder);
index ab6545e..03b78d9 100644 (file)
@@ -10,10 +10,8 @@ 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;
@@ -30,6 +28,8 @@ import com.enqualcomm.support.bean.Silent;
 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;
@@ -44,6 +44,7 @@ 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;
 
@@ -52,6 +53,7 @@ import static android.telephony.TelephonyManager.CALL_STATE_RINGING;
 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;
@@ -180,23 +182,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
     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) {
@@ -251,31 +236,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
         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
@@ -623,17 +583,6 @@ 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
@@ -802,6 +751,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
         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);
     }
@@ -949,8 +899,88 @@ public class SilentManager extends AbstractInvokeHandlerService {
                     }
                     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
index 7f18319..436b404 100644 (file)
@@ -38,7 +38,6 @@ import java.util.ArrayList;
 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_ANTIOFF_ALARM_CHANGE;
 import static com.enqualcomm.support.bean.Contact.CATEGORY_ADMIN;
 import static com.enqualcomm.support.bean.Contact.CATEGORY_CALL;
@@ -792,12 +791,10 @@ public class DBHelper {
             for (current_sys_status = null; cursor.moveToNext();
                  current_sys_status = cursor.getString(5)) {
             }
-
             cursor.close();
         } else {
             current_sys_status = null;
         }
-
         this.cr.delete(ICContentProvider.SILENT_URI, (String) null, (String[]) null);
         int count = sList.size();
         if (count != 0) {
@@ -815,7 +812,6 @@ public class DBHelper {
                         + " " + silent.week + " "
                         + silent.status + " " + current_sys_status);
             }
-
             this.cr.bulkInsert(ICContentProvider.SILENT_URI, contentValuesList);
         }
 
index 6285d61..279bf05 100644 (file)
@@ -37,6 +37,7 @@ 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.ICForbiddenProvider;
 import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
 import com.enqualcomm.support.provider.ICMembersProvider;
 import com.enqualcomm.support.provider.WeTalkMessageProvider;
@@ -71,6 +72,7 @@ import java.util.List;
 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;
@@ -1095,10 +1097,26 @@ public class protocol_fzd {
      * 关于自定义星期几的规则:最左边是周日,最右边是周六,即 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) {
@@ -1110,20 +1128,34 @@ public class protocol_fzd {
                     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) {
index 45902ff..dfd8f1a 100644 (file)
@@ -1356,8 +1356,6 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
             ICLogger.i("免打扰时间格式错误,skip");
         }
         runtime.getDbHelper().saveSilent(sList);
-
-
     }
 
     //请求消息