240 lines
8.8 KiB
Java
240 lines
8.8 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 androidx.annotation.NonNull;
|
||
import androidx.collection.ArrayMap;
|
||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||
|
||
import com.danikula.videocache.HttpProxyCacheServer;
|
||
import com.facebook.drawee.backends.pipeline.Fresco;
|
||
import com.gh.base.GHActivityLifecycleCallbacksImpl;
|
||
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.util.DataUtils;
|
||
import com.gh.common.util.DeviceUtils;
|
||
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.download.DownloadNotification;
|
||
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.MeizuPushReceiver;
|
||
import com.gh.gamecenter.receiver.NetworkStateReceiver;
|
||
import com.gh.gamecenter.receiver.UmengMessageReceiver;
|
||
import com.gh.gid.GidHelper;
|
||
import com.leon.channel.helper.ChannelReaderUtil;
|
||
import com.llew.huawei.verifier.LoadedApkHuaWei;
|
||
import com.m7.imkfsdk.chat.ChatActivity;
|
||
import com.squareup.picasso.Picasso;
|
||
|
||
import java.util.concurrent.Executor;
|
||
import java.util.concurrent.Executors;
|
||
|
||
public class HaloApp extends TinkerAppLike {
|
||
|
||
private static HaloApp mInstance;
|
||
private static ArrayMap<String, Object> sObjectMap = new ArrayMap<>();
|
||
|
||
private Executor mMainExecutor = Executors.newCachedThreadPool();
|
||
private HttpProxyCacheServer mProxy;
|
||
|
||
@NonNull
|
||
private String mChannel;
|
||
private String mGid;
|
||
private String ua;
|
||
|
||
public boolean isRunningForeground = false; // 标记当前 APP 是否处于前台运行中
|
||
public boolean isMute = true; // 全局视频静音标记
|
||
|
||
public HaloApp(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {
|
||
super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
|
||
}
|
||
|
||
public Executor getMainExecutor() {
|
||
return mMainExecutor;
|
||
}
|
||
|
||
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 String getUserAgent() {
|
||
if (TextUtils.isEmpty(ua)) {
|
||
ua = DeviceUtils.getUserAgent();
|
||
}
|
||
return ua;
|
||
}
|
||
|
||
@Override
|
||
public void onCreate() {
|
||
super.onCreate();
|
||
|
||
if (!Injection.appInit(getApplication())) {
|
||
return;
|
||
}
|
||
|
||
mInstance = this;
|
||
|
||
GidHelper.getInstance().init(getApplication());
|
||
ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner());
|
||
|
||
mChannel = ChannelReaderUtil.getChannel(getApplication());
|
||
if (mChannel == null || TextUtils.isEmpty(mChannel.trim())) {
|
||
mChannel = Config.DEFAULT_CHANNEL;
|
||
}
|
||
|
||
try {
|
||
PushManager.init(mChannel);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
TeaHelper.init(getApplication(), mChannel);
|
||
DataUtils.init(getApplication(), mChannel);
|
||
|
||
// 注册回调以用于做各种统计
|
||
registerActivityLifecycleCallbacks(new GHActivityLifecycleCallbacksImpl());
|
||
|
||
//初始化Fresco
|
||
Fresco.initialize(getApplication());
|
||
|
||
ExposureManager.init();
|
||
|
||
// 避免在华为设备上出现 `Register too many Broadcast Receivers` 异常,可见 https://github.com/llew2011/HuaWeiVerifier
|
||
LoadedApkHuaWei.hookHuaWeiVerifier(getApplication());
|
||
|
||
PackageHelper.refreshLocalPackageList();
|
||
PackageHelper.initList();
|
||
|
||
initReceiver();
|
||
initLocalBroadcast();
|
||
|
||
initConnectivityChangesReceiver();
|
||
initPackageChangesReceiver();
|
||
|
||
// 耗时操作
|
||
mMainExecutor.execute(() -> {
|
||
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();
|
||
}
|
||
});
|
||
}
|
||
|
||
// 3.5 开始将 targetSdk 升级至 26,原来写在 Manifest 的部分 receiver 由于系统限制需要换成在运行时注册
|
||
private void initReceiver() {
|
||
DownloadReceiver downloadReceiver = new DownloadReceiver();
|
||
IntentFilter downloadFilter = new IntentFilter();
|
||
downloadFilter.addAction(DownloadNotification.ACTION_DOWNLOAD);
|
||
getApplication().registerReceiver(downloadReceiver, downloadFilter);
|
||
|
||
InstallReceiver installReceiver = new InstallReceiver();
|
||
IntentFilter installFilter = new IntentFilter();
|
||
installFilter.addAction(DownloadNotification.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);
|
||
|
||
MeizuPushReceiver pushReceiver = new MeizuPushReceiver();
|
||
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);
|
||
}
|
||
|
||
public HttpProxyCacheServer getProxy() {
|
||
return mProxy == null ? (mProxy = new HttpProxyCacheServer(getApplication())) : mProxy;
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
}
|