wjc
2023-06-28 14de918a79943e4961b09fa01ed320c6cad41f2e
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/config/HDLLinkConfig.java
New file
@@ -0,0 +1,211 @@
package com.hdl.sdk.link.core.config;
import com.hdl.sdk.link.common.utils.LogUtils;
import com.hdl.sdk.link.common.utils.SPUtils;
import com.hdl.sdk.link.core.bean.request.AuthenticateRequest;
import com.hdl.sdk.link.core.bean.response.GatewaySearchBean;
import androidx.annotation.NonNull;
/**
 * Created by jlchen on 11/11/21.
 *
 * @Description : HDLLinkConfig
 */
public class HDLLinkConfig {
    private static final String AUTHENTICATE_LS_KEY = "auth_ls_key";
    private static final String AUTHENTICATE_GATEWAYID_KEY = "auth_gatewayid_key";
    private static final String AUTHENTICATE_IPADDRESS_KEY = "auth_ipaddress_key";
    private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key";
    private static final String AUTHENTICATE_IS_CLOUD_ENCRYPT_KEY = "cloud_isencrypt_key";
    private static final String AUTHENTICATE_CLOUD_ENCRYPT_KEY = "cloud_encrypt_key";
    private static final String HOME_ID="home_id";
    private String localSecret;//本地加密密钥
    private String gatewayId;
    private String ipAddress;
    private boolean isLocalEncrypt;//网关是否需要加密通讯
    private String  homeId;
    private GatewaySearchBean currentGateway;//当前网关
    private String  aesKey;
    //云端网关是否加密
    private boolean isCloudEncrypt = true;
    private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//当前设备基本信息
    /**
     * instance
     */
    private volatile static HDLLinkConfig instance;
    /**
     * getInstance
     *
     * @return AuthenticateConfig
     */
    public static synchronized HDLLinkConfig getInstance() {
        if (instance == null) {
            synchronized (HDLLinkConfig.class) {
                if (instance == null) {
                    instance = new HDLLinkConfig();
                    instance.loadConfig();
                }
            }
        }
        return instance;
    }
    /**
     * 清空缓存
     */
    public void clearConfig() {
        this.gatewayId = "";
        this.ipAddress = "";
        this.localSecret = "";
        this.isLocalEncrypt = false;
        this.homeId="";
        SPUtils.remove(AUTHENTICATE_LS_KEY);
        SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY);
        SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY);
        SPUtils.remove(AUTHENTICATE_IS_LS_KEY);
        SPUtils.remove(HOME_ID);
    }
    /**
     * 加载缓存
     */
    void loadConfig() {
        localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, "");
//        gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, "");
//        ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, "");
        isLocalEncrypt = SPUtils.getBoolean(AUTHENTICATE_IS_LS_KEY, false);
        isCloudEncrypt = SPUtils.getBoolean(AUTHENTICATE_IS_CLOUD_ENCRYPT_KEY, false);
        aesKey = SPUtils.getString(AUTHENTICATE_CLOUD_ENCRYPT_KEY, "");
        homeId=SPUtils.getString(HOME_ID, "");
    }
    /**
     * 保存配置
     *
     * @param localSecret
     * @param gatewayId
     * @param ipAddress
     */
    public void saveConfig(String localSecret, String gatewayId, String ipAddress) {
        this.localSecret = localSecret;
        this.gatewayId = gatewayId;
        this.ipAddress = ipAddress;
        SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
        SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId);
        SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress);
    }
    /**
     * 重新保存
     */
    public void reSaveConfig() {
        this.saveConfig(this.localSecret, this.gatewayId, this.ipAddress);
    }
    public String getAesKey() {
        return aesKey == null ? "" : aesKey;
    }
    public void setAesKey(@NonNull String aesKey) {
        this.aesKey = aesKey;
        SPUtils.put(AUTHENTICATE_CLOUD_ENCRYPT_KEY, aesKey);
    }
    public boolean isCloudEncrypt() {
        return isCloudEncrypt;
    }
    public void setCloudEncrypt(@NonNull boolean cloudEncrypt) {
        isCloudEncrypt = cloudEncrypt;
        SPUtils.put(AUTHENTICATE_IS_CLOUD_ENCRYPT_KEY, cloudEncrypt);
    }
    /**
     * 检测是否已经认证过
     *
     * @return
     */
    public boolean checkIfCertified() {
        //localSecret不为空并且长度等于16 网关id不能为空
        return true;//!TextUtils.isEmpty(localSecret)
                //&& localSecret.length() == 16
                //&& !TextUtils.isEmpty(gatewayId);
    }
    public void setLocalSecret(String localSecret) {
        this.localSecret = localSecret;
        SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
    }
    public String getLocalSecret() {
        return localSecret;
    }
    /**
     * 当前住宅网关Id,oid,mac
     * @return
     */
    public String getGatewayId() {
        return gatewayId;
    }
    /**
     * 当前住宅网关Id
     * @param gatewayId
     */
    public void setGatewayId(String gatewayId) {
        this.gatewayId= gatewayId;
    }
    public String getHomeId() {
        return homeId;
    }
    public void setHomeId(String homeId) {
        this.homeId = homeId;
    }
    public String getIpAddress() {
        return ipAddress;
    }
    public void setIpAddress(String ipAddress){
        this.ipAddress = ipAddress;
    }
    public boolean isLocalEncrypt() {
        return isLocalEncrypt;
    }
    public void setLocalEncrypt(boolean localEncrypt) {
        isLocalEncrypt = localEncrypt;
        SPUtils.put(AUTHENTICATE_IS_LS_KEY, isLocalEncrypt);
    }
    /**
     * 拼接网关ID获取完整的主题
     *
     * @param topicStr
     * @return
     */
    public String getFullTopic(String topicStr) {
        return String.format(topicStr, gatewayId);
    }
    public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() {
        return deviceInfoBean;
    }
    public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) {
        this.deviceInfoBean = deviceInfoBean;
    }
}