app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -114,7 +114,7 @@ HDLLinkLocalSdk.getInstance().init(getInstance()); initSocket(); //4.初始化OKHttpLog 是否开启 // setOKHttpLogOpen(isLogEnabled); setOKHttpLogOpen(isLogEnabled); } app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java
@@ -52,6 +52,10 @@ //是否是B端账号登录 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; } 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() + "}"); } } }); 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 -----电站管理(住宅)--------- //电站列表 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"; /* * 网关编辑命令 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端账号】--------- /** * 注册账号(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);//登陆密码,需要MD5处理 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 --------【C端账号】--------- // endregion /** * 退出登录时调用,清除推送数据 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()))//测试时过滤掉无效的,后面这加代码要删除 continue; // if ("0101050217BBC400".equals(gatewayBean.getOid()))//测试时过滤掉无效的,这行后面代码要删除 // 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); 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; 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)) { 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()); 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,7 +252,33 @@ } else { verification_code = viewBinding.changeMailVerificationEt.getText().toString(); } HdlAccountLogic.getInstance().changePassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() { 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) { } }); } else { HdlAccountLogic.getInstance().changeCPassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() { @Override public void onSuccess(Boolean obj) { HdlThreadLogic.runMainThread(new Runnable() { @@ -276,6 +303,7 @@ } }); } } }); } @@ -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(); } }); } 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,10 +102,341 @@ 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) { isPhoneType = true; switchPhoneOrMailView(); } }); //切换邮箱 viewBinding.registerMailTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 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)); @@ -90,12 +446,27 @@ viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16); viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000)); viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE); } }); viewBinding.registerMailTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //输入手机号 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)); @@ -105,8 +476,80 @@ 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; } } } 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";//设备【包括下挂设备】oid列表 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模块*********/ //卫锦定义 app/src/main/java/com/hdl/photovoltaic/widget/ListDialog.java
New file @@ -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(); } } 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" 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" 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/account_title_tv" 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/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> app/src/main/res/layout/dialog_list.xml
New file @@ -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> 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> <!--我的电站-->