From d396ebda44a266404f939063d60b9cb86f42b670 Mon Sep 17 00:00:00 2001 From: juntao Date: Thu, 15 Oct 2020 16:09:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E4=B8=80=E4=BA=9B=E4=B8=8E?= =?UTF-8?q?=E9=9A=90=E7=A7=81=E6=94=BF=E7=AD=96=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/common/dialog/CertificationDialog.kt | 9 -- .../com/gh/common/exposure/meta/MetaUtil.kt | 42 +------ .../common/repository/RemenkapaiRepository.kt | 4 +- .../java/com/gh/common/util/CommentHelper.kt | 10 +- .../java/com/gh/common/util/DialogUtils.java | 23 ++-- .../main/java/com/gh/common/util/GsonUtils.kt | 16 ++- .../com/gh/common/util/ReservationHelper.kt | 3 +- .../main/java/com/gh/common/util/SpUtils.kt | 5 + .../gh/gamecenter/SplashScreenActivity.java | 86 +++++++------- .../packagehelper/PackageRepository.kt | 7 +- .../main/java/com/halo/assistant/HaloApp.java | 106 ++++++++++-------- .../com/halo/assistant/TinkerAppLike.java | 13 ++- 12 files changed, 154 insertions(+), 170 deletions(-) diff --git a/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt b/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt index 1d24721953..a6294551dc 100644 --- a/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt +++ b/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt @@ -26,21 +26,12 @@ import com.gh.gamecenter.UserInfoEditActivity import com.gh.gamecenter.WebActivity import com.gh.gamecenter.entity.AuthDialogEntity import com.gh.gamecenter.entity.AuthDialogLevel -import com.gh.gamecenter.entity.DeviceDialogEntity import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.retrofit.BiResponse -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.user.UserViewModel import com.google.gson.reflect.TypeToken import com.halo.assistant.fragment.user.UserInfoEditFragment import com.lightgame.utils.AppManager -import com.tencent.bugly.beta.tinker.TinkerManager.getApplication -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.ResponseBody -import retrofit2.HttpException class CertificationDialog(context: Context, private val authDialogEntity: AuthDialogEntity, val gameId: String, val listener: DialogUtils.ConfirmListener) : Dialog(context, R.style.GhAlertDialog) { diff --git a/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt b/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt index 77b3233e82..0bce95c4ce 100644 --- a/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt +++ b/app/src/main/java/com/gh/common/exposure/meta/MetaUtil.kt @@ -5,7 +5,6 @@ import android.app.Application import android.content.Context import android.content.pm.PackageManager import android.net.ConnectivityManager -import android.net.wifi.WifiManager import android.os.Build import android.provider.Settings import android.telephony.TelephonyManager @@ -15,7 +14,6 @@ import com.gh.gamecenter.manager.UserManager import com.halo.assistant.HaloApp import com.leon.channel.helper.ChannelReaderUtil import com.walkud.rom.checker.RomIdentifier -import java.io.File object MetaUtil { @@ -26,7 +24,7 @@ object MetaUtil { private var imei: String? = null fun refreshMeta() { - m = Meta(mac = getMac(), + m = Meta(mac = "", imei = getIMEI(), model = getModel(), manufacturer = getManufacturer(), @@ -58,49 +56,13 @@ object MetaUtil { return channel } - /** - * Get MAC address - * TODO check > 6.0 results - */ - fun getMac(): String? { - - var mac: String = "" - - //Plan A - try { - mac = File("/sys/class/net/wlan0/address").inputStream().bufferedReader().use { it.readText() } - if (!TextUtils.isEmpty(mac)) return mac.trim() - } catch (e: Exception) { -// e.printStackTrace() - } - - // Plan B - try { - mac = File("/sys/class/net/eth0/address").inputStream().bufferedReader().use { it.readText() } - if (!TextUtils.isEmpty(mac)) return mac.trim() - } catch (e: Exception) { -// e.printStackTrace() - } - - // Plan C - val wifiManager = application.getSystemService(Context.WIFI_SERVICE) as WifiManager - try { - mac = wifiManager.connectionInfo.macAddress - } catch (e: Exception) { -// e.printStackTrace() - } - - return mac.trim() - - } - /** * Get IMEI */ @JvmStatic fun getIMEI(): String { - if (!HaloApp.getInstance().isUserAcceptPrivacyPolicy) { + if (!HaloApp.isUserAcceptPrivacyPolicy(HaloApp.getInstance().application)) { return "" } diff --git a/app/src/main/java/com/gh/common/repository/RemenkapaiRepository.kt b/app/src/main/java/com/gh/common/repository/RemenkapaiRepository.kt index 6f1c3d0789..3578bcfb9a 100644 --- a/app/src/main/java/com/gh/common/repository/RemenkapaiRepository.kt +++ b/app/src/main/java/com/gh/common/repository/RemenkapaiRepository.kt @@ -5,7 +5,7 @@ import com.gh.common.util.ApkActiveUtils import com.gh.common.util.RandomUtils import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.retrofit.RetrofitManager -import com.tencent.bugly.beta.tinker.TinkerManager.getApplication +import com.halo.assistant.HaloApp import io.reactivex.Observable // 热门卡牌的仓库 @@ -16,7 +16,7 @@ object RemenkapaiRepository { @JvmStatic fun getRemenkapai(size: Int): Observable> { return if (remenkapaiList.isEmpty()) { - RetrofitManager.getInstance(getApplication()).sensitiveApi.remenkapai + RetrofitManager.getInstance(HaloApp.getInstance().application).sensitiveApi.remenkapai .map(RegionSettingHelper.filterGame) .map { gameList -> filterEntityWithoutApk(gameList) } .map { pickRandomSizeEntity(size) } diff --git a/app/src/main/java/com/gh/common/util/CommentHelper.kt b/app/src/main/java/com/gh/common/util/CommentHelper.kt index 6c2aa593dc..dab37a6303 100644 --- a/app/src/main/java/com/gh/common/util/CommentHelper.kt +++ b/app/src/main/java/com/gh/common/util/CommentHelper.kt @@ -16,8 +16,8 @@ import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.comment.OnCommentOptionClickListener import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp import com.lightgame.utils.Utils -import com.tencent.bugly.beta.tinker.TinkerManager.getApplication import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import okhttp3.ResponseBody @@ -268,10 +268,10 @@ object CommentHelper { val errorJson = JSONObject(string) val errorCode = errorJson.getInt("code") if (errorCode == 403059) { - Utils.toast(getApplication(), "权限错误,请刷新后重试") + Utils.toast(HaloApp.getInstance().application, "权限错误,请刷新后重试") return } else { - Utils.toast(getApplication(), e.message()) + Utils.toast(HaloApp.getInstance().application, e.message()) } } } @@ -317,10 +317,10 @@ object CommentHelper { val errorJson = JSONObject(string) val errorCode = errorJson.getInt("code") if (errorCode == 403059) { - Utils.toast(getApplication(), "权限错误,请刷新后重试") + Utils.toast(HaloApp.getInstance().application, "权限错误,请刷新后重试") return } else { - Utils.toast(getApplication(), e.message()) + Utils.toast(HaloApp.getInstance().application, e.message()) } } } diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index e025109524..f1a72b01dc 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -33,6 +33,13 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.common.AppExecutor; @@ -73,13 +80,6 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.core.content.ContextCompat; -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; - public class DialogUtils { public static Dialog showWaitDialog(Context context, String msg) { @@ -1097,8 +1097,8 @@ public class DialogUtils { } return false; }); - - MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "出现弹窗"); + // 用户未同意隐私策略不应该触发 MTA 事件 +// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "出现弹窗"); try { dialog.setCancelable(false); @@ -1119,12 +1119,13 @@ public class DialogUtils { View reviewButton = contentView.findViewById(R.id.review_button); backButton.setOnClickListener(v -> { - MtaHelper.onEvent("隐私政策弹窗", "退出提示弹窗", "退出应用"); + // 用户未同意隐私策略不应该触发 MTA 事件 +// MtaHelper.onEvent("隐私政策弹窗", "退出提示弹窗", "退出应用"); dialog.dismiss(); AppManager.getInstance().appExit(activityContext); }); reviewButton.setOnClickListener(v -> { - MtaHelper.onEvent("隐私政策弹窗", "退出提示弹窗", "再次查看"); +// MtaHelper.onEvent("隐私政策弹窗", "退出提示弹窗", "再次查看"); dialog.dismiss(); showPrivacyPolicyDialog(activityContext, entity, callback); }); diff --git a/app/src/main/java/com/gh/common/util/GsonUtils.kt b/app/src/main/java/com/gh/common/util/GsonUtils.kt index 73aaffa318..38f4418e34 100644 --- a/app/src/main/java/com/gh/common/util/GsonUtils.kt +++ b/app/src/main/java/com/gh/common/util/GsonUtils.kt @@ -20,14 +20,22 @@ object GsonUtils { @JvmStatic fun fromJsonList(json: JSONArray): List { - val type = object : TypeToken>() {}.type - return gson.fromJson(json.toString(), type) + return try { + val type = object : TypeToken>() {}.type + return gson.fromJson(json.toString(), type) + } catch (e: Exception) { + listOf() + } } @JvmStatic fun fromJsonList(json: String): List { - val type = object : TypeToken>() {}.type - return gson.fromJson(json, type) + return try { + val type = object : TypeToken>() {}.type + gson.fromJson(json, type) + } catch (e: Exception) { + listOf() + } } @JvmStatic diff --git a/app/src/main/java/com/gh/common/util/ReservationHelper.kt b/app/src/main/java/com/gh/common/util/ReservationHelper.kt index 08ad8b8176..e86ce95b75 100644 --- a/app/src/main/java/com/gh/common/util/ReservationHelper.kt +++ b/app/src/main/java/com/gh/common/util/ReservationHelper.kt @@ -8,7 +8,6 @@ import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp import com.lightgame.utils.Utils -import com.tencent.bugly.beta.tinker.TinkerManager.getApplication import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import okhttp3.ResponseBody @@ -57,7 +56,7 @@ object ReservationHelper { } override fun onFailure(exception: Exception) { - Utils.toast(getApplication(), exception.message) + Utils.toast(HaloApp.getInstance().application, exception.message) exception.printStackTrace() } }) diff --git a/app/src/main/java/com/gh/common/util/SpUtils.kt b/app/src/main/java/com/gh/common/util/SpUtils.kt index 49c317bce8..df9ac8934c 100644 --- a/app/src/main/java/com/gh/common/util/SpUtils.kt +++ b/app/src/main/java/com/gh/common/util/SpUtils.kt @@ -76,6 +76,11 @@ object SPUtils { return sp.getBoolean(key, defaultValue) } + @JvmStatic + fun getBooleanWithContext(context: Context, key: String, defaultValue: Boolean): Boolean { + return context.getSharedPreferences("Halo", Context.MODE_PRIVATE).getBoolean(key, defaultValue) + } + @JvmStatic fun setString(sp: SharedPreferences, key: String, value: String? = null) { try { diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index b857b59174..774721d06f 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -109,15 +109,6 @@ public class SplashScreenActivity extends BaseActivity { // 判断是不是这个版本的新用户 if (isNewFirstLaunch) { - // 删除更新后的光环助手包 - List all = DownloadManager.getInstance(this).getAllDownloadEntity(); - for (DownloadEntity downloadEntity : all) { - if (downloadEntity.getPackageName().equals(getPackageName())) { - DownloadManager.getInstance(this).cancel(downloadEntity.getUrl(), true, true); - break; - } - } - mContentView.setPadding(0, 0, 0, 0); ViewPager guideLayout = findViewById(R.id.splash_intro_vp_guide); guideLayout.setAdapter(new GuidePagerAdapter()); @@ -133,43 +124,25 @@ public class SplashScreenActivity extends BaseActivity { requestPermission(); }); } else { + cancelPreviousUpdateTask(); + guideLayout.setVisibility(View.VISIBLE); requestPermission(); } } else { launchMainActivity(); } + } - AppExecutor.getIoExecutor().execute(() -> { - Config.getGhzsSettings(); - deviceDialogSetting(); - getFilterDetailTags(); - getAuthDialog(); - getRegulationTestStatus(); - UsageStatsHelper.checkAndPostUsageStats(); - GameSubstituteRepositoryHelper.updateGameSubstituteRepository(); - - // 第一次启动,把package.txt文件内容加载进数据库 - FilterManager filterManager = new FilterManager(getApplicationContext()); - if (!mSharedPreferences.getBoolean("isLoadFilterV2d4", false)) { - filterManager.loadFilter(); + // 删除更新后的光环助手包 + private void cancelPreviousUpdateTask() { + List all = DownloadManager.getInstance(this).getAllDownloadEntity(); + for (DownloadEntity downloadEntity : all) { + if (downloadEntity.getPackageName().equals(getPackageName())) { + DownloadManager.getInstance(this).cancel(downloadEntity.getUrl(), true, true); + break; } - // 获取过滤包 - filterManager.getFilterFromServer(0); - - // 更新过滤表,获取自动刷新的cd,获取版本对应表 - String time = mSharedPreferences.getString("refresh_time", null); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); - String today = format.format(new Date()); - if (!today.equals(time)) { - // 获取版本代码、名称 - PlatformUtils.getInstance(getApplicationContext()).getPlatform(); - TagUtils.getInstance(getApplicationContext()).getTag(); - } - - // 更新本地时间 - DeviceTokenUtils.syncServerTime(this); - }); + } } private void requestPermission() { @@ -293,10 +266,12 @@ public class SplashScreenActivity extends BaseActivity { // 跳转到主界面 private void launchMainActivity() { - HaloApp.getInstance().initDataRelatedAction(); + HaloApp.getInstance().postInit(); getUniqueId(); + prefetchData(); + // 在可能获取了相关权限后才初始化SDK/发送激活数据 TeaHelper.init(getApplication(), HaloApp.getInstance().getChannel()); GdtHelper.INSTANCE.logAction(ActionType.START_APP, GdtHelper.NETWORK_TYPE, DeviceUtils.getNetwork(this)); @@ -312,6 +287,39 @@ public class SplashScreenActivity extends BaseActivity { DataUtils.getGid(); } + private void prefetchData() { + AppExecutor.getIoExecutor().execute(() -> { + Config.getGhzsSettings(); + deviceDialogSetting(); + getFilterDetailTags(); + getAuthDialog(); + getRegulationTestStatus(); + UsageStatsHelper.checkAndPostUsageStats(); + GameSubstituteRepositoryHelper.updateGameSubstituteRepository(); + + // 第一次启动,把package.txt文件内容加载进数据库 + FilterManager filterManager = new FilterManager(getApplicationContext()); + if (!mSharedPreferences.getBoolean("isLoadFilterV2d4", false)) { + filterManager.loadFilter(); + } + // 获取过滤包 + filterManager.getFilterFromServer(0); + + // 更新过滤表,获取自动刷新的cd,获取版本对应表 + String time = mSharedPreferences.getString("refresh_time", null); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + String today = format.format(new Date()); + if (!today.equals(time)) { + // 获取版本代码、名称 + PlatformUtils.getInstance(getApplicationContext()).getPlatform(); + TagUtils.getInstance(getApplicationContext()).getTag(); + } + + // 更新本地时间 + DeviceTokenUtils.syncServerTime(this); + }); + } + @AfterPermissionGranted(REQUEST_PERMISSION_TAG) private void checkAndRequestPermission() { if (EasyPermissions.hasPermissions(this, mPermissions)) { diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 72f2560bf8..3df09a7932 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -25,7 +25,6 @@ import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp import com.lightgame.utils.Utils -import com.tencent.bugly.beta.tinker.TinkerManager.getApplication import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import okhttp3.MediaType @@ -103,12 +102,12 @@ object PackageRepository { if (appEntity != null && appEntity.versionCode > PackageUtils.getVersionCode()) { val gameUpdateEntity = GameUpdateEntity() gameUpdateEntity.name = "光环助手V" + appEntity.version!! - gameUpdateEntity.packageName = getApplication().packageName + gameUpdateEntity.packageName = HaloApp.getInstance().application.packageName gameUpdateEntity.size = appEntity.size gameUpdateEntity.version = appEntity.version gameUpdateEntity.url = appEntity.url gameUpdateEntity.platform = "官方版" - gameUpdateEntity.id = getApplication().getString(R.string.ghzs_id) + gameUpdateEntity.id = HaloApp.getInstance().application.getString(R.string.ghzs_id) gameUpdate.add(gameUpdateEntity) notifyGameUpdateData() } @@ -255,7 +254,7 @@ object PackageRepository { val apkList = game.getApk() for (apk in apkList) { if (apk.packageName == installedPkgName && !TextUtils.isEmpty(apk.ghVersion) - && !PackageUtils.isSignedByGh(getApplication(), apk.packageName)) { + && !PackageUtils.isSignedByGh(HaloApp.getInstance().application, apk.packageName)) { // 如果该包是合集且安装了合集内任意一个光环的游戏包都不显示插件化 game.collection.forEach { collection -> if (collection.packages.contains(apk.packageName)) { diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 7e45e684aa..ea62cef5c2 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -1,6 +1,7 @@ package com.halo.assistant; import android.app.Application; +import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; @@ -140,55 +141,38 @@ public class HaloApp extends TinkerAppLike { deviceRamSize = DeviceUtils.getTotalRamSizeOfDevice(getApplication()); + //初始化Fresco(BigImageViewer 已包含Fresco) + BigImageViewer.initialize(FrescoImageLoader.with(getApplication())); + mChannel = ChannelReaderUtil.getChannel(getApplication()); if (mChannel == null || TextUtils.isEmpty(mChannel.trim())) { mChannel = Config.DEFAULT_CHANNEL; } -// TTAdSdk.init(getApplication(), new TTAdConfig.Builder().appId(Config.TTAD_APPID) -// .appName(HaloApp.getInstance().getApplication().getString(R.string.app_name)) -// .build()); + if (isUserAcceptPrivacyPolicy(getApplication())) { + initPushSdk(); + } + } - //初始化Fresco(BigImageViewer 已包含Fresco) - BigImageViewer.initialize(FrescoImageLoader.with(getApplication())); + public void postInit() { + initDataHelper(); + initThirdPartySdk(); + + FixedRateJobHelper.begin(); + + // 刷新内存中的用户信息,避免应用进程重建时因没有用户信息数据而显示为掉登录状态 + UserRepository.getInstance(getApplication()).getLoginUserInfo(); initReceiver(); + initPackageChangesReceiver(); + initConnectivityChangesReceiver(); initLocalBroadcast(); - initConnectivityChangesReceiver(); - initPackageChangesReceiver(); + initTimeConsumingAction(); // 注册回调以用于做各种统计 ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner()); - // 耗时操作 - 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()); - - // 预加载游戏库图标 - 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); @@ -201,23 +185,23 @@ public class HaloApp extends TinkerAppLike { } }); } - } - - public void initDataRelatedAction() { - initDataHelper(); - initThirdPartySdk(); - - FixedRateJobHelper.begin(); registerActivityLifecycleCallbacks(new GHActivityLifecycleCallbacksImpl()); } + /** + * 友盟不在 application 里初始化的话收到的内容会是加密字符,所以这里又拆分出来单独初始化,垃圾阿里 + */ + private void initPushSdk() { + // HttpDns 需要在友盟前初始化,不然单例帐号会被友盟占了 + HttpDnsManager.getInstance(getApplication()); + PushManager.init(mChannel); + } + private void initThirdPartySdk() { GidHelper.getInstance().init(getApplication()); - // HttpDns 需要在友盟前初始化,不然单例帐号会被友盟占了 - HttpDnsManager.getInstance(getApplication()); - PushManager.init(mChannel); + initPushSdk(); DataUtils.init(getApplication(), mChannel); GdtHelper.INSTANCE.init(getApplication(), mChannel); AntiBotHelper.getManager(); @@ -293,14 +277,38 @@ public class HaloApp extends TinkerAppLike { LocalBroadcastManager.getInstance(getApplication()).registerReceiver(new LocalBroadcastReceiver(), filter); } + private void initTimeConsumingAction() { + AppExecutor.getIoExecutor().execute(() -> { + TimestampUtils.initMap(); + + // 初始化全局下载监听 + DownloadObserver.initObserver(); + + PackageHelper.refreshLocalPackageList(); + PackageHelper.initList(); + + // 避免在华为设备上出现 `Register too many Broadcast Receivers` 异常,可见 https://github.com/llew2011/HuaWeiVerifier + LoadedApkHuaWei.hookHuaWeiVerifier(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(); + } + }); + } + /** * 判断当前用户是否是已经同意过隐私政策协议 * 覆盖安装进入过首页的也当作是同意了 */ - public boolean isUserAcceptPrivacyPolicy() { - return !PreferenceManager.getDefaultSharedPreferences(getApplication()).getBoolean("isNewFirstLaunchV" + PackageUtils.getVersionName(), true) - || !SPUtils.getBoolean(Constants.SP_BRAND_NEW_USER, true) - || SPUtils.getBoolean(Constants.SP_IS_USER_ACCEPTED_PRIVACY_STATEMENT); + public static boolean isUserAcceptPrivacyPolicy(Context context) { + return !PreferenceManager.getDefaultSharedPreferences(context).getBoolean("isNewFirstLaunchV" + PackageUtils.getVersionName(), true) + || !SPUtils.getBooleanWithContext(context, Constants.SP_BRAND_NEW_USER, true) + || SPUtils.getBooleanWithContext(context, Constants.SP_IS_USER_ACCEPTED_PRIVACY_STATEMENT, false); } } diff --git a/app/src/main/java/com/halo/assistant/TinkerAppLike.java b/app/src/main/java/com/halo/assistant/TinkerAppLike.java index c87308d944..bc2dbb702d 100644 --- a/app/src/main/java/com/halo/assistant/TinkerAppLike.java +++ b/app/src/main/java/com/halo/assistant/TinkerAppLike.java @@ -5,6 +5,7 @@ import android.app.Application; import android.content.Context; import android.content.Intent; import android.os.Build; + import androidx.multidex.MultiDex; import com.gh.common.constant.Config; @@ -24,9 +25,10 @@ public class TinkerAppLike extends DefaultApplicationLike { @Override public void onCreate() { super.onCreate(); - // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId - // 调试时,将第三个参数改为true - Bugly.init(getApplication(), Config.BUGLY_APPID, BuildConfig.DEBUG); + + if (HaloApp.isUserAcceptPrivacyPolicy(getApplication())) { + Bugly.init(getApplication(), Config.BUGLY_APPID, BuildConfig.DEBUG); + } } @@ -38,8 +40,9 @@ public class TinkerAppLike extends DefaultApplicationLike { MultiDex.install(base); // 安装tinker - // TinkerManager.installTinker(this); 替换成下面Bugly提供的方法 - Beta.installTinker(this); + if (HaloApp.isUserAcceptPrivacyPolicy(base)) { + Beta.installTinker(this); + } } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)