refactor observer.
authorTrillGates <williamtrillgates@gmail.com>
Thu, 5 Aug 2021 07:10:51 +0000 (15:10 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Thu, 5 Aug 2021 07:10:51 +0000 (15:10 +0800)
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/service/AirplaneModeObserver.java
app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java
app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java
app/src/main/java/com/enqualcomm/support/service/WebMsgStateObserver.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/service/base/BaseSettingsObserver.java [new file with mode: 0644]
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_s123.java

index ba21d9f..cceb814 100644 (file)
@@ -51,6 +51,7 @@ import com.enqualcomm.support.service.ShutdownFlagObserver;
 import com.enqualcomm.support.service.SignFlagObserver;
 import com.enqualcomm.support.service.SilentManager;
 import com.enqualcomm.support.service.WeTalkMsgObserver;
+import com.enqualcomm.support.service.WebMsgStateObserver;
 import com.enqualcomm.support.service.base.AbstractConnectionService;
 import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 import com.enqualcomm.support.utils.APNUtil;
@@ -1019,6 +1020,11 @@ public class CoreService extends Service {
                 true,
                 signFlagObserver);
 
+        WebMsgStateObserver webMsgStateObserver = new WebMsgStateObserver(mHandler, resolver);
+        resolver.registerContentObserver(Uri.parse(SETTINGS + ".web_msg_read_state_flag"),
+                true,
+                webMsgStateObserver);
+
         //启动结束设置标志位,让心率和体温检测可以正常执行。
         server_starting = false;
 
index 75bdd12..746dd72 100644 (file)
@@ -1,42 +1,27 @@
 package com.enqualcomm.support.service;
 
 import android.content.ContentResolver;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
 import android.os.Handler;
 
-import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+import com.enqualcomm.support.service.base.BaseSettingsObserver;
 import com.ic.protocols.protocolAPIHelper;
 
-public class AirplaneModeObserver extends ContentObserver {
+public class AirplaneModeObserver extends BaseSettingsObserver {
 
     private final Handler mHandler;
-    private final ContentResolver mResolver;
 
     public AirplaneModeObserver(Handler handler, ContentResolver resolver) {
-        super(handler);
+        super(handler, resolver);
         this.mHandler = handler;
-        this.mResolver = resolver;
     }
 
     @Override
     public void onChange(boolean selfChange) {
         //获取值,发起请求
         mHandler.post(() -> {
-            Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS),
-                    new String[]{"s_value"}, "s_value=?",
-                    new String[]{"fly_mode_action_flag"},
-                    null);
-
-            if (query != null) {
-                if (query.moveToNext()) {
-                    String isFlyMode = query.getString(0);
-                    if ("true".equals(isFlyMode)) {
-                        protocolAPIHelper.sendFlyModeMsg();
-                    }
-                }
-                query.close();
+            String value = getSettingsValueByKey("fly_mode_action_flag", "");
+            if ("true".equals(value)) {
+                protocolAPIHelper.sendFlyModeMsg();
             }
         });
     }
index 1814516..dc8fcaf 100644 (file)
@@ -1,43 +1,27 @@
 package com.enqualcomm.support.service;
 
 import android.content.ContentResolver;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
 import android.os.Handler;
 
-import com.enqualcomm.support.provider.ICDatabaseHelper;
-import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+import com.enqualcomm.support.service.base.BaseSettingsObserver;
 import com.ic.protocols.protocolAPIHelper;
 
-public class ShutdownFlagObserver extends ContentObserver {
+public class ShutdownFlagObserver extends BaseSettingsObserver {
 
     private final Handler mHandler;
-    private final ContentResolver mResolver;
 
     public ShutdownFlagObserver(Handler handler, ContentResolver resolver) {
-        super(handler);
+        super(handler, resolver);
         this.mHandler = handler;
-        this.mResolver = resolver;
     }
 
     @Override
     public void onChange(boolean selfChange) {
         //改变以后,查询数据,如果是true的话,就去发送数据
         mHandler.post(() -> {
-            Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS),
-                    new String[]{ICDatabaseHelper.sValue},
-                    ICDatabaseHelper.sKey + "=?",
-                    new String[]{"shutdown_action_flag"},
-                    null);
-            if (query != null) {
-                if (query.moveToNext()) {
-                    String isShutDown = query.getString(0);
-                    if ("true".equals(isShutDown)) {
-                        protocolAPIHelper.sendShutdownMsg();
-                    }
-                }
-                query.close();
+            String value = getSettingsValueByKey("shutdown_action_flag", "");
+            if ("true".equals(value)) {
+                protocolAPIHelper.sendShutdownMsg();
             }
         });
     }
index 8282e65..cadef03 100644 (file)
@@ -7,10 +7,11 @@ import android.net.Uri;
 import android.os.Handler;
 
 import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+import com.enqualcomm.support.service.base.BaseSettingsObserver;
 import com.enqualcomm.support.utils.ICLogger;
 import com.ic.protocols.protocolAPIHelper;
 
-public class SignFlagObserver extends ContentObserver {
+public class SignFlagObserver extends BaseSettingsObserver {
 
     private final Handler mHandler;
     private final ContentResolver mResolver;
@@ -25,16 +26,7 @@ public class SignFlagObserver extends ContentObserver {
     public void onChange(boolean selfChange) {
         ICLogger.d("SignFlagObserver on value change...");
         mHandler.post(() -> {
-            Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS),
-                    new String[]{"s_value"}, "s_key=?", new String[]{"sign_action_flag"}, null);
-            String value = "-1";
-            if (query != null) {
-                if (query.moveToNext()) {
-                    value = query.getString(0);
-                    //value有none的值,有-1的值,有id的值
-                }
-                query.close();
-            }
+
             protocolAPIHelper.sendSignMsg(value);
         });
     }
diff --git a/app/src/main/java/com/enqualcomm/support/service/WebMsgStateObserver.java b/app/src/main/java/com/enqualcomm/support/service/WebMsgStateObserver.java
new file mode 100644 (file)
index 0000000..2f824df
--- /dev/null
@@ -0,0 +1,28 @@
+package com.enqualcomm.support.service;
+
+import android.content.ContentResolver;
+import android.os.Handler;
+
+import com.enqualcomm.support.service.base.BaseSettingsObserver;
+import com.enqualcomm.support.utils.ICLogger;
+import com.ic.protocols.protocolAPIHelper;
+
+public class WebMsgStateObserver extends BaseSettingsObserver {
+
+    private final Handler mHandler;
+
+    public WebMsgStateObserver(Handler handler, ContentResolver resolver) {
+        super(handler, resolver);
+        this.mHandler = handler;
+    }
+
+    @Override
+    public void onChange(boolean selfChange) {
+        ICLogger.d("on web msg setting change...");
+        mHandler.post(() -> {
+            //查询出设置项
+            String value = getSettingsValueByKey("sign_action_flag", "-1");
+            protocolAPIHelper.responseWebSms(value);
+        });
+    }
+}
diff --git a/app/src/main/java/com/enqualcomm/support/service/base/BaseSettingsObserver.java b/app/src/main/java/com/enqualcomm/support/service/base/BaseSettingsObserver.java
new file mode 100644 (file)
index 0000000..894835f
--- /dev/null
@@ -0,0 +1,33 @@
+package com.enqualcomm.support.service.base;
+
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Handler;
+
+import com.enqualcomm.support.provider.ICGlobalSettingsProvider;
+
+public class BaseSettingsObserver extends ContentObserver {
+
+    private final ContentResolver mResolver;
+
+    public BaseSettingsObserver(Handler handler, ContentResolver contentResolver) {
+        super(handler);
+        this.mResolver = contentResolver;
+    }
+
+    protected String getSettingsValueByKey(String key, String defaultValue) {
+        Cursor query = mResolver.query(Uri.parse(ICGlobalSettingsProvider.SETTINGS),
+                new String[]{"s_value"}, "s_key=?", new String[]{key}, null);
+        String value = defaultValue;
+        if (query != null) {
+            if (query.moveToNext()) {
+                value = query.getString(0);
+                //value有none的值,有-1的值,有id的值
+            }
+            query.close();
+        }
+        return value;
+    }
+}
index 63c7316..0bafe32 100644 (file)
@@ -163,6 +163,28 @@ public class protocolAPIHelper {
         }
     }
 
+    public static void responseWebSms(String value) {
+        switch (Config.protocol_no) {
+            case Config.PROTOCOL_JIAI:
+                break;
+            case Config.PROTOCOL_BEEHOME:
+                break;
+            case Config.PROTOCOL_IC:
+                break;
+            case Config.PROTOCOL_FZD:
+                break;
+            case Config.PROTOCOL_MQTT:
+                break;
+            case PROTOCOL_ANAN:
+                break;
+            case Config.PROTOCOL_S123:
+                protocols123_handler.responseWebSms(value);
+                break;
+            case Config.PROTOCOL_GATOR:
+                break;
+        }
+    }
+
     /*
        返回true 表示 cmd 全部解析成功
        返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
index 7c75656..0dddabf 100644 (file)
@@ -174,6 +174,14 @@ public class protocol_s123 {
                         .append(CMDEND).toString());
     }
 
+    //确认文字已读或聊天快捷回复(上行协议号:AP94,响应:BP94)
+    public void responseWebSms(String value) {
+        //IWAP94,123456,1,XXXXXXXXXXXXXXXX
+        //以下这部分内容由UI给到数据库再给过来
+        //123456,1,XXXXXXXXXXXXXXXX
+        //TODO:
+    }
+
     public enum CMD_TYPE {
         /*终端发起*/
         AP00,//登录包
@@ -2911,28 +2919,27 @@ public class protocol_s123 {
     }
 
 
-    public static StringMessage AP94() {
-        /***
-         * 15确认已读文字(上行协议号:AP94,响应:BP94)
-         * 示例:
-         * IWAP94,123456,1#
-         * 说明:
-         * IWAP94:标识符
-         * APHCI: 命令字符
-         * 123456: 文字来源系统流水号
-         * 1:确认阅读、0:取消阅读
-         * 平台响应:     IWBP94#
-         * 表示平台已接收,可不作响应
-         * 说明:   本消息适用所有终端
-         */
-
+    /**
+     * IWAP94:标识符
+     * APHCI: 命令字符
+     * 123456: 文字来源系统流水号
+     * 1:文本消息回复类型,1:确认已读,2:web(APP)快捷消息。
+     * IWAP94,123456,1,XXXXXXXXXXXXXXXX#
+     *
+     * @param responseText
+     * @return
+     */
+    public static StringMessage AP94(String responseText) {
+        if (TextUtils.isEmpty(responseText)) {
+            responseText = "";
+        }
         //在UI逻辑中,只要有处理就都是已经阅读。所以不存在取消阅读的说法。
         return genStringMessage(cmdMap.get(protocol_s123.CMD_TYPE.AP94),
                 new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_s123.CMD_TYPE.AP94))
                         .append(CMDSPLIT).append(Runtime.PushtxtMsg_srv_index)
                         .append(CMDSPLIT).append("1")
+                        .append(CMDSPLIT).append(responseText)
                         .append(CMDEND).toString());
-
     }
 
     public static StringMessage APAT(String id, String cmd) {
@@ -2950,19 +2957,18 @@ public class protocol_s123 {
      * @param cmd
      */
     public void handleBPAT(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPAT,353456789012345,080835,1#
- * 说明:是否提示表带是否连接的开关,即剪断报警开关
- * IW:标识符
- * BPAT : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * 1: 表示剪断报警开关,1为开,0 为关
- * 设备响应:     IWAPAT,080835, 1#
- * 080835:指令流水号
- * 1: 剪断开关状态(实际上与下行的命令一致)
- */
-
+        /***
+         * IWBPAT,353456789012345,080835,1#
+         * 说明:是否提示表带是否连接的开关,即剪断报警开关
+         * IW:标识符
+         * BPAT : 命令字符
+         * 353456789012345:IMEI号,设备唯一ID
+         * 080835:指令流水号
+         * 1: 表示剪断报警开关,1为开,0 为关
+         * 设备响应:     IWAPAT,080835, 1#
+         * 080835:指令流水号
+         * 1: 剪断开关状态(实际上与下行的命令一致)
+         */
         log("BPAT " + cmd);
         String[] cmdlist = cmd.split(CMDSPLIT);
         if (cmdlist.length == 4) {
@@ -3367,6 +3373,8 @@ public class protocol_s123 {
             case AP94:
                 break;
             case BP94:
+                ICLogger.d("服务器收到文字确认/快捷回复");
+                handleBP94();
                 break;
             case AP03:
                 break;
@@ -3766,10 +3774,17 @@ public class protocol_s123 {
             case APSM:
                 break;
         }
-
         return ret;
     }
 
+    /**
+     * 修改库的状态,更新UI
+     */
+    private void handleBP94() {
+        //UI收到以后,设置成none
+        updateSettingValue("web_msg_read_state_flag", "success");
+    }
+
     /**
      * 修改配置项的值为success,让UI展示Success
      */