From: TrillGates Date: Thu, 5 Aug 2021 07:10:51 +0000 (+0800) Subject: refactor observer. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=7a3e2463d29114599961a9bab1d6b86cdccb9501;p=protocol_srv.git refactor observer. --- diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index ba21d9f6..cceb8143 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -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; diff --git a/app/src/main/java/com/enqualcomm/support/service/AirplaneModeObserver.java b/app/src/main/java/com/enqualcomm/support/service/AirplaneModeObserver.java index 75bdd123..746dd72a 100644 --- a/app/src/main/java/com/enqualcomm/support/service/AirplaneModeObserver.java +++ b/app/src/main/java/com/enqualcomm/support/service/AirplaneModeObserver.java @@ -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(); } }); } diff --git a/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java b/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java index 18145162..dc8fcaff 100644 --- a/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java +++ b/app/src/main/java/com/enqualcomm/support/service/ShutdownFlagObserver.java @@ -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(); } }); } diff --git a/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java b/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java index 8282e654..cadef032 100644 --- a/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java +++ b/app/src/main/java/com/enqualcomm/support/service/SignFlagObserver.java @@ -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 index 00000000..2f824dfd --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/service/WebMsgStateObserver.java @@ -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 index 00000000..894835fb --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/service/base/BaseSettingsObserver.java @@ -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; + } +} diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 63c73165..0bafe325 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -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,下一次识别接着使用 diff --git a/app/src/main/java/com/ic/protocols/protocol_s123.java b/app/src/main/java/com/ic/protocols/protocol_s123.java index 7c75656b..0dddabfc 100644 --- a/app/src/main/java/com/ic/protocols/protocol_s123.java +++ b/app/src/main/java/com/ic/protocols/protocol_s123.java @@ -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 */