From 28f89aa0ada6a0041dbd40c5b32c2d855f35181b Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Sun, 10 Jun 2018 18:34:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84PackageManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/common/databind/BindingAdapters.java | 4 +- .../com/gh/common/util/ApkActiveUtils.java | 2 +- .../gh/common/util/DataCollectionUtils.java | 2 +- .../gh/common/util/DetailDownloadUtils.java | 4 +- .../com/gh/common/util/DownloadItemUtils.java | 6 +- .../java/com/gh/common/util/GameUtils.java | 4 +- .../java/com/gh/common/util/PackageUtils.java | 2 +- .../com/gh/common/view/DownloadDialog.java | 4 +- .../java/com/gh/download/DownloadManager.java | 2 +- .../java/com/gh/gamecenter/MainActivity.java | 30 +-- .../gamecenter/adapter/PlatformAdapter.java | 4 +- .../gh/gamecenter/adapter/PluginAdapter.java | 2 +- .../gamecenter/download/DownloadFragment.java | 2 +- .../download/GameDownloadFragmentAdapter.java | 4 +- .../download/GameUpdateFragmentAdapter.java | 10 +- .../gh/gamecenter/entity/GameUpdateEntity.kt | 49 ++-- .../fragment/SearchToolbarFragment.java | 4 +- .../gh/gamecenter/game/GameFragmentAdapter.kt | 12 +- .../com/gh/gamecenter/game/GameViewModel.kt | 14 +- .../gh/gamecenter/manager/PackageManager.java | 233 ------------------ .../gh/gamecenter/manager/PackageManager.kt | 219 ++++++++++++++++ .../gh/gamecenter/manager/UpdateManager.java | 2 +- .../qa/answer/edit/AnswerEditFragment.java | 2 - 23 files changed, 285 insertions(+), 332 deletions(-) delete mode 100644 app/src/main/java/com/gh/gamecenter/manager/PackageManager.java create mode 100644 app/src/main/java/com/gh/gamecenter/manager/PackageManager.kt diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 3c0786e1a9..6a59056f0e 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -322,7 +322,7 @@ public class BindingAdapters { case neterror: case waiting: progressBar.setText(R.string.downloading); - if (downloadEntity.isPluggable() && PackageManager.isInstalled(downloadEntity.getPackageName())) { + if (downloadEntity.isPluggable() && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { progressBar.setDownloadType(DownloadProgressBar.DownloadType.DOWNLOADING_PLUGIN); } else { progressBar.setDownloadType(DownloadProgressBar.DownloadType.DOWNLOADING_NORMAL); @@ -331,7 +331,7 @@ public class BindingAdapters { case done: progressBar.setText(R.string.install); if (downloadEntity.isPluggable() - && PackageManager.isInstalled(downloadEntity.getPackageName())) { + && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { progressBar.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_PLUGIN); } else { progressBar.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); diff --git a/app/src/main/java/com/gh/common/util/ApkActiveUtils.java b/app/src/main/java/com/gh/common/util/ApkActiveUtils.java index 36881e9dd1..ce21bc4702 100644 --- a/app/src/main/java/com/gh/common/util/ApkActiveUtils.java +++ b/app/src/main/java/com/gh/common/util/ApkActiveUtils.java @@ -22,7 +22,7 @@ public class ApkActiveUtils { ApkEntity apkEntity = apkList.get(i); String packageName = apkEntity.getPackageName(); String id = gameEntity.getId(); - if (!apkEntity.isActive() && !PackageManager.isCanPluggable(id, packageName)) { + if (!apkEntity.isActive() && !PackageManager.INSTANCE.isCanPluggable(id, packageName)) { apkList.remove(i); i--; } diff --git a/app/src/main/java/com/gh/common/util/DataCollectionUtils.java b/app/src/main/java/com/gh/common/util/DataCollectionUtils.java index 1e5fe9adda..c93f0943f1 100644 --- a/app/src/main/java/com/gh/common/util/DataCollectionUtils.java +++ b/app/src/main/java/com/gh/common/util/DataCollectionUtils.java @@ -118,7 +118,7 @@ public class DataCollectionUtils { Map map = new HashMap<>(); map.put("type", Build.MODEL); map.put("system", Build.VERSION.SDK_INT + "=" + Build.VERSION.RELEASE); - map.put("install", PackageManager.getInstalledList()); + map.put("install", PackageManager.INSTANCE.getInstalledList()); DataCollectionManager.upsert(context, "user", map); } diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java index e5d6d4cdf8..bdc25dc8ab 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -77,7 +77,7 @@ public class DetailDownloadUtils { case neterror: case waiting: viewHolder.mDownloadPb.setText(R.string.downloading); - if (downloadEntity.isPluggable() && PackageManager.isInstalled(downloadEntity.getPackageName())) { + if (downloadEntity.isPluggable() && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.DOWNLOADING_PLUGIN); } else { viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.DOWNLOADING_NORMAL); @@ -86,7 +86,7 @@ public class DetailDownloadUtils { case done: viewHolder.mDownloadPb.setText(R.string.install); if (downloadEntity.isPluggable() - && PackageManager.isInstalled(downloadEntity.getPackageName())) { + && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_PLUGIN); } else { viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index 8e5a98a8fd..6d78476e1f 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -151,8 +151,8 @@ public class DownloadItemUtils { if (gameEntity.isPluggable()) { holder.gameDownloadBtn.setText(R.string.pluggable); setwhat(context, holder, apkEntity, packageName); - } else if (PackageManager.isInstalled(packageName)) { - if (PackageManager.isCanUpdate(gameEntity.getId(), packageName)) { + } else if (PackageManager.INSTANCE.isInstalled(packageName)) { + if (PackageManager.INSTANCE.isCanUpdate(gameEntity.getId(), packageName)) { holder.gameDownloadBtn.setText(R.string.update); holder.gameDownloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); } else { @@ -298,7 +298,7 @@ public class DownloadItemUtils { holder.gameDownloadBtn.setText("安装"); holder.gameDownloadBtn.setTextColor(Color.WHITE); if (downloadEntity.isPluggable() - && PackageManager.isInstalled(downloadEntity.getPackageName())) { + && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { holder.gameDownloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else { holder.gameDownloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index 3c2dd31c28..7ab17051ae 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -90,10 +90,10 @@ public class GameUtils { updateCount++; } } - if (PackageManager.isCanUpdate(gameEntity.getId(), apkEntity.getPackageName())) { + if (PackageManager.INSTANCE.isCanUpdate(gameEntity.getId(), apkEntity.getPackageName())) { updateCount++; } - if (PackageManager.isInstalled(apkEntity.getPackageName())) { + if (PackageManager.INSTANCE.isInstalled(apkEntity.getPackageName())) { gh_id = PackageUtils.getMetaData(context, apkEntity.getPackageName(), "gh_id"); if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 && !TextUtils.isEmpty(apkEntity.getGhVersion()) diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index 71351b3c7d..3ad2c80443 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -147,7 +147,7 @@ public class PackageUtils { if (TextUtils.isEmpty(packageName)) { return true; } - boolean isContain = com.gh.gamecenter.manager.PackageManager.isInstalled(packageName); + boolean isContain = com.gh.gamecenter.manager.PackageManager.INSTANCE.isInstalled(packageName); if (!isContain) { return true; } diff --git a/app/src/main/java/com/gh/common/view/DownloadDialog.java b/app/src/main/java/com/gh/common/view/DownloadDialog.java index d7c5a5a1ea..74159a305d 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -207,12 +207,12 @@ public class DownloadDialog implements OnCollectionCallBackListener { downloadEntity = DownloadManager.getInstance(mContext).getDownloadEntityByUrl(apkEntity.getUrl()); if (downloadEntity == null) { packageName = apkEntity.getPackageName(); - if (PackageManager.isInstalled(packageName)) { + if (PackageManager.INSTANCE.isInstalled(packageName)) { gh_id = PackageUtils.getMetaData(mContext, packageName, "gh_id"); if (gh_id == null || gh_id.equals(gameEntity.getId())) { if (!PackageUtils.isSignature(mContext, packageName)) { apkEntity.setOrder(8); - } else if (PackageManager.isCanUpdate(gameEntity.getId(), packageName)) { + } else if (PackageManager.INSTANCE.isCanUpdate(gameEntity.getId(), packageName)) { apkEntity.setOrder(5); } else { apkEntity.setOrder(2); diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 1a6e1f267f..71f035256e 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -222,7 +222,7 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setVersionName(apkEntity.getVersion()); int installed = 0; for (ApkEntity apk : gameEntity.getApk()) { - if (PackageManager.isInstalled(apk.getPackageName())) { + if (PackageManager.INSTANCE.isInstalled(apk.getPackageName())) { installed++; } } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 231a49aed3..df31597260 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -53,7 +53,6 @@ import com.gh.gamecenter.entity.GameDigestEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.GameUpdateEntity; import com.gh.gamecenter.entity.SettingsEntity; -import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBReuse; @@ -198,7 +197,6 @@ public class MainActivity extends BaseActivity { startActivity(PackageUtils.getInstallIntent(MainActivity.this, downloadEntity.getPath())); DataLogUtils.uploadUpgradeLog(MainActivity.this, "install"); //上传更新安装数据 } else { - Utils.log("======111::::" + downloadEntity.getName()); statDoneEvent(downloadEntity); String platform = PlatformUtils.getInstance(getApplicationContext()) @@ -240,13 +238,6 @@ public class MainActivity extends BaseActivity { android.content.pm.PackageManager pm = getApplicationContext().getPackageManager(); PackageInfo packageInfo = pm.getPackageArchiveInfo(downloadEntity.getPath(), android.content.pm.PackageManager.GET_ACTIVITIES); if (packageInfo == null) { - /** - * 解析包错误信息收集 - * 1.真实下载Url - * 2.下载次数() - * 3. - */ - DataUtils.onMtaEvent(getApplication(), "解析包错误分析" , "游戏名字", downloadEntity.getName() + ":" + PlatformUtils.getInstance(getApplicationContext()).getPlatformName(downloadEntity.getPlatform()) @@ -418,7 +409,7 @@ public class MainActivity extends BaseActivity { private void getInstalledListFromServer() { ArrayList list = PackageUtils.getAllPackageName(getApplicationContext()); - PackageManager.init(list); + PackageManager.INSTANCE.initData(list); //应用上报 uploadAppList(); @@ -500,7 +491,7 @@ public class MainActivity extends BaseActivity { if (installInfo != null && response.getApk().size() != 0) { HashMap packageNames = new HashMap<>(); for (ApkEntity apkEntity : response.getApk()) { - if (PackageManager.isInstalled(apkEntity.getPackageName())) { + if (PackageManager.INSTANCE.isInstalled(apkEntity.getPackageName())) { packageNames.put(apkEntity.getPackageName(), true); } else { packageNames.put(apkEntity.getPackageName(), false); @@ -535,7 +526,7 @@ public class MainActivity extends BaseActivity { int quantity = 0; HashMap packageNames = new HashMap<>(); for (String packageName : concernEntity.getPackageNames().keySet()) { - if (PackageManager.isInstalled(packageName)) { + if (PackageManager.INSTANCE.isInstalled(packageName)) { quantity++; packageNames.put(packageName, true); installed.add(packageName); @@ -628,8 +619,7 @@ public class MainActivity extends BaseActivity { public void onResponse(GameEntity response) { List updateList = PackageUtils.isCanUpdate(getApplication(), response); if (updateList.size() > 0) { - PackageManager.addUpdateList(updateList); - EventBus.getDefault().post(new EBDownloadStatus("update")); + PackageManager.INSTANCE.addUpdateList(updateList); } } }); @@ -653,7 +643,7 @@ public class MainActivity extends BaseActivity { if (apkEntity.getPackageName().equals(key) && !TextUtils.isEmpty(apkEntity.getGhVersion()) && !PackageUtils.isSignature(this, apkEntity.getPackageName())) { - PackageManager.addUpdate(GameUtils.getGameUpdateEntity(gameEntity, apkEntity)); + PackageManager.INSTANCE.addUpdate(GameUtils.getGameUpdateEntity(gameEntity, apkEntity)); break; } } @@ -665,7 +655,6 @@ public class MainActivity extends BaseActivity { } } } - EventBus.getDefault().post(new EBDownloadStatus("plugin")); } @Override @@ -993,7 +982,7 @@ public class MainActivity extends BaseActivity { nManager.cancel(packageName.hashCode()); // 添加进已安装map中 - PackageManager.addInstalled(packageName); + PackageManager.INSTANCE.addInstalled(packageName); if (mDownloadEntity != null) { if (mDownloadEntity.isPluggable()) { @@ -1048,7 +1037,7 @@ public class MainActivity extends BaseActivity { } if ("卸载".equals(busFour.getType())) { // 删除map中数据 - PackageManager.removeInstalled(packageName); + PackageManager.INSTANCE.removeInstalled(packageName); if (mDownloadEntity != null) { Map kv6 = new HashMap<>(); @@ -1073,7 +1062,7 @@ public class MainActivity extends BaseActivity { } if ("卸载".equals(busFour.getType()) || "安装".equals(busFour.getType())) { - PackageManager.removeUpdate(packageName); + PackageManager.INSTANCE.removeUpdate(packageName); } DataCollectionUtils.uploadInorunstall(this, busFour.getType(), busFour.getPackageName()); } @@ -1093,8 +1082,7 @@ public class MainActivity extends BaseActivity { if (packageName.equals(apkEntity.getPackageName()) && !TextUtils.isEmpty(apkEntity.getGhVersion()) && !PackageUtils.isSignature(getApplicationContext(), apkEntity.getPackageName())) { - PackageManager.addUpdate(GameUtils.getGameUpdateEntity(response, apkEntity)); - EventBus.getDefault().post(new EBDownloadStatus("plugin")); + PackageManager.INSTANCE.addUpdate(GameUtils.getGameUpdateEntity(response, apkEntity)); break; } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java index 06735353ca..d0062a2ccb 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java @@ -188,7 +188,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter { }); Object gh_id = PackageUtils.getMetaData(mContext, apkEntity.getPackageName(), "gh_id"); - if (PackageManager.isInstalled(apkEntity.getPackageName()) + if (PackageManager.INSTANCE.isInstalled(apkEntity.getPackageName()) && (gh_id == null || gh_id.equals(mGameEntity.getId()))) { // 已安装 viewHolder.mDownloadItemIvPic.setVisibility(View.GONE); @@ -223,7 +223,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter { viewHolder.itemView.setClickable(false); viewHolder.mDownloadItemProgressbar.setProgress(0); } - } else if (PackageManager.isCanUpdate(mGameEntity.getId(), apkEntity.getPackageName())) { + } else if (PackageManager.INSTANCE.isCanUpdate(mGameEntity.getId(), apkEntity.getPackageName())) { viewHolder.mDownloadItemTvStatus.setText(R.string.update); } else { if (mOnCollectionCallBackListener == null) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java index d0890603aa..96f0ae0cf8 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java @@ -55,7 +55,7 @@ public class PluginAdapter extends BaseRecyclerAdapter { // 检查可以插件化的游戏 private void init() { - ArrayList updateList = PackageManager.getUpdateList(); + ArrayList updateList = PackageManager.INSTANCE.getUpdateList(); if (updateList.isEmpty()) { return; } diff --git a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.java b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.java index 5542bcee17..94309dd319 100644 --- a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.java @@ -85,7 +85,7 @@ public class DownloadFragment extends BaseFragment_TabLayout { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - int updateSize = PackageManager.getUpdateList().size(); + int updateSize = PackageManager.INSTANCE.getUpdateList().size(); if (updateSize != 0) { mUpdateNumber.setVisibility(View.VISIBLE); mUpdateNumber.setText(String.valueOf(updateSize)); diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java index d22e185cde..78f370b947 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java @@ -173,7 +173,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { viewHolder.dmDelete.setVisibility(View.VISIBLE); viewHolder.dmStartorpause.setTextColor(Color.WHITE); if (downloadEntity.isPluggable() - && PackageManager.isInstalled(downloadEntity.getPackageName())) { + && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { viewHolder.dmStartorpause.setText("安装"); viewHolder.dmStartorpause.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else { @@ -292,7 +292,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { case "安装": final String path = downloadEntity.getPath(); if (downloadEntity.isPluggable() - && PackageManager.isInstalled(downloadEntity.getPackageName())) { + && PackageManager.INSTANCE.isInstalled(downloadEntity.getPackageName())) { showPluginDialog(downloadEntity.getPath()); } else { if (FileUtils.isEmptyFile(path)) { diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java index 6622914ac7..0a973d28dd 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java @@ -115,7 +115,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { List update = PackageUtils.isCanUpdate(mContext, response); if (update.size() > 0) { updateList.addAll(update); - PackageManager.addUpdateList(update); + PackageManager.INSTANCE.addUpdateList(update); EventBus.getDefault().post(new EBDownloadChanged("update", View.VISIBLE, updateList.size())); initLocationMap(); @@ -168,7 +168,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { public void onNext(GameEntity response) { List update = PackageUtils.isCanUpdate(mContext, response); if (update.size() > 0) { - PackageManager.addUpdateList(update); + PackageManager.INSTANCE.addUpdateList(update); } } }); @@ -179,7 +179,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { public void init() { updateList.clear(); - for (GameUpdateEntity updateEntity : PackageManager.getUpdateList()) { + for (GameUpdateEntity updateEntity : PackageManager.INSTANCE.getUpdateList()) { updateList.add(updateEntity); } sortUpdateList(updateList); @@ -239,7 +239,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { } private void processingData() { - for (GameUpdateEntity updateEntity : PackageManager.getUpdateList()) { + for (GameUpdateEntity updateEntity : PackageManager.INSTANCE.getUpdateList()) { updateList.add(updateEntity); } sortUpdateList(updateList); @@ -452,7 +452,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { DownloadEntity downloadEntity = DownloadManager.getInstance(mContext).getDownloadEntityByUrl(updateEntity.getUrl()); if (downloadEntity == null) { - if (PackageManager.isCanUpdate(updateEntity.getId(), updateEntity.getPackageName())) { + if (PackageManager.INSTANCE.isCanUpdate(updateEntity.getId(), updateEntity.getPackageName())) { viewHolder.guUpdate.setText(R.string.update); viewHolder.guUpdate.setTextColor(Color.WHITE); viewHolder.guUpdate.setBackgroundResource(R.drawable.game_item_btn_download_style); diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.kt index 28cc6ed0a8..6acdc37755 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.kt @@ -3,35 +3,20 @@ package com.gh.gamecenter.entity import com.google.gson.annotations.SerializedName import java.util.* -class GameUpdateEntity { - - @SerializedName("game_id") - var id: String? = null - - var name: String? = null - - var icon: String? = null - - @SerializedName("package") - var packageName: String? = null - - var size: String? = null - - var version: String? = null - - @SerializedName("gh_version") - var ghVersion: String? = null - - var url: String? = null - - var platform: String? = null - - var isPluggable: Boolean = false - - var etag: String? = null - - var brief: String? = null - - var tag: ArrayList? = null - -} +data class GameUpdateEntity( + @SerializedName("game_id") + var id: String? = null, + var name: String? = null, + var icon: String? = null, + @SerializedName("package") + var packageName: String? = null, + var size: String? = null, + var version: String? = null, + @SerializedName("gh_version") + var ghVersion: String? = null, + var url: String? = null, + var platform: String? = null, + var isPluggable: Boolean = false, + var etag: String? = null, + var brief: String? = null, + var tag: ArrayList? = null) diff --git a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java index e534b023e9..653921e0e7 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java @@ -189,7 +189,7 @@ public class SearchToolbarFragment extends BaseFragment implements View.OnClickL layoutParams.width = DisplayUtils.dip2px(getContext(), 20); } - int updateSize = PackageManager.getUpdateListSize(); + int updateSize = PackageManager.INSTANCE.getUpdateListSize(); int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { mDownloadHintTv.setVisibility(View.VISIBLE); @@ -259,7 +259,7 @@ public class SearchToolbarFragment extends BaseFragment implements View.OnClickL @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBDownloadStatus status) { - int updateSize = PackageManager.getUpdateListSize(); + int updateSize = PackageManager.INSTANCE.getUpdateListSize(); int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { mDownloadHintTv.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt index 77cfe39bb6..7cf15adb61 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt @@ -130,16 +130,14 @@ class GameFragmentAdapter(context: Context, model: GameViewModel) : BaseRecycler if (holder is GamePluginViewHolder) { val pluginList = mItemDataList[position].pluginList if (mPluginAdapter == null) { - holder.mPluginRv.layoutManager = LinearLayoutManager(mContext) - (holder.mPluginRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false mPluginAdapter = GamePluginAdapter(mContext, pluginList) - mPluginAdapter!!.openList(mIsOpenPluginList) - holder.mPluginRv.adapter = mPluginAdapter - } else { - mPluginAdapter!!.openList(mIsOpenPluginList) - mPluginAdapter!!.notifyDataSetChanged() } + (holder.mPluginRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false + holder.mPluginRv.layoutManager = LinearLayoutManager(mContext) + holder.mPluginRv.adapter = mPluginAdapter + mPluginAdapter!!.openList(mIsOpenPluginList) + holder.mHeadTitle.text = String.format(Locale.getDefault(), "你有%d个游戏可以升级插件版", pluginList?.size) holder.mPluginHead.setOnClickListener({ if (mIsOpenPluginList) { diff --git a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt index 85e3ab998b..faa9293347 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt @@ -69,7 +69,7 @@ class GameViewModel(application: Application) : AndroidViewModel(application) { if (updateList.isEmpty()) { return } - val list = java.util.ArrayList() + val list = ArrayList() var gameUpdateEntity: GameUpdateEntity var i = 0 val size = updateList.size @@ -101,13 +101,11 @@ class GameViewModel(application: Application) : AndroidViewModel(application) { } i++ } - if (!list.isEmpty()) { - for (gEntity in list) { - gEntity.setEntryMap(DownloadManager.getInstance(getApplication()).getEntryMap(gEntity.name)) - } - pluginList = list - transformationItemData() + for (gEntity in list) { + gEntity.setEntryMap(DownloadManager.getInstance(getApplication()).getEntryMap(gEntity.name)) } + pluginList = list + transformationItemData() } private fun getSlideData(initData: Boolean) { @@ -271,7 +269,7 @@ class GameViewModel(application: Application) : AndroidViewModel(application) { itemDataListCache.add(itemDataTop) // 插件化 - if (pluginList != null) { + if (pluginList != null && pluginList!!.isNotEmpty()) { val itemDataPlugin = ItemData() itemDataPlugin.pluginList = pluginList itemDataListCache.add(itemDataPlugin) diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java b/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java deleted file mode 100644 index 1eccdd0020..0000000000 --- a/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java +++ /dev/null @@ -1,233 +0,0 @@ -package com.gh.gamecenter.manager; - -import android.support.v4.util.ArrayMap; -import android.text.TextUtils; - -import com.gh.gamecenter.entity.GameUpdateEntity; - -import java.util.ArrayList; -import java.util.List; - -public class PackageManager { - - private static ArrayList updateList; - private static ArrayMap installedMap; - private static ArrayList installedList; - - /** - * 初始化 - * - * @param list 已安装包名list - */ - public static void init(ArrayList list) { - installedMap = new ArrayMap<>(); - installedList = new ArrayList<>(); - for (String packageName : list) { - installedMap.put(packageName, true); - installedList.add(packageName); - } - } - - /** - * 根据包名 判断是否安装该游戏 - * - * @param packageName 包名 - * @return true 已安装 false 未安装 - */ - public static boolean isInstalled(String packageName) { - if (TextUtils.isEmpty(packageName)) { - return false; - } - Boolean b = getInstalledMap().get(packageName); - return b != null; - } - - /** - * 获取已安装游戏map - * - * @return 已安装游戏map - */ - public static ArrayMap getInstalledMap() { - if (installedMap == null) { - installedMap = new ArrayMap<>(); - } - return installedMap; - } - - /** - * 移除一个已安装的游戏 - * - * @param packageName 包名 - */ - public static void removeInstalled(String packageName) { - getInstalledMap().remove(packageName); - getInstalledList().remove(packageName); - } - - /** - * 获取已安装游戏的包名list - * - * @return 包名list - */ - public static ArrayList getInstalledList() { - if (installedList == null) { - installedList = new ArrayList<>(); - } - return installedList; - } - - /** - * 添加一个已安装的游戏 - * - * @param packageName 包名 - */ - public static void addInstalled(String packageName) { - getInstalledMap().put(packageName, true); - getInstalledList().add(packageName); - } - - /** - * 获取可插件化游戏的数量 - * - * @return 可插件化游戏的数量 - */ - public static int getPluggableSize() { - if (getUpdateList().size() != 0) { - int pluggableSize = 0; - for (GameUpdateEntity entity : getUpdateList()) { - if (entity.isPluggable()) { - pluggableSize++; - } - } - return pluggableSize; - } - return 0; - } - - /** - * 获取可更新游戏列表 - * - * @return 可更新游戏列表 - */ - public static ArrayList getUpdateList() { - if (updateList == null) { - updateList = new ArrayList<>(); - } - return updateList; - } - - /** - * 判断包名是否可以更新 - * - * @param packageName 包名 - * @return true 可以更新 false 不可以更新 - */ - public static boolean isCanUpdate(String gameId, String packageName) { - if (getUpdateList().size() != 0) { - for (GameUpdateEntity entity : getUpdateList()) { - if (!entity.isPluggable() - && entity.getPackageName().equals(packageName) - && entity.getId().equals(gameId)) { - return true; - } - } - } - return false; - } - - /** - * 添加一个更新 - * - * @param game 游戏 - */ - public static void addUpdate(GameUpdateEntity game) { - if (!isContain(game.getId(), game.getPackageName())) { - getUpdateList().add(game); - } - } - - /** - * 添加多个更新 - * - * @param game 游戏 - */ - public static void addUpdateList(List game) { - for (GameUpdateEntity updateEntity : game) { - if (!isContain(updateEntity.getId(), updateEntity.getPackageName())) { - getUpdateList().add(updateEntity); - } - } - } - - /** - * 查看更新列表中是否包含该游戏对应的包名 - * - * @param gameId 游戏id - * @param packageName 包名 - * @return true 包含 false 不包含 - */ - public static boolean isContain(String gameId, String packageName) { - if (getUpdateList().isEmpty()) { - return false; - } - for (int i = 0; i < getUpdateList().size(); i++) { - if (getUpdateList().get(i).getPackageName().equals(packageName) - && getUpdateList().get(i).getId().equals(gameId)) { - return true; - } - } - return false; - } - - /** - * 在特定位置添加一个更新 - * - * @param index 位置 - * @param game 游戏 - */ - public static void addUpdate(int index, GameUpdateEntity game) { - if (!isContain(game.getId(), game.getPackageName())) { - getUpdateList().add(index, game); - } - } - - /** - * 根据包名删除一个更新 - * - * @param packageName 包名 - */ - public static void removeUpdate(String packageName) { - for (int i = 0; i < getUpdateList().size(); i++) { - if (packageName.equals(getUpdateList().get(i).getPackageName())) { - getUpdateList().remove(i); - i--; - } - } - } - - /** - * 获取更新列表数量 - * - * @return 更新列表数量 - */ - public static int getUpdateListSize() { - return getUpdateList().size(); - } - - /** - * 判断包名是否可以插件化 - */ - public static boolean isCanPluggable(String gameId, String packageName) { - ArrayList updateList = getUpdateList(); - if (updateList.size() != 0) { - for (GameUpdateEntity entity : updateList) { - if (entity.isPluggable() - && gameId.equals(entity.getId()) - && packageName.equals(entity.getPackageName())) { - return true; - } - } - } - return false; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackageManager.kt b/app/src/main/java/com/gh/gamecenter/manager/PackageManager.kt new file mode 100644 index 0000000000..ff10e01640 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/manager/PackageManager.kt @@ -0,0 +1,219 @@ +package com.gh.gamecenter.manager + +import android.os.Handler +import android.support.v4.util.ArrayMap +import android.text.TextUtils +import com.gh.gamecenter.entity.GameUpdateEntity +import com.gh.gamecenter.eventbus.EBDownloadStatus +import org.greenrobot.eventbus.EventBus +import java.util.* + +object PackageManager { + + private const val UPDATA_WHAT = 0 + private const val PLUGIN_WHAT = 1 + + private val mHandle = Handler() + + private var updateAndPluginList = ArrayList() + private var installedMap = ArrayMap() + private var installedList = ArrayList() + + /** + * 获取更新列表数量 + * + * @return 更新列表数量 + */ + val updateListSize: Int + get() = getUpdateList().size + + /** + * 初始化 + * + * @param list 已安装包名list + */ + fun initData(list: ArrayList) { + installedMap = ArrayMap() + installedList = ArrayList() + for (packageName in list) { + installedMap[packageName] = true + installedList.add(packageName) + } + } + + /** + * 根据包名 判断是否安装该游戏 + * + * @param packageName 包名 + * @return true 已安装 false 未安装 + */ + fun isInstalled(packageName: String): Boolean { + if (TextUtils.isEmpty(packageName)) { + return false + } + val b = getInstalledMap()[packageName] + return b != null + } + + /** + * 获取已安装游戏map + * + * @return 已安装游戏map + */ + fun getInstalledMap(): ArrayMap { + return installedMap + } + + /** + * 移除一个已安装的游戏 + * + * @param packageName 包名 + */ + fun removeInstalled(packageName: String) { + getInstalledMap().remove(packageName) + getInstalledList().remove(packageName) + } + + /** + * 获取已安装游戏的包名list + * + * @return 包名list + */ + fun getInstalledList(): ArrayList { + return installedList + } + + /** + * 添加一个已安装的游戏 + * + * @param packageName 包名 + */ + fun addInstalled(packageName: String) { + getInstalledMap()[packageName] = true + getInstalledList().add(packageName) + } + + /** + * 获取可更新游戏列表 + * + * @return 可更新游戏列表 + */ + fun getUpdateList(): ArrayList { + return updateAndPluginList + } + + /** + * 判断包名是否可以更新 + * + * @param packageName 包名 + * @return true 可以更新 false 不可以更新 + */ + fun isCanUpdate(gameId: String, packageName: String): Boolean { + for (entity in getUpdateList()) { + if (!entity.isPluggable && entity.packageName == packageName && entity.id == gameId) { + return true + } + } + return false + } + + /** + * 添加一个更新 + * + * @param game 游戏 + */ + fun addUpdate(game: GameUpdateEntity) { + if (!isContain(game.id, game.packageName)) { + getUpdateList().add(game) + postEventBusMessage(game.isPluggable) + } + } + + /** + * 添加多个更新 + * + * @param game 游戏 + */ + fun addUpdateList(game: List) { + for (updateEntity in game) { + if (!isContain(updateEntity.id, updateEntity.packageName)) { + getUpdateList().add(updateEntity) + postEventBusMessage(updateEntity.isPluggable) + } + } + } + + /** + * 查看更新列表中是否包含该游戏对应的包名 + * + * @param gameId 游戏id + * @param packageName 包名 + * @return true 包含 false 不包含 + */ + fun isContain(gameId: String?, packageName: String?): Boolean { + for (entity in updateAndPluginList) { + if (entity.packageName == packageName && entity.id == gameId) { + return true + } + } + return false + } + + /** + * 在特定位置添加一个更新 + * + * @param index 位置 + * @param game 游戏 + */ + fun addUpdate(index: Int, game: GameUpdateEntity) { + if (!isContain(game.id, game.packageName)) { + getUpdateList().add(index, game) + } + } + + /** + * 根据包名删除一个更新 + * + * @param packageName 包名 + */ + fun removeUpdate(packageName: String) { + var i = 0 + while (i < updateAndPluginList.size) { + if (packageName == updateAndPluginList[i].packageName) { + postEventBusMessage(updateAndPluginList[i].isPluggable) + updateAndPluginList.removeAt(i) + i-- + } + i++ + } + } + + /** + * 判断包名是否可以插件化 + */ + fun isCanPluggable(gameId: String, packageName: String): Boolean { + for (entity in updateAndPluginList) { + if (entity.isPluggable && gameId == entity.id && packageName == entity.packageName) { + return true + } + } + return false + } + + // 对数据(更新/插件化)增删需要发送消息 + private fun postEventBusMessage(isPluggable: Boolean) { + // 防止短时间内重复发送 + if (isPluggable) { + mHandle.removeMessages(PLUGIN_WHAT) + } else { + mHandle.removeMessages(UPDATA_WHAT) + } + mHandle.postDelayed({ + if (isPluggable) { + EventBus.getDefault().post(EBDownloadStatus("plugin")) + } else { + EventBus.getDefault().post(EBDownloadStatus("update")) + } + }, 500) + } +} diff --git a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java index 738502ec78..57605758c5 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java @@ -135,7 +135,7 @@ public class UpdateManager { gameUpdateEntity.setUrl(appEntity.getUrl()); gameUpdateEntity.setPlatform("官方版"); gameUpdateEntity.setId(mContext.getString(R.string.ghzs_id)); - PackageManager.addUpdate(0, gameUpdateEntity); + PackageManager.INSTANCE.addUpdate(0, gameUpdateEntity); if (isCheck) { if (appEntity.isForce()) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java index 0291f257d4..53f1e85c50 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java @@ -376,8 +376,6 @@ public class AnswerEditFragment extends NormalFragment { @Override public boolean onBackPressed() { - Utils.log("========::" + mCacheAnswerContent + "===" + mEditContent.getHtml()); - if (!TextUtils.isEmpty(mAnswerId)) { showPatchBackDialog(); return true;