Files
yuliao_and/app/src/main/java/com/hbl/yuliao/IMApplication.java
2026-02-24 09:59:59 +08:00

433 lines
18 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.
// Copyright (c) 2022 NetEase, Inc. All rights reserved.
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.
package com.hbl.yuliao;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.PATH_FUN_TEAM_SETTING_PAGE;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import com.hbl.yuliao.imkit.team.TeamAnnouncementActivity;
import com.hbl.yuliao.map.LocationPageActivity1;
import com.hbl.yuliao.utils.GsonUtils;
import com.heytap.msp.push.HeytapPushManager;
import com.netease.yunxin.kit.chatkit.model.IMMessageInfo;
import com.netease.yunxin.kit.chatkit.repo.ChatObserverRepo;
import com.netease.yunxin.kit.chatkit.ui.ChatKitUIConstant;
import com.netease.yunxin.kit.chatkit.ui.common.ChatDataUtils;
import com.netease.yunxin.kit.chatkit.ui.common.ChatUtils;
import com.netease.yunxin.kit.chatkit.ui.page.LocationPageActivity;
import com.netease.yunxin.kit.conversationkit.ui.fun.viewholder.EmojiManager;
import com.netease.yunxin.kit.corekit.im.model.EventObserver;
import com.scwang.smart.refresh.footer.ClassicsFooter;
import androidx.annotation.Nullable;
import androidx.multidex.MultiDexApplication;
import com.blankj.utilcode.util.LanguageUtils;
import com.hbl.yuliao.contact.ContactGroupSettingActivity;
import com.hbl.yuliao.contact.FunBlackListActivity;
import com.hbl.yuliao.imkit.person.PersonSettingActivity;
import com.hbl.yuliao.imkit.selector.FunContactSelectorActivity;
import com.hbl.yuliao.imkit.team.TeamSettingActivity;
import com.hbl.yuliao.main.MainActivity;
import com.hbl.yuliao.main.mine.MineInfoActivity;
import com.hbl.yuliao.contact.UserInfoActivity;
import com.hbl.yuliao.model.AlbumBean;
import com.hbl.yuliao.network.Api;
import com.hbl.yuliao.network.BaseObserver;
import com.hbl.yuliao.network.Result;
import com.hbl.yuliao.push.PushMessageHandler;
import com.hbl.yuliao.utils.Constant;
import com.hbl.yuliao.utils.DataUtils;
import com.hbl.yuliao.utils.LogUtils;
import com.hbl.yuliao.voom.TiktoInfokActivity;
import com.hbl.yuliao.welcome.WelcomeActivity;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.yunxin.kit.alog.ALog;
import com.netease.yunxin.kit.chatkit.ui.common.RxBus;
import com.netease.yunxin.kit.chatkit.ui.custom.StickerAttachment;
import com.netease.yunxin.kit.chatkit.ui.fun.page.FunChatSettingActivity;
import com.netease.yunxin.kit.chatkit.ui.model.RxBusToVoom;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.contactkit.ui.ContactConstant;
import com.netease.yunxin.kit.corekit.im.IMKitClient;
import com.netease.yunxin.kit.corekit.im.repo.SettingRepo;
import com.netease.yunxin.kit.corekit.im.utils.IMKitUtils;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
//import com.netease.yunxin.kit.locationkit.LocationKitClient;
import com.tencent.bugly.crashreport.CrashReport;
import com.vivo.push.PushClient;
import com.vivo.push.util.VivoPushException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
//import cn.jiguang.api.JCoreInterface;
//import cn.jiguang.api.utils.JCollectionAuth;
//import cn.jpush.android.api.JPushInterface;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class IMApplication extends MultiDexApplication {
private static final String TAG = "IMApplication";
private static boolean coldStart = false;
private static int foregroundActCount = 0;
public static final int LOGIN_PARENT_SCOPE = 2;
public static final int LOGIN_SCOPE = 7;
public static IMApplication AppContext;
// public LLM llm;
public static String schemeUserId = null;
public static String schemeTeamId = null;
public static String schemeSilverQrCode = null;
public static String fcmpayload = "";
public static IMApplication getInstance() {
return AppContext;
}
@Override
public void onCreate() {
super.onCreate();
ALog.d(Constant.PROJECT_TAG, TAG, "onCreate");
//app init
registerActivityLifeCycle();
// AppCrashHandler.getInstance().initCrashHandler(this);
// Thread.setDefaultUncaughtExceptionHandler(AppCrashHandler.getInstance());
AppContext = this;
initUIKit();
// temp register for mine
registerRouter();
CrashReport.initCrashReport(getApplicationContext(), "29ecb7c2d2", true);
initLang();
initAiSDK();
// JPushInterface.setDebugMode(BuildConfig.DEBUG);
// JPushInterface.init(this);
// JCoreInterface.testCountryCode(this, "us");
// String id = JPushInterface.getRegistrationID(this);
// LogUtils.d("id===" + id);
// JCollectionAuth.setAuth(this, true); //如初始化被拦截过,将重试初始化过程
RxBus.getInstance().toObservable(RxBusToVoom.class)
.subscribeOn(rx.schedulers.Schedulers.io())
.unsubscribeOn(rx.schedulers.Schedulers.io())
.subscribe(changeImageViewBean -> {//回顶部
getPostInfo(changeImageViewBean);
});
initFooter();
EmojiManager.init(this);
}
public void initFooter() {
ClassicsFooter.REFRESH_FOOTER_PULLING = getResources().getString(R.string.srl_footer_pulling);//"上拉加载更多";
ClassicsFooter.REFRESH_FOOTER_RELEASE = getResources().getString(R.string.srl_footer_release);//"释放立即加载";
ClassicsFooter.REFRESH_FOOTER_LOADING = getResources().getString(R.string.srl_footer_loading);//"正在刷新...";
ClassicsFooter.REFRESH_FOOTER_REFRESHING = getResources().getString(R.string.srl_footer_refreshing);//"正在加载...";
ClassicsFooter.REFRESH_FOOTER_FINISH = getResources().getString(R.string.srl_footer_finish);//"加载完成";
ClassicsFooter.REFRESH_FOOTER_FAILED = getResources().getString(R.string.srl_footer_failed);//"加载失败";
ClassicsFooter.REFRESH_FOOTER_NOTHING = getResources().getString(R.string.srl_footer_nothing);//"全部加载完成";
}
private void getPostInfo(RxBusToVoom attachment) {
Api.getInstance().postsInfo(attachment.getPostId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseObserver<Result<AlbumBean>>() {
@Override
public void onSuccess(Result<AlbumBean> feedbackResp) {
AlbumBean albumBean = feedbackResp.data;
Intent intent = new Intent(getAppContext(), TiktoInfokActivity.class);
intent.putExtra("bean", albumBean);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getAppContext().startActivity(intent);
}
@Override
public void onError(int code, String msg) {
ToastX.showShortToast(msg);
}
});
}
public void registerRouter() {
XKitRouter.registerRouter(RouterConstant.PATH_MINE_INFO_PAGE, MineInfoActivity.class);
XKitRouter.registerRouter(
RouterConstant.PATH_CONTACT_SELECTOR_PAGE, FunContactSelectorActivity.class);
XKitRouter.registerRouter(
RouterConstant.PATH_FUN_CONTACT_SELECTOR_PAGE, FunContactSelectorActivity.class);
// XKitRouter.registerRouter(RouterConstant.PATH_ADD_FRIEND_PAGE, FunAddFriendActivity.class);
// XKitRouter.registerRouter(RouterConstant.PATH_FUN_ADD_FRIEND_PAGE, FunAddFriendActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_FUN_USER_INFO_PAGE, UserInfoActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_USER_INFO_PAGE, UserInfoActivity.class);
XKitRouter.registerRouter(ContactConstant.PATH_FUN_CREATE_GROUP_PAGE, ContactGroupSettingActivity.class);
// XKitRouter.registerRouter(PATH_FUN_TEAM_SETTING_PAGE, FunTeamSettingActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_FUN_TEAM_SETTING_PAGE, TeamSettingActivity.class);
XKitRouter.registerRouter(ChatKitUIConstant.PATH_FUN_TEAM_ANNOUNCEMENT_PAGE, TeamAnnouncementActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_FUN_CHAT_SETTING_PAGE, PersonSettingActivity.class);
// XKitRouter.registerRouter(RouterConstant.PATH_CHAT_SETTING_PAGE, FunChatSettingActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_FUN_MY_BLACK_PAGE, FunBlackListActivity.class);
XKitRouter.registerRouter(RouterConstant.PATH_CHAT_LOCATION_PAGE, LocationPageActivity1.class);
XKitRouter.registerRouter("locationPage", LocationPageActivity.class);
}
public void initAiSDK() {
// 初始化SDKAppid等信息在清单中配置
// SparkChainConfig sparkChainConfig = SparkChainConfig.builder();
// sparkChainConfig.appID(IMUIKitConfig.AI_APPID)
// .apiKey(IMUIKitConfig.AI_APIKEY)
// .apiSecret(IMUIKitConfig.AI_APISECRET)//应用申请的appid三元组
// .logLevel(0);
// int ret = SparkChain.getInst().init(getApplicationContext(), sparkChainConfig);
// if (ret == 0) {
// Log.d(TAG, "SDK初始化成功" + ret);
// LLMConfig llmConfig = LLMConfig.builder();
// llmConfig.domain("generalv3");
//// llmConfig.url("ws(s)://spark-api.xf-yun.com/v3.1/chat");
// //memory有两种windows_memory和tokens_memory二选一即可
// Memory window_memory = Memory.windowMemory(5);
// llm = new LLM(llmConfig, window_memory);
//// Memory tokens_memory = Memory.tokenMemory(8192);
//// llm = new LLM(llmConfig,tokens_memory);
//
//
// }
}
private void initLang() {
if (DataUtils.get(getAppContext(), "locale", -1) == -1) {//如果一次都没有设置则需要默认设置一次以便Activity中生效
// PreferencesToolkits.getNew(getAppContext(),"locale",0);
// if (Locale.getDefault().getCountry().equals(Locale.TAIWAN.getCountry())) {
// DataUtils.set(getAppContext(), "locale", 0);
// } else if (Locale.getDefault().equals(Locale.ENGLISH)) {
// DataUtils.set(getAppContext(), "locale", 2);
// } else if (Locale.getDefault().equals(Locale.JAPANESE)) {
// DataUtils.set(getAppContext(), "locale", 3);
// } else {
DataUtils.set(getAppContext(), "locale", 1);
// }
}
int loc = DataUtils.get(getAppContext(), "locale", -1);
ChatDataUtils.set(getAppContext(), "locale", loc);
LogUtils.i("下标:" + loc);
// switch (loc) {
// case 0:
// LanguageUtils.updateAppContextLanguage(Locale.TRADITIONAL_CHINESE, null);
// applyLanguage(Resources.getSystem(), Locale.TRADITIONAL_CHINESE);
// //修复StringUtils获取string的语言
// applyLanguage(this.getResources(), Locale.TRADITIONAL_CHINESE);
// break;
//
// case 1:
LanguageUtils.updateAppContextLanguage(Locale.CHINESE, null);
applyLanguage(Resources.getSystem(), Locale.CHINESE);
//修复StringUtils获取string的语言
applyLanguage(this.getResources(), Locale.CHINESE);
// break;
//
// case 2:
// LanguageUtils.updateAppContextLanguage(Locale.ENGLISH, null);
// applyLanguage(Resources.getSystem(), Locale.ENGLISH);
// //修复StringUtils获取string的语言
// applyLanguage(this.getResources(), Locale.ENGLISH);
// break;
//
// case 3:
// LanguageUtils.updateAppContextLanguage(Locale.JAPANESE, null);
// applyLanguage(Resources.getSystem(), Locale.JAPANESE);
// //修复StringUtils获取string的语言
// applyLanguage(this.getResources(), Locale.JAPANESE);
// //修复StringUtils获取string的语言
// break;
//
//
// }
}
//设置当前语言
public static void applyLanguage(Resources resources, Locale locale) {
Locale.setDefault(locale);
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
config.locale = locale;
resources.updateConfiguration(config, dm);
}
private void initUIKit() {
SDKOptions sdkOptions = NimSDKOptionConfig.getSDKOptions(this, DataUtils.readAppKey(this));
// SDKOptions sdkOptions = options();
IMKitClient.init(this, getLoginInfo(), sdkOptions);
ALog.d(Constant.PROJECT_TAG, TAG, "initUIKit");
if (IMKitUtils.isMainProcess(this)) {
ALog.d(Constant.PROJECT_TAG, TAG, "initUIKit:isMainProcess");
// LocationKitClient.init(this);
//huawei push
// ActivityMgr.INST.init(this);
//oppo push
HeytapPushManager.init(this, true);
try {
//vivo push
PushClient.getInstance(this).initialize();
} catch (VivoPushException e) {
e.printStackTrace();
}
IMKitClient.toggleNotification(SettingRepo.isPushNotify());
IMKitClient.registerMixPushMessageHandler(new PushMessageHandler());
SettingRepo.setShowReadStatus(false);
IMKitClient.getStatus();
}
}
public LoginInfo getLoginInfo() {
String account = DataUtils.get(IMApplication.getAppContext(), IMUIKitConfig.LOGIN_ACCOUNT, "");
String token = DataUtils.get(IMApplication.getAppContext(), IMUIKitConfig.LOGIN_TOKEN, "");
//填入你的 account and token
if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
//每30天重新登录一次
if(System.currentTimeMillis()- DataUtils.get(IMApplication.getAppContext(),"last_login_time",0l)>(1000*60*60*24*30)){
return null;
}else {
return new LoginInfo(account, token);
}
} else {
return null;
}
}
// 如果返回值为 null则全部使用默认参数。
private SDKOptions options() {
SDKOptions options = new SDKOptions();
//此处仅设置appkey其他设置请自行参看信令文档设置 https://dev.yunxin.163.com/docs/product/信令/SDK开发集成/Android开发集成/初始化
options.appKey = "4a2fd910e1dd63ece3b80a0b371af93f";
return options;
}
public static Context getAppContext() {
return AppContext;
}
public final List<Activity> activities = new ArrayList<>();
//用于系统杀死应用之后,系统恢复应用,可能存在没有登录的异常
//此处如果在没有登录的情况下其他页面打开的时候进行finish();除了MainActivity
//MainActivity启动进行登录检测如果没有登录进行登录操作
private void registerActivityLifeCycle() {
registerActivityLifecycleCallbacks(
new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (TextUtils.isEmpty(IMKitClient.account())
&& !(activity instanceof MainActivity || activity instanceof WelcomeActivity)
&& !coldStart) {
activity.finish();
} else {
activities.add(activity);
}
}
@Override
public void onActivityStarted(Activity activity) {
foregroundActCount++;
closeNotify();
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
foregroundActCount--;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
if (activities.isEmpty()) {
return;
}
activities.remove(activity);
}
});
}
public void removeAllActivity() {
while (activities.size() > 0) {
try {
activities.get(activities.size() - 1).finish();
activities.remove(activities.size() - 1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void closeNotify() {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancelAll();
}
public void clearActivity(Activity exclude) {
for (int i = 0; i < activities.size(); i++) {
if (activities.get(i) != null && activities.get(i) != exclude) {
activities.get(i).finish();
}
}
}
public static void setColdStart(boolean value) {
coldStart = value;
}
@Override
public void onTerminate() {
// SparkChain.getInst().unInit();
foregroundActCount = 0;
super.onTerminate();
}
public static int getForegroundActCount() {
return foregroundActCount;
}
}