From 2c7615cd73dfa6a7ca4df975430d2217524513d2 Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期四, 28 九月 2023 11:38:28 +0800
Subject: [PATCH] 2023年09月28日11:38:24

---
 app/src/main/res/layout/activity_change_password.xml                           |    2 
 app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java          |   80 ++-
 app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java                       |    2 
 app/src/main/res/values/strings.xml                                            |    1 
 app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java              |    5 
 app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java                  |   11 
 app/src/main/res/layout/activity_register_account.xml                          |   92 +++
 app/src/main/java/com/hdl/photovoltaic/HDLApp.java                             |    2 
 app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java                  |   37 +
 app/src/main/res/layout/dialog_list.xml                                        |   94 ++++
 app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java                |    2 
 app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java               |   18 
 app/src/main/res/layout/activity_home_login.xml                                |    6 
 app/src/main/java/com/hdl/photovoltaic/widget/ListDialog.java                  |   96 ++++
 app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java            |   12 
 app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java |  503 ++++++++++++++++++++++-
 app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java              |  169 ++++++--
 app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java               |   25 +
 app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java               |   65 ++
 19 files changed, 1,101 insertions(+), 121 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
index 021bd5a..3d9a32f 100644
--- a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
+++ b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -114,7 +114,7 @@
         HDLLinkLocalSdk.getInstance().init(getInstance());
         initSocket();
         //4.鍒濆鍖朞KHttpLog 鏄惁寮�鍚�
-//        setOKHttpLogOpen(isLogEnabled);
+        setOKHttpLogOpen(isLogEnabled);
 
     }
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java b/app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java
index b3e8d5c..6400d93 100644
--- a/app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java
+++ b/app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java
@@ -52,6 +52,10 @@
 
     //鏄惁鏄疊绔处鍙风櫥褰�
     private boolean isB_account;
+
+
+    //鏄惁鏄敤鎴蜂綋楠岃处鍙风櫥褰�
+    private boolean isUserExperience;
     //浣忓畢鏂囦欢鍒楄〃
     public List<String> homeFilePathList = new ArrayList<>();
 
@@ -158,6 +162,14 @@
         isB_account = b;
     }
 
+    public boolean isUserExperience() {
+        return isUserExperience;
+    }
+
+    public void setUserExperience(boolean userExperience) {
+        isUserExperience = userExperience;
+    }
+
     public String getLocalSecret() {
         return localSecret == null ? "" : localSecret;
     }
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java b/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
index fe8fa9b..eab83ff 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
@@ -94,7 +94,7 @@
                         HDLExceptionSubmitUtils.submit(requestUrl, body, e);
                         if (callBack != null) {
                             callBack.onFailure(e);
-                            System.out.println("鍥炲->" + requestUrl + "\r\n" + "{code=" + e.getCode() + ",message=" + e.getMessage() + "}");
+                            System.out.println("鍥炲->" + requestUrl + "\r\n" + "\"{code=\"" + e.getCode() + "," + "\"message=\"" + e.getMsg() + "}");
                         }
                     }
                 });
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
index 2d416d2..8092d99 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -2,12 +2,15 @@
 
 public class HttpApi {
     //region -----鐢ㄦ埛绠$悊---------
+    /**
+     * B绔帴鍙�
+     */
     //鑾峰彇璐﹀彿鍖哄煙淇℃伅
     public static final String POST_RegionByUserAccount = "/smart-footstone/region/regionByUserAccount";
     //鐧诲綍鎺ュ彛
     public static final String POST_Login = "/smart-footstone/user/oauth/login";
     //鐢ㄦ埛鎵惧洖瀵嗙爜 蹇樿瀵嗙爜,閫氳繃閭鍜屾墜鏈哄彿鎵惧洖
-    public static final String POST_FORGET_PROGRAM_PWD = "/smart-footstone/user/oauth/forgetProgramPwd";
+    public static final String B_POST_FORGET_PROGRAM_PWD = "/smart-footstone/user/oauth/forgetProgramPwd";
     //鍙戦�佹秷鎭獙璇佺爜
     public static final String POST_SEND_VERIFICATION = "/smart-footstone/verification/message/send";
     //鏇存敼涓汉瀵嗙爜
@@ -25,7 +28,16 @@
     //鏌ヨ鍥剧墖璺緞
     public static final String POST_GET_IMAGE_URL = "/home-wisdom/app/images/get_image_url";
     //閫�鍑虹櫥褰�
-    public static final String POST_GET_IMAGE_LOGOUT = "basis-footstone/mgmt/user/oauth/logout";
+    public static final String POST_GET_IMAGE_LOGOUT = "/basis-footstone/mgmt/user/oauth/logout";
+    /**
+     * C绔帴鍙�
+     */
+    //閫�鍑虹櫥褰�
+    public static final String C_POST_GET_OAUTH_REGISTER = "/smart-footstone/member/oauth/register";
+    //鐢ㄦ埛鎵惧洖瀵嗙爜 蹇樿瀵嗙爜,閫氳繃閭鍜屾墜鏈哄彿鎵惧洖
+    public static final String C_POST_FORGET_PROGRAM_PWD = "/smart-footstone/member/oauth/forgetPwd";
+
+
     //endregion
     //region -----鐢电珯绠$悊(浣忓畢)---------
     //鐢电珯鍒楄〃
@@ -38,7 +50,7 @@
     public static final String POST_PowerStation_Info = "/home-wisdom/app/powerStation/info";
     //鐢电珯缂栬緫
     public static final String POST_PowerStation_Edit = "/home-wisdom/app/powerStation/edit";
-     //endregion
+    //endregion
 
     //region -----璁惧绠$悊---------
     //娣诲姞閫嗗彉鍣�
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java b/app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java
index 9cbc6cf..f5bf38a 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java
@@ -39,7 +39,10 @@
      * */
     public static final String GATEWAY_INITIALIZE_REMOTE = "/user/%s/custom/gateway/initialize";
     public static final String GATEWAY_FIND_REMOTE = "/base/%s/thing/service/mmv_device_find/down";
-
+    //缃戝叧鏃堕棿璇诲彇
+    public static final String GET_GATEWAY_TIME = "/base/%s/custom/gateway/time/get";
+    //缃戝叧鏃堕棿淇敼
+    public static final String SET_GATEWAY_TIME_EDIT = "/user/%s/custom/gateway/time/edit";
 
     /*
      * 缃戝叧缂栬緫鍛戒护
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
index aee3bf3..bbd321a 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
@@ -110,8 +110,8 @@
      * @param verifyCode    楠岃瘉鐮�
      * @param cloudCallBeak -
      */
-    public void changePassword(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak<Boolean> cloudCallBeak) {
-        String requestUrl = HttpApi.POST_FORGET_PROGRAM_PWD;
+    public void changeBPassword(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak<Boolean> cloudCallBeak) {
+        String requestUrl = HttpApi.B_POST_FORGET_PROGRAM_PWD;
         JsonObject json = new JsonObject();
         if (isPhone) {
             json.addProperty("userPhone", account);//鐢ㄦ埛鎵嬫満鍙� 鎵嬫満鍙峰拰閭蹇呭~鍏朵竴
@@ -121,7 +121,6 @@
         json.addProperty("loginPwd", loginPwd);//鏂板瘑鐮�
         json.addProperty("verifyCode", verifyCode);//楠岃瘉鐮�
 //       json.addProperty("platform", "APP");
-        json.addProperty("grantType", "password");
 
         HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
             @Override
@@ -142,8 +141,131 @@
 
     }
 
+
     /**
-     * 淇敼瀵嗙爜(B绔处鍙�)
+     * 鍒锋柊Token(B绔处鍙�)
+     *
+     * @param account       鎵嬫満鎴栬�呴偖绠�
+     * @param loginPwd      瀵嗙爜
+     * @param cloudCallBeak -
+     */
+    public void refreshToken(String account, String loginPwd, CloudCallBeak<HDLLoginBean> cloudCallBeak) {
+        String requestUrl = HttpApi.POST_Login;
+        JsonObject json = new JsonObject();
+        json.addProperty("grantType", "refresh_token");
+//        json.addProperty("refreshToken", UserConfigManage.getInstance().getRefreshToken());
+        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String jsonStr) {
+                Gson gson = new Gson();
+                HDLLoginBean loginBean = gson.fromJson(jsonStr, HDLLoginBean.class);
+//                    saveUserData(loginBean);
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onSuccess(loginBean);
+                }
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(e);
+                }
+            }
+        });
+    }
+
+
+    // endregion
+
+    // region --------銆怌绔处鍙枫��---------
+
+    /**
+     * 娉ㄥ唽璐﹀彿(C绔处鍙�)
+     * 娉ㄦ剰:B
+     *
+     * @param isPhone       true琛ㄧず鎵嬫満鍙�,鍚﹀垯鏄偖绠�
+     * @param account       璐﹀彿 (鎵嬫満鎴栬�呴偖绠�)
+     * @param loginPwd      瀵嗙爜
+     * @param verifyCode    楠岃瘉鐮�
+     * @param cloudCallBeak -
+     */
+    public void registerAccount(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak<Boolean> cloudCallBeak) {
+        String requestUrl = HttpApi.C_POST_GET_OAUTH_REGISTER;
+        JsonObject json = new JsonObject();
+        if (isPhone) {
+            json.addProperty("memberPhone", account);//鐢ㄦ埛鎵嬫満鍙� 鎵嬫満鍙峰拰閭蹇呭~鍏朵竴
+        } else {
+            json.addProperty("memberEmail", account);
+        }
+        json.addProperty("loginPwd", loginPwd);//鐧婚檰瀵嗙爜锛岄渶瑕丮D5澶勭悊
+        json.addProperty("verifyCode", verifyCode);//楠岃瘉鐮�
+//       json.addProperty("platform", "APP");
+//        json.addProperty("memberName", "memberName");//浼氬憳鏄电О
+
+        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String str) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onSuccess(true);
+                }
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(e);
+                }
+            }
+        });
+
+
+    }
+
+
+    /**
+     * 淇敼瀵嗙爜(C绔处鍙�)
+     *
+     * @param isPhone       true琛ㄧず鎵嬫満鍙�,鍚﹀垯鏄偖绠�
+     * @param account       璐﹀彿 (鎵嬫満鎴栬�呴偖绠�)
+     * @param loginPwd      鏂板瘑鐮�
+     * @param verifyCode    楠岃瘉鐮�
+     * @param cloudCallBeak -
+     */
+    public void changeCPassword(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak<Boolean> cloudCallBeak) {
+        String requestUrl = HttpApi.C_POST_FORGET_PROGRAM_PWD;
+        JsonObject json = new JsonObject();
+        if (isPhone) {
+            json.addProperty("memberPhone", account);//鐢ㄦ埛鎵嬫満鍙� 鎵嬫満鍙峰拰閭蹇呭~鍏朵竴
+        } else {
+            json.addProperty("memberEmail", account);
+        }
+        json.addProperty("loginPwd", loginPwd);//鏂板瘑鐮�
+        json.addProperty("verifyCode", verifyCode);//楠岃瘉鐮�
+//       json.addProperty("platform", "APP");
+
+        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String str) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onSuccess(true);
+                }
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(e);
+                }
+            }
+        });
+
+
+    }
+    // endregion
+
+
+    /**
+     * 鍙戦�侀獙璇佺爜
      *
      * @param isPhone       true琛ㄧず鎵嬫満鍙�,鍚﹀垯鏄偖绠�
      * @param account       璐﹀彿 (鎵嬫満鎴栬�呴偖绠�)
@@ -183,45 +305,6 @@
 
 
     }
-
-    /**
-     * 鍒锋柊Token(B绔处鍙�)
-     *
-     * @param account       鎵嬫満鎴栬�呴偖绠�
-     * @param loginPwd      瀵嗙爜
-     * @param cloudCallBeak -
-     */
-    public void refreshToken(String account, String loginPwd, CloudCallBeak<HDLLoginBean> cloudCallBeak) {
-        String requestUrl = HttpApi.POST_Login;
-        JsonObject json = new JsonObject();
-        json.addProperty("grantType", "refresh_token");
-//        json.addProperty("refreshToken", UserConfigManage.getInstance().getRefreshToken());
-        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
-            @Override
-            public void onSuccess(String jsonStr) {
-                Gson gson = new Gson();
-                HDLLoginBean loginBean = gson.fromJson(jsonStr, HDLLoginBean.class);
-//                    saveUserData(loginBean);
-                if (cloudCallBeak != null) {
-                    cloudCallBeak.onSuccess(loginBean);
-                }
-            }
-
-            @Override
-            public void onFailure(HDLException e) {
-                if (cloudCallBeak != null) {
-                    cloudCallBeak.onFailure(e);
-                }
-            }
-        });
-    }
-
-
-    // endregion
-
-    // region --------銆怌绔处鍙枫��---------
-
-    // endregion
 
     /**
      * 閫�鍑虹櫥褰曟椂璋冪敤锛屾竻闄ゆ帹閫佹暟鎹�
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
index 0f57fad..820d6b8 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -57,8 +57,8 @@
                 GatewayBean gatewayBean = list.get(i);
                 if (gatewayBean.getMaster().equals("true")
                         && gatewayBean.getHomeId().equals(UserConfigManage.getInstance().getHomeId())) {
-                    if("0101050217BBC400".equals(gatewayBean.getOid()))//娴嬭瘯鏃惰繃婊ゆ帀鏃犳晥鐨勶紝鍚庨潰杩欏姞浠g爜瑕佸垹闄�
-                        continue;
+//                    if ("0101050217BBC400".equals(gatewayBean.getOid()))//娴嬭瘯鏃惰繃婊ゆ帀鏃犳晥鐨勶紝杩欒鍚庨潰浠g爜瑕佸垹闄�
+//                        continue;
                     newList.add(gatewayBean);
                 }
             }
@@ -318,6 +318,64 @@
     }
 
     /**
+     * 缃戝叧鏃堕棿璇诲彇
+     *
+     * @param mac          璁惧mac
+     * @param linkCallBack 鍥炶皟update
+     */
+    public void getGatewayTime(String mac, LinkCallBack<Boolean> linkCallBack) {
+        String requestUrl = TopicApi.GET_GATEWAY_TIME;
+        TcpClient.getInstance().sendDataToLinkGateway(mac, requestUrl, null, "", new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                if (linkCallBack != null) {
+                    linkCallBack.onSuccess(true);
+                }
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                if (linkCallBack != null) {
+                    linkCallBack.onError(e);
+                }
+            }
+        });
+
+    }
+
+    /**
+     * 缃戝叧鏃堕棿淇敼
+     *
+     * @param mac          璁惧mac
+     * @param linkCallBack 鍥炶皟update
+     */
+    public void editGatewayTime(String mac, JsonObject jsonObject, LinkCallBack<Boolean> linkCallBack) {
+        String requestUrl = TopicApi.SET_GATEWAY_TIME_EDIT;
+//        JsonObject json = new JsonObject();
+//        json.addProperty("master", "true");
+//        "objects": {
+//            "date": "2020-08-15",
+//                    "time": "17:25:20"
+//        }
+        TcpClient.getInstance().sendDataToLinkGateway(mac, requestUrl, jsonObject, "", new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                if (linkCallBack != null) {
+                    linkCallBack.onSuccess(true);
+                }
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                if (linkCallBack != null) {
+                    linkCallBack.onError(e);
+                }
+            }
+        });
+
+    }
+
+    /**
      * 缂栬緫缃戝叧鍙傛暟
      *
      * @param mac          璁惧mac
@@ -344,7 +402,6 @@
         });
 
     }
-
 
     /**
      * 鑾峰彇缃戝叧璇︽儏淇℃伅
@@ -490,11 +547,13 @@
                         HDLLinkLocalGateway.getInstance().getGatewayList().clear();
                         for (int i = 0; i < list.size(); i++) {
                             CloudInverterDeviceBean cloudInverterDeviceBean = list.get(i);
+                            //浜戠瀵硅薄鏁版嵁浜ゆ崲鍒版湰鍦板璞�
                             GatewayBean gatewayBean = new GatewayBean();
                             gatewayBean.setOid(cloudInverterDeviceBean.getOid());
                             gatewayBean.setSid(cloudInverterDeviceBean.getSid());
                             gatewayBean.setGatewayId(cloudInverterDeviceBean.getGatewayId());
                             gatewayBean.setOnline(cloudInverterDeviceBean.isOnline());
+                            gatewayBean.setDevice_mac(cloudInverterDeviceBean.getOsn());//璁惧mac
                             gatewayBean.setDevice_name(cloudInverterDeviceBean.getGatewayName());
                             gatewayBean.setHomeId(UserConfigManage.getInstance().getHomeId());
                             gatewayBean.setLocalEncrypt(true);
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
index 602ab43..1a4d07c 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
@@ -31,6 +31,12 @@
         return sHdlLogLogic;
     }
 
+    /**
+     * android鎵撳嵃
+     *
+     * @param tag 鏍囩
+     * @param mgs 杈撳嚭淇℃伅
+     */
     public static void print(String tag, String mgs) {
         if (isDebug) {
             return;
@@ -38,6 +44,11 @@
         Log.d(tag, mgs);
     }
 
+    /**
+     * java鎵撳嵃
+     *
+     * @param mgs 杈撳嚭淇℃伅
+     */
     public static void print(String mgs) {
         if (isDebug) {
             return;
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
index 0fb0d86..690a6db 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -204,6 +204,43 @@
                         });
                     }
                     break;
+                    //璁惧鏃堕棿璇诲彇
+                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_TIME: {
+                        //娣诲姞璁惧鍒颁簯绔�
+                        String mac = getKeyValue("mac", getKeyValue("data", data));
+                        //鑾峰彇oid鍒楄〃
+                        HdlDeviceLogic.getInstance().getGatewayTime(mac, new LinkCallBack<Boolean>() {
+                            @Override
+                            public void onSuccess(Boolean obj) {
+
+                            }
+
+                            @Override
+                            public void onError(HDLLinkException e) {
+
+                            }
+                        });
+                    }
+                    //璁惧鏃堕棿缂栬緫
+                    break;
+                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_TIME_EDIT: {
+                        //娣诲姞璁惧鍒颁簯绔�
+                        String mac = getKeyValue("mac", getKeyValue("data", data));
+                        //鑾峰彇oid鍒楄〃
+                        HdlDeviceLogic.getInstance().getGatewayOidList(mac, new LinkCallBack<List<OidBean>>() {
+                            @Override
+                            public void onSuccess(List<OidBean> obj) {
+
+                            }
+
+                            @Override
+                            public void onError(HDLLinkException e) {
+
+                            }
+                        });
+                    }
+                    break;
+
                 }
 
             } else if (HDLUniMP.UNI_EVENT_REPLY_WIFI_MODEL.equals(event)) {
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
index bbe33e5..18a3270 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -25,6 +25,7 @@
 import com.hdl.linkpm.sdk.user.callback.ILoginCallBack;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
+import com.hdl.photovoltaic.config.UserConfigManage;
 import com.hdl.photovoltaic.other.HdlFileLogic;
 import com.hdl.photovoltaic.other.HdlResidenceLogic;
 import com.hdl.photovoltaic.ui.account.ChangePassword;
@@ -165,11 +166,31 @@
             }
         });
 
-
+        //閫夋嫨b绔紝c绔�
+        viewBinding.homeLoginInstallUserTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                UserConfigManage.getInstance().setBAccount(v.isSelected());
+                viewBinding.homeLoginCheckIv.setSelected(UserConfigManage.getInstance().isBAccount());
+                if (UserConfigManage.getInstance().isBAccount()) {
+                    viewBinding.homeLoginRegisterTv.setVisibility(View.GONE);
+                } else {
+                    viewBinding.homeLoginRegisterTv.setVisibility(View.VISIBLE);
+                }
+            }
+        });
+        //閫夋嫨b绔紝c绔�
         viewBinding.homeLoginCheckIv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 v.setSelected(!v.isSelected());
+                UserConfigManage.getInstance().setBAccount(v.isSelected());
+                if (UserConfigManage.getInstance().isBAccount()) {
+                    viewBinding.homeLoginRegisterTv.setVisibility(View.GONE);
+                } else {
+                    viewBinding.homeLoginRegisterTv.setVisibility(View.VISIBLE);
+                }
             }
         });
         viewBinding.homeLoginPrivacyCheckIv.setOnClickListener(new View.OnClickListener() {
@@ -241,6 +262,8 @@
         viewBinding.homeLoginExperienceTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                UserConfigManage.getInstance().setUserExperience(v.isSelected());
 //                requestPermissions();
 //                startActivity(MyPowerStationActivity.class);
                 HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getCurrentHomeRootPath());
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java b/app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java
index b60bbd8..09c300c 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java
@@ -1,6 +1,6 @@
 package com.hdl.photovoltaic.ui.account;
 
-import android.app.AppComponentFactory;
+
 import android.os.Bundle;
 import android.os.CountDownTimer;
 import android.text.Editable;
@@ -11,7 +11,7 @@
 import android.text.method.PasswordTransformationMethod;
 import android.view.View;
 
-import androidx.appcompat.app.AppCompatActivity;
+
 import androidx.appcompat.content.res.AppCompatResources;
 
 import com.hdl.linkpm.sdk.core.exception.HDLException;
@@ -20,6 +20,7 @@
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
 import com.hdl.photovoltaic.config.AppConfigManage;
+import com.hdl.photovoltaic.config.UserConfigManage;
 import com.hdl.photovoltaic.databinding.ActivityChangePasswordBinding;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.other.HdlAccountLogic;
@@ -251,30 +252,57 @@
                 } else {
                     verification_code = viewBinding.changeMailVerificationEt.getText().toString();
                 }
-                HdlAccountLogic.getInstance().changePassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() {
-                    @Override
-                    public void onSuccess(Boolean obj) {
-                        HdlThreadLogic.runMainThread(new Runnable() {
-                            @Override
-                            public void run() {
-                                ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity);
-                                dialog.show();
-                                dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
-                                    @Override
-                                    public void Confirm() {
-                                        finish();
-                                    }
-                                });
-                            }
-                        }, null, null);
+                if (UserConfigManage.getInstance().isBAccount()) {
+                    HdlAccountLogic.getInstance().changeBPassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() {
+                        @Override
+                        public void onSuccess(Boolean obj) {
+                            HdlThreadLogic.runMainThread(new Runnable() {
+                                @Override
+                                public void run() {
+                                    ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity);
+                                    dialog.show();
+                                    dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
+                                        @Override
+                                        public void Confirm() {
+                                            finish();
+                                        }
+                                    });
+                                }
+                            }, null, null);
 
-                    }
+                        }
 
-                    @Override
-                    public void onFailure(HDLException e) {
+                        @Override
+                        public void onFailure(HDLException e) {
 
-                    }
-                });
+                        }
+                    });
+                } else {
+                    HdlAccountLogic.getInstance().changeCPassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() {
+                        @Override
+                        public void onSuccess(Boolean obj) {
+                            HdlThreadLogic.runMainThread(new Runnable() {
+                                @Override
+                                public void run() {
+                                    ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity);
+                                    dialog.show();
+                                    dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
+                                        @Override
+                                        public void Confirm() {
+                                            finish();
+                                        }
+                                    });
+                                }
+                            }, null, null);
+
+                        }
+
+                        @Override
+                        public void onFailure(HDLException e) {
+
+                        }
+                    });
+                }
             }
         });
 
@@ -294,9 +322,12 @@
             }
             return;
         }
+        //鑾峰彇璐﹀彿鍖哄煙淇℃伅
         HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak<HDLUserRegionBean>() {
+            //鍙戦�佹秷鎭獙璇佺爜
             @Override
             public void onSuccess(HDLUserRegionBean obj) {
+                //璁剧疆璐﹀彿鎵�鍦ㄥ尯鍩熷崗璁強鍦板潃
                 AppConfigManage.setUserRegionUrl(obj.getRegionUrl());
                 HDLLinkPMUser.getInstance().setUserRegionUrl(AppConfigManage.getUserRegionUrl());
                 HdlAccountLogic.getInstance().sendVerifyCode(isPhoneType, account, "86", 2, new CloudCallBeak<Boolean>() {
@@ -318,7 +349,8 @@
 
             @Override
             public void onFailure(HDLException e) {
-                hideLoading();
+
+//                hideLoading();
             }
         });
     }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java
index da72b98..0a099e0 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java
@@ -2,14 +2,34 @@
 
 
 import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.text.Editable;
+import android.text.InputType;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
 import android.view.View;
 
+import androidx.appcompat.content.res.AppCompatResources;
 import androidx.constraintlayout.widget.ConstraintSet;
 
+import com.hdl.linkpm.sdk.core.exception.HDLException;
+import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
+import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
+import com.hdl.photovoltaic.config.AppConfigManage;
 import com.hdl.photovoltaic.databinding.ActivityRegisterAccountBinding;
+import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlAccountLogic;
+import com.hdl.photovoltaic.other.HdlLogLogic;
+import com.hdl.photovoltaic.other.HdlThreadLogic;
 import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
+import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
+import com.hdl.photovoltaic.widget.ConfirmationTipDialog;
+import com.hdl.photovoltaic.widget.ListDialog;
+import com.hdl.sdk.link.common.utils.ThreadToolUtils;
 
 /**
  * 娉ㄥ唽璐﹀彿鐣岄潰
@@ -17,6 +37,21 @@
 public class RegisterAccountActivity extends CustomBaseActivity {
 
     private ActivityRegisterAccountBinding viewBinding;
+
+    private boolean isPhoneType = true;
+
+    private String mPhoneAccount;
+    private String mPhonePsw;
+    private String mPhoneConfirmPsw;
+    private String mPhoneVerificationCode;
+
+    private String mMailAccount;
+    private String mMailPsw;
+    private String mMailConfirmPsw;
+    private String mMailVerificationCode;
+
+    private String mUrl = "https://test-gz.hdlcontrol.com";
+
 
     @Override
     public Object getContentView() {
@@ -56,17 +91,7 @@
 
 
     private void initView() {
-
-        viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_鎵嬫満鍙�);
-        viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(20);
-        viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
-        viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.VISIBLE);
-
-        viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_閭);
-        viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16);
-        viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
-        viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE);
-
+        switchPhoneOrMailView();
     }
 
     private void initEvent() {
@@ -77,36 +102,454 @@
                 finish();
             }
         });
+        viewBinding.registerRegionServerRl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                ListDialog listDialog = new ListDialog(_mActivity);
+                listDialog.show();
+                listDialog.setOnHDLChinaOnListener(new ListDialog.onHDLChinaListener() {
+                    @Override
+                    public void HDLChina() {
+                        mUrl = "https://china-gateway.hdlcontrol.com";
+                        viewBinding.regionTv.setText(listDialog.geHDLChinaText());
+
+                    }
+                });
+                listDialog.setOnHDLBahrainListener(new ListDialog.onHDLBahrainListener() {
+                    @Override
+                    public void HDLBahrain() {
+                        mUrl = "https://bahrain-gateway.hdlcontrol.com";
+                        viewBinding.regionTv.setText(listDialog.getHDLBahrainText());
+                    }
+                });
+            }
+        });
+        //鍒囨崲鎵嬫満鍙�
         viewBinding.registerPhoneTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
 
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_鎵嬫満鍙�);
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(20);
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
-                viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.VISIBLE);
-
-                viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_閭);
-                viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16);
-                viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
-                viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE);
+                isPhoneType = true;
+                switchPhoneOrMailView();
             }
         });
-
+        //鍒囨崲閭
         viewBinding.registerMailTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_鎵嬫満鍙�);
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(16);
-                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
-                viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.GONE);
-
-                viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_閭);
-                viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(20);
-                viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
-                viewBinding.registerMailTitleIc.lineV.setVisibility(View.VISIBLE);
+                isPhoneType = false;
+                switchPhoneOrMailView();
             }
         });
 
+        //杈撳叆瀵嗙爜
+        viewBinding.registerPswEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                isCompleteEnabled();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        //瀵嗙爜鏄剧ず鎴栬�呴殣钘�
+        viewBinding.registerPswHideIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (v.isSelected()) {
+                    v.setSelected(false);
+                    viewBinding.registerPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide));
+                    viewBinding.registerPswEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
+
+                } else {
+                    v.setSelected(true);
+                    viewBinding.registerPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show));
+                    viewBinding.registerPswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+                }
+                //璁剧疆鍏夋爣浣嶇疆
+                if (!TextUtils.isEmpty(viewBinding.registerPswEt.getText())) {
+                    viewBinding.registerPswEt.setSelection(viewBinding.registerPswEt.length());
+                }
+            }
+        });
+        //杈撳叆纭瀵嗙爜
+        viewBinding.registerConfirmPswEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                isCompleteEnabled();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        //纭瀵嗙爜鏄剧ず鎴栬�呴殣钘�
+        viewBinding.registerConfirmPswHideIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (v.isSelected()) {
+                    v.setSelected(false);
+                    viewBinding.registerConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide));
+                    viewBinding.registerConfirmPswEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
+                } else {
+                    v.setSelected(true);
+                    viewBinding.registerConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show));
+                    viewBinding.registerConfirmPswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+                }
+                //璁剧疆鍏夋爣浣嶇疆
+                if (!TextUtils.isEmpty(viewBinding.registerConfirmPswEt.getText())) {
+                    viewBinding.registerConfirmPswEt.setSelection(viewBinding.registerConfirmPswEt.length());
+                }
+            }
+        });
+        //杈撳叆鎵嬫満鍙锋垨鑰呴偖绠�
+        viewBinding.registerAccountEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                isCompleteEnabled();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        //鎵嬫満鍙疯幏鍙栭獙璇佺爜
+        viewBinding.registerPhoneVerificationTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                sendVerification();
+
+            }
+        });
+        //杈撳叆鎵嬫満楠岃瘉鐮�
+        viewBinding.registerPhoneVerificationEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                isCompleteEnabled();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        //閭鑾峰彇楠岃瘉鐮�
+        viewBinding.registerMailVerificationTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                sendVerification();
+
+            }
+        });
+        //杈撳叆閭楠岃瘉鐮�
+        viewBinding.registerMailVerificationEt.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                isCompleteEnabled();
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+
+            }
+        });
+        //娉ㄥ唽璐﹀彿
+        viewBinding.registerCompleteTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (!isLocalCheckAccountAndPassword()) {
+                    return;
+                }
+                String account = viewBinding.registerAccountEt.getText().toString();
+                String psw = viewBinding.registerConfirmPswEt.getText().toString();
+                String verification_code;
+                if (isPhoneType) {
+                    verification_code = viewBinding.registerPhoneVerificationEt.getText().toString();
+                } else {
+                    verification_code = viewBinding.registerMailVerificationEt.getText().toString();
+                }
+                HdlAccountLogic.getInstance().registerAccount(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() {
+                    @Override
+                    public void onSuccess(Boolean obj) {
+                        HdlThreadLogic.runMainThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity);
+                                dialog.show();
+                                dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
+                                    @Override
+                                    public void Confirm() {
+                                        finish();
+                                    }
+                                });
+                            }
+                        }, null, null);
+
+                    }
+
+                    @Override
+                    public void onFailure(HDLException e) {
+
+                    }
+                });
+            }
+        });
+
+    }
+
+    /**
+     * 鍙戦�侀獙璇佺爜鎸囦护
+     */
+    private void sendVerification() {
+
+        String account = viewBinding.registerAccountEt.getText().toString();
+        if (TextUtils.isEmpty(account)) {
+            if (isPhoneType) {
+                viewBinding.textErrorTv.setText(R.string.home_login_phone_null);
+            } else {
+                viewBinding.textErrorTv.setText(R.string.home_login_mail_null);
+            }
+            return;
+        }
+
+
+        //鑾峰彇璐﹀彿鍖哄煙淇℃伅
+        HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak<HDLUserRegionBean>() {
+            @Override
+            public void onSuccess(HDLUserRegionBean obj) {
+                //鍙戦�佹秷鎭獙璇佺爜
+                HdlThreadLogic.toast(RegisterAccountActivity.this, getString(R.string.home_login_already_exists));
+                HdlLogLogic.print("regionByAccount onSuccess==" + obj);
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                //鐢ㄦ埛涓嶅瓨鍦ㄦ墠娉ㄥ唽
+                if (e != null && e.getCode() == 10010) {
+                    //璁剧疆璐﹀彿鎵�鍦ㄥ尯鍩熷崗璁強鍦板潃
+//                    AppConfigManage.setUserRegionUrl("http://59.41.255.150:7777");//obj.getRegionUrl()
+                    if (!AppConfigManage.isIsOnlineServer()) {
+                        //娴嬭瘯鐜榛樿杩欎釜鍩熷悕
+                        mUrl = "https://test-gz.hdlcontrol.com";
+                    }
+                    HDLLinkPMUser.getInstance().setUserRegionUrl(mUrl);
+                    HdlAccountLogic.getInstance().sendVerifyCode(isPhoneType, account, "86", 1, new CloudCallBeak<Boolean>() {
+                        @Override
+                        public void onSuccess(Boolean obj) {
+                            if (isPhoneType) {
+                                phoneCountDownTimer.start();
+                            } else {
+                                mailCountDownTimer.start();
+                            }
+                        }
+
+                        @Override
+                        public void onFailure(HDLException e) {
+
+                        }
+                    });
+                }
+
+            }
+        });
+
+    }
+
+    /**
+     * 鍒濆鍖栨墜鏈哄彿璁℃椂鍣�
+     */
+    CountDownTimer phoneCountDownTimer = new CountDownTimer(60 * 1000, 1000) {
+        @Override
+        public void onTick(long millisUntilFinished) {
+            long time = (millisUntilFinished / 1000);
+            String str = time + "s" + getString(R.string.home_login_psw_verification_repeater);
+            viewBinding.registerPhoneVerificationTv.setText(str);
+            viewBinding.registerPhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_25000000));
+            viewBinding.registerPhoneVerificationTv.setEnabled(false);
+
+        }
+
+        @Override
+        public void onFinish() {
+            viewBinding.registerPhoneVerificationTv.setText(getString(R.string.home_login_verification_regain));
+            viewBinding.registerPhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_245EC3));
+            viewBinding.registerPhoneVerificationTv.setEnabled(true);
+
+
+        }
+    };
+    /**
+     * 鍒濆鍖栭偖绠辫鏃跺櫒
+     */
+    CountDownTimer mailCountDownTimer = new CountDownTimer(60 * 1000, 1000) {
+        @Override
+        public void onTick(long millisUntilFinished) {
+            long time = (millisUntilFinished / 1000);
+            String str = time + "s" + getString(R.string.home_login_psw_verification_repeater);
+
+            viewBinding.registerMailVerificationTv.setText(str);
+            viewBinding.registerMailVerificationTv.setTextColor(getResources().getColor(R.color.text_25000000));
+            viewBinding.registerMailVerificationTv.setEnabled(false);
+
+        }
+
+        @Override
+        public void onFinish() {
+            viewBinding.registerMailVerificationTv.setText(getString(R.string.home_login_verification_regain));
+            viewBinding.registerMailVerificationTv.setTextColor(getResources().getColor(R.color.text_245EC3));
+            viewBinding.registerMailVerificationTv.setEnabled(true);
+
+        }
+    };
+
+    /**
+     * 鍒囨崲鎵嬫満鍙锋垨鑰呴偖绠辩殑鏍峰紡
+     */
+    private void switchPhoneOrMailView() {
+        if (isPhoneType) {
+            //鎵嬫満鍙�
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_鎵嬫満鍙�);
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(20);
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
+            viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.VISIBLE);
+
+            viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_閭);
+            viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16);
+            viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
+            viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE);
+
+            //杈撳叆鎵嬫満鍙�
+            viewBinding.registerAccountEt.setInputType(InputType.TYPE_CLASS_NUMBER);
+            viewBinding.registerAccountEt.setHint(R.string.home_login_璇疯緭鍏ユ墜鏈哄彿);
+            //鏄剧ず鎵嬫満鍙烽獙璇佺爜锛岄殣钘忛偖绠遍獙璇佺爜,
+            viewBinding.registerPhoneVerificationCodeRl.setVisibility(View.VISIBLE);
+            viewBinding.registerMailVerificationCodeRl.setVisibility(View.GONE);
+            //璁板綍閭璐﹀彿鍜屽瘑鐮�
+            mMailAccount = viewBinding.registerAccountEt.getText().toString();
+            mMailVerificationCode = viewBinding.registerMailVerificationEt.getText().toString();
+            mMailPsw = viewBinding.registerPswEt.getText().toString();
+            mMailConfirmPsw = viewBinding.registerConfirmPswEt.getText().toString();
+            //鏄剧ず鏃ф暟鎹�
+            viewBinding.registerAccountEt.setText(mPhoneAccount);
+            viewBinding.registerPhoneVerificationEt.setText(mPhoneVerificationCode);
+            viewBinding.registerPswEt.setText(mPhonePsw);
+            viewBinding.registerConfirmPswEt.setText(mPhoneConfirmPsw);
+
+
+        } else {
+            //閭
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_鎵嬫満鍙�);
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(16);
+            viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
+            viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.GONE);
+
+            viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_閭);
+            viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(20);
+            viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
+            viewBinding.registerMailTitleIc.lineV.setVisibility(View.VISIBLE);
+            //杈撳叆閭
+            viewBinding.registerAccountEt.setInputType(InputType.TYPE_CLASS_TEXT);
+            viewBinding.registerAccountEt.setHint(R.string.home_login_input_mail);
+
+            //鏄剧ず绠遍偖楠岃瘉鐮侊紝闅愯棌鎵嬫満鍙烽獙璇佺爜,
+            viewBinding.registerPhoneVerificationCodeRl.setVisibility(View.GONE);
+            viewBinding.registerMailVerificationCodeRl.setVisibility(View.VISIBLE);
+
+            //璁板綍鎵嬫満鍙峰拰瀵嗙爜
+            mPhoneAccount = viewBinding.registerAccountEt.getText().toString();
+            mPhoneVerificationCode = viewBinding.registerPhoneVerificationEt.getText().toString();
+            mPhonePsw = viewBinding.registerPswEt.getText().toString();
+            mPhoneConfirmPsw = viewBinding.registerConfirmPswEt.getText().toString();
+            //鏄剧ず鏃ф暟鎹�
+            viewBinding.registerAccountEt.setText(mMailAccount);
+            viewBinding.registerMailVerificationEt.setText(mMailVerificationCode);
+            viewBinding.registerPswEt.setText(mMailPsw);
+            viewBinding.registerConfirmPswEt.setText(mMailConfirmPsw);
+
+        }
+        isCompleteEnabled();
+
+    }
+
+    /**
+     * 鏍¢獙鎸夐挳鏄惁鍚敤
+     */
+    private void isCompleteEnabled() {
+        String account = viewBinding.registerAccountEt.getText().toString();
+        String psw1 = viewBinding.registerPswEt.getText().toString();
+        String psw2 = viewBinding.registerConfirmPswEt.getText().toString();
+        String verification_code;
+        if (isPhoneType) {
+            verification_code = viewBinding.registerPhoneVerificationEt.getText().toString();
+        } else {
+            verification_code = viewBinding.registerMailVerificationEt.getText().toString();
+        }
+        boolean isEnabled = account.length() > 0 && psw1.length() > 0 && psw2.length() > 0 && verification_code.length() > 0;
+        viewBinding.registerCompleteTv.setEnabled(isEnabled);
+    }
+
+    /**
+     * 鏈湴鏍¢獙杈撳叆璐﹀彿鎴栬�呭瘑鐮佹槸鍚︽纭�
+     */
+    private boolean isLocalCheckAccountAndPassword() {
+        String psw1 = viewBinding.registerPswEt.getText().toString();
+        String psw2 = viewBinding.registerConfirmPswEt.getText().toString();
+        if (!psw1.equals(psw2)) {
+            viewBinding.textErrorTv.setText(R.string.home_login_psw_unlikeliness);
+            return false;
+        }
+        if (psw1.length() < 6 || psw1.length() > 16) {
+            viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str);
+            return false;
+        }
+//        if (psw2.length() < 6 || psw2.length() > 16) {
+//            viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str);
+//            return false;
+//        }
+        return true;
+
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (phoneCountDownTimer != null) {
+            phoneCountDownTimer.cancel();
+            phoneCountDownTimer = null;
+        }
+        if (mailCountDownTimer != null) {
+            mailCountDownTimer.cancel();
+            mailCountDownTimer = null;
+        }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
index bc717bc..2d70800 100644
--- a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
+++ b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
@@ -34,6 +34,8 @@
     public final static String UNI_EVENT_REPLY_DEVICE_ADD = "add";//璁惧娣诲姞
     public final static String UNI_EVENT_REPLY_DEVICE_DEL = "del";//璁惧鍒犻櫎
     public final static String UNI_EVENT_REPLY_DEVICE_OID = "oid";//璁惧銆愬寘鎷笅鎸傝澶囥�憃id鍒楄〃
+    public final static String UNI_EVENT_REPLY_DEVICE_TIME = "time";//璁惧鏃堕棿璇诲彇
+    public final static String UNI_EVENT_REPLY_DEVICE_TIME_EDIT = "time_edit";//璁惧鏃堕棿缂栬緫
     public final static String UNI_EVENT_REPLY_DEVICE_MODBUS_SEND = "modbus_send";//modbus鍗忚
 
     /*********Wifi妯″潡*********/ //鍗敠瀹氫箟
diff --git a/app/src/main/java/com/hdl/photovoltaic/widget/ListDialog.java b/app/src/main/java/com/hdl/photovoltaic/widget/ListDialog.java
new file mode 100644
index 0000000..230b631
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/widget/ListDialog.java
@@ -0,0 +1,96 @@
+package com.hdl.photovoltaic.widget;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+
+import com.hdl.photovoltaic.R;
+import com.hdl.photovoltaic.databinding.DialogListBinding;
+
+public class ListDialog extends Dialog {
+    private onNoListener onNoOnclickListener;
+    private onHDLChinaListener onHDLChinaListener;
+    private onHDLBahrainListener onHDLBahrainListener;
+    private DialogListBinding viewBinding;
+
+    public ListDialog(@NonNull Context context) {
+        super(context, R.style.Custom_Dialog);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        viewBinding = DialogListBinding.inflate(getLayoutInflater());
+        setContentView(viewBinding.getRoot());
+        initEvent();
+
+    }
+
+    public String geHDLChinaText(){
+       return viewBinding.hdlChinaTv.getText().toString();
+    };
+    public String getHDLBahrainText(){
+       return viewBinding.hdlBahrainTv.getText().toString();
+
+    }
+    private void initEvent() {
+
+        viewBinding.hdlCancelLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (onNoOnclickListener != null) {
+                    onNoOnclickListener.Cancel();
+                }
+                dismiss();
+            }
+        });
+        viewBinding.hdlChinaLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (onHDLChinaListener != null) {
+                    onHDLChinaListener.HDLChina();
+                }
+                dismiss();
+            }
+        });
+        viewBinding.hdlBahrainLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (onHDLBahrainListener != null) {
+                    onHDLBahrainListener.HDLBahrain();
+                }
+                dismiss();
+            }
+        });
+
+
+    }
+
+    public void setNoOnListener(onNoListener onclickListener) {
+        this.onNoOnclickListener = onclickListener;
+    }
+
+    public void setOnHDLChinaOnListener(onHDLChinaListener onHDLChinaListener) {
+        this.onHDLChinaListener = onHDLChinaListener;
+    }
+
+    public void setOnHDLBahrainListener(onHDLBahrainListener onHDLBahrainListener) {
+        this.onHDLBahrainListener = onHDLBahrainListener;
+    }
+
+    public interface onNoListener {
+        void Cancel();
+    }
+
+    public interface onHDLChinaListener {
+        void HDLChina();
+    }
+
+    public interface onHDLBahrainListener {
+        void HDLBahrain();
+    }
+
+}
diff --git a/app/src/main/res/layout/activity_change_password.xml b/app/src/main/res/layout/activity_change_password.xml
index 80edf65..2905a80 100644
--- a/app/src/main/res/layout/activity_change_password.xml
+++ b/app/src/main/res/layout/activity_change_password.xml
@@ -284,7 +284,7 @@
 
     </RelativeLayout>
 
-
+    <!--閿欒鎻愮ず-->
     <TextView
         android:id="@+id/text_error_tv"
         android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/activity_home_login.xml b/app/src/main/res/layout/activity_home_login.xml
index cedebad..8971ce2 100644
--- a/app/src/main/res/layout/activity_home_login.xml
+++ b/app/src/main/res/layout/activity_home_login.xml
@@ -188,8 +188,8 @@
 
     <TextView
         android:id="@+id/home_login_register_tv"
-        android:layout_width="wrap_content"
-        android:layout_height="@dimen/dp_20"
+        android:layout_width="32dp"
+        android:layout_height="17dp"
         android:layout_marginTop="@dimen/dp_24"
         android:text="@string/home_login_娉ㄥ唽"
         android:textColor="@color/text_245EC3"
@@ -245,7 +245,7 @@
         android:layout_marginTop="@dimen/dp_208"
         android:background="@drawable/yesandnoselected"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/home_login_register_tv" />
+        app:layout_constraintTop_toBottomOf="@+id/home_login_forget_password_tv" />
 
     <TextView
         android:id="@+id/home_login_privacy_tv"
diff --git a/app/src/main/res/layout/activity_register_account.xml b/app/src/main/res/layout/activity_register_account.xml
index 4f9aae0..46b70a3 100644
--- a/app/src/main/res/layout/activity_register_account.xml
+++ b/app/src/main/res/layout/activity_register_account.xml
@@ -268,8 +268,9 @@
 
     </RelativeLayout>
 
+    <!--鎵嬫満鍙烽獙璇佺爜-->
     <RelativeLayout
-        android:id="@+id/register_verification_code_rl"
+        android:id="@+id/register_phone_verification_code_rl"
         android:layout_width="match_parent"
         android:layout_height="@dimen/dp_60"
         app:layout_constraintEnd_toEndOf="parent"
@@ -278,7 +279,7 @@
 
 
         <TextView
-            android:id="@+id/register_verification_tv"
+            android:id="@+id/register_phone_verification_tv"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:layout_alignParentEnd="true"
@@ -290,18 +291,18 @@
             android:textSize="@dimen/text_14" />
 
         <View
-            android:id="@+id/register_verification_v"
+            android:id="@+id/register_phone_verification_v"
             android:layout_width="0.5dp"
             android:layout_height="20dp"
-            android:layout_alignStart="@+id/register_verification_tv"
+            android:layout_alignStart="@+id/register_phone_verification_tv"
             android:layout_centerInParent="true"
             android:background="@color/text_E1E1E1" />
 
         <EditText
-            android:id="@+id/register_verification_et"
-            android:layout_width="match_parent"
+            android:id="@+id/register_phone_verification_et"
+            android:layout_width="@dimen/dp_150"
             android:layout_height="match_parent"
-            android:layout_alignStart="@+id/register_verification_v"
+            android:layout_alignStart="@+id/register_phone_verification_v"
             android:layout_alignParentStart="true"
             android:layout_marginStart="@dimen/dp_20"
             android:background="@null"
@@ -326,12 +327,83 @@
 
     </RelativeLayout>
 
+    <!--閭楠岃瘉鐮�-->
+    <RelativeLayout
+        android:id="@+id/register_mail_verification_code_rl"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_60"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/register_confirm_psw_rl">
+
+
+        <TextView
+            android:id="@+id/register_mail_verification_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentEnd="true"
+            android:layout_marginEnd="@dimen/dp_20"
+            android:gravity="center"
+            android:padding="@dimen/dp_16"
+            android:text="@string/home_login_send_mail"
+            android:textColor="@color/text_245EC3"
+            android:textSize="@dimen/text_14" />
+
+        <View
+            android:id="@+id/register_mail_verification_v"
+            android:layout_width="0.5dp"
+            android:layout_height="20dp"
+            android:layout_alignStart="@+id/register_mail_verification_tv"
+            android:layout_centerInParent="true"
+            android:background="@color/text_E1E1E1" />
+
+        <EditText
+            android:id="@+id/register_mail_verification_et"
+            android:layout_width="@dimen/dp_150"
+            android:layout_height="match_parent"
+            android:layout_alignStart="@+id/register_mail_verification_v"
+            android:layout_alignParentStart="true"
+            android:layout_marginStart="@dimen/dp_20"
+            android:background="@null"
+            android:hint="@string/home_login_input_楠岃瘉鐮�"
+            android:inputType="text"
+            android:lines="1"
+            android:maxLines="1"
+            android:textColor="@color/text_FF000000"
+            android:textColorHint="@color/text_25000000"
+            android:textSize="@dimen/text_16"
+
+            />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:layout_alignParentBottom="true"
+            android:layout_marginStart="@dimen/dp_20"
+            android:layout_marginEnd="@dimen/dp_20"
+            android:background="@color/text_E1E1E1" />
+
+
+    </RelativeLayout>
+    <!--閿欒鎻愮ず-->
     <TextView
-        android:id="@+id/account_title_tv"
+        android:id="@+id/text_error_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/dp_20"
+        android:layout_marginTop="@dimen/dp_60"
+        android:textColor="@color/text_D34545"
+        android:textSize="12sp"
+        app:layout_constraintStart_toStartOf="@+id/register_confirm_psw_rl"
+        app:layout_constraintTop_toBottomOf="@+id/register_confirm_psw_rl" />
+
+    <TextView
+        android:id="@+id/register_complete_tv"
         android:layout_width="0dp"
         android:layout_height="52dp"
         android:layout_marginStart="@dimen/dp_20"
-        android:layout_marginTop="@dimen/dp_42"
+        android:layout_marginTop="102dp"
         android:layout_marginEnd="@dimen/dp_20"
         android:background="@drawable/yesandnocheck"
         android:enabled="false"
@@ -341,7 +413,7 @@
         android:textSize="18sp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/register_verification_code_rl" />
+        app:layout_constraintTop_toBottomOf="@+id/register_confirm_psw_rl" />
 
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_list.xml b/app/src/main/res/layout/dialog_list.xml
new file mode 100644
index 0000000..637f883
--- /dev/null
+++ b/app/src/main/res/layout/dialog_list.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_200"
+        android:layout_marginStart="@dimen/dp_20"
+        android:layout_marginEnd="@dimen/dp_20"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <LinearLayout
+            android:id="@+id/hdl_china_ll"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            android:background="@color/ffffff"
+            android:gravity="center"
+            android:orientation="horizontal"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <TextView
+                android:id="@+id/hdl_china_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="HDL China"
+                android:textColor="@color/text_90000000"
+                android:textSize="@dimen/text_18" />
+        </LinearLayout>
+
+        <View
+            android:id="@+id/line_v"
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:background="@color/text_E1E1E1"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/hdl_china_ll"
+
+            />
+
+
+        <LinearLayout
+            android:id="@+id/hdl_bahrain_ll"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            android:background="@color/ffffff"
+            android:gravity="center"
+            android:orientation="horizontal"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/line_v">
+
+            <TextView
+                android:id="@+id/hdl_bahrain_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="HDL Bahrain"
+                android:textColor="@color/text_90000000"
+                android:textSize="@dimen/text_18"
+
+                />
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/hdl_cancel_ll"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_50"
+            android:layout_marginTop="@dimen/dp_20"
+            android:background="@color/ffffff"
+            android:gravity="center"
+            android:orientation="horizontal"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/hdl_bahrain_ll">
+
+            <TextView
+                android:id="@+id/hdl_cancel_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/loading_鍙栨秷"
+                android:textColor="@color/text_90000000"
+                android:textSize="@dimen/text_18"
+
+                />
+        </LinearLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5589246..6b4d1df 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -49,6 +49,7 @@
     <string name="home_login_pws_reset_succeeded">瀵嗙爜閲嶇疆鎴愬姛</string>
     <string name="home_login_back_login">杩斿洖鐧诲綍</string>
     <string name="home_login_send_mail">鍙戦�佽嚦閭</string>
+    <string name="home_login_already_exists">璇ョ敤鎴峰凡瀛樺湪锛屽彲鐩存帴鐧诲綍</string>
 
 
     <!--鎴戠殑鐢电珯-->

--
Gitblit v1.8.0