2023-10-10 00:35:38 +08:00

476 lines
13 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.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.lzf.easyfloat.EasyFloat;
import com.yunbao.common.CommonAppContext;
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 com.yunbao.common.views.floatingview.APPEasyFloat;
import org.greenrobot.eventbus.EventBus;
import java.util.Locale;
/**
* 登录者信息管理
*/
public class IMLoginManager extends BaseCacheManager {
private final String KEY_USER_INFO = "keyUserInfo";
private static IMLoginManager manager;
private IMLoginModel userInfo;
private final String isNewUserGif = "isNewUserGif";
private final String isNewUserOne = "isNewUserOne";
private final String GiftEffect = "giftEffect";
private final String MountEffect = "mountEffect";
private final String IS_CHAT = "isChat";
private final String IS_SLIDE = "isSlide";
private final String IS_FLOAT = "is_float";
private final String IS_HINT = "is_hint";
private final String IS_HINT2 = "is_hint2";
private final String SELECT_CLARITY = "selectClarity";
private final String CLARITY = "clarity";
private final String xiaJBG = "xiaJBG";
private final String keyDefaultBubbleUrl = "defaultBubbleUrl";
private final String STATUS_ANCHOR_SAY = "anchorSay";
private final String STATUS_ANCHOR_CALL = "anchorCallMe";
private final String LIVE_NOTIFY_SETTINGS = "liveNotifySettings";//开播通知
private final String KEY_LANGUAGE = "language";
public void setLanguage(boolean isEnglish) {
put(KEY_LANGUAGE, isEnglish);
}
public Locale getLocaleLanguage() {
Locale locale = context.getResources().getConfiguration().locale;
String language = locale.getLanguage();
if (language.contains("HK") || language.contains("hk") || language.contains("TW") || language.contains("tw")) {
language = "zh";
}
if (!getBoolean(KEY_LANGUAGE, !TextUtils.equals(language, "zh"))) {
return Locale.TRADITIONAL_CHINESE;
} else {
return new Locale("en", "rUS");
}
}
public void setDefaultBubbleUrl(String defaultBubbleUrl) {
put(keyDefaultBubbleUrl, defaultBubbleUrl);
}
public String getKeyDefaultBubbleUrl() {
return getString(keyDefaultBubbleUrl);
}
public void setXiaJBG(boolean xjbg) {
put(xiaJBG, xjbg);
}
public boolean IsXiaJBG() {
return getBoolean(xiaJBG, false);
}
public void setClarity(String clarity) {
put(CLARITY, clarity);
}
/**
* 1080p开播分辨率clarity 0关闭 1开启
*
* @return
*/
public boolean getClarity() {
return TextUtils.equals(getString(CLARITY), "1");
}
/**
* 设置清晰度
*
* @param selectClarity
*/
public void setSelectClarity(int selectClarity) {
put(SELECT_CLARITY, selectClarity);
}
/**
* 获取清晰度
*
* @return
*/
public int getSelectClarity() {
return getInt(SELECT_CLARITY, 0);
}
/**
* 获取女神说设置状态
*/
public int getAnchorSayStatus() {
return getInt(STATUS_ANCHOR_SAY, 0);
}
/**
* 获取联系主播方式设置状态
*/
public int getAnchorCallStatus() {
return getInt(STATUS_ANCHOR_CALL, 0);
}
/**
* 设置女神说设置状态
*/
public void setAnchorSayStatus(int status) {
put(STATUS_ANCHOR_SAY, status);
}
/**
* 设置联系主播方式设置状态
*/
public void setAnchorCallMeStatus(int status) {
put(STATUS_ANCHOR_CALL, status);
}
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(CommonAppContext.sInstance.getBaseContext());
}
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;
}
public void setMedalName(String medalName) {
userInfo.setMedalName(medalName);
}
/**
* 判断是否已登录
*
* @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, !(Build.VERSION.SDK_INT < Build.VERSION_CODES.O));
}
public boolean isGiftEffect() {
return getBoolean(GiftEffect, !(Build.VERSION.SDK_INT < Build.VERSION_CODES.O));
}
public void setLiveNotifySettings(boolean isTrue) {
put(LIVE_NOTIFY_SETTINGS, isTrue);
}
public boolean isLiveNotifySettings() {
return getBoolean(LIVE_NOTIFY_SETTINGS, 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 && userInfo != null) {
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(Activity activity) {
//删除用户登录信息
deleteByKey(KEY_USER_INFO);
deleteByKey(isNewUserGif);
deleteByKey(isNewUserOne);
//清理指导员信息
NoviceInstructorManager.get(activity).deleteOfLogin();
//用户对象置空
userInfo = null;
manager = null;
//删除私聊对话
// IMCenter.getInstance().clearConversations(null, Conversation.ConversationType.PRIVATE);
RongcloudIMManager.logoutIM();
MessageIMManager.get(activity).logout();
put(IS_HINT, 0);
APPEasyFloat.getInstance().dismiss(activity);
if (EasyFloat.isShow("LiveFloatView")) {
EasyFloat.dismiss("LiveFloatView", true);
}
}
/**
* 檢查老版本信息是否純在
*
* @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));
}
});
}
}