黄学彪
2019-12-13 6cbd0936d3245fd7c433884ac9c1f5448a7cf657
合并了代码
1个文件已添加
36个文件已修改
1777 ■■■■■ 已修改文件
ZigbeeApp/GateWay.Droid/Assets/Language.ini 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Assets/Phone/Item/Switch.png 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Assets/Phone/Item/SwitchSelected.png 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Resources/Resource.designer.cs 480 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/MainViewController.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/Resources/Language.ini 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/Resources/Phone/Item/Switch.png 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/Resources/Phone/Item/SwitchSelected.png 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/CommonPage.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/Device.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/Room.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/SendDataToServer.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Account/AccountForgetPWD.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Account/AccountLogic.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Account/AccountLogin.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Account/AccountLoginByCode.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Category/Category.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Category/CategoryAddScene.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/ButtonLineForm.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/DeviceInfoRow.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneMainView.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneTargetFunctionRow.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/TopFrameLayout.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Room/RoomManagement.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs 637 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Abount/SLAForm.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlLogLogic.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/NewGateWayMenuSelectForm.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserView/HomePage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserView/UserHomeView.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserView/UserPage.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Common/Config.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/R.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Shared.projitems 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Assets/Language.ini
@@ -669,11 +669,16 @@
10157=网关不在线
10160=已是最新版本
10161=更新
10161=更新最新版
10162=更新内容
10163=更新失败
10164=更新中...
10164=正在更新中...
10165=取消更新
10166=版本号
10167=服务协议
10168=版本更新
10169=协议文本信息内容
10170=可能由于当前网络较差或设备已被他人绑定。{\r\n}1.请确保手机与设备之间的距离足够近,并且周围网络环境没有强干扰。{\r\n}2.同时需确认应用的定位权限未被关闭。若手动关闭了应用定位权限可能导致无法发现设备。{\r\n}3.如果仍始终无法发现设备,可能因为设备已经被他人绑定了。 如果你并不清楚是谁连接了设备,可以进行重置,重置方式请 查阅说明书,根据指引操作。
@@ -1720,6 +1725,7 @@
15997=3.系统指示灯不是1秒闪烁,检查路由器是否开启DHCP自动分配IP
15998=请前往住宅管理{0}设置住宅的地理位置
15999=未知楼层
16000=如果不设置住宅的地理位置,则会影响自动化地理围栏功能的设置
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
ZigbeeApp/GateWay.Droid/Assets/Phone/Item/Switch.png

ZigbeeApp/GateWay.Droid/Assets/Phone/Item/SwitchSelected.png

ZigbeeApp/GateWay.Droid/Resources/Resource.designer.cs
@@ -3000,6 +3000,12 @@
            // aapt resource value: 0x7f090028
            public const int CTRL = 2131296296;
            
            // aapt resource value: 0x7f09008e
            public const int Custom = 2131296398;
            // aapt resource value: 0x7f09008d
            public const int CustomLabel = 2131296397;
            // aapt resource value: 0x7f090054
            public const int FILL = 2131296340;
            
@@ -3021,8 +3027,23 @@
            // aapt resource value: 0x7f090051
            public const int MatchLayout = 2131296337;
            
            // aapt resource value: 0x7f090088
            public const int Notice = 2131296392;
            // aapt resource value: 0x7f09008c
            public const int Password = 2131296396;
            // aapt resource value: 0x7f09008b
            public const int PasswordLabel = 2131296395;
            // aapt resource value: 0x7f09002b
            public const int SHIFT = 2131296299;
            // aapt resource value: 0x7f09008a
            public const int SSID = 2131296394;
            // aapt resource value: 0x7f090089
            public const int SSIDLabel = 2131296393;
            
            // aapt resource value: 0x7f090056
            public const int STROKE = 2131296342;
@@ -3036,8 +3057,8 @@
            // aapt resource value: 0x7f090053
            public const int Translate = 2131296339;
            
            // aapt resource value: 0x7f0900c0
            public const int action0 = 2131296448;
            // aapt resource value: 0x7f0900cb
            public const int action0 = 2131296459;
            
            // aapt resource value: 0x7f090079
            public const int action_bar = 2131296377;
@@ -3060,17 +3081,17 @@
            // aapt resource value: 0x7f090057
            public const int action_bar_title = 2131296343;
            
            // aapt resource value: 0x7f0900bd
            public const int action_container = 2131296445;
            // aapt resource value: 0x7f0900c8
            public const int action_container = 2131296456;
            
            // aapt resource value: 0x7f09007a
            public const int action_context_bar = 2131296378;
            
            // aapt resource value: 0x7f0900c4
            public const int action_divider = 2131296452;
            // aapt resource value: 0x7f0900cf
            public const int action_divider = 2131296463;
            
            // aapt resource value: 0x7f0900be
            public const int action_image = 2131296446;
            // aapt resource value: 0x7f0900c9
            public const int action_image = 2131296457;
            
            // aapt resource value: 0x7f090003
            public const int action_menu_divider = 2131296259;
@@ -3087,11 +3108,11 @@
            // aapt resource value: 0x7f090059
            public const int action_mode_close_button = 2131296345;
            
            // aapt resource value: 0x7f0900bf
            public const int action_text = 2131296447;
            // aapt resource value: 0x7f0900ca
            public const int action_text = 2131296458;
            
            // aapt resource value: 0x7f0900cd
            public const int actions = 2131296461;
            // aapt resource value: 0x7f0900d8
            public const int actions = 2131296472;
            
            // aapt resource value: 0x7f09005a
            public const int activity_chooser_view_content = 2131296346;
@@ -3123,17 +3144,17 @@
            // aapt resource value: 0x7f090032
            public const int bottom = 2131296306;
            
            // aapt resource value: 0x7f0900a8
            public const int btnCancel = 2131296424;
            // aapt resource value: 0x7f0900b3
            public const int btnCancel = 2131296435;
            
            // aapt resource value: 0x7f0900aa
            public const int btnSubmit = 2131296426;
            // aapt resource value: 0x7f0900b5
            public const int btnSubmit = 2131296437;
            
            // aapt resource value: 0x7f090060
            public const int buttonPanel = 2131296352;
            
            // aapt resource value: 0x7f0900c1
            public const int cancel_action = 2131296449;
            // aapt resource value: 0x7f0900cc
            public const int cancel_action = 2131296460;
            
            // aapt resource value: 0x7f09003a
            public const int center = 2131296314;
@@ -3147,8 +3168,8 @@
            // aapt resource value: 0x7f090070
            public const int checkbox = 2131296368;
            
            // aapt resource value: 0x7f0900c9
            public const int chronometer = 2131296457;
            // aapt resource value: 0x7f0900d4
            public const int chronometer = 2131296468;
            
            // aapt resource value: 0x7f090043
            public const int clip_horizontal = 2131296323;
@@ -3159,20 +3180,20 @@
            // aapt resource value: 0x7f09002e
            public const int collapseActionView = 2131296302;
            
            // aapt resource value: 0x7f09008e
            public const int container = 2131296398;
            // aapt resource value: 0x7f090099
            public const int container = 2131296409;
            
            // aapt resource value: 0x7f0900d6
            public const int contentFrame = 2131296470;
            // aapt resource value: 0x7f0900e1
            public const int contentFrame = 2131296481;
            
            // aapt resource value: 0x7f090063
            public const int contentPanel = 2131296355;
            
            // aapt resource value: 0x7f0900ac
            public const int content_container = 2131296428;
            // aapt resource value: 0x7f0900b7
            public const int content_container = 2131296439;
            
            // aapt resource value: 0x7f09008f
            public const int coordinator = 2131296399;
            // aapt resource value: 0x7f09009a
            public const int coordinator = 2131296410;
            
            // aapt resource value: 0x7f09006a
            public const int custom = 2131296362;
@@ -3180,8 +3201,8 @@
            // aapt resource value: 0x7f090069
            public const int customPanel = 2131296361;
            
            // aapt resource value: 0x7f0900b8
            public const int day = 2131296440;
            // aapt resource value: 0x7f0900c3
            public const int day = 2131296451;
            
            // aapt resource value: 0x7f090077
            public const int decor_content_parent = 2131296375;
@@ -3189,23 +3210,23 @@
            // aapt resource value: 0x7f09005d
            public const int default_activity_button = 2131296349;
            
            // aapt resource value: 0x7f090089
            public const int description = 2131296393;
            // aapt resource value: 0x7f090094
            public const int description = 2131296404;
            
            // aapt resource value: 0x7f090091
            public const int design_bottom_sheet = 2131296401;
            // aapt resource value: 0x7f09009c
            public const int design_bottom_sheet = 2131296412;
            
            // aapt resource value: 0x7f090098
            public const int design_menu_item_action_area = 2131296408;
            // aapt resource value: 0x7f0900a3
            public const int design_menu_item_action_area = 2131296419;
            
            // aapt resource value: 0x7f090097
            public const int design_menu_item_action_area_stub = 2131296407;
            // aapt resource value: 0x7f0900a2
            public const int design_menu_item_action_area_stub = 2131296418;
            
            // aapt resource value: 0x7f090096
            public const int design_menu_item_text = 2131296406;
            // aapt resource value: 0x7f0900a1
            public const int design_menu_item_text = 2131296417;
            
            // aapt resource value: 0x7f090095
            public const int design_navigation_view = 2131296405;
            // aapt resource value: 0x7f0900a0
            public const int design_navigation_view = 2131296416;
            
            // aapt resource value: 0x7f090015
            public const int disableHome = 2131296277;
@@ -3216,8 +3237,8 @@
            // aapt resource value: 0x7f090025
            public const int end = 2131296293;
            
            // aapt resource value: 0x7f0900cf
            public const int end_padder = 2131296463;
            // aapt resource value: 0x7f0900da
            public const int end_padder = 2131296474;
            
            // aapt resource value: 0x7f090034
            public const int enterAlways = 2131296308;
@@ -3243,8 +3264,8 @@
            // aapt resource value: 0x7f09003d
            public const int fill_vertical = 2131296317;
            
            // aapt resource value: 0x7f09008a
            public const int fingerprint_icon = 2131296394;
            // aapt resource value: 0x7f090095
            public const int fingerprint_icon = 2131296405;
            
            // aapt resource value: 0x7f090049
            public const int @fixed = 2131296329;
@@ -3252,56 +3273,56 @@
            // aapt resource value: 0x7f09004d
            public const int forever = 2131296333;
            
            // aapt resource value: 0x7f09009d
            public const int gd_btn_back = 2131296413;
            // aapt resource value: 0x7f0900a8
            public const int gd_btn_back = 2131296424;
            
            // aapt resource value: 0x7f0900a6
            public const int gd_btn_myLocation = 2131296422;
            // aapt resource value: 0x7f0900a5
            public const int gd_btn_save = 2131296421;
            // aapt resource value: 0x7f0900a2
            public const int gd_img_search_delete = 2131296418;
            // aapt resource value: 0x7f0900a4
            public const int gd_ll_myhome = 2131296420;
            // aapt resource value: 0x7f0900a0
            public const int gd_ll_search = 2131296416;
            // aapt resource value: 0x7f09009f
            public const int gd_mapView = 2131296415;
            // aapt resource value: 0x7f09009c
            public const int gd_rl_topview = 2131296412;
            // aapt resource value: 0x7f09009e
            public const int gd_tv_activity_title = 2131296414;
            // aapt resource value: 0x7f0900a3
            public const int gd_tv_radius = 2131296419;
            // aapt resource value: 0x7f0900a1
            public const int gd_tv_search_title = 2131296417;
            // aapt resource value: 0x7f09009a
            public const int hdl_gallery_rootView = 2131296410;
            // aapt resource value: 0x7f09009b
            public const int hdl_gallery_viewPager = 2131296411;
            // aapt resource value: 0x7f0900ae
            public const int hdl_options1 = 2131296430;
            // aapt resource value: 0x7f0900af
            public const int hdl_options2 = 2131296431;
            // aapt resource value: 0x7f0900b1
            public const int gd_btn_myLocation = 2131296433;
            
            // aapt resource value: 0x7f0900b0
            public const int hdl_options3 = 2131296432;
            public const int gd_btn_save = 2131296432;
            
            // aapt resource value: 0x7f0900ad
            public const int hdl_pickerview_ll = 2131296429;
            public const int gd_img_search_delete = 2131296429;
            // aapt resource value: 0x7f0900af
            public const int gd_ll_myhome = 2131296431;
            // aapt resource value: 0x7f0900ab
            public const int gd_ll_search = 2131296427;
            // aapt resource value: 0x7f0900aa
            public const int gd_mapView = 2131296426;
            // aapt resource value: 0x7f0900a7
            public const int gd_rl_topview = 2131296423;
            // aapt resource value: 0x7f0900a9
            public const int gd_tv_activity_title = 2131296425;
            // aapt resource value: 0x7f0900ae
            public const int gd_tv_radius = 2131296430;
            // aapt resource value: 0x7f0900ac
            public const int gd_tv_search_title = 2131296428;
            // aapt resource value: 0x7f0900a5
            public const int hdl_gallery_rootView = 2131296421;
            // aapt resource value: 0x7f0900a6
            public const int hdl_gallery_viewPager = 2131296422;
            // aapt resource value: 0x7f0900b9
            public const int hdl_options1 = 2131296441;
            // aapt resource value: 0x7f0900ba
            public const int hdl_options2 = 2131296442;
            // aapt resource value: 0x7f0900bb
            public const int hdl_options3 = 2131296443;
            // aapt resource value: 0x7f0900b8
            public const int hdl_pickerview_ll = 2131296440;
            
            // aapt resource value: 0x7f090005
            public const int home = 2131296261;
@@ -3309,14 +3330,14 @@
            // aapt resource value: 0x7f090016
            public const int homeAsUp = 2131296278;
            
            // aapt resource value: 0x7f0900b9
            public const int hour = 2131296441;
            // aapt resource value: 0x7f0900c4
            public const int hour = 2131296452;
            
            // aapt resource value: 0x7f09005f
            public const int icon = 2131296351;
            
            // aapt resource value: 0x7f0900ce
            public const int icon_group = 2131296462;
            // aapt resource value: 0x7f0900d9
            public const int icon_group = 2131296473;
            
            // aapt resource value: 0x7f09002f
            public const int ifRoom = 2131296303;
@@ -3324,8 +3345,8 @@
            // aapt resource value: 0x7f09005c
            public const int image = 2131296348;
            
            // aapt resource value: 0x7f0900ca
            public const int info = 2131296458;
            // aapt resource value: 0x7f0900d5
            public const int info = 2131296469;
            
            // aapt resource value: 0x7f09004e
            public const int italic = 2131296334;
@@ -3333,8 +3354,8 @@
            // aapt resource value: 0x7f090000
            public const int item_touch_helper_previous_elevation = 2131296256;
            
            // aapt resource value: 0x7f09008d
            public const int largeLabel = 2131296397;
            // aapt resource value: 0x7f090098
            public const int largeLabel = 2131296408;
            
            // aapt resource value: 0x7f09003e
            public const int left = 2131296318;
@@ -3351,35 +3372,35 @@
            // aapt resource value: 0x7f09005e
            public const int list_item = 2131296350;
            
            // aapt resource value: 0x7f0900d8
            public const int masked = 2131296472;
            // aapt resource value: 0x7f0900e3
            public const int masked = 2131296483;
            
            // aapt resource value: 0x7f0900c3
            public const int media_actions = 2131296451;
            // aapt resource value: 0x7f0900ce
            public const int media_actions = 2131296462;
            
            // aapt resource value: 0x7f0900d5
            public const int message = 2131296469;
            // aapt resource value: 0x7f0900e0
            public const int message = 2131296480;
            
            // aapt resource value: 0x7f090026
            public const int middle = 2131296294;
            
            // aapt resource value: 0x7f0900ba
            public const int min = 2131296442;
            // aapt resource value: 0x7f0900c5
            public const int min = 2131296453;
            
            // aapt resource value: 0x7f090048
            public const int mini = 2131296328;
            
            // aapt resource value: 0x7f0900b7
            public const int month = 2131296439;
            // aapt resource value: 0x7f0900c2
            public const int month = 2131296450;
            
            // aapt resource value: 0x7f09001c
            public const int multiply = 2131296284;
            
            // aapt resource value: 0x7f0900bc
            public const int myButton = 2131296444;
            // aapt resource value: 0x7f0900c7
            public const int myButton = 2131296455;
            
            // aapt resource value: 0x7f090094
            public const int navigation_header_container = 2131296404;
            // aapt resource value: 0x7f09009f
            public const int navigation_header_container = 2131296415;
            
            // aapt resource value: 0x7f090030
            public const int never = 2131296304;
@@ -3390,29 +3411,29 @@
            // aapt resource value: 0x7f090013
            public const int normal = 2131296275;
            
            // aapt resource value: 0x7f0900cc
            public const int notification_background = 2131296460;
            // aapt resource value: 0x7f0900d7
            public const int notification_background = 2131296471;
            
            // aapt resource value: 0x7f0900c6
            public const int notification_main_column = 2131296454;
            // aapt resource value: 0x7f0900d1
            public const int notification_main_column = 2131296465;
            
            // aapt resource value: 0x7f0900c5
            public const int notification_main_column_container = 2131296453;
            // aapt resource value: 0x7f0900d0
            public const int notification_main_column_container = 2131296464;
            
            // aapt resource value: 0x7f0900b2
            public const int options1 = 2131296434;
            // aapt resource value: 0x7f0900bd
            public const int options1 = 2131296445;
            
            // aapt resource value: 0x7f0900b3
            public const int options2 = 2131296435;
            // aapt resource value: 0x7f0900be
            public const int options2 = 2131296446;
            
            // aapt resource value: 0x7f0900b4
            public const int options3 = 2131296436;
            // aapt resource value: 0x7f0900bf
            public const int options3 = 2131296447;
            
            // aapt resource value: 0x7f0900b1
            public const int optionspicker = 2131296433;
            // aapt resource value: 0x7f0900bc
            public const int optionspicker = 2131296444;
            
            // aapt resource value: 0x7f0900ab
            public const int outmost_container = 2131296427;
            // aapt resource value: 0x7f0900b6
            public const int outmost_container = 2131296438;
            
            // aapt resource value: 0x7f090041
            public const int parallax = 2131296321;
@@ -3435,14 +3456,14 @@
            // aapt resource value: 0x7f09003f
            public const int right = 2131296319;
            
            // aapt resource value: 0x7f0900cb
            public const int right_icon = 2131296459;
            // aapt resource value: 0x7f0900d6
            public const int right_icon = 2131296470;
            
            // aapt resource value: 0x7f0900c7
            public const int right_side = 2131296455;
            // aapt resource value: 0x7f0900d2
            public const int right_side = 2131296466;
            
            // aapt resource value: 0x7f0900a7
            public const int rv_topbar = 2131296423;
            // aapt resource value: 0x7f0900b2
            public const int rv_topbar = 2131296434;
            
            // aapt resource value: 0x7f09001d
            public const int screen = 2131296285;
@@ -3492,8 +3513,8 @@
            // aapt resource value: 0x7f090086
            public const int search_voice_btn = 2131296390;
            
            // aapt resource value: 0x7f0900bb
            public const int second = 2131296443;
            // aapt resource value: 0x7f0900c6
            public const int second = 2131296454;
            
            // aapt resource value: 0x7f090087
            public const int select_dialog_listview = 2131296391;
@@ -3510,14 +3531,14 @@
            // aapt resource value: 0x7f09001a
            public const int showTitle = 2131296282;
            
            // aapt resource value: 0x7f09008c
            public const int smallLabel = 2131296396;
            // aapt resource value: 0x7f090097
            public const int smallLabel = 2131296407;
            
            // aapt resource value: 0x7f090093
            public const int snackbar_action = 2131296403;
            // aapt resource value: 0x7f09009e
            public const int snackbar_action = 2131296414;
            
            // aapt resource value: 0x7f090092
            public const int snackbar_text = 2131296402;
            // aapt resource value: 0x7f09009d
            public const int snackbar_text = 2131296413;
            
            // aapt resource value: 0x7f090038
            public const int snap = 2131296312;
@@ -3537,29 +3558,41 @@
            // aapt resource value: 0x7f090020
            public const int src_over = 2131296288;
            
            // aapt resource value: 0x7f0900d0
            public const int srl_classics_arrow = 2131296464;
            // aapt resource value: 0x7f0900db
            public const int srl_classics_arrow = 2131296475;
            
            // aapt resource value: 0x7f0900d3
            public const int srl_classics_center = 2131296467;
            // aapt resource value: 0x7f0900de
            public const int srl_classics_center = 2131296478;
            
            // aapt resource value: 0x7f0900d2
            public const int srl_classics_progress = 2131296466;
            // aapt resource value: 0x7f0900dd
            public const int srl_classics_progress = 2131296477;
            
            // aapt resource value: 0x7f0900d1
            public const int srl_classics_title = 2131296465;
            // aapt resource value: 0x7f0900dc
            public const int srl_classics_title = 2131296476;
            
            // aapt resource value: 0x7f0900d4
            public const int srl_classics_update = 2131296468;
            // aapt resource value: 0x7f0900df
            public const int srl_classics_update = 2131296479;
            
            // aapt resource value: 0x7f090040
            public const int start = 2131296320;
            
            // aapt resource value: 0x7f09008b
            public const int status = 2131296395;
            // aapt resource value: 0x7f09008f
            public const int startV1 = 2131296399;
            
            // aapt resource value: 0x7f0900c2
            public const int status_bar_latest_event_content = 2131296450;
            // aapt resource value: 0x7f090091
            public const int startV1V4 = 2131296401;
            // aapt resource value: 0x7f090090
            public const int startV4 = 2131296400;
            // aapt resource value: 0x7f090096
            public const int status = 2131296406;
            // aapt resource value: 0x7f0900cd
            public const int status_bar_latest_event_content = 2131296461;
            // aapt resource value: 0x7f090092
            public const int stop = 2131296402;
            
            // aapt resource value: 0x7f090073
            public const int submenuarrow = 2131296371;
@@ -3567,8 +3600,8 @@
            // aapt resource value: 0x7f090084
            public const int submit_area = 2131296388;
            
            // aapt resource value: 0x7f090088
            public const int subtitle = 2131296392;
            // aapt resource value: 0x7f090093
            public const int subtitle = 2131296403;
            
            // aapt resource value: 0x7f090014
            public const int tabMode = 2131296276;
@@ -3585,8 +3618,8 @@
            // aapt resource value: 0x7f090066
            public const int textSpacerNoTitle = 2131296358;
            
            // aapt resource value: 0x7f090099
            public const int text_input_password_toggle = 2131296409;
            // aapt resource value: 0x7f0900a4
            public const int text_input_password_toggle = 2131296420;
            
            // aapt resource value: 0x7f09000a
            public const int textinput_counter = 2131296266;
@@ -3594,11 +3627,11 @@
            // aapt resource value: 0x7f09000b
            public const int textinput_error = 2131296267;
            
            // aapt resource value: 0x7f0900c8
            public const int time = 2131296456;
            // aapt resource value: 0x7f0900d3
            public const int time = 2131296467;
            
            // aapt resource value: 0x7f0900b5
            public const int timepicker = 2131296437;
            // aapt resource value: 0x7f0900c0
            public const int timepicker = 2131296448;
            
            // aapt resource value: 0x7f090011
            public const int title = 2131296273;
@@ -3615,11 +3648,11 @@
            // aapt resource value: 0x7f09006b
            public const int topPanel = 2131296363;
            
            // aapt resource value: 0x7f090090
            public const int touch_outside = 2131296400;
            // aapt resource value: 0x7f09009b
            public const int touch_outside = 2131296411;
            
            // aapt resource value: 0x7f0900a9
            public const int tvTitle = 2131296425;
            // aapt resource value: 0x7f0900b4
            public const int tvTitle = 2131296436;
            
            // aapt resource value: 0x7f090022
            public const int uniform = 2131296290;
@@ -3633,8 +3666,8 @@
            // aapt resource value: 0x7f09000c
            public const int view_offset_helper = 2131296268;
            
            // aapt resource value: 0x7f0900d7
            public const int visible = 2131296471;
            // aapt resource value: 0x7f0900e2
            public const int visible = 2131296482;
            
            // aapt resource value: 0x7f090031
            public const int withText = 2131296305;
@@ -3642,8 +3675,8 @@
            // aapt resource value: 0x7f090023
            public const int wrap_content = 2131296291;
            
            // aapt resource value: 0x7f0900b6
            public const int year = 2131296438;
            // aapt resource value: 0x7f0900c1
            public const int year = 2131296449;
            
            static Id()
            {
@@ -3786,151 +3819,154 @@
            public const int abc_select_dialog_material = 2130968602;
            
            // aapt resource value: 0x7f04001b
            public const int biometric_prompt_dialog_content = 2130968603;
            public const int activity_elian = 2130968603;
            
            // aapt resource value: 0x7f04001c
            public const int design_bottom_navigation_item = 2130968604;
            public const int biometric_prompt_dialog_content = 2130968604;
            
            // aapt resource value: 0x7f04001d
            public const int design_bottom_sheet_dialog = 2130968605;
            public const int design_bottom_navigation_item = 2130968605;
            
            // aapt resource value: 0x7f04001e
            public const int design_layout_snackbar = 2130968606;
            public const int design_bottom_sheet_dialog = 2130968606;
            
            // aapt resource value: 0x7f04001f
            public const int design_layout_snackbar_include = 2130968607;
            public const int design_layout_snackbar = 2130968607;
            
            // aapt resource value: 0x7f040020
            public const int design_layout_tab_icon = 2130968608;
            public const int design_layout_snackbar_include = 2130968608;
            
            // aapt resource value: 0x7f040021
            public const int design_layout_tab_text = 2130968609;
            public const int design_layout_tab_icon = 2130968609;
            
            // aapt resource value: 0x7f040022
            public const int design_menu_item_action_area = 2130968610;
            public const int design_layout_tab_text = 2130968610;
            
            // aapt resource value: 0x7f040023
            public const int design_navigation_item = 2130968611;
            public const int design_menu_item_action_area = 2130968611;
            
            // aapt resource value: 0x7f040024
            public const int design_navigation_item_header = 2130968612;
            public const int design_navigation_item = 2130968612;
            
            // aapt resource value: 0x7f040025
            public const int design_navigation_item_separator = 2130968613;
            public const int design_navigation_item_header = 2130968613;
            
            // aapt resource value: 0x7f040026
            public const int design_navigation_item_subheader = 2130968614;
            public const int design_navigation_item_separator = 2130968614;
            
            // aapt resource value: 0x7f040027
            public const int design_navigation_menu = 2130968615;
            public const int design_navigation_item_subheader = 2130968615;
            
            // aapt resource value: 0x7f040028
            public const int design_navigation_menu_item = 2130968616;
            public const int design_navigation_menu = 2130968616;
            
            // aapt resource value: 0x7f040029
            public const int design_text_input_password_icon = 2130968617;
            public const int design_navigation_menu_item = 2130968617;
            
            // aapt resource value: 0x7f04002a
            public const int hdl_gallery_banner_view_layout = 2130968618;
            public const int design_text_input_password_icon = 2130968618;
            
            // aapt resource value: 0x7f04002b
            public const int hdl_widget_activity_crop_image = 2130968619;
            public const int hdl_gallery_banner_view_layout = 2130968619;
            
            // aapt resource value: 0x7f04002c
            public const int hdl_widget_activity_geofence_round = 2130968620;
            public const int hdl_widget_activity_crop_image = 2130968620;
            
            // aapt resource value: 0x7f04002d
            public const int hdl_widget_air_button = 2130968621;
            public const int hdl_widget_activity_geofence_round = 2130968621;
            
            // aapt resource value: 0x7f04002e
            public const int hdl_widget_include_pickerview_topbar = 2130968622;
            public const int hdl_widget_air_button = 2130968622;
            
            // aapt resource value: 0x7f04002f
            public const int hdl_widget_layout_basepickerview = 2130968623;
            public const int hdl_widget_include_pickerview_topbar = 2130968623;
            
            // aapt resource value: 0x7f040030
            public const int hdl_widget_pickerview = 2130968624;
            public const int hdl_widget_layout_basepickerview = 2130968624;
            
            // aapt resource value: 0x7f040031
            public const int hdl_widget_pickerview_options = 2130968625;
            public const int hdl_widget_pickerview = 2130968625;
            
            // aapt resource value: 0x7f040032
            public const int hdl_widget_pickerview_time = 2130968626;
            public const int hdl_widget_pickerview_options = 2130968626;
            
            // aapt resource value: 0x7f040033
            public const int Main = 2130968627;
            public const int hdl_widget_pickerview_time = 2130968627;
            
            // aapt resource value: 0x7f040034
            public const int notification_action = 2130968628;
            public const int Main = 2130968628;
            
            // aapt resource value: 0x7f040035
            public const int notification_action_tombstone = 2130968629;
            public const int notification_action = 2130968629;
            
            // aapt resource value: 0x7f040036
            public const int notification_media_action = 2130968630;
            public const int notification_action_tombstone = 2130968630;
            
            // aapt resource value: 0x7f040037
            public const int notification_media_cancel_action = 2130968631;
            public const int notification_media_action = 2130968631;
            
            // aapt resource value: 0x7f040038
            public const int notification_template_big_media = 2130968632;
            public const int notification_media_cancel_action = 2130968632;
            
            // aapt resource value: 0x7f040039
            public const int notification_template_big_media_custom = 2130968633;
            public const int notification_template_big_media = 2130968633;
            
            // aapt resource value: 0x7f04003a
            public const int notification_template_big_media_narrow = 2130968634;
            public const int notification_template_big_media_custom = 2130968634;
            
            // aapt resource value: 0x7f04003b
            public const int notification_template_big_media_narrow_custom = 2130968635;
            public const int notification_template_big_media_narrow = 2130968635;
            
            // aapt resource value: 0x7f04003c
            public const int notification_template_custom_big = 2130968636;
            public const int notification_template_big_media_narrow_custom = 2130968636;
            
            // aapt resource value: 0x7f04003d
            public const int notification_template_icon_group = 2130968637;
            public const int notification_template_custom_big = 2130968637;
            
            // aapt resource value: 0x7f04003e
            public const int notification_template_lines_media = 2130968638;
            public const int notification_template_icon_group = 2130968638;
            
            // aapt resource value: 0x7f04003f
            public const int notification_template_media = 2130968639;
            public const int notification_template_lines_media = 2130968639;
            
            // aapt resource value: 0x7f040040
            public const int notification_template_media_custom = 2130968640;
            public const int notification_template_media = 2130968640;
            
            // aapt resource value: 0x7f040041
            public const int notification_template_part_chronometer = 2130968641;
            public const int notification_template_media_custom = 2130968641;
            
            // aapt resource value: 0x7f040042
            public const int notification_template_part_time = 2130968642;
            public const int notification_template_part_chronometer = 2130968642;
            
            // aapt resource value: 0x7f040043
            public const int select_dialog_item_material = 2130968643;
            public const int notification_template_part_time = 2130968643;
            
            // aapt resource value: 0x7f040044
            public const int select_dialog_multichoice_material = 2130968644;
            public const int select_dialog_item_material = 2130968644;
            
            // aapt resource value: 0x7f040045
            public const int select_dialog_singlechoice_material = 2130968645;
            public const int select_dialog_multichoice_material = 2130968645;
            
            // aapt resource value: 0x7f040046
            public const int srl_classics_footer = 2130968646;
            public const int select_dialog_singlechoice_material = 2130968646;
            
            // aapt resource value: 0x7f040047
            public const int srl_classics_header = 2130968647;
            public const int srl_classics_footer = 2130968647;
            
            // aapt resource value: 0x7f040048
            public const int support_simple_spinner_dropdown_item = 2130968648;
            public const int srl_classics_header = 2130968648;
            
            // aapt resource value: 0x7f040049
            public const int tooltip = 2130968649;
            public const int support_simple_spinner_dropdown_item = 2130968649;
            
            // aapt resource value: 0x7f04004a
            public const int zxingscanneractivitylayout = 2130968650;
            public const int tooltip = 2130968650;
            
            // aapt resource value: 0x7f04004b
            public const int zxingscannerfragmentlayout = 2130968651;
            public const int zxingscanneractivitylayout = 2130968651;
            // aapt resource value: 0x7f04004c
            public const int zxingscannerfragmentlayout = 2130968652;
            
            static Layout()
            {
ZigbeeApp/Home.Ios/MainViewController.cs
old mode 100755 new mode 100644
@@ -41,7 +41,10 @@
        public override void ViewWillAppear(bool animated)
        {
            UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;
            //顶部信息栏字体颜色为黑色
            UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.Default;
            //顶部信息栏字体颜色为白色
            //UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;
            //base.ViewWillAppear(animated);
        }
ZigbeeApp/Home.Ios/Resources/Language.ini
@@ -669,11 +669,16 @@
10157=网关不在线
10160=已是最新版本
10161=更新
10161=更新最新版
10162=更新内容
10163=更新失败
10164=更新中...
10164=正在更新中...
10165=取消更新
10166=版本号
10167=服务协议
10168=版本更新
10169=协议文本信息内容
10170=可能由于当前网络较差或设备已被他人绑定。{\r\n}1.请确保手机与设备之间的距离足够近,并且周围网络环境没有强干扰。{\r\n}2.同时需确认应用的定位权限未被关闭。若手动关闭了应用定位权限可能导致无法发现设备。{\r\n}3.如果仍始终无法发现设备,可能因为设备已经被他人绑定了。 如果你并不清楚是谁连接了设备,可以进行重置,重置方式请 查阅说明书,根据指引操作。
@@ -1720,6 +1725,7 @@
15997=3.系统指示灯不是1秒闪烁,检查路由器是否开启DHCP自动分配IP
15998=请前往住宅管理{0}设置住宅的地理位置
15999=未知楼层
16000=如果不设置住宅的地理位置,则会影响自动化地理围栏功能的设置
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
ZigbeeApp/Home.Ios/Resources/Phone/Item/Switch.png

ZigbeeApp/Home.Ios/Resources/Phone/Item/SwitchSelected.png

ZigbeeApp/Shared/Common/CommonPage.cs
@@ -168,10 +168,7 @@
        /// 用于验证邮箱正则表达式
        /// </summary>
        public static string EmailRegexStr = "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$";
        /// <summary>
        /// 下载安卓apk的byte长度
        /// </summary>
        public static long ApkBytesTotalLength = 0;
        //public static Encoding EncodingUTF8 = Encoding.UTF8;
        //public static Encoding EncodingGB2312 = Encoding.GetEncoding("gb2312");
@@ -332,152 +329,7 @@
                return null;
            }
        }
#if iOS
        /// <summary>
        /// 获取iOS-APP版本信息
        /// </summary>
        /// <returns>The https app version async.</returns>
        public async System.Threading.Tasks.Task<ResponseEntity.ResultPack> RequestHttpsiOSAppVersionAsync()
        {
            try
            {
                var webClient = new WebClient { };
                var result = await webClient.DownloadDataTaskAsync("https://itunes.apple.com/lookup?id=1461693569");
                if (result == null)
                {
                    return null;
                }
                return Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseEntity.ResultPack>(Encoding.UTF8.GetString(result));
            }
            catch
            {
                return null;
            }
        }
        /// <summary>
        /// 跳转到APP Store
        /// </summary>
        public void OpenUrl()
        {
            Uri url = new Uri("https://itunes.apple.com/cn/app/hdl-home/id1461693569?mt=8");
            UIKit.UIApplication.SharedApplication.OpenUrl(url);
        }
#elif Android
        /// <summary>
        /// 获取 Android-APP 版本信息
        /// </summary>
        /// <returns>The https app version async.</returns>
        public async System.Threading.Tasks.Task<ResponseEntity.ApkInfoOBJ> RequestHttpsAndroidAppVersionAsync()
        {
            try
            {
                var requestOBJ = new SendDataToServer.GetAndroidApkInfoOBJ
                {
                    Name = "ZigbeeApp",
                    RequestVersion = CodeIDString
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestOBJ);
                var result = await RequestHttpsZigbeeAsync("FirmwareMana/DetectionPlatformUploadFirmware", System.Text.Encoding.UTF8.GetBytes(requestJson));
                if (result == null)
                {
                    return null;
                }
                if (result.StateCode.ToUpper() == "SUCCESS")
                {
                    if (result.ResponseData == null)
                    {
                        return null;
                    }
                    var responeData = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseEntity.ApkInfoRes>(result.ResponseData.ToString());
                    if (responeData == null || responeData.pageData == null || responeData.pageData.Count == 0)
                    {
                        return null;
                    }
                    int MaxIndex = 0;
                    int NewVersion = 0;
                    for (int i = 0; i < responeData.pageData.Count; i++)
                    {
                        var apkInfo = responeData.pageData[i];
                        var version = int.Parse(apkInfo.FirmwareVersion.Replace(".", ""));
                        if (version > NewVersion)
                        {
                            NewVersion = version;
                            MaxIndex = i;
                        }
                    }
                    return responeData.pageData[MaxIndex];
                }
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        /// <summary>
        /// 下载安装apk
        /// </summary>
        /// <returns>The load apk async.</returns>
        /// <param name="requestUrl">请求链接</param>
        /// <param name="byteData">请求参数</param>
        public System.Threading.Tasks.Task<byte[]> DownLoadApkAsync(string requestUrl, byte[] byteData)
        {
            try
            {
                AbountForm.instance.webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                AbountForm.instance.webClient.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token);
                AbountForm.instance.webClient.UploadProgressChanged += Client_DownloadProgressChanged;
                AbountForm.instance.webClient.UploadDataCompleted += Client_UploadCompleted;
                var result = AbountForm.instance.webClient.UploadDataTaskAsync($"{RequestHttpsHost}/{requestUrl}", "POST", byteData);
                if (result == null)
                {
                    return null;
                }
                return result;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
            }
        }
        /// <summary>
        /// apk下载进度
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">E.</param>
        void Client_DownloadProgressChanged(object sender, UploadProgressChangedEventArgs e)
        {
            System.Console.WriteLine($"当前进度--{(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)} % --BytesReceived--{e.BytesReceived}--totalByte{e.TotalBytesToReceive}");
            if (e.BytesReceived <= ApkBytesTotalLength)
            {
                Application.RunOnMainThread(() =>
                {
                    //Loading.Start($"{(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)} %");
                    AbountForm.instance.seekBar.Progress = (int)(e.BytesReceived / (float)ApkBytesTotalLength * 100);
                    AbountForm.instance.seekBarTitle.Text = $"{(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)}%";
                });
            }
        }
        void Client_UploadCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            System.Console.WriteLine("下载apk完成");
            //Application.RunOnMainThread(Loading.Hide);
        }
        /// <summary>
        /// 取消下载apk
        /// </summary>
        public static void CancelDownLoadApkAsync()
        {
            AbountForm.instance.webClient?.CancelAsync();
            System.Console.WriteLine("取消下载apk");
        }
#endif
        /// <summary>
        /// 服务器获取数据失败提示
        /// </summary>
ZigbeeApp/Shared/Common/Device.cs
@@ -72,6 +72,10 @@
        /// </summary>
        private Dictionary<string, string> dicDeviceModelIdChanged = null;
        /// <summary>
        /// 图片共有(keys:指定设备的具体类型 value:指定共有对象的具体类型)
        /// </summary>
        private Dictionary<string, string> dicPictrueShard = null;
        /// <summary>
        /// 本地所有设备的缓存(非公开)
        /// </summary>
        private Dictionary<string, CommonDevice> dicAllDevice = new Dictionary<string, CommonDevice>();
@@ -1039,6 +1043,13 @@
            //获取它属于什么类型的设备
            var myDeviceType = this.GetMyDeviceEnumInfo(listdevice);
            string strConcrete = Enum.GetName(typeof(DeviceConcreteType), myDeviceType.ConcreteType);
            //图片共有
            if (this.dicPictrueShard.ContainsKey(strConcrete) == true)
            {
                strConcrete = this.dicPictrueShard[strConcrete];
            }
            string strType = strConcrete.Replace("_", string.Empty);
            //将类型转为图片地址
            string imageFilePath = "RealDevice/" + strType + ".png";
@@ -1111,6 +1122,12 @@
        {
            //将具体类型转字符串
            string strSpecific = Enum.GetName(typeof(DeviceConcreteType), specificType);
            //图片共有
            if (this.dicPictrueShard.ContainsKey(strSpecific) == true)
            {
                strSpecific = this.dicPictrueShard[strSpecific];
            }
            string strType = strSpecific.Replace("_", string.Empty);
            //将类型转为图片地址
            string imageFilePath = "Device/" + strType + ".png";
@@ -2097,6 +2114,12 @@
            this.dicDeviceModelIdChanged["MULTI-MOTI--EA04"] = "MSPIR01/M-ZB.10";//红外传感器
            this.dicDeviceModelIdChanged["MULTI-WATE--EA02"] = "MSW01/M-ZB.10";//水浸传感器
            this.dicDeviceModelIdChanged["MULTI-BURO--EA06"] = "MBU01/M-ZB.10";//紧急按键
            //需要共有的图片对象
            this.dicPictrueShard = new Dictionary<string, string>();
            this.dicPictrueShard["ButtonPanel_SimpleFour"] = "ButtonPanel_Four";//简约4按键面板 沿用 4按键的图标
            this.dicPictrueShard["ButtonPanel_SimpleThree"] = "ButtonPanel_Three";//简约3按键面板 沿用 3按键的图标
            this.dicPictrueShard["ButtonPanel_SimpleTwo"] = "ButtonPanel_Two";//简约2按键面板 沿用 2按键的图标
        }
        #endregion
ZigbeeApp/Shared/Common/Room.cs
@@ -891,6 +891,9 @@
            room.Save();
            //更改自动备份
            HdlAutoBackupLogic.AddOrEditorFile(room.FileName);
            //递归:删除掉以前的旧数据导致的多个房间的问题
            this.DeleteDevice(device);
        }
        #endregion
ZigbeeApp/Shared/Common/SendDataToServer.cs
@@ -578,5 +578,23 @@
            public string DeviceType;
        }
        #endregion
        #region  定时上传实时GPS信息
        /// <summary>
        /// 定时上传实时GPS信息
        /// </summary>
        public class ReceiveAppLatAndLonObj
        {
            /// <summary>
            /// 经度
            /// </summary>
            public string Latitude;
            /// <summary>
            /// 纬度
            /// </summary>
            public string Longitude;
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/Device/Account/AccountForgetPWD.cs
@@ -172,6 +172,7 @@
        {
            phoneEmailForm.SelectedPhone.IsSelected = phoneEmailForm.SelectedEmail.IsSelected = false;
            resetBtn.Enable = resetBtn.IsSelected = false;
            errorBtn.Text = string.Empty;
            (sender as Button).IsSelected = true;
            if ((sender as Button).Tag.ToString() == "Phone")
            {
ZigbeeApp/Shared/Phone/Device/Account/AccountLogic.cs
@@ -1,4 +1,5 @@
using System;
using System.Text;
using System.Text.RegularExpressions;
using Shared.Common;
@@ -97,5 +98,89 @@
        }
        #endregion
        #region ◆ 经纬度__________________________
        /// <summary>
        /// ReceiveAppLatAndLon
        /// </summary>
        /// <param name="lat"></param>
        /// <param name="lon"></param>
        public async void ReceiveAppLatAndLon(string lat, string lon)
        {
            try
            {
                var requestObj = new SendDataToServer.ReceiveAppLatAndLonObj
                {
                    Latitude = lat,
                    Longitude = lon
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
                var revertObj = await RequestHttpsZigbeeAsync("ProcessRange/ReceiveAppLatAndLon", System.Text.Encoding.UTF8.GetBytes(requestJson));
                //if (revertObj.StateCode.ToUpper() == "SUCCESS")
                //{
                //    System.Console.WriteLine("上传位置成功" + lat + lon);
                //}
            }
            catch { }
        }
        /// <summary>
        /// 请求服务器方法
        /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
        /// </summary>
        /// <param name="requestUrl">请求Url</param>
        /// <param name="byteData">请求的的数据</param>
        /// <returns>得到响应的数据</returns>
        public async System.Threading.Tasks.Task<Shared.Common.ResponseEntity.ResponsePack> RequestHttpsZigbeeAsync(string requestUrl, byte[] byteData)
        {
            string result = await RequestHttpsZigbeeResultAsync(requestUrl, byteData);
            if (result != null)
            {
                try
                {
                    var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result);
                    return data;
                }
                catch (Exception ex)
                {
                    System.Console.WriteLine(ex.Message);
                }
            }
            return null;
        }
        /// <summary>
        /// 请求服务器方法
        /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
        /// </summary>
        /// <param name="requestUrl">请求Url</param>
        /// <param name="byteData">请求的的数据</param>
        /// <returns>得到响应的数据</returns>
        public async System.Threading.Tasks.Task<string> RequestHttpsZigbeeResultAsync(string requestUrl, byte[] byteData)
        {
            var result = await RequestHttpsZigbeeBytesResultAsync(requestUrl, byteData);
            if (result != null)
            {
                return Encoding.UTF8.GetString(result);
            }
            return null;
        }
        /// <summary>
        /// 请求服务器方法
        /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
        /// </summary>
        /// <param name="requestUrl">请求Url</param>
        /// <param name="byteData">请求的的数据</param>
        /// <param name="requestMethod">POST 或者 GET 等等</param>
        /// <returns>得到响应的数据</returns>
        public async System.Threading.Tasks.Task<byte[]> RequestHttpsZigbeeBytesResultAsync(string requestUrl, byte[] byteData, string requestMethod = "POST")
        {
            //请求Url的完成路径
            var fullUrl = $"{CommonPage.RequestHttpsHost}/{requestUrl}";
            return await CommonPage.Instance.DoRequestZigbeeHttpsInterface(fullUrl, byteData, Config.Instance.LoginToken, requestMethod);
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/Device/Account/AccountLogin.cs
@@ -387,6 +387,7 @@
                            Config.Instance.MD5PWD = revertData.MD5PWD;
                            Config.Instance.Guid = revertData.Guid;
                            Config.Instance.LoginDateTime = DateTime.Now;
                            Config.Instance.LoginToken = revertData.Token;
                            if (Config.Instance.AccountList.Find((obj) => obj == revertData.Account) == null)
                            {
                                Config.Instance.AccountList.Add(revertData.Account);
@@ -572,7 +573,7 @@
                            { IsBackground = true }.Start();
                        }
                    };
            //}
                //}
            //};
#endif
ZigbeeApp/Shared/Phone/Device/Account/AccountLoginByCode.cs
@@ -311,6 +311,7 @@
                        Config.Instance.Guid = revertData.Guid;
                        Config.Instance.MD5PWD = revertData.MD5PWD;
                        Config.Instance.LoginDateTime = DateTime.Now;
                        Config.Instance.LoginToken = revertData.Token;
                        if (Config.Instance.AccountList.Find((obj) => obj == revertData.Account) == null)
                        {
                            Config.Instance.AccountList.Add(revertData.Account);
ZigbeeApp/Shared/Phone/Device/Category/Category.cs
@@ -485,8 +485,9 @@
                Gravity = Gravity.CenterVertical,
                TextAlignment = TextAlignment.CenterLeft,
                TextID = R.MyInternationalizationString.Category,
                TextSize = 20,
                TextSize = 24,
                TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
                IsBold=true
            };
            topView.AddChidren(title);
ZigbeeApp/Shared/Phone/Device/Category/CategoryAddScene.cs
@@ -250,8 +250,17 @@
                            };
                        }
                    }
                }
                if (sceneTargetDevicesList.Count > 2)
                {
                    var targetRowLayout = new RowLayout()
                    {
                        Height = Application.GetRealHeight(300),
                        LineColor = ZigbeeColor.Current.GXCBackgroundColor,
                        BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
                    };
                    TargetListScrolView.AddChidren(targetRowLayout);
                }
            }
        }
@@ -670,15 +679,18 @@
            EventHandler<MouseEventArgs> targetAddHander = (sender, e) =>
            {
                if (curRoom == null)
                //if (curRoom == null)
                //{
                //    RoomCommon.ShowTipNoRoom();
                //    return;
                //}
                if(curRoom != null)
                {
                    RoomCommon.ShowTipNoRoom();
                    return;
                }
                if (curRoom.IsSharedRoom)
                {
                    RoomCommon.ShowTipRoomIsShared();
                    return;
                    if (curRoom.IsSharedRoom)
                    {
                        RoomCommon.ShowTipRoomIsShared();
                        return;
                    }
                }
                int selectRow_Height = 150;
@@ -1115,7 +1127,6 @@
                    }
                }
            };
            #endregion
ZigbeeApp/Shared/Phone/Device/CommonForm/ButtonLineForm.cs
@@ -101,6 +101,7 @@
        {
            NameBtn.IsSelected = Line.IsSelected = statu;
            NameBtn.TextSize = statu ? CommonFormResouce.TextSize_Selected : CommonFormResouce.TextSize;
            NameBtn.IsBold = statu;
        }
    }
}
ZigbeeApp/Shared/Phone/Device/CommonForm/DeviceInfoRow.cs
@@ -54,7 +54,7 @@
            NameText = new Button
            {
                X = Application.GetRealWidth(300),
                X = Application.GetRealWidth(350),
                Width = Application.GetRealWidth(600),
                Height = Application.GetRealHeight(80),
                Gravity = Gravity.CenterVertical,
@@ -106,6 +106,15 @@
            SetTitle(Language.StringByID(title));
        }
        /// <summary>
        /// SetTitleColor
        /// </summary>
        /// <param name="color"></param>
        public void SetTitleColor(uint color)
        {
            NameText.TextColor = color;
        }
        /// <summary>
        /// SetName
@@ -135,12 +144,21 @@
        }
        /// <summary>
        ///
        /// HideNext
        /// </summary>
        /// <param name="hiden"></param>
        public void HideNext(bool hiden)
        {
            NextBtn.Visible = !hiden;
        }
        /// <summary>
        /// CanClick
        /// </summary>
        /// <param name="canClick"></param>
        public void CanClick(bool canClick)
        {
            ClickBtn.Enable = canClick;
        }
    }
}
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneMainView.cs
old mode 100644 new mode 100755
@@ -131,7 +131,7 @@
            CollectButton = new Button
            {
                X = Application.GetMinRealAverage(340),
                X = Application.GetMinRealAverage(350),
                Y = Application.GetMinRealAverage(1),
                Width = Application.GetMinRealAverage(107),
                Height = Application.GetMinRealAverage(107),
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneTargetFunctionRow.cs
@@ -54,7 +54,7 @@
            {
                X = Application.GetRealWidth(219),
                Y = Application.GetRealHeight(14),
                Width = Application.GetRealWidth(300),
                Width = Application.GetRealWidth(500),
                Height = Application.GetRealHeight(58),
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                TextAlignment = TextAlignment.CenterLeft,
ZigbeeApp/Shared/Phone/Device/CommonForm/TopFrameLayout.cs
@@ -118,13 +118,15 @@
        {
            topTitle = new Button
            {
                X=Application.GetRealWidth(164),
                X = Application.GetRealWidth(164),
                Height = Application.GetRealHeight(CommonFormResouce.TopFrameLayout_Height - CommonFormResouce.TopStatuFrameLayout_Height),
                Width = Application.GetRealWidth(CommonFormResouce.TopTitle_Width),
                TextSize = CommonFormResouce.TopTitle_TextSize,
                TextColor = ZigbeeColor.Current.GXCTitleBlackTitle,
                TextAlignment=TextAlignment.CenterLeft
                TextAlignment = TextAlignment.CenterLeft,
                IsBold = true,
            };
            topView.AddChidren(topTitle);
        }
        /// <summary>
ZigbeeApp/Shared/Phone/Device/Room/RoomManagement.cs
@@ -183,8 +183,7 @@
        private void ShowUnallocatedRoom_MouseUpEvent(object sender,MouseEventArgs mouseEventArgs)
        {
            var unalloctedRoom = new UnallocatedRoom();
            HomePage.Instance.AddChidren(unalloctedRoom);
            HomePage.Instance.PageIndex += 1;
            AddChidren(unalloctedRoom);
            unalloctedRoom.Show();
        }
    }
ZigbeeApp/Shared/Phone/UserCenter/Abount/AbountForm.cs
old mode 100755 new mode 100644
@@ -12,46 +12,40 @@
    /// </summary>
    public class AbountForm : EditorCommonForm
    {
        #region **变量*****************************
        #region ◆ 变量____________________________
        /// <summary>
        /// 是否正在更新中
        /// </summary>
        public bool isUpdating=false;
        public bool isUpdating;
        /// <summary>
        /// The web client.
        /// </summary>
        public WebClient webClient=new WebClient { };
        /// <summary>
        /// 进度条
        /// </summary>
        public HorizontalSeekBar seekBar;
        /// <summary>
        /// 进度百分比
        /// </summary>
        public Button seekBarTitle;
        /// <summary>
        /// 取消下载按钮
        /// </summary>
        public Button cancelDownLoadBtn;
        /// <summary>
        /// 更新按钮
        /// </summary>
        public Button updateBtn;
        /// <summary>
        /// 更新中
        /// </summary>
        public Button updatingBtn;
        /// <summary>
        /// The instance.
        /// distributedMark
        /// </summary>
        public static AbountForm instance;
        public string distributedMark;
        /// <summary>
        /// updateRow
        /// </summary>
        public DeviceInfoRow updateRow;
        /// <summary>
        /// 下载安卓apk的byte长度
        /// </summary>
        public long ApkBytesTotalLength = 0;
        #endregion
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Shared.Phone.UserCenter.Abount.AbountForm"/> class.
        /// </summary>
        public AbountForm()
        {
            instance = this;
        }
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
@@ -59,7 +53,7 @@
        public void ShowForm()
        {
            //设置标题信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uVersionInformation));
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAboutMe));
            //初始化中部控件
            this.InitMiddleFrame();
        }
@@ -69,30 +63,28 @@
        public override void CloseFormBefore()
        {
#if Android
            if(isUpdating==true)
            {
                var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CancelUpdating), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
                alert.Show();
                alert.ResultEventHandler += (send, e) =>
                {
                    if (e)
                    {
                        updateBtn.Visible = true;
            //if (isUpdating == true)
            //{
                //var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CancelUpdating), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
                //alert.Show();
                //alert.ResultEventHandler += (send, e) =>
                //{
                //    if (e)
                //    {
                        SetDownLoadBtnNoVisible();
                        CommonPage.CancelDownLoadApkAsync();
                        CancelDownLoadApkAsync();
                        base.CloseFormBefore();
                    }
                    else
                    {
                        return;
                    }
                };
            }
            else
            {
                Phone.UserView.HomePage.Instance.ScrollEnabled = true;
                base.CloseFormBefore();
            }
                    //}
            //        else
            //        {
            //            return;
            //        }
            //    };
            //}
            //else
            //{
            //    base.CloseFormBefore();
            //}
#elif iOS
           base.CloseFormBefore();
#endif
@@ -102,288 +94,290 @@
        /// </summary>
        private void InitMiddleFrame()
        {
            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            var logoFrameLayout = new FrameLayout
            {
                Height = Application.GetRealHeight(484),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
            };
            bodyFrameLayout.AddChidren(logoFrameLayout);
            var logoBackground = new FrameLayout
            {
                Y = Application.GetRealHeight(104),
                Width = Application.GetMinRealAverage(167),
                Height = Application.GetMinRealAverage(167),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor,
                Radius = (uint)Application.GetRealHeight(37),
            };
            logoFrameLayout.AddChidren(logoBackground);
            var logoBtn = new Button()
            {
                Width = Application.GetMinRealAverage(270),
                Height = Application.GetMinRealAverage(270),
                Y = Application.GetRealHeight(100),
                UnSelectedImagePath = "Logo/Logo.png",
                Gravity = Gravity.CenterHorizontal
                Width = Application.GetMinRealAverage(144),
                Height = Application.GetMinRealAverage(144),
                UnSelectedImagePath = "Account/Logo_White.png",
                Gravity = Gravity.Center
            };
            bodyFrameLayout.AddChidren(logoBtn);
            logoBackground.AddChidren(logoBtn);
            var nameBtn = new Button()
            {
                Width = Application.GetMinRealAverage(700),
                Height = Application.GetMinRealAverage(100),
                Y = Application.GetRealHeight(100)+logoBtn.Bottom,
                Y = Application.GetRealHeight(294),
                Width = Application.GetRealWidth(700),
                Height = Application.GetRealHeight(60),
                Gravity = Gravity.CenterHorizontal,
                Text="HDL Home",
                TextSize=20,
                TextColor=ZigbeeColor.Current.GXCTextBlackColor
                Text = "HDL Home",
                TextSize = 15,
                TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor
            };
            bodyFrameLayout.AddChidren(nameBtn);
            logoFrameLayout.AddChidren(nameBtn);
            var versionBtn = new Button()
            {
                Width = Application.GetMinRealAverage(700),
                Height = Application.GetMinRealAverage(100),
                Y = Application.GetRealHeight(10) + nameBtn.Bottom,
                Y = Application.GetRealHeight(366),
                Width = Application.GetRealWidth(700),
                Height = Application.GetRealHeight(50),
                Gravity = Gravity.CenterHorizontal,
                Text = $"v{CommonPage.CodeIDString}",
                TextSize = 14,
                TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor
                Text = $"{Language.StringByID(R.MyInternationalizationString.VersionCode)} {CommonPage.CodeIDString}",
                TextSize = 12,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor
            };
            bodyFrameLayout.AddChidren(versionBtn);
            logoFrameLayout.AddChidren(versionBtn);
            updateBtn = new Button()
            var versionFL = new FrameLayout
            {
                Y= Application.GetRealHeight(50)+versionBtn.Bottom,
                Width = Application.GetMinRealAverage(700),
                Gravity = Gravity.CenterHorizontal,
                Height =Application.GetRealHeight(Shared.Common.CommonPage.ButtonHeight),
                TextID=R.MyInternationalizationString.Update,
                TextColor=ZigbeeColor.Current.GXCTextBlueColor
                Y = Application.GetRealHeight(510),
                Height = Application.GetRealHeight(300),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
            };
            bodyFrameLayout.AddChidren(updateBtn);
            updateBtn.MouseUpEventHandler += GetVersion;
            bodyFrameLayout.AddChidren(versionFL);
            seekBar = new HorizontalSeekBar()
            var SLARow = new DeviceInfoRow(12);
            SLARow.Init();
            SLARow.SetTipTitle(R.MyInternationalizationString.SLA);
            SLARow.NameText.TextAlignment = TextAlignment.CenterRight;
            versionFL.AddChidren(SLARow);
            SLARow.ClickBtn.MouseUpEventHandler += (sender, e) =>
            {
                Y = updateBtn.Bottom + Application.GetRealHeight(50),
                Width = Application.GetRealWidth(750),
                Height = Application.GetRealHeight(80),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCSliderUnSelectedColor,
                ThumbColor = 0x00000000,
                ProgressColor = ZigbeeColor.Current.GXCButtonBlueColor,
                Max = 100,
                Progress = 0,
                IsCanScrolled=false,
                IsCanMove=false
                var slaForm = new SLAForm();
                slaForm.AddForm();
            };
            bodyFrameLayout.AddChidren(seekBar);
            seekBarTitle = new Button()
            updateRow = new DeviceInfoRow(12 + 127 + 12);
            updateRow.Init();
            updateRow.SetTipTitle(R.MyInternationalizationString.UpdateVersion);
            updateRow.NameText.TextAlignment = TextAlignment.CenterRight;
            updateRow.HideLine(true);
            updateRow.SetTitle(R.MyInternationalizationString.TheAppVersionIsNewest);
            updateRow.CanClick(false);
            updateRow.SetTitleColor(ZigbeeColor.Current.GXCTextGrayColor);
            versionFL.AddChidren(updateRow);
            updateRow.ClickBtn.MouseUpEventHandler += (sender, e) =>
            {
                Y = updateBtn.Bottom + Application.GetRealHeight(50),
                X= seekBar.Right+Application.GetRealWidth(10),
                Width = Application.GetRealWidth(150),
                Height = Application.GetRealHeight(80),
                Text = $"{seekBar.Progress}%",
                TextAlignment=TextAlignment.CenterLeft,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                UpdateVersion();
            };
            bodyFrameLayout.AddChidren(seekBarTitle);
            updatingBtn = new Button()
            {
                Y = seekBar.Bottom + Application.GetRealHeight(20),
                Width = Application.GetRealWidth(300),
                Height = Application.GetRealHeight(80),
                TextID= R.MyInternationalizationString.Updating,
                TextAlignment = TextAlignment.Center,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                Y = Application.GetRealHeight(994),
                Width = Application.GetRealWidth(556),
                Height = Application.GetRealHeight(106),
                Radius=(uint)Application.GetRealHeight(53),
                BackgroundColor=ZigbeeColor.Current.GXCDailogBackGroundColor,
                TextID = R.MyInternationalizationString.Updating,
                TextSize=15,
                TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                Gravity=Gravity.CenterHorizontal
            };
            bodyFrameLayout.AddChidren(updatingBtn);
            cancelDownLoadBtn = new Button()
            {
                TextID = R.MyInternationalizationString.Cancel,
                TextColor = ZigbeeColor.Current.GXCTextBlueColor,
                Height = Application.GetRealHeight(80),
                Width = Application.GetRealWidth(500),
                Gravity = Gravity.CenterHorizontal,
                Y = updatingBtn.Bottom + Application.GetRealHeight(500)
            };
            bodyFrameLayout.AddChidren(cancelDownLoadBtn);
#if Android
            cancelDownLoadBtn.MouseUpEventHandler += CancelDownLoadApk;
#endif
            SetDownLoadBtnNoVisible();
            CheckVersion();
        }
        /// <summary>
        /// CheckVersion
        /// </summary>
        private void CheckVersion()
        {
            new System.Threading.Thread(async () =>
            {
                var re = await CanUpdateAsync();
                if (re)
                {
                    Application.RunOnMainThread(() =>
                    {
                        updateRow.CanClick(true);
                        updateRow.SetTitleColor(ZigbeeColor.Current.GXCButtonSelectedColor);
                        updateRow.SetTitle(R.MyInternationalizationString.Update);
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// 设置进度控件不可见
        /// </summary>
        public void SetDownLoadBtnNoVisible()
        private void SetDownLoadBtnNoVisible()
        {
            Phone.UserView.HomePage.Instance.ScrollEnabled = true;
            isUpdating = false;
            updateBtn.Visible = true;
            seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = false;
            updatingBtn.Visible = false;
        }
        /// <summary>
        /// 设置进度控件可见
        /// </summary>
        public void SetDownLoadBtnVisible()
        private void SetDownLoadBtnVisible()
        {
            Phone.UserView.HomePage.Instance.ScrollEnabled = false;
            isUpdating = true;
            updateBtn.Visible = false;
            seekBar.Visible = seekBarTitle.Visible = cancelDownLoadBtn.Visible = updatingBtn.Visible = true;
            updatingBtn.Visible = true;
            updateRow.CanClick(false);
        }
        /// <summary>
        /// Gets the version.
        /// 检查版本
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">E.</param>
        private async void GetVersion(object sender, MouseEventArgs e)
        /// <returns></returns>
        private async System.Threading.Tasks.Task<bool> CanUpdateAsync()
        {
#if iOS
                try
                {
                    CommonPage.Loading.Start();
                    var versionResult = await Shared.Common.CommonPage.Instance.RequestHttpsiOSAppVersionAsync();
                    if (versionResult == null || versionResult.Results == null)
                    {
                        CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                        return;
                    }
                    var results = Newtonsoft.Json.Linq.JArray.Parse(versionResult.Results.ToString());
                    if (results[0] == null)
                    {
                        CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                        return;
                    }
                    var newVersion = results[0]["version"]?.ToString();
                    var updateContent = results[0]["releaseNotes"]?.ToString();
                    if (newVersion != CommonPage.CodeIDString)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            var alert = new Alert(Language.StringByID(R.MyInternationalizationString.UpdateContent), updateContent, Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
                            alert.Show();
                            alert.ResultEventHandler += (sender1, e1) =>
                            {
                                if (e1)
                                {
                                    CommonPage.Instance.OpenUrl();
                                }
                            };
                        });
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.TheAppVersionIsNewest), Language.StringByID(R.MyInternationalizationString.Close));
                            alert.Show();
                        });
                    }
                }
                catch
                {
                }
                finally
                {
                    CommonPage.Loading.Hide();
                }
            try
            {
                CommonPage.Loading.Start();
                var versionResult = await RequestHttpsiOSAppVersionAsync();
                if (versionResult == null || versionResult.Results == null)
                {
                    return false;
                }
                var results = Newtonsoft.Json.Linq.JArray.Parse(versionResult.Results.ToString());
                if (results[0] == null)
                {
                    return false;
                }
                var newVersion = results[0]["version"]?.ToString();
                var updateContent = results[0]["releaseNotes"]?.ToString();
                if (newVersion != CommonPage.CodeIDString)
                {
                    return true;
                }
                return false;
            }
            catch
            {
                return false;
            }
#elif Android
            try
            {
                CommonPage.Loading.Start();
                var versionResult = await CommonPage.Instance.RequestHttpsAndroidAppVersionAsync();
                var versionResult = await RequestHttpsAndroidAppVersionAsync();
                if (versionResult == null)
                {
                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                    return;
                    return false;
                }
                if (int.Parse(versionResult.FirmwareVersion.Replace(".",""))  > int.Parse(CommonPage.CodeIDString.Replace(".","")))
                if (int.Parse(versionResult.FirmwareVersion.Replace(".", "")) > int.Parse(CommonPage.CodeIDString.Replace(".", "")))
                {
                    var alert = new Alert(Language.StringByID(R.MyInternationalizationString.UpdateContent), versionResult.Remarks, Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
                    alert.Show();
                    alert.ResultEventHandler += async (sender1, e1) =>
                    {
                        if (e1)
                        {
                            try
                            {
                                SetDownLoadBtnVisible();
                                var requestObj = new SendDataToServer.DownLoadAndroidApk
                                {
                                    RequestVersion = CommonPage.RequestVersion,
                                    DistributedMark = versionResult.DistributedMark
                                };
                                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
                                var bytesTotalLengthResult = await CommonPage.Instance.RequestHttpsZigbeeAsync("FirmwareMana/DownloadPlatformUploadFirmwarePreLength", Encoding.UTF8.GetBytes(requestJson));
                                if (bytesTotalLengthResult == null || bytesTotalLengthResult.ResponseData == null)
                                {
                                    SetDownLoadBtnNoVisible();
                                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                                    return;
                                }
                                var bytesTotalLength = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(bytesTotalLengthResult.ResponseData.ToString());
                                if (bytesTotalLength == 0)
                                {
                                    SetDownLoadBtnNoVisible();
                                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                                    return;
                                }
                                CommonPage.ApkBytesTotalLength = bytesTotalLength;
                                var bytes = await CommonPage.Instance.DownLoadApkAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(requestJson));
                                if (bytes == null)
                                {
                                    SetDownLoadBtnNoVisible();
                                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                                    return;
                                }
                                if(bytes.ToString().Contains("DownloadFail"))
                                {
                                    SetDownLoadBtnNoVisible();
                                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
                                    return;
                                }
                                var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "home.apk");
                                Shared.IO.FileUtils.WriteFileByBytes(path, bytes);
                                Install(Shared.Application.Activity);
                            }
                            catch(Exception ex)
                            {
                                SetDownLoadBtnNoVisible();
                                System.Console.WriteLine($"下载失败--{ex.Message}");
                            }
                        }
                    };
                    distributedMark = versionResult.DistributedMark;
                    return true;
                }
                else
                {
                    var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.TheAppVersionIsNewest), Language.StringByID(R.MyInternationalizationString.Close));
                    alert.Show();
                }
                return false;
            }
            catch (Exception ex)
            {
                SetDownLoadBtnNoVisible();
                System.Console.WriteLine(ex.Message);
            }
            finally
            {
                CommonPage.Loading.Hide();
                return false;
            }
#endif
        }
#if Android
        /// <summary>
        /// Cancels down load apk.
        /// 更新
        /// </summary>
        private void CancelDownLoadApk(object sender,MouseEventArgs mouseEventArgs)
        private async void UpdateVersion()
        {
            var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CancelUpdating), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
            alert.Show();
            alert.ResultEventHandler += (send, e) =>
              {
                  if (e)
                  {
                      isUpdating = false;
                      updateBtn.Visible = true;
                      SetDownLoadBtnNoVisible();
                      CommonPage.CancelDownLoadApkAsync();
                  }
              };
#if iOS
            OpenUrl();
#elif Android
            try
            {
                var requestObj = new SendDataToServer.DownLoadAndroidApk
                {
                    RequestVersion = CommonPage.RequestVersion,
                    DistributedMark = distributedMark
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
                var bytesTotalLengthResult = await CommonPage.Instance.RequestHttpsZigbeeAsync("FirmwareMana/DownloadPlatformUploadFirmwarePreLength", Encoding.UTF8.GetBytes(requestJson));
                if (bytesTotalLengthResult == null || bytesTotalLengthResult.ResponseData == null)
                {
                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                    return;
                }
                var bytesTotalLength = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(bytesTotalLengthResult.ResponseData.ToString());
                if (bytesTotalLength == 0)
                {
                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                    return;
                }
                ApkBytesTotalLength = bytesTotalLength;
                var bytes = await DownLoadApkAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(requestJson));
                if (bytes == null)
                {
                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.UpdateAppFail);
                    return;
                }
                if (bytes.ToString().Contains("DownloadFail"))
                {
                    CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
                    return;
                }
                var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "home.apk");
                Shared.IO.FileUtils.WriteFileByBytes(path, bytes);
                Install(Shared.Application.Activity);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine($"下载失败--{ex.Message}");
            }
#endif
        }
#if iOS
        /// <summary>
        /// 获取iOS-APP版本信息
        /// </summary>
        /// <returns>The https app version async.</returns>
        public async System.Threading.Tasks.Task<Common.ResponseEntity.ResultPack> RequestHttpsiOSAppVersionAsync()
        {
            try
            {
                var webClient = new WebClient { };
                var result = await webClient.DownloadDataTaskAsync("https://itunes.apple.com/lookup?id=1461693569");
                if (result == null)
                {
                    return null;
                }
                return Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.ResultPack>(Encoding.UTF8.GetString(result));
            }
            catch
            {
                return null;
            }
        }
        /// <summary>
        /// 跳转到APP Store
        /// </summary>
        public void OpenUrl()
        {
            Uri url = new Uri("https://itunes.apple.com/cn/app/hdl-home/id1461693569?mt=8");
            UIKit.UIApplication.SharedApplication.OpenUrl(url);
        }
#elif Android
        /// <summary>
        /// Install the specified context.
        /// </summary>
@@ -411,6 +405,127 @@
            }
            context.StartActivity(intent);
        }
        /// <summary>
        /// 获取 Android-APP 版本信息
        /// </summary>
        /// <returns>The https app version async.</returns>
        private async System.Threading.Tasks.Task<Common.ResponseEntity.ApkInfoOBJ> RequestHttpsAndroidAppVersionAsync()
        {
            try
            {
                var requestOBJ = new SendDataToServer.GetAndroidApkInfoOBJ
                {
                    Name = "ZigbeeApp",
                    RequestVersion = CommonPage.CodeIDString
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestOBJ);
                var result = await CommonPage.Instance.RequestHttpsZigbeeAsync("FirmwareMana/DetectionPlatformUploadFirmware", System.Text.Encoding.UTF8.GetBytes(requestJson));
                if (result == null)
                {
                    return null;
                }
                if (result.StateCode.ToUpper() == "SUCCESS")
                {
                    if (result.ResponseData == null)
                    {
                        return null;
                    }
                    var responeData = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.ApkInfoRes>(result.ResponseData.ToString());
                    if (responeData == null || responeData.pageData == null || responeData.pageData.Count == 0)
                    {
                        return null;
                    }
                    int MaxIndex = 0;
                    int NewVersion = 0;
                    for (int i = 0; i < responeData.pageData.Count; i++)
                    {
                        var apkInfo = responeData.pageData[i];
                        var version = int.Parse(apkInfo.FirmwareVersion.Replace(".", ""));
                        if (version > NewVersion)
                        {
                            NewVersion = version;
                            MaxIndex = i;
                        }
                    }
                    return responeData.pageData[MaxIndex];
                }
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        /// <summary>
        /// 下载安装apk
        /// </summary>
        /// <returns>The load apk async.</returns>
        /// <param name="requestUrl">请求链接</param>
        /// <param name="byteData">请求参数</param>
        private System.Threading.Tasks.Task<byte[]> DownLoadApkAsync(string requestUrl, byte[] byteData)
        {
            try
            {
                webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                webClient.Headers.Add(HttpRequestHeader.Authorization, Config.Instance.Token);
                webClient.UploadProgressChanged += Client_DownloadProgressChanged;
                webClient.UploadDataCompleted += Client_UploadCompleted;
                var result = webClient.UploadDataTaskAsync($"{CommonPage.RequestHttpsHost}/{requestUrl}", "POST", byteData);
                if (result == null)
                {
                    return null;
                }
                return result;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
            }
        }
        /// <summary>
        /// apk下载进度
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">E.</param>
        void Client_DownloadProgressChanged(object sender, UploadProgressChangedEventArgs e)
        {
            //System.Console.WriteLine($"当前进度--{(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)} % --BytesReceived--{e.BytesReceived}--totalByte{e.TotalBytesToReceive}");
            if (e.BytesReceived <= ApkBytesTotalLength)
            {
                Application.RunOnMainThread(() =>
                {
                    SetDownLoadBtnVisible();
                    updatingBtn.Text = $"{ Language.StringByID(R.MyInternationalizationString.Updating)} {(int)(e.BytesReceived / (float)ApkBytesTotalLength * 100)}%";
                });
            }
        }
        /// <summary>
        /// Client_UploadCompleted
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Client_UploadCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            System.Console.WriteLine("下载apk完成");
            SetDownLoadBtnNoVisible();
        }
        /// <summary>
        /// 取消下载apk
        /// </summary>
        private void CancelDownLoadApkAsync()
        {
            webClient?.CancelAsync();
            SetDownLoadBtnNoVisible();
            System.Console.WriteLine("取消下载apk");
        }
#endif
    }
}
ZigbeeApp/Shared/Phone/UserCenter/Abount/SLAForm.cs
New file
@@ -0,0 +1,55 @@
using System;
using Shared.Common;
namespace Shared.Phone.UserCenter.Abount
{
    public class SLAForm : EditorCommonForm
    {
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        public void ShowForm()
        {
            //设置标题信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.SLA));
            //初始化中部控件
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化中部控件
        /// </summary>
        private void InitMiddleFrame()
        {
            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            var title = new Button
            {
                X = Application.GetRealWidth(58),
                Y = Application.GetRealHeight(58),
                Width = Application.GetRealWidth(600),
                Height = Application.GetRealHeight(58),
                TextID = R.MyInternationalizationString.SLA_Title,
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                TextSize = 14
            };
            title.IsBold = true;
            bodyFrameLayout.AddChidren(title);
            var detail=new Button
            {
                X = Application.GetRealWidth(58),
                Y = Application.GetRealHeight(164),
                Width = Application.GetRealWidth(942),
                Height = Application.GetRealHeight(800),
                Text = Language.StringByID(R.MyInternationalizationString.SLA_Detail).Replace("{\\r\\n}","\r\n\r\n"),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = ZigbeeColor.Current.GXCTextColor,
                IsMoreLines=true,
                TextSize = 12
            };
            bodyFrameLayout.AddChidren(detail);
        }
    }
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlLogLogic.cs
@@ -94,7 +94,7 @@
        private string GetLogFile(int div)
        {
            //加密,因为这是收集数据,最好不让别人知道这是什么最好
            string fileName = DateTime.Now.ToString("yyyyMMdd");
            string fileName = UserCenterResourse.UserInfo.Account + DateTime.Now.ToString("yyyyMMdd");
            if (div == -1)
            {
                fileName += "Error";
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
@@ -572,41 +572,45 @@
            //先初始化房间
            foreach (string fileName in listFile)
            {
                if (fileName.StartsWith("Room_") == true)
                try
                {
                    //房间文件
                    var byteData = this.GetShardFileContent(fileName);
                    if (byteData != null)
                    if (fileName.StartsWith("Room_") == true)
                    {
                        string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                        var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
                        memberShardInfo.dicShardRoom[fileName] = roomTemp;
                        //房间文件
                        var byteData = this.GetShardFileContent(fileName);
                        if (byteData != null)
                        {
                            string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                            var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
                            memberShardInfo.dicShardRoom[fileName] = roomTemp;
                        }
                    }
                }
                else if (fileName == DirNameResourse.ShardFloorFile)
                {
                    //楼层文件
                    var byteData = this.GetShardFileContent(fileName);
                    if (byteData != null)
                    else if (fileName == DirNameResourse.ShardFloorFile)
                    {
                        string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                        memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
                        //楼层文件
                        var byteData = this.GetShardFileContent(fileName);
                        if (byteData != null)
                        {
                            string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                            memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
                        }
                    }
                }
                else if (fileName.StartsWith("Device_") == true)
                {
                    string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                    string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3]));
                    this.dicShardDeviceFile[mainKeys] = fileName;
                    else if (fileName.StartsWith("Device_") == true)
                    {
                        string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
                        string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3]));
                        this.dicShardDeviceFile[mainKeys] = fileName;
                    //设备文件
                    listDeviceFile.Add(fileName);
                        //设备文件
                        listDeviceFile.Add(fileName);
                    }
                    else if (fileName.StartsWith("Scene_") == true)
                    {
                        //场景文件
                        listSceneFile.Add(fileName);
                    }
                }
                else if (fileName.StartsWith("Scene_") == true)
                {
                    //场景文件
                    listSceneFile.Add(fileName);
                }
                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
            }
            //设置房间里面设备的UI对象(因为这个东西是反序列化出来的,设备UI对象是不序列化对象)
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs
@@ -90,10 +90,36 @@
            {
                List<Shared.Phone.UserCenter.MemberInfoRes> localAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
                List<Shared.Phone.UserCenter.MemberInfoRes> SubAccounList = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
                //只有主人才有权限获取自己的子账户
                if (UserCenterResourse.UserInfo.AuthorityNo == 1)
                {
                    SubAccounList = await ZigBee.Device.DoorLock.GetSubAccountByDistributedMark();
                    var SubAccounListTemp = await ZigBee.Device.DoorLock.GetSubAccountByDistributedMark();
                    var SubAccounListDictionary = new Dictionary<string, Shared.Phone.UserCenter.MemberInfoRes> { };
                    foreach (var member in SubAccounListTemp)
                    {
                        //判断一个账户绑定了邮箱的情况
                        if (SubAccounListDictionary.ContainsKey(member.DistributedMark) == true
                        || member.Account == UserCenterResourse.UserInfo.Phone
                        || member.Account == UserCenterResourse.UserInfo.Email)
                        {
                            //如果是它自己的话,不显示
                            continue;
                        }
                        //去掉子账户中普通成员,留下拥有管理员权限的成员
                        if (member.AccountType != 1)
                        {
                            continue;
                        }
                        SubAccounListDictionary.Add(member.DistributedMark, member);
                    }
                    foreach (var addMemberID in SubAccounListDictionary.Keys)
                    {
                        SubAccounList.Add(SubAccounListDictionary[addMemberID]);
                    }
                }
                // 注意:SubAccountDistributedMark这个值很有用,“添加门锁”到云端信息中,CloudAccountId如果是子账户,则是SubAccountDistributedMark这个值很有用,如果是管理员或者主人则是登录到G
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/NewGateWayMenuSelectForm.cs
@@ -5,7 +5,22 @@
    /// 添加网关的选择画面
    /// </summary>
    public class NewGateWayMenuSelectForm : EditorCommonForm
    {
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 是否显示提示设置住宅地理位置
        /// </summary>
        private bool showSettion = true;
        /// <summary>
        /// 提示的FrameLayout
        /// </summary>
        private FrameLayout frameTip = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
@@ -81,14 +96,50 @@
                    form.AddForm();
                });
            };
        }
            //如果还没有设置地理位置
            if (Common.Config.Instance.Home.Latitude == 0 && Common.Config.Instance.Home.Longitude == 0)
            {
                this.frameTip = new FrameLayout();
                frameTip.X = Application.GetRealWidth(179);
                frameTip.Y = Application.GetRealHeight(1426);
                frameTip.Height = Application.GetRealHeight(100);
                frameTip.Width = Application.GetRealWidth(714);
                bodyFrameLayout.AddChidren(frameTip);
                var btnIcon = new IconViewControl(58);
                btnIcon.UnSelectedImagePath = "Item/Tips.png";
                frameTip.AddChidren(btnIcon);
                //如果不设置住宅的地理位置,则会影响自动化地理围栏功能的设置
                var btnTip = new NormalViewControl(Application.GetRealWidth(636), Application.GetRealHeight(100), false);
                btnTip.X = btnIcon.Right + Application.GetRealWidth(20);
                btnTip.TextAlignment = TextAlignment.Center;
                btnTip.TextColor = UserCenterColor.Current.TextGrayColor1;
                btnTip.TextSize = 12;
                btnTip.IsMoreLines = true;
                btnTip.Text = Language.StringByID(R.MyInternationalizationString.uNotSetLocationWillAffectTheAutomaticGeofencingFunction);
                frameTip.AddChidren(btnTip);
            }
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 检测住宅经纬度
        /// </summary>
        /// <returns></returns>
        private bool CheckResidencePoint()
        {
            //只弹一次
            if (this.showSettion == false)
            {
                return true;
            }
            this.showSettion = false;
            if (Common.Config.Instance.Home.Latitude == 0 && Common.Config.Instance.Home.Longitude == 0)
            {
                //请前往住宅管理{0}设置住宅的地理位置
@@ -102,6 +153,30 @@
                return false;
            }
            return true;
        }
        }
        #endregion
        #region ■ 界面重新激活事件___________________
        /// <summary>
        /// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
        /// </summary>
        public override int FormActionAgainEvent()
        {
            if (frameTip == null)
            {
                return 0;
            }
            if (Common.Config.Instance.Home.Latitude != 0 || Common.Config.Instance.Home.Longitude != 0)
            {
                //移除掉提示
                frameTip.RemoveFromParent();
                return 1;
            }
            return 1;
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs
@@ -162,7 +162,7 @@
            {
                //静音防区不受布防、撤防影响,防区被{0}触发立即报警,通常不产生声音或{0}其他提示,只发送信息到特定的接收者
                msg = Language.StringByID(R.MyInternationalizationString.uMuteSectorsTipMsg);
                btnIcon.X = Application.GetRealWidth(182);
                btnIcon.X = Application.GetRealWidth(175);
            }
            //内部防区
            else if (zoonID == 4)
ZigbeeApp/Shared/Phone/UserView/HomePage.cs
@@ -174,6 +174,7 @@
                    Config.Instance.MD5PWD = revertData.MD5PWD;
                    Config.Instance.Guid = revertData.Guid;
                    Config.Instance.LoginDateTime = DateTime.Now;
                    Config.Instance.LoginToken = revertData.Token;
                    if (Config.Instance.AccountList.Find((obj) => obj == revertData.Account) == null)
                    {
                        Config.Instance.AccountList.Add(revertData.Account);
ZigbeeApp/Shared/Phone/UserView/UserHomeView.cs
@@ -466,7 +466,8 @@
                TextAlignment = TextAlignment.CenterLeft,
                Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
                TextSize = 24,
                TextColor = ZigbeeColor.Current.GXCTextBlackColor
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                IsBold=true
            };
            if (Config.Instance.Home.IsOthreShare)
            {
@@ -686,7 +687,8 @@
                    SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                    TextID = R.MyInternationalizationString.Scence,
                    IsSelected = true,
                    TextSize=16
                    TextSize=16,
                    IsBold=true
                };
                functionSceneView.AddChidren(sceneBtn);
@@ -721,7 +723,9 @@
                    sceneBtn.IsSelected = false;
                    functionBtn.IsSelected = true;
                    sceneBtn.TextSize = 14;
                    sceneBtn.IsBold = false;
                    functionBtn.TextSize = 16;
                    functionBtn.IsBold = true;
                    RefreshBodyView();
                };
                //选择场景分栏
@@ -730,7 +734,9 @@
                    functionBtn.IsSelected = false;
                    sceneBtn.IsSelected = true;
                    sceneBtn.TextSize = 16;
                    sceneBtn.IsBold = true;
                    functionBtn.TextSize = 14;
                    functionBtn.IsBold = false;
                    RefreshBodyView();
                };
ZigbeeApp/Shared/Phone/UserView/UserPage.cs
@@ -3,7 +3,8 @@
using Shared.Common;
using ZigBee.Device;
using Shared.Phone.Device.AC;
using Shared.Phone.Device.Account;
namespace Shared.Phone.UserView
{
    /// <summary>
@@ -328,6 +329,10 @@
        {
            BackgroundColor = Shared.Common.ZigbeeColor.Current.MainColor;
            ZbGateway.StatusList.Add(this);
            Shared.Application.LocationAction += (lat, lon) =>
            {
                AccountLogic.Instance.ReceiveAppLatAndLon(lat.ToString(), lon.ToString());
            };
        }
        /// <summary>
ZigbeeApp/Shared/Phone/ZigBee/Common/Config.cs
@@ -120,6 +120,11 @@
        }
        /// <summary>
        /// 登录时Token
        /// </summary>
        public string LoginToken = string.Empty;
        /// <summary>
        /// 登录过的帐号信息
        /// </summary>
        public List<string> AccountList = new List<string> { };
ZigbeeApp/Shared/R.cs
@@ -801,7 +801,7 @@
        /// </summary>
        public const int TheAppVersionIsNewest = 10160;
        /// <summary>
        /// 更新
        /// 更新最新版
        /// </summary>
        public const int Update = 10161;
        /// <summary>
@@ -813,13 +813,33 @@
        /// </summary>
        public const int UpdateAppFail = 10163;
        /// <summary>
        /// 更新中...
        /// 正在更新中...
        /// </summary>
        public const int Updating = 10164;
        /// <summary>
        /// 取消更新
        /// </summary>
        public const int CancelUpdating = 10165;
        /// <summary>
        /// 版本号
        /// </summary>
        public const int VersionCode = 10166;
        /// <summary>
        /// 服务协议
        /// </summary>
        public const int SLA = 10167;
        /// <summary>
        /// 版本更新
        /// </summary>
        public const int UpdateVersion = 10168;
        /// <summary>
        /// 协议文本信息内容
        /// </summary>
        public const int SLA_Title = 10169;
        /// <summary>
        /// 协议详细
        /// </summary>
        public const int SLA_Detail = 10170;
        #endregion
@@ -4923,7 +4943,10 @@
        /// 未知楼层
        /// </summary>
        public const int uUnKnownFloor = 15999;
        /// <summary>
        /// 如果不设置住宅的地理位置,则会影响自动化地理围栏功能的设置
        /// </summary>
        public const int uNotSetLocationWillAffectTheAutomaticGeofencingFunction = 16000;
        //★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
        /// <summary>
ZigbeeApp/Shared/Shared.projitems
@@ -120,6 +120,7 @@
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Room\RoomTemperatureSetting.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Room\UnallocatedRoom.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\Abount\AbountForm.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\Abount\SLAForm.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\CommonBase\Common\AccountOption.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\CommonBase\Controls\ClickButtonControls\BottomLeftClickButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\CommonBase\Controls\ClickButtonControls\BottomRightClickButton.cs" />