package com.hdl.linkpm.sdk.user;
|
|
import android.text.TextUtils;
|
|
import com.google.gson.JsonObject;
|
import com.google.gson.reflect.TypeToken;
|
import com.hdl.linkpm.sdk.core.callback.IDefaultCallBack;
|
import com.hdl.linkpm.sdk.core.callback.IDefaultStrCallBack;
|
import com.hdl.linkpm.sdk.core.callback.IResponseCallBack;
|
import com.hdl.linkpm.sdk.core.exception.HDLErrorCode;
|
import com.hdl.linkpm.sdk.core.exception.HDLException;
|
import com.hdl.linkpm.sdk.user.bean.HDLLoginBean;
|
import com.hdl.linkpm.sdk.user.bean.HDLUserInfoBean;
|
import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean;
|
import com.hdl.linkpm.sdk.user.bean.ImageSubmitInfo;
|
import com.hdl.linkpm.sdk.user.bean.MqttInfo;
|
import com.hdl.linkpm.sdk.user.bean.NewVersionBean;
|
import com.hdl.linkpm.sdk.user.callback.ILoginCallBack;
|
import com.hdl.linkpm.sdk.user.callback.IMemberInfoBack;
|
import com.hdl.linkpm.sdk.user.callback.IOnReloginListener;
|
import com.hdl.linkpm.sdk.user.callback.IRegionByAccountCallBack;
|
import com.hdl.linkpm.sdk.user.controller.HDLPMUserController;
|
import com.hdl.linkpm.sdk.utils.HDLGsonUtils;
|
import com.hdl.linkpm.sdk.utils.HDLSDKLog;
|
import com.hdl.linkpm.sdk.utils.HDLSDKSPUtils;
|
|
import java.io.File;
|
import java.util.Map;
|
|
import io.reactivex.rxjava3.disposables.Disposable;
|
|
|
/**
|
* Created by jlchen on 12/2/21.
|
*/
|
public class HDLLinkPMUser {
|
private static final String TAG = "HDLLinkPMUser";
|
private static final String HDLLINK_ISLOGIN_KEY = "hdllink_islogin";//登录状态
|
public static final String HDLLINK_USER_KEY = "hdllink_user";//用户信息
|
private static final String HDLLINK_PUSHID_KEY = "hdllink_jpush_id";//极光推送绑定后端返回id
|
private static final String HDLLINK_ACCESSTOKEN_KEY = "hdllink_access_token";//用户token
|
private static final String HDLLINK_REFRESHTOKEN_KEY = "hdllink_refresh_token";//用户刷新token
|
private static final String HDLLINK_USERURL_KEY = "hdllink_user_url";//用户请求域名地址
|
private static final String HDLLINK_HOMEURL_KEY = "hdllink_home_url";//用户请求域名地址
|
/// 用户注册所在服务器域名地址
|
private String userRegionUrl;
|
/// 住宅所在服务器域名地址 住宅相关接口都用这个地址
|
private String homeRegionUrl;
|
//是否登录状态
|
private boolean isLogin = false;
|
/// 用户有效身份Token
|
private String accessToken;
|
/// 刷新Token
|
private String refreshToken;
|
//登录成功后的用户信息
|
private HDLUserInfoBean mUser;
|
//当用户AccessToken 错误后发出的通知 登出处理
|
private IOnReloginListener mOnReloginListener;
|
//instance
|
private volatile static HDLLinkPMUser instance;
|
|
/**
|
* getInstance
|
*
|
* @return HDLSmartUser
|
*/
|
public static synchronized HDLLinkPMUser getInstance() {
|
if (instance == null) {
|
synchronized (HDLLinkPMUser.class) {
|
if (instance == null) {
|
instance = new HDLLinkPMUser();
|
instance.loadData();//加载缓存的HDLUserBean对象
|
}
|
}
|
}
|
return instance;
|
}
|
|
/**
|
* loadData 加载缓存的HDLUser对象
|
*/
|
private void loadData() {
|
//1.
|
isLogin = HDLSDKSPUtils.getBoolean(HDLLINK_ISLOGIN_KEY);
|
//2.
|
accessToken = HDLSDKSPUtils.getString(HDLLINK_ACCESSTOKEN_KEY);
|
//3.
|
refreshToken = HDLSDKSPUtils.getString(HDLLINK_REFRESHTOKEN_KEY);
|
//4.
|
userRegionUrl = HDLSDKSPUtils.getString(HDLLINK_USERURL_KEY);
|
//5.
|
homeRegionUrl = HDLSDKSPUtils.getString(HDLLINK_HOMEURL_KEY);
|
//6.
|
String userJsonStr = HDLSDKSPUtils.getString(HDLLINK_USER_KEY);
|
if (!TextUtils.isEmpty(userJsonStr)) //防空判断
|
{
|
mUser = HDLGsonUtils.fromJson(userJsonStr, new TypeToken<HDLUserInfoBean>() {
|
}.getType());
|
if (mUser == null) {
|
saveLogin(false);//重新标记为未登录
|
}
|
}
|
}
|
|
/**
|
* 登录成功或者刷新token后 保存一次HDLUser对象
|
*/
|
private void saveHDLUserBean(HDLUserInfoBean user) {
|
String mUserJsonStr = HDLGsonUtils.toJson(user); //将List转换成Json
|
HDLSDKSPUtils.put(HDLLINK_USER_KEY, mUserJsonStr);
|
}
|
|
/**
|
* 保存极光推送绑定之后的id
|
*/
|
public void saveHDLJpushId(String pushId) {
|
HDLSDKSPUtils.put(HDLLINK_PUSHID_KEY, pushId);
|
}
|
|
/**
|
* 获取极光推送绑定之后的id
|
*/
|
public String getHDLJpushId() {
|
return HDLSDKSPUtils.getString(HDLLINK_PUSHID_KEY);
|
}
|
|
/**
|
* 保存登录状态
|
*
|
* @param isLogin
|
*/
|
private void saveLogin(Boolean isLogin) {
|
HDLSDKSPUtils.put(HDLLINK_ISLOGIN_KEY, isLogin);
|
}
|
|
/**
|
* 登录成功后,刷新和保存相关用户身份参数
|
*
|
* @param userBean
|
*/
|
private void loginSuccess(HDLLoginBean userBean) {
|
//1.保存登录状态
|
saveLogin(true);
|
//2.保存token
|
saveAccessToken(userBean.getHeaderPrefix() + userBean.getAccessToken());
|
//3.保存刷新token
|
saveRefreshToken(userBean.getRefreshToken());
|
//4.保存mUser对象到缓存
|
this.mUser = new HDLUserInfoBean(userBean);
|
saveHDLUserBean(this.mUser);
|
}
|
|
private void saveAccessToken(String accessToken) {
|
this.accessToken = accessToken;
|
HDLSDKSPUtils.put(HDLLINK_ACCESSTOKEN_KEY, this.accessToken);
|
}
|
|
private void saveRefreshToken(String refreshToken) {
|
this.refreshToken = refreshToken;
|
HDLSDKSPUtils.put(HDLLINK_REFRESHTOKEN_KEY, this.refreshToken);
|
}
|
|
/**
|
* @param userBean
|
*/
|
public void updateRefreshToken(HDLLoginBean userBean) {
|
if (userBean == null) return;
|
//刷新token返回的数据可能不带account、userPhone等相关参数,所以不能更新user值、只更新AccessToken和刷新Token的值就好了
|
//1.保存登录状态
|
saveLogin(true);
|
//2.保存token
|
saveAccessToken(userBean.getHeaderPrefix() + userBean.getAccessToken());
|
//3.保存刷新token
|
saveRefreshToken(userBean.getRefreshToken());
|
}
|
|
/**
|
* 清空登录状态
|
*/
|
private void removeAll() {
|
//1.设置未登录状态
|
saveLogin(false);
|
//2.清空token
|
saveAccessToken("");
|
//3.清空刷新token
|
saveRefreshToken("");
|
//4.清空用户对象
|
saveHDLUserBean(new HDLUserInfoBean());
|
}
|
|
/**
|
* 通知退出重新登录
|
* @param type: 0:正常退出 1:极光推送强制退出
|
*/
|
private void notificationRelogin(int type) {
|
if (mOnReloginListener != null) {
|
mOnReloginListener.onReLogin(type);
|
}
|
}
|
|
/**
|
* 退出登录
|
* @param type: 0:正常退出 1:极光推送强制退出
|
*/
|
public void logout(int type) {
|
//1.清空登录状态
|
removeAll();
|
//2.发出重新登录通知
|
notificationRelogin(type);
|
}
|
|
/****************************请求接口****************************/
|
/**
|
* 获取账号所在区域
|
*
|
* @param account 账号
|
* @param callBack 结果回调
|
*/
|
public void regionByAccount(String account, IRegionByAccountCallBack callBack) {
|
HDLPMUserController.getInstance().regionByAccount(account, new IRegionByAccountCallBack() {
|
@Override
|
public void onSuccess(HDLUserRegionBean regionBean) {
|
if (regionBean != null) {
|
//查询成功记录一次
|
setUserRegionUrl(regionBean.getRegionUrl());
|
if (callBack != null) {
|
callBack.onSuccess(regionBean);
|
}
|
} else {
|
if (callBack != null) {
|
callBack.onFailure(HDLException.getErrorWithCode(HDLErrorCode.HDL_DATA_PARSING_ERROR));
|
}
|
}
|
}
|
|
@Override
|
public void onFailure(HDLException error) {
|
if (callBack != null) {
|
callBack.onFailure(error);
|
}
|
}
|
});
|
}
|
|
/**
|
* 通过账号和密码登录
|
* @param isBooleanB true=B,false=C
|
* @param account 账号
|
* @param loginPwd 密码
|
*
|
* @param callBack 结果回调
|
*/
|
public void loginByPassword(boolean isBooleanB,String account, String loginPwd, ILoginCallBack callBack) {
|
HDLPMUserController.getInstance().loginByPassword(isBooleanB,account, loginPwd, new ILoginCallBack() {
|
@Override
|
public void onSuccess(HDLLoginBean loginBean) {
|
loginSuccess(loginBean);
|
if (callBack != null) {
|
callBack.onSuccess(loginBean);
|
}
|
}
|
|
@Override
|
public void onFailure(HDLException error) {
|
if (callBack != null) {
|
callBack.onFailure(error);
|
}
|
}
|
});
|
}
|
|
/**
|
* 登录
|
* 通过验证码
|
*
|
* @param account 手机或者邮箱
|
* @param vCode 验证码
|
* @param callBack 回调
|
* @return
|
*/
|
public void loginByCode(String account, String vCode, ILoginCallBack callBack) {
|
HDLPMUserController.getInstance().loginByCode(account, vCode, new ILoginCallBack() {
|
@Override
|
public void onSuccess(HDLLoginBean loginBean) {
|
loginSuccess(loginBean);
|
if (callBack != null) {
|
callBack.onSuccess(loginBean);
|
}
|
}
|
|
@Override
|
public void onFailure(HDLException error) {
|
if (callBack != null) {
|
callBack.onFailure(error);
|
}
|
}
|
});
|
}
|
|
/**
|
* 通用 发送验证码方法
|
* LanguageTypeEnum CHINESE,ENGLISH
|
*
|
* @param verifyType 1:注册 2:找回密码 3:绑定 4:验证码登陆 5:敏感数据
|
* @param account 邮箱或者手机号
|
* @param isPhone 是否手机
|
* @param phoneZoneCode 手机国家区号
|
* @param languageType 语言
|
* @param callBack
|
* @return
|
*/
|
public void verificationCodeSend(int verifyType, String account, Boolean isPhone, String phoneZoneCode, String languageType, IDefaultCallBack callBack) {
|
HDLPMUserController.getInstance().verificationCodeSend(verifyType, account, isPhone, phoneZoneCode, languageType, callBack);
|
}
|
|
/**
|
* 忘记密码,重置密码
|
*
|
* @param account 邮箱或者手机号
|
* @param password 新密码
|
* @param vCode 验证码
|
* @param isPhone 是否手机
|
* @param callBack 回调
|
*/
|
public void forgetPassword(String account, String password, String vCode, Boolean isPhone, IDefaultCallBack callBack) {
|
HDLPMUserController.getInstance().forgetPassword(account, password, vCode, isPhone, callBack);
|
}
|
|
/**
|
* 更改个人密码
|
*
|
* @param userId 当前用户ID
|
* @param loginOldPwd 老密码
|
* @param loginPwd 新密码
|
* @param callBack 回调
|
*/
|
public void updateProgramPassword(String userId, String loginOldPwd, String loginPwd, IDefaultCallBack callBack) {
|
HDLPMUserController.getInstance().updateProgramPassword(userId, loginOldPwd, loginPwd, callBack);
|
}
|
|
/**
|
* 获取用户个人信息
|
*
|
* @param callBack
|
*/
|
public void getMemberInfo(IMemberInfoBack callBack) {
|
HDLPMUserController.getInstance().getMemberInfo(callBack);
|
}
|
|
/**
|
* 更新个人信息
|
* memberHeadIcon、memberName、memberBirthday、languageType、memberSex
|
*
|
* @param callBack
|
*/
|
public void updateMemberInfo(JsonObject updateInfo, IDefaultCallBack callBack) {
|
HDLPMUserController.getInstance().updateMemberInfo(updateInfo, callBack);
|
}
|
|
/**
|
* 获取用户头像路径
|
*
|
* @param memberHeadIconKey 用户头像imageKey
|
* @param callBack
|
*/
|
public void getHeadImageUrl(String memberHeadIconKey, IDefaultStrCallBack callBack) {
|
HDLPMUserController.getInstance().getHeadImageUrl(memberHeadIconKey, callBack);
|
}
|
|
/**
|
* 上传用户头像
|
*
|
* @param userId 用户id
|
* @param imageBytes 头像图片
|
* @param callBack
|
* @return
|
*/
|
public void uploadUserHeadImage(String userId, byte[] imageBytes, IDefaultStrCallBack callBack) {
|
HDLPMUserController.getInstance().uploadUserHeadImage(userId, imageBytes, callBack);
|
}
|
|
/**
|
* 上传用户头像
|
*
|
* @param file 图片文件
|
* @param callBack
|
* @return
|
*/
|
public void uploadUserHeadImage(File file, IResponseCallBack<ImageSubmitInfo> callBack) {
|
HDLPMUserController.getInstance().uplfadUserHeadImage(file, callBack);
|
}
|
|
|
/**
|
* APP版本检测更新
|
*
|
* @param appCode app编码
|
* @param version 版本号
|
* @param callBack 如果onSuccess 回调的bean为空,代表当前版本已经是最新版本,没有新版本
|
* @return
|
*/
|
public void checkAppVersion(String appCode, String version, IResponseCallBack<NewVersionBean> callBack) {
|
HDLPMUserController.getInstance().checkAppVersion(appCode, version, "Android", callBack);
|
}
|
|
/**
|
* 小程序wgt版本检测更新
|
*
|
* @param appCode app编码
|
* @param wgtVersion 小程序wgt版本号
|
* @param callBack 如果onSuccess 回调的bean为空,代表当前版本已经是最新版本,没有新版本
|
* @return
|
*/
|
public void checkWgtVersion(String appCode, String wgtVersion, IResponseCallBack<NewVersionBean> callBack) {
|
HDLPMUserController.getInstance().checkAppVersion(appCode, wgtVersion,"wgt", callBack);
|
}
|
|
/**
|
* 获取mqtt
|
*/
|
public void getMqttInfo(String attachClientId, String homeType, String deviceUuid, IResponseCallBack<MqttInfo>listener) {
|
HDLPMUserController.getInstance().getMqttInfo(attachClientId, homeType, deviceUuid, listener);
|
}
|
|
/****************************请求接口****************************/
|
|
|
public String getUserRegionUrl() {
|
if (TextUtils.isEmpty(userRegionUrl)) {
|
HDLSDKLog.e(TAG, "userRegionUrl null ");
|
}
|
return userRegionUrl;
|
}
|
|
public void setUserRegionUrl(String userRegionUrl) {
|
this.userRegionUrl = userRegionUrl;
|
HDLSDKSPUtils.put(HDLLINK_USERURL_KEY, this.userRegionUrl);
|
}
|
|
public boolean isLogin() {
|
return isLogin;
|
}
|
|
public HDLUserInfoBean getUser() {
|
return mUser;
|
}
|
|
public String getAccessToken() {
|
return accessToken;
|
}
|
|
public String getRefreshToken() {
|
return refreshToken;
|
}
|
|
public String getHomeRegionUrl() {
|
//如果没配置住宅的域名请求地址则默认用用户的
|
if (TextUtils.isEmpty(homeRegionUrl)) {
|
return getUserRegionUrl();
|
}
|
return homeRegionUrl;
|
}
|
|
/**
|
* 设置住宅请求的地址
|
*
|
* @param homeRegionUrl
|
*/
|
public void setHomeRegionUrl(String homeRegionUrl) {
|
this.homeRegionUrl = homeRegionUrl;
|
HDLSDKSPUtils.put(HDLLINK_HOMEURL_KEY, homeRegionUrl);
|
}
|
|
// private IOnReloginListener getOnReloginListener() {
|
// return mOnReloginListener;
|
// }
|
|
public void setOnReloginListener(IOnReloginListener onReloginListener) {
|
mOnReloginListener = onReloginListener;
|
}
|
}
|