mac
2023-12-27 936fb552a30c05fc7a60c20f47bf6fccbc2dc1c1
app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -1,18 +1,18 @@
package com.hdl.photovoltaic.ui;
import android.Manifest;
import android.content.pm.PackageManager;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.LinkMovementMethod;
import android.text.method.PasswordTransformationMethod;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;
@@ -20,51 +20,54 @@
import androidx.annotation.NonNull;
import androidx.appcompat.content.res.AppCompatResources;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
import com.hdl.linkpm.sdk.user.bean.HDLLoginBean;
import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean;
import com.hdl.linkpm.sdk.user.callback.ILoginCallBack;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.enums.ShowErrorMode;
import com.hdl.photovoltaic.other.HdlFileLogic;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.other.HdlResidenceLogic;
import com.hdl.photovoltaic.ui.account.ChangePassword;
import com.hdl.photovoltaic.ui.account.RegisterAccountActivity;
import com.hdl.photovoltaic.ui.adapter.LanguageAdapter;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.ui.bean.LoginUserBean;
import com.hdl.photovoltaic.ui.bean.LoginUserRegionBean;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.device.FastScanActivity;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.utils.PermissionUtils;
import com.hdl.photovoltaic.utils.WifiUtils;
import org.json.JSONException;
import org.json.JSONObject;
import com.hdl.photovoltaic.ui.me.WebActivity;
import com.hdl.photovoltaic.utils.LocalManageUtil;
import com.hdl.photovoltaic.utils.TimeUtils;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog1;
import com.hdl.photovoltaic.widget.ListDialog;
import com.hdl.photovoltaic.widget.adapter.ListDialogAdapter;
import java.util.List;
/**
 * 登录的界面
 */
public class HomeLoginActivity extends CustomBaseActivity {
    private ActivityHomeLoginBinding viewBinding;
    @Override
    public Object getContentView() {
        setNotificationBarBackgroundColor(CustomColor.blue);
        viewBinding = ActivityHomeLoginBinding.inflate(getLayoutInflater());
        return viewBinding.getRoot();
    }
    @Override
    public void onBindView(Bundle savedInstanceState) {
        setNotificationBarBackgroundColor(CustomColor.white);
        setStatusBarTextColor();
        //初始化
        initView();
        //初始化界面监听器
@@ -97,43 +100,51 @@
    }
    /**
     * 初始化UI
     */
    private void initView() {
        viewBinding.homeLoginCheckBCIv.setSelected(UserConfigManage.getInstance().isBAccount());
        viewBinding.homeLoginInstallUserTv.setSelected(UserConfigManage.getInstance().isBAccount());
        viewBinding.homeLoginPrivacyCheckIv.setSelected(UserConfigManage.getInstance().isAcceiptPolicy());
        setStringDifferentColors(viewBinding.homeLoginPrivacyTv);
        if (UserConfigManage.getInstance().getCurrentAppLanguage().equals(LocalManageUtil.zh)) {
            viewBinding.homeLoginLanguageTv.setText("简体中文");
        } else {
            viewBinding.homeLoginLanguageTv.setText("English");
        }
        String acc = "13375012441";
        String pws = "123456";
        //测试用
        viewBinding.homeLoginAccountEt.setText("13375012441");
        viewBinding.homeLoginPasswordEt.setText("123456");
        viewBinding.homeLoginAccountEt.setText(acc);
        viewBinding.homeLoginPasswordEt.setText(pws);
        isLoginTextViewEnabled();
    }
    /**
     * 注册监听事件
     */
    private void initEvent() {
        viewBinding.homeLoginAccountEt.addTextChangedListener(new TextWatcher() {
        //语言选择
        viewBinding.homeLoginLanguageTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            public void onClick(View v) {
                ListDialog listDialog = new ListDialog(_mActivity);
                listDialog.show();
                listDialog.setCanceledOnTouchOutside(true);
                listDialog.setItemOnclickListener(new ListDialogAdapter.OnclickListener() {
                    @Override
                    public void onClick(int position, LanguageAdapter.ItemData itemData) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.d("HomeLoginActivity2", String.format("CharSequence=%s,start=%s,before=%s,count=%s", s, start, before, count));
            }
            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() > 0) {
                    if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.GONE) {
                        viewBinding.homeLoginClearContentsIv.setVisibility(View.VISIBLE);
                        viewBinding.homeLoginLanguageTv.setText(itemData.getTitle());
                    }
                } else {
                    if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.VISIBLE) {
                        viewBinding.homeLoginClearContentsIv.setVisibility(View.GONE);
                    }
                }
                isLoginTextViewEnabled();
                });
            }
        });
        viewBinding.homeLoginAccountEt.addTextChangedListener(accountTextWatcher);
        viewBinding.homeLoginClearContentsIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -141,22 +152,7 @@
            }
        });
        viewBinding.homeLoginPasswordEt.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) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                isLoginTextViewEnabled();
            }
        });
        viewBinding.homeLoginPasswordEt.addTextChangedListener(passwordTextWatcher);
        viewBinding.homeLoginHideIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -177,17 +173,39 @@
            }
        });
        viewBinding.homeLoginCheckIv.setOnClickListener(new View.OnClickListener() {
        //选择b端,c端
        viewBinding.homeLoginInstallUserTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setSelected(!v.isSelected());
                UserConfigManage.getInstance().setBAccount(v.isSelected());
                viewBinding.homeLoginCheckBCIv.setSelected(UserConfigManage.getInstance().isBAccount());
                if (UserConfigManage.getInstance().isBAccount()) {
                    viewBinding.homeLoginRegisterTv.setVisibility(View.GONE);
                } else {
                    viewBinding.homeLoginRegisterTv.setVisibility(View.VISIBLE);
                }
            }
        });
        //选择b端,c端
        viewBinding.homeLoginCheckBCIv.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() {
            @Override
            public void onClick(View v) {
                v.setSelected(!v.isSelected());
                UserConfigManage.getInstance().setAcceiptPolicy(v.isSelected());
            }
        });
        //登录
@@ -201,17 +219,18 @@
                if (!isLogin) {
                    return;
                }
//                boolean isSelected = viewBinding.homeLoginPrivacyCheckIv.isSelected();
//                if(!isSelected){
//                    //隐私协议提示
//                    return;
//                }
                Log.d("测试中", "123456789");
                showLoading(getString(R.string.home_login_登录中));
                boolean isSelected = UserConfigManage.getInstance().isAcceiptPolicy();
                if (!isSelected) {
                    //隐私协议提示
                    getDialog();
                    return;
                }
                showLoading(getString(R.string.home_login_be_logging_in));
                HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak<HDLUserRegionBean>() {
                    @Override
                    public void onSuccess(HDLUserRegionBean obj) {
                        AppConfigManage.setUserRegionUrl("http://59.41.255.150:7777");//obj.getRegionUrl()
                        //初始化服务域名
                        AppConfigManage.setUserRegionUrl(obj.getRegionUrl());
                        HDLLinkPMUser.getInstance().setUserRegionUrl(AppConfigManage.getUserRegionUrl());
                        HdlAccountLogic.getInstance().loginByPassword(account, password, new ILoginCallBack() {
                            @Override
@@ -223,6 +242,7 @@
                                        HdlResidenceLogic.getInstance().setHouseIdList(obj);
                                        restoreButtonStyleToInitializeState();
                                        startActivity(MyPowerStationActivity.class);
                                        finish();
                                    }
                                    @Override
@@ -230,13 +250,31 @@
                                        hideLoading();
                                        restoreButtonStyleToInitializeState();
                                        startActivity(MyPowerStationActivity.class);
                                        finish();
                                    }
                                });
                            }
                            @Override
                            public void onFailure(HDLException exception) {
                            public void onFailure(HDLException e) {
                                hideLoading();
                                if (e.getCode() == 10019) {
                                    //用户已经被锁定错误码
                                    try {
                                        if (e.getmExtra() != null) {
                                            if (System.currentTimeMillis() < e.getmExtra().getUnlockTime()) {
                                                long time = e.getmExtra().getUnlockTime() - System.currentTimeMillis();
                                                int minute = Integer.parseInt(TimeUtils.getMinuteTime(time));
                                                HdlThreadLogic.toast(_mActivity, e.getMsg() + "剩余" + minute + "分钟" + "(" + e.getCode() + ")");
                                            }
                                        }
                                    } catch (Exception ee) {
                                        HdlThreadLogic.toast(_mActivity, e.getMsg() + "(" + e.getCode() + ")");
                                    }
                                } else {
                                    HdlThreadLogic.toast(_mActivity, e.getMsg() + "(" + e.getCode() + ")");
                                }
                            }
                        });
                    }
@@ -244,6 +282,7 @@
                    @Override
                    public void onFailure(HDLException e) {
                        hideLoading();
                        HdlThreadLogic.toast(_mActivity, e.getMsg() + "(" + e.getCode() + ")");
                    }
                });
@@ -254,9 +293,28 @@
        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());
            }
        });
        //注册
        viewBinding.homeLoginRegisterTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(HomeLoginActivity.this, RegisterAccountActivity.class);
                startActivity(intent);
            }
        });
        //忘记密码
        viewBinding.homeLoginForgetPasswordTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(HomeLoginActivity.this, ChangePassword.class);
                startActivity(intent);
            }
        });
@@ -270,6 +328,13 @@
        String password = viewBinding.homeLoginPasswordEt.getText().toString().replace(" ", "");
        boolean isEnabled = account.length() > 0 && password.length() > 0;
        viewBinding.homeLoginTv.setEnabled(isEnabled);
        if (password.length() < 6 || password.length() > 16) {
            return;
        }
        //符合密码规则后隐藏错误提示;
        viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_E1E1E1));
        viewBinding.homeLoginPasswordTextErrorTv.setText("");
    }
    /**
@@ -283,19 +348,19 @@
    private boolean isLocalCheckAccountAndPassword(String account, String password) {
        if (TextUtils.isEmpty(account)) {
            viewBinding.homeLoginLine1V.setBackgroundColor(getColor(R.color.text_D34545));
            viewBinding.homeLoginAccountTextErrorTv.setText(R.string.home_login_error_账号不能为空);
            viewBinding.homeLoginAccountTextErrorTv.setText(R.string.home_login_error_account_null);
            return false;
        }
        if (TextUtils.isEmpty(password)) {
            viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_D34545));
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_密码不能为空);
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_password_null);
            return false;
        }
        if (password.length() < 6 || password.length() > 16) {
            viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_D34545));
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_最少6_16个字符);
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_6_16_str);
            return false;
        }
        return true;
@@ -318,17 +383,162 @@
    }
    /**
     * 设置一串字符多种颜色
     * 设置一串字符多种颜色以及点击事件
     *
     * @param view 当前组件
     * @param textView 当前组件
     */
    private void setStringDifferentColors(TextView view) {
        String s = view.getText().toString();
    private void setStringDifferentColors(TextView textView) {
        if (textView == null) {
            return;
        }
        String s = textView.getText().toString();
        int startIndex1 = s.indexOf("《");
        int endIndex1 = s.indexOf("》") + 1;
        int startIndex2 = s.lastIndexOf("《");
        int endIndex2 = s.lastIndexOf("》") + 1;
        SpannableStringBuilder spannable = new SpannableStringBuilder(s);
        //设置文字的前景色
        spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), 2, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), 9, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        view.setText(spannable);
        if (textView.getTag() != null && textView.getTag().toString().equals("click")) {
            spannable.setSpan(new ClickableSpan() {
                @Override
                public void onClick(@NonNull View widget) {
                    //todo 需要跳转到服务协议界面
                    Intent intent = new Intent();
                    intent.putExtra("type", WebActivity.ServiceAgreement);
                    intent.setClass(_mActivity, WebActivity.class);
                    startActivity(intent);
                }
                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                    //设置字体颜色
                    ds.setColor(getResources().getColor(R.color.text_245EC3, null));
                    // 去掉下划线
                    ds.setUnderlineText(false);
                }
            }, startIndex1, endIndex1, 0);
            spannable.setSpan(new ClickableSpan() {
                @Override
                public void onClick(@NonNull View widget) {
                    //todo 需要跳转到隐私界面
                    Intent intent = new Intent();
                    intent.putExtra("type", WebActivity.PrivacyAgreement);
                    intent.setClass(_mActivity, WebActivity.class);
                    startActivity(intent);
                }
                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                    //设置字体颜色
                    ds.setColor(getResources().getColor(R.color.text_245EC3, null));
                    // 去掉下划线
                    ds.setUnderlineText(false);
                }
            }, startIndex2, endIndex2, 0);
        }
        textView.setText(spannable);
        //中途遇到点击后字体显示高亮,取消高亮
        textView.setHighlightColor(getResources().getColor(R.color.text_00000000, null));
        //最后设置可点击,必须实现,否则只能显示样式,无法实现点击效果
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
    /**
     * 弹窗
     */
    private void getDialog() {
        ConfirmationCancelDialog1 dialog = new ConfirmationCancelDialog1(_mActivity);
        dialog.setTitle(getString(R.string.loading_privacy));
        dialog.setContent(getString(R.string.loading_privacy_server));
        dialog.show();
        setStringDifferentColors(dialog.getContentTextView());
        dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
            @Override
            public void Confirm() {
                UserConfigManage.getInstance().setAcceiptPolicy(true);
                viewBinding.homeLoginPrivacyCheckIv.setSelected(true);
                dialog.dismiss();
            }
        });
        dialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() {
            @Override
            public void Cancel() {
                UserConfigManage.getInstance().setAcceiptPolicy(false);
                viewBinding.homeLoginPrivacyCheckIv.setSelected(false);
                dialog.dismiss();
            }
        });
    }
    /**
     * 输入账号
     */
    private final TextWatcher accountTextWatcher = 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) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            if (s.length() > 0) {
                if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.GONE) {
                    viewBinding.homeLoginClearContentsIv.setVisibility(View.VISIBLE);
                }
            } else {
                if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.VISIBLE) {
                    viewBinding.homeLoginClearContentsIv.setVisibility(View.GONE);
                }
            }
            isLoginTextViewEnabled();
        }
    };
    /**
     * 输入密码
     */
    private final TextWatcher passwordTextWatcher = 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) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            isLoginTextViewEnabled();
        }
    };
    @Override
    protected void onDestroy() {
        super.onDestroy();
        viewBinding.homeLoginAccountEt.removeTextChangedListener(accountTextWatcher);
        viewBinding.homeLoginPasswordEt.removeTextChangedListener(passwordTextWatcher);
    }