From 08fe5e8f831cfb95df2548df5e012789381bd762 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Wed, 14 Nov 2018 16:30:31 +0800 Subject: [PATCH] =?UTF-8?q?PackageViewModel=20=E5=A2=9E=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/MainActivity.java | 1 + .../gamecenter/install/PackageRepository.kt | 26 ++++++++++++------- .../gh/gamecenter/install/PackageViewModel.kt | 16 +++++++----- .../gh/gamecenter/manager/FilterManager.java | 12 +++++++++ 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 95b8575e4e..9ea91b8090 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -772,6 +772,7 @@ public class MainActivity extends BaseActivity { @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBNetworkState busNetworkState) { if (busNetworkState.isNetworkConnected()) { + mPackageViewModel.checkData(); checkRetryDownload(); if (Config.getSettings() == null) { getGhzsSettings(); diff --git a/app/src/main/java/com/gh/gamecenter/install/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/install/PackageRepository.kt index 964e43a885..513a24b133 100644 --- a/app/src/main/java/com/gh/gamecenter/install/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/install/PackageRepository.kt @@ -64,10 +64,10 @@ object PackageRepository { val list = PackageUtils.getAllPackageName(mApplication) - filterPackers(list) - uploadAppList() + filterPackers(list) + loadInstalledGameDigestAndNotifyData(list) loadGhzsUpdate() } @@ -115,17 +115,23 @@ object PackageRepository { * 忽略非合法数据 */ private fun filterPackers(list: MutableList) { - // 忽略特定的包 - list.remove(Constants.XPOSED_INSTALLER_PACKAGE_NAME) - - // 忽略非助手收录的包 todo 必须先获取接口数据 否则无法此次操作失败(bug) + // 忽略非助手收录的包 val localList = ArrayList() val filterManager = FilterManager(mApplication) - for (pkgName in list) { - if (filterManager.isFilter(pkgName)) { - localList.add(pkgName) + if (filterManager.isInitOver) { + for (pkgName in list) { + if (filterManager.isFilter(pkgName)) { + localList.add(pkgName) + } + } + if (localList.isNotEmpty()) { + list.clear() + list.addAll(localList) } } + + // 忽略特定的包 + list.remove(Constants.XPOSED_INSTALLER_PACKAGE_NAME) } /** @@ -137,7 +143,7 @@ object PackageRepository { private fun loadInstalledGameDigestAndNotifyData(list: ArrayList) { var isNotifyUpdate = false val latch = ObservableUtil.latch(list.size, { - if (isNotifyUpdate) notifyGameUpdateData() + if (isNotifyUpdate || gameUpdateLiveData.value == null) notifyGameUpdateData() notifyGameInstallData() }, Any()) diff --git a/app/src/main/java/com/gh/gamecenter/install/PackageViewModel.kt b/app/src/main/java/com/gh/gamecenter/install/PackageViewModel.kt index 668cb0f6cf..48ebbd2f3e 100644 --- a/app/src/main/java/com/gh/gamecenter/install/PackageViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/install/PackageViewModel.kt @@ -12,17 +12,17 @@ import com.halo.assistant.HaloApp class PackageViewModel(application: Application, - private val repository: PackageRepository) : AndroidViewModel(application) { + private val mRepository: PackageRepository) : AndroidViewModel(application) { init { } fun getGameUpdateLiveData(): MutableLiveData> { - return repository.gameUpdateLiveData + return mRepository.gameUpdateLiveData } fun getGameInstalledLiveData(): MutableLiveData> { - return repository.gameInstalledLiveData + return mRepository.gameInstalledLiveData } /** @@ -30,7 +30,7 @@ class PackageViewModel(application: Application, * 只在收到安装广播时调用,不建议手动调用 */ fun addInstalledGame(pkgName: String?) { - if (!TextUtils.isEmpty(pkgName)) repository.installedGame(pkgName!!) + if (!TextUtils.isEmpty(pkgName)) mRepository.installedGame(pkgName!!) } /** @@ -38,15 +38,17 @@ class PackageViewModel(application: Application, * 只在收到卸载广播时调用,不建议手动调用 */ fun addUninstalledGame(pkgName: String?) { - if (!TextUtils.isEmpty(pkgName)) repository.uninstalledGame(pkgName!!) + if (!TextUtils.isEmpty(pkgName)) mRepository.uninstalledGame(pkgName!!) } /** * 检查数据(查看数据是否初始化完成,未完成则重新加载) * 网络状态变更时调用 */ - fun checkInstallData() { - + fun checkData() { + if (mRepository.gameInstalled.size == 0) { + mRepository.initData() + } } class Factory : ViewModelProvider.NewInstanceFactory() { diff --git a/app/src/main/java/com/gh/gamecenter/manager/FilterManager.java b/app/src/main/java/com/gh/gamecenter/manager/FilterManager.java index fd1ade5067..cf3961f17c 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/FilterManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/FilterManager.java @@ -23,14 +23,24 @@ import io.reactivex.schedulers.Schedulers; public class FilterManager { + private final static String FILTER_INIT_OVER_KEY = "filterInitOver"; + private SharedPreferences mPreferences; private FilterDao mFilterDao; private Context mContext; public FilterManager(Context context) { mContext = context; + mPreferences = PreferenceManager.getDefaultSharedPreferences(context); mFilterDao = new FilterDao(context); } + public Boolean isInitOver() { + if (mPreferences.getBoolean(FILTER_INIT_OVER_KEY, false)) { + return true; + } + return false; + } + public void deleteFilters(List list) { mFilterDao.deleteAll(list); } @@ -100,6 +110,8 @@ public class FilterManager { } if (response.size() == 5000) { getFilterFromServer(skip + 5000); + } else if (!isInitOver()) { + mPreferences.edit().putBoolean(FILTER_INIT_OVER_KEY, true).apply(); } } });