350 lines
9.8 KiB
Java
350 lines
9.8 KiB
Java
package com.yunbao.common.manager;
|
||
|
||
import android.content.Context;
|
||
import android.os.Handler;
|
||
import android.text.TextUtils;
|
||
|
||
import androidx.annotation.NonNull;
|
||
|
||
import com.google.gson.Gson;
|
||
import com.yunbao.common.bean.IMLoginModel;
|
||
import com.yunbao.common.event.DataUserInfoEvent;
|
||
import com.yunbao.common.http.HttpCallback;
|
||
import com.yunbao.common.http.HttpClient;
|
||
import com.yunbao.common.manager.base.BaseCacheManager;
|
||
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
|
||
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
|
||
import com.yunbao.common.utils.SpUtil;
|
||
|
||
import org.greenrobot.eventbus.EventBus;
|
||
|
||
/**
|
||
* 登录者信息管理
|
||
*/
|
||
public class IMLoginManager extends BaseCacheManager {
|
||
private final static String KEY_USER_INFO = "keyUserInfo";
|
||
private static IMLoginManager manager;
|
||
private IMLoginModel userInfo;
|
||
private final static String isNewUserGif = "isNewUserGif";
|
||
private final static String isNewUserOne = "isNewUserOne";
|
||
private final static String GiftEffect = "giftEffect";
|
||
private final static String MountEffect = "mountEffect";
|
||
private final static String IS_CHAT = "isChat";
|
||
private final static String IS_SLIDE = "isSlide";
|
||
private final static String IS_FLOAT = "is_float";
|
||
private final static String IS_HINT = "is_hint";
|
||
private final static String IS_HINT2 = "is_hint2";
|
||
|
||
|
||
public boolean isHint() {
|
||
return 1 == getInt(IS_HINT, 0);
|
||
}
|
||
|
||
public void initISHint() {
|
||
if (getInt(IS_HINT, 0) < 2) {
|
||
int number = getInt(IS_HINT, 0) + 1;
|
||
put(IS_HINT, number);
|
||
}
|
||
}
|
||
|
||
public boolean isHint2() {
|
||
return getBoolean(IS_HINT2, true);
|
||
}
|
||
|
||
public void initISHint2() {
|
||
put(IS_HINT2, false);
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 存储是否打开悬浮窗权限提示
|
||
*
|
||
* @param isFloat
|
||
*/
|
||
public void initFloat(boolean isFloat) {
|
||
put(IS_FLOAT, isFloat);
|
||
}
|
||
|
||
/**
|
||
* @return
|
||
*/
|
||
public boolean isFloat() {
|
||
return getBoolean(IS_FLOAT, true);
|
||
}
|
||
|
||
/**
|
||
* @param isChat 是否隐藏聊天列表 is_chat 1:开启 0:关闭
|
||
*/
|
||
public void initChat(String isChat) {
|
||
put(IS_CHAT, isChat);
|
||
}
|
||
|
||
/**
|
||
* 设置直播间是否滚动
|
||
*
|
||
* @param isSlide 滚动
|
||
*/
|
||
public void initSlide(boolean isSlide) {
|
||
put(IS_SLIDE, isSlide);
|
||
}
|
||
|
||
/**
|
||
* 获取之比肩是否滚动
|
||
*
|
||
* @return
|
||
*/
|
||
public boolean isSlide() {
|
||
return getBoolean(IS_SLIDE, true);
|
||
}
|
||
|
||
/**
|
||
* 是否隐藏聊天列表
|
||
*
|
||
* @return
|
||
*/
|
||
public boolean hintChat() {
|
||
return TextUtils.equals(getString(IS_CHAT), "0");
|
||
}
|
||
|
||
//暂时缓存token
|
||
private String token = "";
|
||
|
||
//根据用户信息
|
||
private Handler netHandler = null;
|
||
private Context context;
|
||
|
||
private IMLoginManager(Context context) {
|
||
super(context);
|
||
this.context = context;
|
||
|
||
}
|
||
|
||
//新用戶是否送了禮物
|
||
public boolean isNewUserGif() {
|
||
return getBoolean(isNewUserGif, false);
|
||
}
|
||
|
||
//是否是新用戶還沒有送禮物
|
||
public void setNewUserGif(boolean t) {
|
||
put(isNewUserGif, t);
|
||
}
|
||
|
||
// 是否新用户第一次進直播間
|
||
public boolean isisNewUserOne() {
|
||
return getBoolean(isNewUserOne, false);
|
||
}
|
||
|
||
//新用戶是否送了禮物
|
||
public void setisNewUserOne(boolean t) {
|
||
put(isNewUserOne, t);
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取单利
|
||
*
|
||
* @return
|
||
*/
|
||
public static IMLoginManager get(Context context) {
|
||
if (null == manager) {
|
||
manager = new IMLoginManager(context);
|
||
}
|
||
return manager;
|
||
}
|
||
|
||
/**
|
||
* 获取用户信息
|
||
*
|
||
* @return
|
||
*/
|
||
public IMLoginModel getUserInfo() {
|
||
if (null == userInfo) {
|
||
userInfo = new Gson().fromJson(
|
||
getString(KEY_USER_INFO), IMLoginModel.class);
|
||
if (userInfo != null) {
|
||
token = userInfo.getToken();
|
||
}
|
||
|
||
}
|
||
|
||
return userInfo;
|
||
}
|
||
|
||
/**
|
||
* 判断是否已登录
|
||
*
|
||
* @param context
|
||
* @return
|
||
*/
|
||
public static boolean isLogin(Context context) {
|
||
return null != get(context).getUserInfo();
|
||
}
|
||
|
||
/**
|
||
* 设置已登录的用户信息
|
||
*
|
||
* @param model
|
||
*/
|
||
public void setupLoginUser(@NonNull IMLoginModel model) {
|
||
this.userInfo = model;
|
||
if (userInfo != null && !TextUtils.isEmpty(userInfo.getToken())) {
|
||
token = userInfo.getToken();
|
||
}
|
||
if (netHandler == null) {
|
||
netHandler = new Handler();
|
||
}
|
||
netHandler.post(isInstructorRunnable);
|
||
}
|
||
|
||
/**
|
||
* 调用User.getBaseInfos接口时更新用户本地数据
|
||
*
|
||
* @param json
|
||
*/
|
||
public void upDataUserInfo(@NonNull String json) {
|
||
userInfo = new Gson().fromJson(json, IMLoginModel.class);
|
||
if (!TextUtils.isEmpty(token)) {
|
||
userInfo.setToken(token);
|
||
}
|
||
put(KEY_USER_INFO, new Gson().toJson(userInfo));
|
||
//兼容老模块(之后要把用户维护的类更换掉)
|
||
SpUtil.getInstance().setStringValue(SpUtil.USER_INFO, new Gson().toJson(userInfo));
|
||
}
|
||
|
||
/**
|
||
* 调用User.getBaseInfos接口时更新用户本地数据
|
||
*
|
||
* @param model
|
||
*/
|
||
public void upDataUserInfo(@NonNull IMLoginModel model) {
|
||
userInfo = model;
|
||
if (!TextUtils.isEmpty(token)) {
|
||
userInfo.setToken(token);
|
||
}
|
||
put(KEY_USER_INFO, new Gson().toJson(userInfo));
|
||
//兼容老模块(之后要把用户维护的类更换掉)
|
||
SpUtil.getInstance().setStringValue(SpUtil.USER_INFO, new Gson().toJson(userInfo));
|
||
}
|
||
|
||
public void setGiftEffect(boolean giftEffect) {
|
||
put(GiftEffect, giftEffect);
|
||
}
|
||
|
||
public void setMountEffect(boolean mountEffect) {
|
||
|
||
put(MountEffect, mountEffect);
|
||
}
|
||
|
||
public boolean isMountEffect() {
|
||
return getBoolean(MountEffect, true);
|
||
}
|
||
|
||
public boolean isGiftEffect() {
|
||
return getBoolean(GiftEffect, true);
|
||
}
|
||
|
||
/**
|
||
* 重新请求管理员身份信息
|
||
*/
|
||
public void checkInstructor() {
|
||
if (netHandler == null) {
|
||
netHandler = new Handler();
|
||
}
|
||
netHandler.post(isInstructorRunnable);
|
||
}
|
||
|
||
/**
|
||
* 获取是不是新手指导员的身份
|
||
*/
|
||
private Runnable isInstructorRunnable = new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
HttpClient.getInstance().get("User.isInstructor", "isInstructor")
|
||
.params("uid", userInfo.getId(), true)
|
||
.params("token", userInfo.getToken(), true)
|
||
.execute(new HttpCallback() {
|
||
@Override
|
||
public void onSuccess(int code, String msg, String[] info) {
|
||
if (info.length > 0) {
|
||
if ("1".equals(info[0])) {
|
||
userInfo.setIsAdmin("1");
|
||
InstructorRemarkManager.get(context).getNetInstructorRemark();
|
||
} else {
|
||
userInfo.setIsAdmin("0");
|
||
}
|
||
}
|
||
put(KEY_USER_INFO, new Gson().toJson(userInfo));
|
||
//兼容老模块(之后要把用户维护的类更换掉)
|
||
SpUtil.getInstance().setStringValue(SpUtil.USER_INFO, new Gson().toJson(userInfo));
|
||
}
|
||
});
|
||
|
||
}
|
||
};
|
||
|
||
|
||
/**
|
||
* 退出登录
|
||
*/
|
||
public void logout() {
|
||
|
||
//删除用户登录信息
|
||
deleteByKey(KEY_USER_INFO);
|
||
deleteByKey(isNewUserGif);
|
||
deleteByKey(isNewUserOne);
|
||
//清理指导员信息
|
||
NoviceInstructorManager.get(context).deleteOfLogin();
|
||
//用户对象置空
|
||
userInfo = null;
|
||
manager = null;
|
||
//删除私聊对话
|
||
// IMCenter.getInstance().clearConversations(null, Conversation.ConversationType.PRIVATE);
|
||
RongcloudIMManager.logoutIM();
|
||
MessageIMManager.get(context).logout();
|
||
put(IS_HINT, 0);
|
||
|
||
}
|
||
|
||
/**
|
||
* 檢查老版本信息是否純在
|
||
*
|
||
* @return
|
||
*/
|
||
public boolean checkOLd() {
|
||
String[] uidAndToken = SpUtil.getInstance().getMultiStringValue(new String[]{SpUtil.UID, SpUtil.TOKEN});
|
||
String uid = uidAndToken[0];
|
||
String token = uidAndToken[1];
|
||
return (!TextUtils.isEmpty(uid) && !TextUtils.isEmpty(token));
|
||
}
|
||
|
||
/**
|
||
* 更新用戶信息
|
||
*/
|
||
public void upDataUserInfo() {
|
||
String[] uidAndToken = SpUtil.getInstance().getMultiStringValue(new String[]{SpUtil.UID, SpUtil.TOKEN});
|
||
String uid = uidAndToken[0];
|
||
String token = uidAndToken[1];
|
||
if (TextUtils.isEmpty(token)) return;
|
||
HttpClient.getInstance().get("User.getBaseInfos", "getBaseInfo")
|
||
.params("uid", uid)
|
||
.params("token", token)
|
||
.execute(new HttpCallback() {
|
||
@Override
|
||
public void onSuccess(int code, String msg, String[] info) {
|
||
if (code == 0 && info.length > 0) {
|
||
userInfo = new Gson().fromJson(info[0], IMLoginModel.class);
|
||
if (!TextUtils.isEmpty(uidAndToken[1])) {
|
||
userInfo.setToken(uidAndToken[1]);
|
||
}
|
||
EventBus.getDefault().post(new DataUserInfoEvent().setUpDataSuccess(true));
|
||
} else {
|
||
EventBus.getDefault().post(new DataUserInfoEvent().setUpDataSuccess(false));
|
||
}
|
||
put(KEY_USER_INFO, new Gson().toJson(userInfo));
|
||
}
|
||
});
|
||
}
|
||
|
||
}
|