264 lines
10 KiB
Java
264 lines
10 KiB
Java
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);
|
||
}
|
||
|
||
}
|