2022-10-25 16:10:50 +08:00

350 lines
9.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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));
}
});
}
}