第一次提交

This commit is contained in:
xuhuixiang
2025-08-08 15:05:12 +08:00
parent 3e7f1d9089
commit ad722304bf
795 changed files with 19580 additions and 9048 deletions

View File

@@ -0,0 +1,430 @@
// 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));
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 = "23c9cbddd4b876908efdccd0a6f2638d";
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;
}
}