New file |
| | |
| | | package com.hdl.linkpm.sdk.user; |
| | | |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | |
| | | 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) { |
| | | HDLSDKLog.i(TAG, "登录状态:"+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) { |
| | | HDLSDKLog.i(TAG, "AccessToken:"+accessToken); |
| | | this.accessToken = accessToken; |
| | | HDLSDKSPUtils.put(HDLLINK_ACCESSTOKEN_KEY, this.accessToken); |
| | | } |
| | | |
| | | private void saveRefreshToken(String refreshToken) { |
| | | HDLSDKLog.i(TAG, "RefreshToken:"+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) { |
| | | HDLSDKLog.i(TAG, "通知重新登录,登录类型:" + type); |
| | | 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 account 账号 |
| | | * @param loginPwd 密码 |
| | | * @param callBack 结果回调 |
| | | */ |
| | | public void loginByPassword(String account, String loginPwd, ILoginCallBack callBack) { |
| | | HDLPMUserController.getInstance().loginByPassword(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 isBooleanB true=B,false=C |
| | | * @param account 账号 |
| | | * @param callBack 结果回调 |
| | | */ |
| | | public void regionByAccount(boolean isBooleanB, String account, IRegionByAccountCallBack callBack) { |
| | | HDLPMUserController.getInstance().regionByAccount(isBooleanB,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; |
| | | } |
| | | } |