Files
assistant-android/app/src/main/java/com/halo/assistant/HaloApp.java

264 lines
10 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.halo.assistant;
import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.text.TextUtils;
import com.gh.base.GHActivityLifecycleCallbacksImpl;
import com.gh.common.AppExecutor;
import com.gh.common.LocalBroadcastReceiver;
import com.gh.common.PushManager;
import com.gh.common.constant.Config;
import com.gh.common.exposure.ExposureManager;
import com.gh.common.im.ImReceiver;
import com.gh.common.loghub.LoghubUtils;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceUtils;
import com.gh.common.util.DownloadNotificationHelper;
import com.gh.common.util.DownloadObserver;
import com.gh.common.util.GdtHelper;
import com.gh.common.util.HomeBottomBarHelper;
import com.gh.common.util.PackageHelper;
import com.gh.common.util.TeaHelper;
import com.gh.common.util.TimestampUtils;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.Injection;
import com.gh.gamecenter.entity.SubjectRecommendEntity;
import com.gh.gamecenter.receiver.ActivitySkipReceiver;
import com.gh.gamecenter.receiver.DownloadReceiver;
import com.gh.gamecenter.receiver.InstallAndUninstallReceiver;
import com.gh.gamecenter.receiver.InstallReceiver;
import com.gh.gamecenter.receiver.NetworkStateReceiver;
import com.gh.gamecenter.receiver.UmengMeizuPushReceiver;
import com.gh.gamecenter.receiver.UmengMessageReceiver;
import com.gh.gamecenter.user.UserRepository;
import com.gh.gid.GidHelper;
import com.github.piasy.biv.BigImageViewer;
import com.github.piasy.biv.loader.fresco.FrescoImageLoader;
import com.leon.channel.helper.ChannelReaderUtil;
import com.lightgame.utils.Utils;
import com.llew.huawei.verifier.LoadedApkHuaWei;
import com.m7.imkfsdk.chat.ChatActivity;
import com.shuyu.gsyvideoplayer.cache.CacheFactory;
import com.shuyu.gsyvideoplayer.player.PlayerFactory;
import com.squareup.picasso.Picasso;
import androidx.collection.ArrayMap;
import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import io.reactivex.plugins.RxJavaPlugins;
import tv.danmaku.ijk.media.exo2.Exo2PlayerManager;
import tv.danmaku.ijk.media.exo2.ExoPlayerCacheManager;
public class HaloApp extends TinkerAppLike {
private static HaloApp mInstance;
private static ArrayMap<String, Object> sObjectMap = new ArrayMap<>();
private String mChannel;
private String mGid;
private String mUA;
private String mOAID = "";
public boolean isBrandNewInstall = false; // 当前用户是否是安装光环后第一次打开
public boolean isRunningForeground = false; // 标记当前 APP 是否处于前台运行中
public HaloApp(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {
super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
}
public static void put(String key, Object object) {
sObjectMap.put(key, object);
}
public static Object get(String key, boolean isRemove) {
if (isRemove) {
return sObjectMap.remove(key);
} else {
return sObjectMap.get(key);
}
}
public static void remove(String key) {
sObjectMap.remove(key);
}
public void setGid(String gid) {
mGid = gid;
}
public String getGid() {
return mGid;
}
public static synchronized HaloApp getInstance() {
return mInstance;
}
public String getChannel() {
return mChannel;
}
public void setOAID(String oaid) {
mOAID = oaid;
}
public String getOAID() {
return mOAID;
}
public String getUserAgent() {
if (TextUtils.isEmpty(mUA)) {
mUA = DeviceUtils.getUserAgent();
}
return mUA;
}
@Override
public void onCreate() {
super.onCreate();
if (!Injection.appInit(getApplication())) {
return;
}
mInstance = this;
mChannel = ChannelReaderUtil.getChannel(getApplication());
if (mChannel == null || TextUtils.isEmpty(mChannel.trim())) {
mChannel = Config.DEFAULT_CHANNEL;
}
PushManager.init(mChannel);
TeaHelper.init(getApplication(), mChannel);
DataUtils.init(getApplication(), mChannel);
GidHelper.getInstance().init(getApplication());
// TTAdSdk.init(getApplication(), new TTAdConfig.Builder().appId(Config.TTAD_APPID)
// .appName(HaloApp.getInstance().getApplication().getString(R.string.app_name))
// .build());
//初始化Fresco(BigImageViewer 已包含Fresco)
BigImageViewer.initialize(FrescoImageLoader.with(getApplication()));
initReceiver();
initLocalBroadcast();
initConnectivityChangesReceiver();
initPackageChangesReceiver();
// 注册回调以用于做各种统计
registerActivityLifecycleCallbacks(new GHActivityLifecycleCallbacksImpl());
ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner());
ExposureManager.init();
LoghubUtils.init(getApplication());
// 耗时操作
AppExecutor.getIoExecutor().execute(() -> {
//Leto.init(getApplication(), Config.LETO_APPID);
TimestampUtils.initMap();
// 初始化全局下载监听
DownloadObserver.initObserver();
// 刷新内存中的用户信息,避免应用进程重建时因没有用户信息数据而显示为掉登录状态
UserRepository.getInstance(getApplication()).getLoginUserInfo();
PackageHelper.refreshLocalPackageList();
PackageHelper.initList();
// 避免在华为设备上出现 `Register too many Broadcast Receivers` 异常,可见 https://github.com/llew2011/HuaWeiVerifier
LoadedApkHuaWei.hookHuaWeiVerifier(getApplication());
GdtHelper.INSTANCE.init(getApplication());
// 预加载游戏库图标
SubjectRecommendEntity barData = HomeBottomBarHelper.getDefaultGameBarData();
if (!TextUtils.isEmpty(barData.getIconSelect())) {
Picasso.with(getApplication()).load(Uri.parse(barData.getIconSelect())).fetch();
}
if (!TextUtils.isEmpty(barData.getIconUnselect())) {
Picasso.with(getApplication()).load(Uri.parse(barData.getIconUnselect())).fetch();
}
});
PlayerFactory.setPlayManager(Exo2PlayerManager.class);
CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
//CacheFactory.setCacheManager(CustomProxyCacheManager.class);
RxJavaPlugins.setErrorHandler(throwable -> {
if (BuildConfig.DEBUG) {
Utils.toast(getApplication(), "当前页面未捕获的异常:" + throwable.toString());
}
});
}
// todo 动态注册和静态注册并行的话会触发多次回调
// 3.5 开始将 targetSdk 升级至 26原来写在 Manifest 的部分 receiver 由于系统限制需要换成在运行时注册
private void initReceiver() {
DownloadReceiver downloadReceiver = new DownloadReceiver();
IntentFilter downloadFilter = new IntentFilter();
downloadFilter.addAction(DownloadNotificationHelper.ACTION_DOWNLOAD);
getApplication().registerReceiver(downloadReceiver, downloadFilter);
InstallReceiver installReceiver = new InstallReceiver();
IntentFilter installFilter = new IntentFilter();
installFilter.addAction(DownloadNotificationHelper.ACTION_INSTALL);
getApplication().registerReceiver(installReceiver, installFilter);
ActivitySkipReceiver skipReceiver = new ActivitySkipReceiver();
IntentFilter skipFilter = new IntentFilter();
skipFilter.addAction(ActivitySkipReceiver.ACTION_ACTIVITY_SKIP);
getApplication().registerReceiver(skipReceiver, skipFilter);
UmengMessageReceiver umengMessageReceiver = new UmengMessageReceiver();
IntentFilter umengFilter = new IntentFilter();
umengFilter.addAction(UmengMessageReceiver.ACTION);
getApplication().registerReceiver(umengMessageReceiver, umengFilter);
ImReceiver imReceiver = new ImReceiver();
IntentFilter imFilter = new IntentFilter();
imFilter.addAction(ImReceiver.UNIQUE_BROADCAST_ACTION);
imFilter.addAction("action_finish");
getApplication().registerReceiver(imReceiver, imFilter);
UmengMeizuPushReceiver pushReceiver = new UmengMeizuPushReceiver();
IntentFilter pushFilter = new IntentFilter();
pushFilter.addAction("com.meizu.flyme.push.intent.MESSAGE");
pushFilter.addAction("com.meizu.flyme.push.intent.REGISTER.FEEDBACK");
pushFilter.addAction("com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK");
pushFilter.addAction("com.meizu.c2dm.intent.REGISTRATION");
pushFilter.addAction("com.meizu.c2dm.intent.RECEIVE");
getApplication().registerReceiver(pushReceiver, pushFilter);
}
private void initPackageChangesReceiver() {
InstallAndUninstallReceiver receiver = new InstallAndUninstallReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
getApplication().registerReceiver(receiver, intentFilter);
}
private void initConnectivityChangesReceiver() {
NetworkStateReceiver receiver = new NetworkStateReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getApplication().registerReceiver(receiver, intentFilter);
}
private void initLocalBroadcast() {
IntentFilter filter = new IntentFilter();
filter.addAction(ChatActivity.ACTION_DISMISS_FLOATING_WINDOW);
filter.addAction(ChatActivity.ACTION_HIDE_UNREAD_DOT);
LocalBroadcastManager.getInstance(getApplication()).registerReceiver(new LocalBroadcastReceiver(), filter);
}
}