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 6b6b006eab..be4a907c24 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -1,6 +1,7 @@ package com.gh.common.util; import android.content.Context; +import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v4.util.ArrayMap; @@ -18,16 +19,20 @@ import com.gh.common.constant.Constants; import com.gh.common.view.DownloadDialog; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; +import com.gh.download.DownloadStatus; +import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.GameUpdateEntity; import com.gh.gamecenter.eventbus.EBPutUrl; import com.gh.gamecenter.eventbus.EBRedDot; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.PackageManager; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,8 +42,7 @@ import de.greenrobot.event.EventBus; public class DownloadItemUtils { - public static void initializeGameMap(Context context, - ArrayMap> gameMap) { + public static void initializeGameMap(Context context, ArrayMap> gameMap) { gameMap.clear(); List list = DownloadManager.getInstance(context).getAll(); for (int i = 0, size = list.size(); i < size; i++) { @@ -52,25 +56,25 @@ public class DownloadItemUtils { } public static void processDate(GameEntity detailedEntity, - DownloadEntry downloadEntry, - ArrayMap> platformMap, - Handler handler, - RecyclerView.Adapter adapter, int index, - ArrayMap statusMap) { + DownloadEntry downloadEntry, + ArrayMap> platformMap, + Handler handler, + RecyclerView.Adapter adapter, + int index, + ArrayMap statusMap) { String platform = downloadEntry.getMeta().get("platform"); - LinkedBlockingQueue queue = platformMap.get(downloadEntry - .getName()); + LinkedBlockingQueue queue = platformMap.get(downloadEntry.getName()); if (queue == null) { queue = new LinkedBlockingQueue(); } ArrayMap entryMap = detailedEntity.getEntryMap(); - switch (downloadEntry.getStatus()) { - case pause: - case cancel: - case done: + DownloadStatus status = downloadEntry.getStatus(); + if (status.equals(DownloadStatus.pause) + || status.equals(DownloadStatus.cancel) + || status.equals(DownloadStatus.done)) { queue.remove(platform); platformMap.put(downloadEntry.getName(), queue); if (entryMap == null) { @@ -81,8 +85,7 @@ public class DownloadItemUtils { if (!"pause".equals(statusMap.get(downloadEntry.getUrl()))) { adapter.notifyItemChanged(index); } - break; - default: + } else { if (!queue.contains(platform)) { queue.offer(platform); if (queue.size() == 2) { @@ -103,16 +106,20 @@ public class DownloadItemUtils { adapter.notifyItemChanged(index); } } - break; } } - public static void updateItem(Context context, LinearLayout labelList, - ProgressBar game_progressbar, LinearLayout game_ll_info, - TextView download_speed, TextView download_percentage, - TextView downloadBtn, GameEntity entity, - ArrayMap> platformMap, - ArrayMap statusMap, boolean isShowPlatform) { + public static void updateItem(Context context, + LinearLayout labelList, + ProgressBar game_progressbar, + LinearLayout game_ll_info, + TextView download_speed, + TextView download_percentage, + TextView downloadBtn, + GameEntity entity, + ArrayMap> platformMap, + ArrayMap statusMap, + boolean isShowPlatform) { // 控制是否显示下载按钮 if (Config.isShow) { @@ -120,316 +127,356 @@ public class DownloadItemUtils { } else { downloadBtn.setVisibility(View.GONE); } - if (entity.getApk() != null - && entity.getApk().size() == 1 - && PackageManager.isInstalled(entity.getApk().get(0).getPackageName()) - && entity.getPluginPlatform() == null) { - labelList.setVisibility(View.VISIBLE); - game_progressbar.setVisibility(View.GONE); - game_ll_info.setVisibility(View.GONE); - downloadBtn.setText("启动"); - downloadBtn.setBackgroundResource(R.drawable.textview_orange_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } else { - ArrayMap entryMap = entity.getEntryMap(); - if (entryMap != null && !entryMap.isEmpty()) { + DownloadEntry downloadEntry = null; - DownloadEntry downloadEntry; + ArrayMap entryMap = entity.getEntryMap(); + if (entryMap != null && !entryMap.isEmpty()) { - LinkedBlockingQueue queue = platformMap.get(entity.getName()); + LinkedBlockingQueue queue = platformMap.get(entity.getName()); - if (queue != null && !queue.isEmpty()) { - downloadEntry = entryMap.get(queue.peek()); - } else { - downloadEntry = entryMap.get(entryMap.keyAt(0)); - } + if (queue != null && !queue.isEmpty()) { + downloadEntry = entryMap.get(queue.peek()); + } else { + downloadEntry = entryMap.get(entryMap.keyAt(0)); + } - String pluginPlatform = entity.getPluginPlatform(); + String pluginPlatform = entity.getPluginPlatform(); - if (downloadEntry != null && (pluginPlatform == null + if (downloadEntry != null && (pluginPlatform == null || pluginPlatform.equals(PlatformUtils.getInstance(context) .getPlatformName(downloadEntry.getMeta().get("platform"))))) { + labelList.setVisibility(View.GONE); + game_progressbar.setVisibility(View.VISIBLE); + game_ll_info.setVisibility(View.VISIBLE); - labelList.setVisibility(View.GONE); - game_progressbar.setVisibility(View.VISIBLE); - game_ll_info.setVisibility(View.VISIBLE); + String platform = PlatformUtils.getInstance(context) + .getPlatformName(downloadEntry.getMeta().get("platform")); - String platform = PlatformUtils.getInstance(context) - .getPlatformName(downloadEntry.getMeta().get("platform")); + game_progressbar.setProgress((int) (downloadEntry.getPercent() * 10)); - switch (downloadEntry.getStatus()) { - case downloading: - if (!"pause".equals(statusMap.get(downloadEntry.getUrl()))) { - if (isShowPlatform) { - if (platform == null) { - download_speed.setText(SpeedUtils - .getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry - .getSize(), - downloadEntry - .getProgress(), - downloadEntry - .getSpeed() * 1024) - + ")"); - } else { - download_speed.setText(platform - + " - " - + SpeedUtils - .getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry - .getSize(), - downloadEntry - .getProgress(), - downloadEntry - .getSpeed() * 1024) - + ")"); - } - } else { - download_speed.setText(SpeedUtils - .getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry - .getProgress(), - downloadEntry - .getSpeed() * 1024) - + ")"); - } - } - download_percentage.setText(downloadEntry.getPercent() + "%"); - if (entity.getApk() != null && entity.getApk().size() == 1) { - if (!"pause".equals(statusMap.get(downloadEntry.getUrl()))) { - downloadBtn.setText("暂停"); - downloadBtn.setBackgroundResource(R.drawable.textview_gray_style); - downloadBtn.setTextColor(0xFF999999); - } - } else { - downloadBtn.setText("下载"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } - break; - case waiting: - if (isShowPlatform) { - if (platform == null) { - download_speed.setText("等待"); - } else { - download_speed.setText(platform + " - 等待"); - } - } else { - download_speed.setText("等待"); - } - download_percentage.setText(downloadEntry.getPercent() + "%"); - if (entity.getApk() != null && entity.getApk().size() == 1) { - downloadBtn.setText("等待"); - downloadBtn.setBackgroundResource(R.drawable.textview_gray_style); - downloadBtn.setTextColor(0xFF999999); - } else { - downloadBtn.setText("下载"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } - break; - case done: - if (isShowPlatform) { - if (platform == null) { - download_speed.setText("下载完成"); - } else { - download_speed.setText(platform + " - 下载完成"); - } - } else { - download_speed.setText("下载完成"); - } - download_percentage.setText("100%"); - if (entity.getApk() != null && entity.getApk().size() == 1) { - EventBus.getDefault().post( - new EBPutUrl(entity.getApk().get(0) - .getPackageName(), downloadEntry.getUrl())); - downloadBtn.setText("安装"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } else { - labelList.setVisibility(View.VISIBLE); - game_progressbar.setVisibility(View.GONE); - game_ll_info.setVisibility(View.GONE); - downloadBtn.setText("下载"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } - break; - case pause: - case timeout: - case neterror: - if (isShowPlatform) { - if (platform == null) { - download_speed.setText("暂停"); - } else { - download_speed.setText(platform + " - 暂停"); - } - } else { - download_speed.setText("暂停"); - } - download_percentage.setText(downloadEntry.getPercent() + "%"); - if (entity.getApk() != null && entity.getApk().size() == 1) { - downloadBtn.setText("继续"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } else { - downloadBtn.setText("下载"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } - break; - case cancel: - case hijack: - labelList.setVisibility(View.VISIBLE); - game_progressbar.setVisibility(View.GONE); - game_ll_info.setVisibility(View.GONE); - if (entity.getPluginPlatform() != null) { - downloadBtn.setText("插件化"); - } else { - downloadBtn.setText("下载"); - } - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - break; - default: - break; + DownloadStatus status = downloadEntry.getStatus(); + if (status.equals(DownloadStatus.downloading)) { + if (!"pause".equals(statusMap.get(downloadEntry.getUrl()))) { + if (isShowPlatform && platform != null) { + download_speed.setText(String.format("%s - %s(剩%s)", platform, + SpeedUtils.getSpeed(downloadEntry.getSpeed()), + SpeedUtils.getRemainTime(downloadEntry.getSize(), downloadEntry.getProgress(), downloadEntry.getSpeed() * 1024))); + } else { + download_speed.setText(String.format("%s(剩%s)", SpeedUtils.getSpeed(downloadEntry.getSpeed()), + SpeedUtils.getRemainTime(downloadEntry.getSize(), downloadEntry.getProgress(), downloadEntry.getSpeed() * 1024))); + } + download_percentage.setText(downloadEntry.getPercent() + "%"); } - game_progressbar.setProgress((int) (downloadEntry - .getPercent() * 10)); - } else { + } else if (status.equals(DownloadStatus.waiting)) { + if (isShowPlatform && platform != null) { + download_speed.setText(String.format("%s - 等待", platform)); + } else { + download_speed.setText("等待"); + } + download_percentage.setText(downloadEntry.getPercent() + "%"); + } else if (status.equals(DownloadStatus.pause) + || status.equals(DownloadStatus.timeout) + || status.equals(DownloadStatus.neterror)) { + if (isShowPlatform && platform != null) { + download_speed.setText(String.format("%s - 暂停", platform)); + } else { + download_speed.setText("暂停"); + } + download_percentage.setText(downloadEntry.getPercent() + "%"); + } else if (status.equals(DownloadStatus.done)) { + if (isShowPlatform && platform != null) { + download_speed.setText(String.format("%s - 下载完成", platform)); + } else { + download_speed.setText("下载完成"); + } + download_percentage.setText("100%"); + } else if (status.equals(DownloadStatus.cancel) + || status.equals(DownloadStatus.hijack)) { labelList.setVisibility(View.VISIBLE); game_progressbar.setVisibility(View.GONE); game_ll_info.setVisibility(View.GONE); - if (entity.getApk() != null) { - if (entity.getPluginPlatform() != null) { - downloadBtn.setText("插件化"); - } else { - downloadBtn.setText("下载"); - } - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - } } } else { labelList.setVisibility(View.VISIBLE); game_progressbar.setVisibility(View.GONE); game_ll_info.setVisibility(View.GONE); - if (entity.getApk() != null) { - if (entity.getPluginPlatform() != null) { - downloadBtn.setText("插件化"); - } else { - downloadBtn.setText("下载"); - } - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); + } + } else { + labelList.setVisibility(View.VISIBLE); + game_progressbar.setVisibility(View.GONE); + game_ll_info.setVisibility(View.GONE); + } + + if (entity.getApk() == null) { + downloadBtn.setText("下载"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else if (entity.getApk().size() == 1) { + String pluginPlatform = entity.getPluginPlatform(); + if (downloadEntry != null && (pluginPlatform == null + || pluginPlatform.equals(PlatformUtils.getInstance(context) + .getPlatformName(downloadEntry.getMeta().get("platform"))))) { + DownloadStatus status = downloadEntry.getStatus(); + if (status.equals(DownloadStatus.downloading) + || status.equals(DownloadStatus.waiting) + || status.equals(DownloadStatus.pause) + || status.equals(DownloadStatus.timeout) + || status.equals(DownloadStatus.neterror)) { + downloadBtn.setText("下载中"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); + downloadBtn.setTextColor(0xFF1BA4FC); + } else if (status.equals(DownloadStatus.done)) { + downloadBtn.setText("安装"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); downloadBtn.setTextColor(0xFFFFFFFF); } + } else { + if (pluginPlatform != null) { + downloadBtn.setText("插件化"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else if (PackageManager.isInstalled(entity.getApk().get(0).getPackageName())) { + if (PackageManager.isCanUpdate(entity.getApk().get(0).getPackageName())) { + downloadBtn.setText("更新"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else { + downloadBtn.setText("启动"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_launch_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } + } else { + downloadBtn.setText("下载"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } + } + } else { + int doneCount = 0; + int updateCount = 0; + int installCount = 0; + int pluginCount = 0; + if (entryMap != null && !entryMap.isEmpty()) { + for (String key : entryMap.keySet()) { + if (entryMap.get(key).getStatus().equals(DownloadStatus.done)) { + doneCount++; + } + } + } + + for (ApkEntity apkEntity : entity.getApk()) { + if (PackageManager.isCanUpdate(apkEntity.getPackageName())) { + updateCount++; + } + } + + PackageManager packageManager = new PackageManager(context); + for (ApkEntity apkEntity : entity.getApk()) { + if (PackageManager.isInstalled(apkEntity.getPackageName())) { + if (!packageManager.isSignature(apkEntity.getPackageName())) { + pluginCount++; + } else { + installCount++; + } + } + } + + if (doneCount != 0) { + downloadBtn.setText("安装"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else if (updateCount != 0) { + downloadBtn.setText("更新"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else if (installCount != 0) { + downloadBtn.setText("打开"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_launch_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else if (pluginCount != 0) { + downloadBtn.setText("插件化"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } else { + downloadBtn.setText("下载"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + downloadBtn.setTextColor(0xFFFFFFFF); } } } - public static void updateItem(Context context, LinearLayout labelList, - ProgressBar game_progressbar, LinearLayout game_ll_info, - TextView download_speed, TextView download_percentage, - TextView downloadBtn, GameEntity entity, - ArrayMap> platformMap, - ArrayMap statusMap) { - updateItem(context, labelList, game_progressbar, game_ll_info, - download_speed, download_percentage, downloadBtn, entity, - platformMap, statusMap, true); + public static void updateItem(Context context, + LinearLayout labelList, + ProgressBar game_progressbar, + LinearLayout game_ll_info, + TextView download_speed, + TextView download_percentage, + TextView downloadBtn, + GameEntity entity, + ArrayMap> platformMap, + ArrayMap statusMap) { + updateItem(context, labelList, game_progressbar, game_ll_info, download_speed, + download_percentage, downloadBtn, entity, platformMap, statusMap, true); } public static void setOnClickListener(Context context, - TextView downloadBtn, TextView download_speed, - TextView download_percentage, GameEntity entity, int position, - RecyclerView.Adapter adapter, - ArrayMap statusMap, - ArrayMap> platformMap, - String entrance, DismissEntity dismissEntity, String location) { - setOnClickListener(context, downloadBtn, download_speed, - download_percentage, entity, position, adapter, statusMap, platformMap, entrance, true, + TextView downloadBtn, + TextView download_speed, + TextView download_percentage, + GameEntity entity, + int position, + RecyclerView.Adapter adapter, + ArrayMap statusMap, + ArrayMap> platformMap, + String entrance, + DismissEntity dismissEntity, + String location) { + setOnClickListener(context, downloadBtn, download_speed, download_percentage, + entity, position, adapter, statusMap, platformMap, entrance, true, dismissEntity, location); } public static void setOnClickListener(final Context context, - final TextView downloadBtn, final TextView download_speed, - final TextView download_percentage, final GameEntity entity, - final int position, - final RecyclerView.Adapter adapter, - final ArrayMap statusMap, - final ArrayMap> platformMap, - final String entrance, final boolean isShowPlatform, - final DismissEntity dismissEntity, final String location) { + final TextView downloadBtn, + final TextView download_speed, + final TextView download_percentage, + final GameEntity entity, + final int position, + final RecyclerView.Adapter adapter, + final ArrayMap statusMap, + final ArrayMap> platformMap, + final String entrance, + final boolean isShowPlatform, + final DismissEntity dismissEntity, + final String location) { downloadBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(final View viewBtn) { String str = downloadBtn.getText().toString(); if ("下载".equals(str)) { if (entity.getApk() == null || entity.getApk().isEmpty()) { - Toast.makeText(context, "稍等片刻~!游戏正在上传中...", - Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "稍等片刻~!游戏正在上传中...", Toast.LENGTH_SHORT).show(); } else { if (NetworkUtils.isWifiConnected(context)) { - download(context, entity, downloadBtn, statusMap, - dismissEntity, download_speed, download_percentage, - viewBtn, entrance, location); + download(context, entity, downloadBtn, statusMap, dismissEntity, + download_speed, download_percentage, viewBtn, entrance, location); } else { DialogUtils.showWarningDialog(context, new DialogUtils.ConfiremListener() { @Override public void onConfirem() { - download(context, entity, downloadBtn, statusMap, - dismissEntity, download_speed, download_percentage, - viewBtn, entrance, location); + download(context, entity, downloadBtn, statusMap, dismissEntity, + download_speed, download_percentage, viewBtn, entrance, location); } }); } } } else if ("插件化".equals(str)) { if (NetworkUtils.isWifiConnected(context)) { - plugin(context, entity, downloadBtn, statusMap, entrance); + plugin(context, entity, downloadBtn, statusMap, dismissEntity, + download_speed, download_percentage,viewBtn, entrance, location); } else { DialogUtils.showWarningDialog(context, new DialogUtils.ConfiremListener() { @Override public void onConfirem() { - plugin(context, entity, downloadBtn, statusMap, entrance); + plugin(context, entity, downloadBtn, statusMap, dismissEntity, + download_speed, download_percentage,viewBtn, entrance, location); } }); } - } else if ("暂停".equals(str)) { - pause(context, entity, download_speed, download_percentage, - downloadBtn, platformMap, statusMap, isShowPlatform); - } else if ("继续".equals(str)) { - goon(context, entity, download_speed, download_percentage, - downloadBtn, platformMap, statusMap, isShowPlatform); } else if ("安装".equals(str)) { - install(context, entity, position, adapter); + if (entity.getApk().size() == 1) { + install(context, entity, position, adapter); + } else { + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog.getInstance(context).showPopupWindow( + viewBtn, entity, entrance, statusMap, download_speed, download_percentage, location); + } + } } else if ("启动".equals(str)) { Map kv = new HashMap(); kv.put("版本", entity.getApk().get(0).getPlatform()); DataUtils.onEvent(context, "游戏启动", entity.getName(), kv); - PackageUtils.launchApplicationByPackageName(context, entity - .getApk().get(0).getPackageName()); + PackageUtils.launchApplicationByPackageName(context, entity.getApk().get(0).getPackageName()); + } else if ("下载中".equals(str)) { + context.startActivity(new Intent(context, DownloadManagerActivity.class)); + } else if ("打开".equals(str)) { + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog.getInstance(context).showPopupWindow( + viewBtn, entity, entrance, statusMap, download_speed, download_percentage, location); + } + } else if ("更新".equals(str)) { + if (NetworkUtils.isWifiConnected(context)) { + update(context, entity, statusMap, dismissEntity, + download_speed, download_percentage, viewBtn, entrance, location); + } else { + DialogUtils.showWarningDialog(context, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + update(context, entity, statusMap, dismissEntity, + download_speed, download_percentage, viewBtn, entrance, location); + } + }); + } } } }); } + //更新 + private static void update(Context context, + GameEntity entity, + ArrayMap statusMap, + DismissEntity dismissEntity, + TextView download_speed, + TextView download_percentage, + View viewBtn, + String entrance, + String location) { + if (entity.getApk().size() == 1) { + ApkEntity apkEntity = entity.getApk().get(0); + //下载可更新游戏 + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(context, "游戏更新", entity.getName(), kv); + + DownloadEntry entry = new DownloadEntry(); + entry.setUrl(apkEntity.getUrl()); + entry.setName(entity.getName()); + entry.setPath(FileUtils.getDownloadPath(context, + MD5Utils.getContentMD5( + entity.getName() + "_" + System.currentTimeMillis()) + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", entity.getIcon()); + meta.put("platform", apkEntity.getPlatform()); + meta.put("isUpdate", "true"); + entry.setMeta(meta); + DownloadManager.getInstance(context).add(entry); + } else { + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog.getInstance(context).showPopupWindow( + viewBtn, entity, entrance, statusMap, download_speed, download_percentage, location); + } + } + } + //下载 - private static void download(Context context, GameEntity entity, TextView downloadBtn, - ArrayMap statusMap, DismissEntity dismissEntity, - TextView download_speed, TextView download_percentage, View viewBtn, - String entrance, String location) { + private static void download(Context context, + GameEntity entity, + TextView downloadBtn, + ArrayMap statusMap, + DismissEntity dismissEntity, + TextView download_speed, + TextView download_percentage, + View viewBtn, + String entrance, + String location) { if (entity.getApk().size() == 1) { String msg = FileUtils.isCanDownload(entity.getApk().get(0).getSize()); if (TextUtils.isEmpty(msg)) { @@ -439,8 +486,7 @@ public class DownloadItemUtils { DataUtils.onEvent(context, "游戏下载", entity.getName(), kv); Map kv2 = new HashMap(); - kv2.put("版本", entity.getApk().get(0) - .getPlatform()); + kv2.put("版本", entity.getApk().get(0).getPlatform()); kv2.put("状态", "下载开始"); kv2.put("位置", entrance + "-开始"); DataUtils.onEvent(context, "游戏下载位置", entity.getName(), kv2); @@ -476,12 +522,11 @@ public class DownloadItemUtils { map.put("createdOn", System.currentTimeMillis() / 1000); DataCollectionManager.onEvent(context, "download", map); - DownloadManager.getInstance(context).add( - getDownloadEntry(context, entity, 0, entrance)); + addDownloadEntry(context, entity, 0, entrance); Toast.makeText(context, entity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); - downloadBtn.setText("暂停"); - downloadBtn.setBackgroundResource(R.drawable.textview_gray_style); - downloadBtn.setTextColor(0xFF999999); + downloadBtn.setText("下载中"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); + downloadBtn.setTextColor(0xFF1BA4FC); EventBus.getDefault().post(new EBRedDot(1)); statusMap.put(entity.getApk().get(0).getUrl(), "downloading"); @@ -491,227 +536,105 @@ public class DownloadItemUtils { } else { if (!dismissEntity.isShow()) { dismissEntity.setShow(true); - DownloadDialog.getInstance(context) - .showPopupWindow(viewBtn, entity, entrance, statusMap, - download_speed, download_percentage, location); + DownloadDialog.getInstance(context).showPopupWindow( + viewBtn, entity, entrance, statusMap, download_speed, download_percentage, location); } } } //插件化 - private static void plugin(Context context, GameEntity entity, TextView downloadBtn, - ArrayMap statusMap, String entrance) { - String msg = FileUtils.isCanDownload(entity.getApk().get(0).getSize()); - if (TextUtils.isEmpty(msg)) { - Map kv = new HashMap(); - kv.put("版本", entity.getApk().get(0).getPlatform()); - kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", entity.getName(), kv); + private static void plugin(Context context, + GameEntity entity, + TextView downloadBtn, + ArrayMap statusMap, + DismissEntity dismissEntity, + TextView download_speed, + TextView download_percentage, + View viewBtn, + String entrance, + String location) { + if (entity.getApk().size() == 1) { + String msg = FileUtils.isCanDownload(entity.getApk().get(0).getSize()); + if (TextUtils.isEmpty(msg)) { + Map kv = new HashMap(); + kv.put("版本", entity.getApk().get(0).getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(context, "游戏下载", entity.getName(), kv); - Map kv2 = new HashMap(); - kv2.put("版本", entity.getApk().get(0) - .getPlatform()); - kv2.put("状态", "下载开始"); - kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", entity.getName(), kv2); + Map kv2 = new HashMap(); + kv2.put("版本", entity.getApk().get(0).getPlatform()); + kv2.put("状态", "下载开始"); + kv2.put("位置", entrance + "-开始"); + DataUtils.onEvent(context, "游戏下载位置", entity.getName(), kv2); - Map kv3 = new HashMap(); - kv3.put(entrance, "下载数"); - kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", entity.getName(), kv3); + Map kv3 = new HashMap(); + kv3.put(entrance, "下载数"); + kv3.put(entrance, "下载开始"); + DataUtils.onEvent(context, "应用数据", entity.getName(), kv3); - if ("主页-最新插件".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(entity.getName(), "下载数"); - DataUtils.onEvent(context, "主页数据", "最新插件", kv4); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(entity.getName(), "下载数"); - DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(entity.getName(), "下载数"); - DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); + if ("主页-最新插件".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(entity.getName(), "下载数"); + DataUtils.onEvent(context, "主页数据", "最新插件", kv4); + } else if ("主页-热门卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(entity.getName(), "下载数"); + DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); + } else if ("主页-新测卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(entity.getName(), "下载数"); + DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); + } + + Map map = new HashMap(); + map.put("game", entity.getName()); + map.put("method", "正常"); + map.put("platform", PlatformUtils.getInstance(context) + .getPlatformName(entity.getApk().get(0).getPlatform())); + map.put("status", "开始"); + map.put("location", "游戏详情:" + entity.getName()); + map.put("from", entrance); + map.put("network", NetworkUtils.getConnectedType(context)); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(context, "download", map); + + addDownloadEntry(context, entity, 0, entrance); + Toast.makeText(context, entity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); + downloadBtn.setText("下载中"); + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); + downloadBtn.setTextColor(0xFF1BA4FC); + EventBus.getDefault().post(new EBRedDot(1)); + + statusMap.put(entity.getApk().get(0).getUrl(), "downloading"); + } else { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } - - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("method", "正常"); - map.put("platform", PlatformUtils.getInstance(context) - .getPlatformName(entity.getApk().get(0).getPlatform())); - map.put("status", "开始"); - map.put("location", "游戏详情:" + entity.getName()); - map.put("from", entrance); - map.put("network", NetworkUtils.getConnectedType(context)); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(context, "download", map); - - DownloadManager.getInstance(context).add( - getDownloadEntry(context, entity, 0, entrance)); - Toast.makeText(context, entity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); - downloadBtn.setText("暂停"); - downloadBtn.setBackgroundResource(R.drawable.textview_gray_style); - downloadBtn.setTextColor(0xFF999999); - EventBus.getDefault().post(new EBRedDot(1)); - - statusMap.put(entity.getApk().get(0).getUrl(), "downloading"); } else { - Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); - } - } - - //暂停 - private static void pause(Context context, GameEntity entity, TextView download_speed, - TextView download_percentage, TextView downloadBtn, - ArrayMap> platformMap, - ArrayMap statusMap, - boolean isShowPlatform) { - ArrayMap entryMap = entity - .getEntryMap(); - - if (entryMap != null && !entryMap.isEmpty()) { - - DownloadEntry downloadEntry; - - LinkedBlockingQueue queue = platformMap - .get(entity.getName()); - - if (queue != null && !queue.isEmpty()) { - downloadEntry = entryMap.get(queue.peek()); - } else { - downloadEntry = entryMap.get(entryMap.keyAt(0)); - } - - if (downloadEntry != null) { - - String platform = PlatformUtils - .getInstance(context).getPlatformName( - downloadEntry.getMeta().get( - "platform")); - if (isShowPlatform) { - if (platform == null) { - download_speed.setText("暂停"); - } else { - download_speed.setText(platform + " - 暂停"); - } - } else { - download_speed.setText("暂停"); - } - download_percentage.setText(downloadEntry - .getPercent() + "%"); + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog.getInstance(context).showPopupWindow( + viewBtn, entity, entrance, statusMap, download_speed, download_percentage, location); } } - downloadBtn.setText("继续"); - downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); - downloadBtn.setTextColor(0xFFFFFFFF); - statusMap.put(entity.getApk().get(0).getUrl(), "pause"); - Message msg = Message.obtain(); - msg.what = Constants.PAUSE_DOWNLOAD_TASK; - msg.obj = entity.getApk().get(0).getUrl(); - DownloadManager.getInstance(context).put(entity.getApk().get(0).getUrl(), - System.currentTimeMillis()); - DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); - } - - //继续 - private static void goon(Context context, GameEntity entity, TextView download_speed, - TextView download_percentage, TextView downloadBtn, - ArrayMap> platformMap, - ArrayMap statusMap, - boolean isShowPlatform) { - ArrayMap entryMap = entity - .getEntryMap(); - - if (entryMap != null && !entryMap.isEmpty()) { - - DownloadEntry downloadEntry; - - LinkedBlockingQueue queue = platformMap - .get(entity.getName()); - - if (queue != null && !queue.isEmpty()) { - downloadEntry = entryMap.get(queue.peek()); - } else { - downloadEntry = entryMap.get(entryMap.keyAt(0)); - } - - if (downloadEntry != null) { - - String platform = PlatformUtils - .getInstance(context).getPlatformName( - downloadEntry.getMeta().get( - "platform")); - if (isShowPlatform) { - if (platform == null) { - download_speed.setText(SpeedUtils - .getSpeed(downloadEntry.getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) - + ")"); - } else { - download_speed.setText(platform - + " - " - + SpeedUtils.getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) - + ")"); - } - } else { - download_speed.setText(SpeedUtils - .getSpeed(downloadEntry.getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) - + ")"); - } - download_percentage.setText(downloadEntry - .getPercent() + "%"); - } - } - downloadBtn.setText("暂停"); - downloadBtn - .setBackgroundResource(R.drawable.textview_gray_style); - downloadBtn.setTextColor(0xFF999999); - statusMap.put(entity.getApk().get(0).getUrl(), - "downloading"); - EventBus.getDefault().post(new EBRedDot(0)); - Message msg = Message.obtain(); - msg.what = Constants.CONTINUE_DOWNLOAD_TASK; - msg.obj = entity.getApk().get(0).getUrl(); - DownloadManager.getInstance(context).put(entity.getApk().get(0).getUrl(), - System.currentTimeMillis()); - DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); } //安装 - private static void install(final Context context, GameEntity entity, int position, + private static void install(final Context context, + GameEntity entity, + int position, RecyclerView.Adapter adapter) { - final String path = entity.getEntryMap() - .get(entity.getEntryMap().keyAt(0)).getPath(); + + final String path = entity.getEntryMap().get(entity.getEntryMap().keyAt(0)).getPath(); if (FileUtils.isEmptyFile(path)) { - Toast.makeText(context, "解析包错误", Toast.LENGTH_SHORT) - .show(); + Toast.makeText(context, "解析包错误", Toast.LENGTH_SHORT).show(); DownloadManager.getInstance(context).cancel( - entity.getEntryMap() - .get(entity.getEntryMap().keyAt(0)) - .getUrl()); - entity.getEntryMap().remove( - entity.getEntryMap().keyAt(0)); + entity.getEntryMap().get(entity.getEntryMap().keyAt(0)).getUrl()); + entity.getEntryMap().remove(entity.getEntryMap().keyAt(0)); adapter.notifyItemChanged(position); } else { PackageManager manager = new PackageManager(context); if (manager.launchSetup(path)) { - context.startActivity(PackageUtils - .getInstallIntent(path)); + context.startActivity(PackageUtils.getInstallIntent(path)); } else { DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { @Override @@ -725,17 +648,15 @@ public class DownloadItemUtils { } } - public static DownloadEntry getDownloadEntry(Context context, - GameEntity game, int position, String entrance) { - ApkEntity apkEntity = game.getApk().get(position); - DownloadEntry entry = new DownloadEntry(); + public static void addDownloadEntry(Context context, GameEntity game, int position, String entrance) { + ApkEntity apkEntity = game.getApk().get(position); + + DownloadEntry entry = new DownloadEntry(); entry.setUrl(apkEntity.getUrl()); entry.setName(game.getName()); entry.setPath(FileUtils.getDownloadPath(context, - MD5Utils.getContentMD5(game.getName() + "_" - + System.currentTimeMillis()) - + ".apk")); + MD5Utils.getContentMD5(game.getName() + "_" + System.currentTimeMillis()) + ".apk")); HashMap meta = new HashMap(); meta.put("ETag", apkEntity.getEtag()); meta.put("icon", game.getIcon()); @@ -748,6 +669,8 @@ public class DownloadItemUtils { meta.put("isPlugin", "true"); } entry.setMeta(meta); - return entry; + + DownloadManager.getInstance(context).add(entry); } + } 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 99c21689a6..a929251df8 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -1,6 +1,7 @@ package com.gh.common.view; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ClipDrawable; @@ -8,7 +9,6 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.LayerDrawable; -import android.os.Message; import android.support.v4.util.ArrayMap; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; @@ -48,11 +48,14 @@ import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; import com.gh.download.DownloadStatus; +import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.AppEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.GameUpdateEntity; +import com.gh.gamecenter.eventbus.EBDownloadDelete; import com.gh.gamecenter.eventbus.EBPWDismiss; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBPlatformChanged; @@ -78,6 +81,7 @@ import de.greenrobot.event.EventBus; * @des 弹出游戏版本下载按钮,点击并添加到下载任务中 */ public class DownloadDialog { + private static DownloadDialog instance; private Context context; @@ -95,26 +99,19 @@ public class DownloadDialog { private DataWatcher dataWatcher = new DataWatcher() { @Override - public void onDataChanged( - HashMap downloadingEntries) { - for (Map.Entry entry : downloadingEntries - .entrySet()) { - if (entry.getValue().getName().equals(gameName)) { + public void onDataChanged(HashMap downloadingEntries) { + for (Map.Entry entry : downloadingEntries.entrySet()) { + if (entry.getValue().getName().equals(gameName) + && !"delete".equals(statusMap.get(entry.getValue().getUrl()))) { + entryMap.put(entry.getValue().getUrl(), entry.getValue()); - Integer location = locationMap.get(entry.getValue() - .getUrl()); + + Integer location = locationMap.get(entry.getValue().getUrl()); if (location != null) { - if (!"pause".equals(statusMap.get(entry.getValue() - .getUrl()))) { - int index = location.intValue(); + int position = (int) Math.ceil((location + 1) / (double) (row * column)); - int position = (int) Math.ceil((index + 1) - / (double) (row * column)); - - if (position - 1 < adapterMap.size()) { - adapterMap.get(position - 1).notifyItemChanged( - index % (row * column)); - } + if (position - 1 < adapterMap.size()) { + adapterMap.get(position - 1).notifyItemChanged(location % (row * column)); } } } @@ -145,23 +142,31 @@ public class DownloadDialog { private int row; private int column; - public void showPopupWindow(View view, GameEntity game, String entrance, - String location) { + public void showPopupWindow(View view, + GameEntity game, + String entrance, + String location) { ArrayMap mStatusMap = new ArrayMap(); showPopupWindow(view, game, entrance, mStatusMap, location); } - public void showPopupWindow(View view, GameEntity game, String entrance, - ArrayMap sMap, String location) { + public void showPopupWindow(View view, + GameEntity game, + String entrance, + ArrayMap sMap, + String location) { showPopupWindow(view, game, entrance, sMap, null, null, location); } - public void showPopupWindow(View view, GameEntity game, String eStr, - ArrayMap sMap, TextView dSpeed, - TextView dPercentage, String lstr) { + public void showPopupWindow(View view, + GameEntity game, + String eStr, + ArrayMap sMap, + TextView dSpeed, + TextView dPercentage, + String lstr) { - SharedPreferences sp = context.getSharedPreferences(Config.PREFERENCE, - Context.MODE_PRIVATE); + SharedPreferences sp = context.getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); row = sp.getInt("download_box_row", 3); column = sp.getInt("download_box_column", 3); @@ -181,27 +186,22 @@ public class DownloadDialog { } entryMap = new ArrayMap(); - List entries = DownloadManager.getInstance(context) - .getAll(); + List entries = DownloadManager.getInstance(context).getAll(); for (int i = 0, size = entries.size(); i < size; i++) { if (entries.get(i).getName().equals(gameName)) { entryMap.put(entries.get(i).getUrl(), entries.get(i)); } } -// game.setApk(sortApk(game.getId(), new ArrayList(game.getApk()))); - gameApk = sortApk(game.getId(), new ArrayList(game.getApk())); + gameApk = sortApk(new ArrayList(game.getApk())); // 一个自定义的布局,作为显示的内容 - View contentView = View.inflate(context, R.layout.game_download_dialog, - null); + View contentView = View.inflate(context, R.layout.game_download_dialog, null); - TextView textView = (TextView) contentView - .findViewById(R.id.dialog_title); + TextView textView = (TextView) contentView.findViewById(R.id.dialog_title); textView.setText(gameName); - linearLayout = (LinearLayout) contentView - .findViewById(R.id.dialog_ll_hint); + linearLayout = (LinearLayout) contentView.findViewById(R.id.dialog_ll_hint); viewPager = (ViewPager) contentView.findViewById(R.id.dialog_viewPager); isLoadPlatform = false; @@ -256,7 +256,6 @@ public class DownloadDialog { contentView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && popupWindow != null && popupWindow.isShowing()) { @@ -271,15 +270,12 @@ public class DownloadDialog { public void onDismiss() { EventBus.getDefault().post(new EBPWDismiss()); EventBus.getDefault().unregister(DownloadDialog.this); - DownloadManager.getInstance(context) - .removeObserver(dataWatcher); + DownloadManager.getInstance(context).removeObserver(dataWatcher); } }); popupWindow.setTouchable(true); popupWindow.setFocusable(true); - // ColorDrawable dw = new ColorDrawable(0x88888888); - // popupWindow.setBackgroundDrawable(dw); // 设置popWindow的显示和消失动画 popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style); @@ -304,7 +300,6 @@ public class DownloadDialog { apkList.remove(i); i--; if (!isLoadPlatform) { - Utils.log("load platform"); PlatformUtils.getInstance(context).getPlatform(); isLoadPlatform = true; } @@ -326,8 +321,7 @@ public class DownloadDialog { for (int i = 0; i < size; i++) { ImageView imageView = new ImageView(context); LayoutParams lparams = new LayoutParams( - DisplayUtils.dip2px(context, 5), DisplayUtils.dip2px( - context, 5)); + DisplayUtils.dip2px(context, 5), DisplayUtils.dip2px(context, 5)); if (i == 0) { lparams.leftMargin = 0; imageView.setImageResource(R.drawable.oval_hint_up); @@ -349,20 +343,32 @@ public class DownloadDialog { viewPager.setCurrentItem(currentItem); } - private ArrayList sortApk(String gameId, List apkList) { + private ArrayList sortApk(List apkList) { DownloadEntry downloadEntry; - ArrayList list = new ArrayList(); - List installedList = new ArrayList(); List doneList = new ArrayList(); + List updateList = new ArrayList(); + List installedList = new ArrayList(); + List pluginList = new ArrayList(); List downloadList = new ArrayList(); List noPicList = new ArrayList(); + PackageManager packageManager = new PackageManager(context); for (int i = 0, size = apkList.size(); i < size; i++) { String packageName = apkList.get(i).getPackageName(); if (PackageManager.isInstalled(packageName)) { - installedList.add(apkList.remove(i)); - size--; - i--; + if (PackageManager.isCanUpdate(packageName)) { + updateList.add(apkList.remove(i)); + size--; + i--; + } else if (!packageManager.isSignature(packageName)) { + pluginList.add(apkList.remove(i)); + size--; + i--; + } else { + installedList.add(apkList.remove(i)); + size--; + i--; + } } else { downloadEntry = entryMap.get(apkList.get(i).getUrl()); if (downloadEntry != null) { @@ -389,35 +395,43 @@ public class DownloadDialog { } } } - list.addAll(installedList); + ArrayList list = new ArrayList(); list.addAll(doneList); + list.addAll(updateList); + list.addAll(installedList); + list.addAll(pluginList); list.addAll(downloadList); list.addAll(apkList); list.addAll(noPicList); return list; } - // 接受安装成功的消息,更新界面 + // 接收安装成功的消息,更新界面 public void onEvent(EBPackage busFour) { String url = urlMap.get(busFour.getPackageName()); if (url != null) { Integer location = locationMap.get(url); - int index = location.intValue(); if ("安装".equals(busFour.getType())) { entryMap.remove(url); - int position = (int) Math.ceil((index + 1) - / (double) (row * column)); - adapterMap.get(position - 1).notifyItemChanged( - index % (row * column)); + int position = (int) Math.ceil((location + 1) / (double) (row * column)); + adapterMap.get(position - 1).notifyItemChanged(location % (row * column)); } else if ("卸载".equals(busFour.getType())) { - int position = (int) Math.ceil((index + 1) - / (double) (row * column)); - adapterMap.get(position - 1).notifyItemChanged( - index % (row * column)); + int position = (int) Math.ceil((location + 1) / (double) (row * column)); + adapterMap.get(position - 1).notifyItemChanged(location % (row * column)); } } } + //接收下载被删除消息 + public void onEvent(EBDownloadDelete delete) { + String url = delete.getUrl(); + Integer location = locationMap.get(url); + statusMap.put(url, "delete"); + entryMap.remove(url); + int position = (int) Math.ceil((location + 1) / (double) (row * column)); + adapterMap.get(position - 1).notifyItemChanged(location % (row * column)); + } + // 接收platform数据改变消息,更新界面 public void onEvent(EBPlatformChanged platformChanged) { DownloadManager.getInstance(context).removeObserver(dataWatcher); @@ -452,13 +466,11 @@ public class DownloadDialog { recyclerView.setLayoutParams(params); recyclerView.setHasFixedSize(true); - GridLayoutManager gridLayoutManager = new GridLayoutManager( - context, column); + GridLayoutManager gridLayoutManager = new GridLayoutManager(context, column); recyclerView.setLayoutManager(gridLayoutManager); recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); - RecyclerViewAdapter adapter = new RecyclerViewAdapter(platforms, - position); + RecyclerViewAdapter adapter = new RecyclerViewAdapter(platforms, position); adapterMap.put(position, adapter); @@ -470,7 +482,6 @@ public class DownloadDialog { @Override public boolean isViewFromObject(View view, Object object) { - return view == object; } @@ -484,15 +495,15 @@ public class DownloadDialog { private class RecyclerViewHolder extends RecyclerView.ViewHolder { - private View view; - private TextView download_item_tv_name, download_item_tv_status, - download_item_tv_hint; + private TextView download_item_tv_name; + private TextView download_item_tv_status; + private TextView download_item_tv_hint; private ProgressBar download_item_progressbar; private ImageView download_item_iv_pic; public RecyclerViewHolder(View convertView) { super(convertView); - view = convertView; + download_item_tv_name = (TextView) convertView .findViewById(R.id.download_item_tv_name); download_item_tv_status = (TextView) convertView @@ -508,7 +519,8 @@ public class DownloadDialog { // 显示插件化 private void showPluginDialog(final ApkEntity apkEntity, - final RecyclerViewAdapter adapter, final int location) { + final RecyclerViewAdapter adapter, + final int location) { DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { @Override public void onConfirem() { @@ -530,8 +542,7 @@ public class DownloadDialog { }, null); } - private class RecyclerViewAdapter extends - RecyclerView.Adapter { + private class RecyclerViewAdapter extends RecyclerView.Adapter { private List platforms; private int position; @@ -556,335 +567,58 @@ public class DownloadDialog { @SuppressWarnings("deprecation") @Override - public void onBindViewHolder(final RecyclerViewHolder viewHolder, - int location) { + public void onBindViewHolder(final RecyclerViewHolder viewHolder, int location) { - final ApkEntity apkEntity = platforms.get((row * column) * position - + location); + final ApkEntity apkEntity = platforms.get((row * column) * position + location); - viewHolder.view.setOnClickListener(new OnClickListener() { + viewHolder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (viewHolder.download_item_tv_status.getVisibility() == View.GONE) { - String msg = FileUtils.isCanDownload(apkEntity - .getSize()); - if (TextUtils.isEmpty(msg)) { - Map kv = new HashMap(); - kv.put("版本", apkEntity.getPlatform()); - kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", gameName, kv); - - Map kv2 = new HashMap(); - kv2.put("版本", apkEntity.getPlatform()); - kv2.put("状态", "下载开始"); - kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); - - Map kv3 = new HashMap(); - kv3.put(entrance, "下载数"); - kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", gameName, kv3); - - if ("主页-最新插件".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "最新插件", kv4); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); - } - - if (entrance.contains("游戏详情")) { - Map kv5 = new HashMap(); - kv5.put("下载", "下载量"); - kv5.put("下载", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件数据", gameName, kv5); - } - - Map map = new HashMap(); - map.put("game", gameName); - map.put("method", "正常"); - map.put("platform", PlatformUtils.getInstance(context) - .getPlatformName(apkEntity.getPlatform())); - map.put("status", "开始"); - map.put("location", mlocation); - map.put("from", entrance); - map.put("network", NetworkUtils.getConnectedType(context)); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(context, "download", map); - - DownloadEntry entry = new DownloadEntry(); - - entry.setUrl(apkEntity.getUrl()); - entry.setName(gameName); - entry.setPath(FileUtils.getDownloadPath(context, - MD5Utils.getContentMD5(gameName + "_" + System.currentTimeMillis()) + ".apk")); - HashMap meta = new HashMap(); - meta.put("ETag", apkEntity.getEtag()); - meta.put("icon", gameIcon); - meta.put("platform", apkEntity.getPlatform()); - meta.put("gameId", gameId); - meta.put("entrance", entrance); - meta.put("location", mlocation); - entry.setMeta(meta); - - DownloadManager.getInstance(context).add(entry); - - viewHolder.download_item_tv_status.setText("0.0%"); - - EventBus.getDefault().post(new EBRedDot(1)); - - statusMap.put(entry.getUrl(), "downloading"); - - } else { - Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); - } + //下载游戏 + addDownloadEntry(apkEntity, viewHolder.download_item_tv_status); } else { String status = viewHolder.download_item_tv_status.getText().toString(); Utils.log("status = " + status); - if ("继续".equals(status)) { - statusMap.put(apkEntity.getUrl(), "downloading"); - if (PackageManager.isInstalled(apkEntity - .getPackageName())) { - PackageManager mPackageManager = new PackageManager( - context); - if (!mPackageManager.isSignature(apkEntity - .getPackageName())) { - viewHolder.download_item_tv_status - .setText("插件下载中"); - } else { - viewHolder.download_item_tv_status - .setText("更新中"); - } - } else { - viewHolder.download_item_tv_status - .setText(entryMap.get( - apkEntity.getUrl()) - .getPercent() - + "%"); - } - if (download_speed != null) { - String platform = PlatformUtils.getInstance( - context).getPlatformName( - apkEntity.getPlatform()); - DownloadEntry downloadEntry = entryMap - .get(apkEntity.getUrl()); - if (platform == null) { - download_speed.setText(SpeedUtils - .getSpeed(downloadEntry.getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) - + ")"); - } else { - download_speed.setText(platform - + " - " - + SpeedUtils.getSpeed(downloadEntry - .getSpeed()) - + "(剩" - + SpeedUtils.getRemainTime( - downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) - + ")"); - } - } - if (download_percentage != null) { - download_percentage.setText(entryMap.get( - apkEntity.getUrl()).getPercent() - + "%"); - } - Message msg = Message.obtain(); - msg.what = Constants.CONTINUE_DOWNLOAD_TASK; - msg.obj = apkEntity.getUrl(); - DownloadManager.getInstance(context).put(apkEntity.getUrl(), - System.currentTimeMillis()); - DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); - EventBus.getDefault().post(new EBRedDot(0)); + + if ("下载中".equals(status) + || "插件化下载中".equals(status) + || "更新下载中".equals(status)) { + //打开下载管理界面 + context.startActivity(new Intent(context, DownloadManagerActivity.class)); } else if ("启动".equals(status)) { Map kv = new HashMap(); kv.put("版本", apkEntity.getPlatform()); DataUtils.onEvent(context, "游戏启动", gameName, kv); - PackageUtils.launchApplicationByPackageName( - context, apkEntity.getPackageName()); + PackageUtils.launchApplicationByPackageName(context, apkEntity.getPackageName()); + } else if ("安装".equals(status) || "安装更新".equals(status)) { + install(apkEntity, viewHolder.getPosition()); } else if ("插件化".equals(status)) { // 下载插件版游戏 - String msg = FileUtils.isCanDownload(apkEntity - .getSize()); - if (TextUtils.isEmpty(msg)) { - Map kv = new HashMap(); - kv.put("版本", apkEntity.getPlatform()); - kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", gameName, kv); + plugin(apkEntity); + } else if ("安装插件".equals(status)) { + showPluginDialog(apkEntity, RecyclerViewAdapter.this, viewHolder.getPosition()); + } else if ("更新".equals(status)) { + //下载可更新游戏 + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(context, "游戏更新", gameName, kv); - Map kv2 = new HashMap(); - kv2.put("版本", apkEntity.getPlatform()); - kv2.put("状态", "下载开始"); - kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); - - Map kv3 = new HashMap(); - kv3.put(entrance, "下载数"); - kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", gameName, kv3); - - if ("主页-最新插件".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "最新插件", kv4); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv4 = new HashMap(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); - } - - if (entrance.contains("游戏详情")) { - Map kv5 = new HashMap(); - kv5.put("下载", "下载开始"); - kv5.put("下载", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件数据", gameName, kv5); - } - - Map kv6 = new HashMap(); - kv6.put("下载", "下载开始"); - kv6.put("版本", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件化", gameName, kv6); - - Map map = new HashMap(); - map.put("game", gameName); - map.put("method", "插件化"); - map.put("platform", PlatformUtils.getInstance(context) - .getPlatformName(apkEntity.getPlatform())); - map.put("status", "开始"); - map.put("location", mlocation); - map.put("from", entrance); - map.put("network", NetworkUtils.getConnectedType(context)); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(context, "download", map); - - DownloadEntry entry = new DownloadEntry(); - - entry.setUrl(apkEntity.getUrl()); - entry.setName(gameName); - entry.setPath(FileUtils.getDownloadPath( - context, - MD5Utils.getContentMD5(gameName + "_" - + System.currentTimeMillis()) - + ".apk")); - HashMap meta = new HashMap(); - meta.put("ETag", apkEntity.getEtag()); - meta.put("icon", gameIcon); - meta.put("platform", apkEntity.getPlatform()); - meta.put("gameId", gameId); - meta.put("entrance", entrance); - meta.put("location", mlocation); - meta.put("isPlugin", "true"); - meta.put("package_name", - apkEntity.getPackageName()); - meta.put("size", apkEntity.getSize()); - meta.put("version", apkEntity.getVersion()); - meta.put("gh_version", apkEntity.getGhVersion()); - entry.setMeta(meta); - - DownloadManager.getInstance(context).add(entry); - - EventBus.getDefault().post(new EBRedDot(1)); - - statusMap.put(entry.getUrl(), "downloading"); - - GameUpdateEntity game = new GameUpdateEntity( - gameId, gameName, gameIcon, apkEntity - .getPackageName(), apkEntity - .getSize(), apkEntity - .getVersion(), apkEntity - .getGhVersion(), apkEntity - .getUrl(), apkEntity - .getPlatform(), true); - PackageManager.addUpdate(game); - - } else { - Toast.makeText(context, msg, Toast.LENGTH_SHORT) - .show(); - } - } else if ("插件化安装".equals(status)) { - showPluginDialog(apkEntity, - RecyclerViewAdapter.this, viewHolder.getPosition()); - } else if ("安装".equals(status) || "安装更新".equals(status)) { - DownloadEntry downloadEntry = DownloadManager - .getInstance(context).get( - apkEntity.getUrl()); - if (downloadEntry != null - && downloadEntry.getMeta().get("isPlugin") != null) { - Map kv6 = new HashMap(); - kv6.put("操作", "点击安装完成"); - DataUtils.onEvent(context, "插件化", downloadEntry.getName(), kv6); - } - final String path = entryMap.get(apkEntity.getUrl()) - .getPath(); - if (FileUtils.isEmptyFile(path)) { - Toast.makeText(context, "解析包错误", - Toast.LENGTH_SHORT).show(); - entryMap.remove(apkEntity.getUrl()); - DownloadManager.getInstance(context).cancel( - apkEntity.getUrl()); - notifyItemChanged(viewHolder.getPosition()); - } else { - PackageManager manager = new PackageManager( - context); - if (manager.launchSetup(path)) { - context.startActivity(PackageUtils - .getInstallIntent(path)); - } else { - DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - MainActivity.uninstallMap.put( - PackageUtils.getPackageNameByPath(context, path), path); - context.startActivity(PackageUtils.getUninstallIntent(context, - path)); - } - }, null); - } - } - } else if ("等待".equals(status)) { - Toast.makeText(context, "最多同时有3个下载任务", - Toast.LENGTH_SHORT).show(); - } else { - viewHolder.download_item_tv_status.setText("继续"); - statusMap.put(apkEntity.getUrl(), "pause"); - if (download_speed != null) { - String platform = PlatformUtils.getInstance( - context).getPlatformName( - apkEntity.getPlatform()); - if (platform == null) { - download_speed.setText("暂停"); - } else { - download_speed.setText(platform + " - 暂停"); - } - } - if (download_percentage != null) { - download_percentage.setText(entryMap.get( - apkEntity.getUrl()).getPercent() - + "%"); - } - Message msg = Message.obtain(); - msg.what = Constants.PAUSE_DOWNLOAD_TASK; - msg.obj = apkEntity.getUrl(); - DownloadManager.getInstance(context).put(apkEntity.getUrl(), - System.currentTimeMillis()); - DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); + DownloadEntry entry = new DownloadEntry(); + entry.setUrl(apkEntity.getUrl()); + entry.setName(gameName); + entry.setPath(FileUtils.getDownloadPath(context, + MD5Utils.getContentMD5( + gameName + "_" + System.currentTimeMillis()) + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", gameIcon); + meta.put("platform", apkEntity.getPlatform()); + meta.put("isUpdate", "true"); + entry.setMeta(meta); + DownloadManager.getInstance(context).add(entry); } } } @@ -893,24 +627,24 @@ public class DownloadDialog { if (PackageManager.isInstalled(apkEntity.getPackageName())) { viewHolder.download_item_iv_pic.setVisibility(View.GONE); viewHolder.download_item_tv_hint.setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.VISIBLE); + viewHolder.download_item_progressbar.setVisibility(View.VISIBLE); viewHolder.download_item_tv_name.setVisibility(View.VISIBLE); viewHolder.download_item_tv_status.setVisibility(View.VISIBLE); + int color = Color.parseColor(PlatformUtils.getInstance(context) .getPlatformColor(apkEntity.getPlatform())); GradientDrawable gradientDrawable = new GradientDrawable(); - gradientDrawable.setColor(0xffffffff); - gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1), - color); - viewHolder.view.setBackgroundDrawable(gradientDrawable); + gradientDrawable.setColor(0xFFFFFFFF); + gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1), color); + viewHolder.itemView.setBackgroundDrawable(gradientDrawable); + viewHolder.download_item_tv_name.setTextColor(color); + viewHolder.download_item_tv_name.setText(PlatformUtils - .getInstance(context).getPlatformName( - apkEntity.getPlatform())); + .getInstance(context).getPlatformName(apkEntity.getPlatform())); Drawable[] layers = new Drawable[2]; GradientDrawable drawable = new GradientDrawable(); - drawable.setColor(0xFFDCDCDC); + drawable.setColor(0xFFC7C7C7); layers[0] = drawable; ClipDrawable clipDrawable = new ClipDrawable(new ColorDrawable( color), Gravity.LEFT, ClipDrawable.HORIZONTAL); @@ -918,8 +652,7 @@ public class DownloadDialog { LayerDrawable layerDrawable = new LayerDrawable(layers); layerDrawable.setId(0, android.R.id.background); layerDrawable.setId(1, android.R.id.progress); - viewHolder.download_item_progressbar - .setProgressDrawable(layerDrawable); + viewHolder.download_item_progressbar.setProgressDrawable(layerDrawable); DownloadEntry downloadEntry = DownloadManager.getInstance( context).get(apkEntity.getUrl()); PackageManager mPackageManager = new PackageManager(context); @@ -927,42 +660,24 @@ public class DownloadDialog { viewHolder.download_item_progressbar.setProgress(1000); viewHolder.download_item_tv_status.setText("启动"); if (!"normal".equals(gameType) - && !mPackageManager.isSignature(apkEntity - .getPackageName())) { + && !mPackageManager.isSignature(apkEntity.getPackageName())) { viewHolder.download_item_tv_status.setText("插件化"); + } else if (PackageManager.isCanUpdate(apkEntity.getPackageName())) { + viewHolder.download_item_tv_status.setText("更新"); } } else { - viewHolder.download_item_progressbar - .setProgress((int) (downloadEntry.getPercent() * 10)); + viewHolder.download_item_progressbar.setProgress((int) (downloadEntry.getPercent() * 10)); if (downloadEntry.getMeta().get("isPlugin") != null) { - if (downloadEntry.getStatus().equals( - DownloadStatus.done)) { - viewHolder.download_item_tv_status.setText("插件化安装"); - } else if (downloadEntry.getStatus().equals( - DownloadStatus.pause) - || "pause".equals(statusMap.get(downloadEntry - .getUrl()))) { - viewHolder.download_item_tv_status.setText("继续"); - } else if (downloadEntry.getStatus().equals( - DownloadStatus.timeout) || downloadEntry.getStatus().equals( - DownloadStatus.neterror)) { - viewHolder.download_item_tv_status.setText("继续"); + if (downloadEntry.getStatus().equals(DownloadStatus.done)) { + viewHolder.download_item_tv_status.setText("安装插件"); } else { - viewHolder.download_item_tv_status.setText("插件下载中"); + viewHolder.download_item_tv_status.setText("插件化下载中"); } } else if (downloadEntry.getMeta().get("isUpdate") != null) { - if (downloadEntry.getStatus().equals( - DownloadStatus.done)) { + if (downloadEntry.getStatus().equals(DownloadStatus.done)) { viewHolder.download_item_tv_status.setText("安装更新"); - } else if (downloadEntry.getStatus().equals( - DownloadStatus.pause)) { - viewHolder.download_item_tv_status.setText("继续"); - } else if (downloadEntry.getStatus().equals( - DownloadStatus.timeout) || downloadEntry.getStatus().equals( - DownloadStatus.neterror)) { - viewHolder.download_item_tv_status.setText("继续"); } else { - viewHolder.download_item_tv_status.setText("更新中"); + viewHolder.download_item_tv_status.setText("更新下载中"); } } } @@ -971,178 +686,335 @@ public class DownloadDialog { if (downloadEntry != null) { viewHolder.download_item_iv_pic.setVisibility(View.GONE); viewHolder.download_item_tv_hint.setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.VISIBLE); - viewHolder.download_item_tv_name - .setVisibility(View.VISIBLE); - viewHolder.download_item_tv_status - .setVisibility(View.VISIBLE); + viewHolder.download_item_progressbar.setVisibility(View.VISIBLE); + viewHolder.download_item_tv_name.setVisibility(View.VISIBLE); + viewHolder.download_item_tv_status.setVisibility(View.VISIBLE); + int color = Color.parseColor(PlatformUtils.getInstance( context).getPlatformColor(apkEntity.getPlatform())); GradientDrawable gradientDrawable = new GradientDrawable(); - gradientDrawable.setColor(0xffffffff); - gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1), - color); - viewHolder.view.setBackgroundDrawable(gradientDrawable); + gradientDrawable.setColor(0xFFFFFFFF); + gradientDrawable.setStroke(DisplayUtils.dip2px(context, 1), color); + viewHolder.itemView.setBackgroundDrawable(gradientDrawable); + viewHolder.download_item_tv_name.setTextColor(color); + viewHolder.download_item_tv_name.setText(PlatformUtils - .getInstance(context).getPlatformName( - apkEntity.getPlatform())); + .getInstance(context).getPlatformName(apkEntity.getPlatform())); Drawable[] layers = new Drawable[2]; GradientDrawable drawable = new GradientDrawable(); - drawable.setColor(0xFFDCDCDC); + drawable.setColor(0xFFC7C7C7); layers[0] = drawable; - ClipDrawable clipDrawable = new ClipDrawable( - new ColorDrawable(color), Gravity.LEFT, - ClipDrawable.HORIZONTAL); + ClipDrawable clipDrawable = new ClipDrawable(new ColorDrawable( + color), Gravity.LEFT, ClipDrawable.HORIZONTAL); layers[1] = clipDrawable; LayerDrawable layerDrawable = new LayerDrawable(layers); layerDrawable.setId(0, android.R.id.background); layerDrawable.setId(1, android.R.id.progress); - viewHolder.download_item_progressbar - .setProgressDrawable(layerDrawable); - viewHolder.download_item_progressbar - .setProgress((int) (downloadEntry.getPercent() * 10)); - Utils.log("download status = " + downloadEntry.getStatus()); - switch (downloadEntry.getStatus()) { - case pause: - case timeout: - case neterror: - viewHolder.download_item_tv_status.setText("继续"); - break; - case downloading: - if (!"pause".equals(statusMap.get(downloadEntry - .getUrl()))) { - viewHolder.download_item_tv_status - .setText(downloadEntry.getPercent() + "%"); - } - break; - case done: - EventBus.getDefault().post( - new EBPutUrl(PackageUtils.getPackageNameByPath( - context, downloadEntry.getPath()), - downloadEntry.getUrl())); - viewHolder.download_item_tv_status.setText("安装"); - break; - case waiting: - viewHolder.download_item_tv_status.setText("等待"); - break; - case cancel: - case hijack: - int id = PlatformUtils.getInstance(context).getPlatformPic( - apkEntity.getPlatform()); - if (id != 0) { - viewHolder.download_item_iv_pic - .setVisibility(View.VISIBLE); - viewHolder.download_item_iv_pic.setImageResource(id); - viewHolder.download_item_tv_hint - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); + viewHolder.download_item_progressbar.setProgressDrawable(layerDrawable); + viewHolder.download_item_progressbar.setProgress((int) (downloadEntry.getPercent() * 10)); + + DownloadStatus status = downloadEntry.getStatus(); + if (status.equals(DownloadStatus.pause) + || status.equals(DownloadStatus.timeout) + || status.equals(DownloadStatus.neterror) + || status.equals(DownloadStatus.downloading) + || status.equals(DownloadStatus.waiting)) { + viewHolder.download_item_tv_status.setText("下载中"); + } else if (status.equals(DownloadStatus.done)) { + EventBus.getDefault().post(new EBPutUrl(PackageUtils.getPackageNameByPath( + context, downloadEntry.getPath()), downloadEntry.getUrl())); + viewHolder.download_item_tv_status.setText("安装"); + } else if (status.equals(DownloadStatus.cancel) + || status.equals(DownloadStatus.hijack)) { + int id = PlatformUtils.getInstance(context).getPlatformPic(apkEntity.getPlatform()); + if (id != 0) { + viewHolder.download_item_iv_pic.setVisibility(View.VISIBLE); + viewHolder.download_item_iv_pic.setImageResource(id); + viewHolder.download_item_tv_hint.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); + } else { + String path = PlatformUtils.getInstance(context) + .getPlatformPicPath(apkEntity.getPlatform()); + if (path != null && new File(path).exists()) { + viewHolder.download_item_iv_pic.setVisibility(View.VISIBLE); + ImageUtils.getInstance(context).display( + "file://" + path, viewHolder.download_item_iv_pic); + viewHolder.download_item_tv_hint.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); } else { - String path = PlatformUtils.getInstance(context) - .getPlatformPicPath(apkEntity.getPlatform()); - if (path != null && new File(path).exists()) { - viewHolder.download_item_iv_pic - .setVisibility(View.VISIBLE); - ImageUtils.getInstance(context).display( - "file://" + path, - viewHolder.download_item_iv_pic); - viewHolder.download_item_tv_hint - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); - } else { - viewHolder.download_item_tv_hint - .setVisibility(View.VISIBLE); - viewHolder.download_item_tv_hint - .setText(PlatformUtils.getInstance(context) - .getPlatformName( - apkEntity.getPlatform())); - viewHolder.download_item_iv_pic - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); - } + viewHolder.download_item_tv_hint.setVisibility(View.VISIBLE); + viewHolder.download_item_tv_hint.setText( + PlatformUtils.getInstance(context).getPlatformName(apkEntity.getPlatform())); + viewHolder.download_item_iv_pic.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); } - break; - default: - break; + } } } else { int id = PlatformUtils.getInstance(context).getPlatformPic( apkEntity.getPlatform()); if (id != 0) { - viewHolder.download_item_iv_pic - .setVisibility(View.VISIBLE); + viewHolder.download_item_iv_pic.setVisibility(View.VISIBLE); viewHolder.download_item_iv_pic.setImageResource(id); - viewHolder.download_item_tv_hint - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); + viewHolder.download_item_tv_hint.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); } else { String path = PlatformUtils.getInstance(context) .getPlatformPicPath(apkEntity.getPlatform()); if (path != null) { - viewHolder.download_item_iv_pic - .setVisibility(View.VISIBLE); + viewHolder.download_item_iv_pic.setVisibility(View.VISIBLE); ImageUtils.getInstance(context).display( - "file://" + path, - viewHolder.download_item_iv_pic); - viewHolder.download_item_tv_hint - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); + "file://" + path, viewHolder.download_item_iv_pic); + viewHolder.download_item_tv_hint.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); } else { - viewHolder.download_item_tv_hint - .setVisibility(View.VISIBLE); - viewHolder.download_item_tv_hint - .setText(PlatformUtils.getInstance(context) - .getPlatformName( - apkEntity.getPlatform())); - viewHolder.download_item_iv_pic - .setVisibility(View.GONE); - viewHolder.download_item_progressbar - .setVisibility(View.GONE); - viewHolder.download_item_tv_name - .setVisibility(View.GONE); - viewHolder.download_item_tv_status - .setVisibility(View.GONE); - viewHolder.view.setBackgroundColor(0xffffff); + viewHolder.download_item_tv_hint.setVisibility(View.VISIBLE); + viewHolder.download_item_tv_hint.setText( + PlatformUtils.getInstance(context).getPlatformName(apkEntity.getPlatform())); + viewHolder.download_item_iv_pic.setVisibility(View.GONE); + viewHolder.download_item_progressbar.setVisibility(View.GONE); + viewHolder.download_item_tv_name.setVisibility(View.GONE); + viewHolder.download_item_tv_status.setVisibility(View.GONE); + viewHolder.itemView.setBackgroundColor(0xffffff); } } } } } + //安装游戏 + private void install(ApkEntity apkEntity, int position) { + DownloadEntry downloadEntry = DownloadManager.getInstance( + context).get(apkEntity.getUrl()); + if (downloadEntry != null && downloadEntry.getMeta().get("isPlugin") != null) { + Map kv6 = new HashMap(); + kv6.put("操作", "点击安装完成"); + DataUtils.onEvent(context, "插件化", downloadEntry.getName(), kv6); + } + + final String path = entryMap.get(apkEntity.getUrl()).getPath(); + if (FileUtils.isEmptyFile(path)) { + Toast.makeText(context, "解析包错误", Toast.LENGTH_SHORT).show(); + entryMap.remove(apkEntity.getUrl()); + DownloadManager.getInstance(context).cancel(apkEntity.getUrl()); + notifyItemChanged(position); + } else { + PackageManager manager = new PackageManager(context); + if (manager.launchSetup(path)) { + context.startActivity(PackageUtils.getInstallIntent(path)); + } else { + DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + MainActivity.uninstallMap.put( + PackageUtils.getPackageNameByPath(context, path), path); + context.startActivity(PackageUtils.getUninstallIntent(context, path)); + } + }, null); + } + } + } + + //下载插件化游戏 + private void plugin(ApkEntity apkEntity) { + String msg = FileUtils.isCanDownload(apkEntity.getSize()); + if (TextUtils.isEmpty(msg)) { + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(context, "游戏下载", gameName, kv); + + Map kv2 = new HashMap(); + kv2.put("版本", apkEntity.getPlatform()); + kv2.put("状态", "下载开始"); + kv2.put("位置", entrance + "-开始"); + DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); + + Map kv3 = new HashMap(); + kv3.put(entrance, "下载数"); + kv3.put(entrance, "下载开始"); + DataUtils.onEvent(context, "应用数据", gameName, kv3); + + if ("主页-最新插件".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "最新插件", kv4); + } else if ("主页-热门卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); + } else if ("主页-新测卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); + } + + if (entrance.contains("游戏详情")) { + Map kv5 = new HashMap(); + kv5.put("下载", "下载开始"); + kv5.put("下载", apkEntity.getPlatform()); + DataUtils.onEvent(context, "插件数据", gameName, kv5); + } + + Map kv6 = new HashMap(); + kv6.put("下载", "下载开始"); + kv6.put("版本", apkEntity.getPlatform()); + DataUtils.onEvent(context, "插件化", gameName, kv6); + + Map map = new HashMap(); + map.put("game", gameName); + map.put("method", "插件化"); + map.put("platform", PlatformUtils.getInstance(context) + .getPlatformName(apkEntity.getPlatform())); + map.put("status", "开始"); + map.put("location", mlocation); + map.put("from", entrance); + map.put("network", NetworkUtils.getConnectedType(context)); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(context, "download", map); + + DownloadEntry entry = new DownloadEntry(); + + entry.setUrl(apkEntity.getUrl()); + entry.setName(gameName); + entry.setPath(FileUtils.getDownloadPath(context, + MD5Utils.getContentMD5(gameName + "_" + System.currentTimeMillis()) + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", gameIcon); + meta.put("platform", apkEntity.getPlatform()); + meta.put("gameId", gameId); + meta.put("entrance", entrance); + meta.put("location", mlocation); + meta.put("isPlugin", "true"); + meta.put("package_name", apkEntity.getPackageName()); + meta.put("size", apkEntity.getSize()); + meta.put("version", apkEntity.getVersion()); + meta.put("gh_version", apkEntity.getGhVersion()); + entry.setMeta(meta); + + DownloadManager.getInstance(context).add(entry); + + EventBus.getDefault().post(new EBRedDot(1)); + + statusMap.put(entry.getUrl(), "downloading"); + + GameUpdateEntity game = new GameUpdateEntity(); + game.setId(gameId); + game.setName(gameName); + game.setIcon(gameIcon); + game.setPackageName(apkEntity.getPackageName()); + game.setSize(apkEntity.getSize()); + game.setVersion(apkEntity.getVersion()); + game.setGhVersion(apkEntity.getGhVersion()); + game.setUrl(apkEntity.getUrl()); + game.setPlatform(apkEntity.getPlatform()); + game.setPlugin(true); + + PackageManager.addUpdate(game); + } else { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); + } + } + + //添加游戏下载 + private void addDownloadEntry(ApkEntity apkEntity, TextView download_item_tv_status) { + String msg = FileUtils.isCanDownload(apkEntity.getSize()); + if (TextUtils.isEmpty(msg)) { + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(context, "游戏下载", gameName, kv); + + Map kv2 = new HashMap(); + kv2.put("版本", apkEntity.getPlatform()); + kv2.put("状态", "下载开始"); + kv2.put("位置", entrance + "-开始"); + DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); + + Map kv3 = new HashMap(); + kv3.put(entrance, "下载数"); + kv3.put(entrance, "下载开始"); + DataUtils.onEvent(context, "应用数据", gameName, kv3); + + if ("主页-最新插件".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "最新插件", kv4); + } else if ("主页-热门卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); + } else if ("主页-新测卡牌".equals(entrance)) { + Map kv4 = new HashMap(); + kv4.put(gameName, "下载数"); + DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); + } + + if (entrance.contains("游戏详情")) { + Map kv5 = new HashMap(); + kv5.put("下载", "下载量"); + kv5.put("下载", apkEntity.getPlatform()); + DataUtils.onEvent(context, "插件数据", gameName, kv5); + } + + Map map = new HashMap(); + map.put("game", gameName); + map.put("method", "正常"); + map.put("platform", PlatformUtils.getInstance(context) + .getPlatformName(apkEntity.getPlatform())); + map.put("status", "开始"); + map.put("location", mlocation); + map.put("from", entrance); + map.put("network", NetworkUtils.getConnectedType(context)); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(context, "download", map); + + DownloadEntry entry = new DownloadEntry(); + + entry.setUrl(apkEntity.getUrl()); + entry.setName(gameName); + entry.setPath(FileUtils.getDownloadPath(context, + MD5Utils.getContentMD5(gameName + "_" + System.currentTimeMillis()) + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", gameIcon); + meta.put("platform", apkEntity.getPlatform()); + meta.put("gameId", gameId); + meta.put("entrance", entrance); + meta.put("location", mlocation); + entry.setMeta(meta); + + DownloadManager.getInstance(context).add(entry); + + download_item_tv_status.setText("0.0%"); + + EventBus.getDefault().post(new EBRedDot(1)); + + statusMap.put(entry.getUrl(), "downloading"); + } else { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); + } + } + @Override public int getItemViewType(int position) { - return position; } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java index 96c7ae750a..b1f98f22bf 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -787,7 +787,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_download_style.xml b/app/src/main/res/drawable/game_item_btn_download_style.xml new file mode 100644 index 0000000000..4612b2d72b --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_download_style.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_download_up.xml b/app/src/main/res/drawable/game_item_btn_download_up.xml new file mode 100644 index 0000000000..f746e1a08a --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_download_up.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_downloading_style.xml b/app/src/main/res/drawable/game_item_btn_downloading_style.xml new file mode 100644 index 0000000000..c39ad0f88b --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_downloading_style.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_launch_dn.xml b/app/src/main/res/drawable/game_item_btn_launch_dn.xml new file mode 100644 index 0000000000..6911067690 --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_launch_dn.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_launch_style.xml b/app/src/main/res/drawable/game_item_btn_launch_style.xml new file mode 100644 index 0000000000..89939d0fce --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_launch_style.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_launch_up.xml b/app/src/main/res/drawable/game_item_btn_launch_up.xml new file mode 100644 index 0000000000..ab3d626775 --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_launch_up.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_plugin_dn.xml b/app/src/main/res/drawable/game_item_btn_plugin_dn.xml new file mode 100644 index 0000000000..b7ee9773af --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_plugin_dn.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_plugin_style.xml b/app/src/main/res/drawable/game_item_btn_plugin_style.xml new file mode 100644 index 0000000000..f89ec384ee --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_plugin_style.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/game_item_btn_plugin_up.xml b/app/src/main/res/drawable/game_item_btn_plugin_up.xml new file mode 100644 index 0000000000..5ecc39ae21 --- /dev/null +++ b/app/src/main/res/drawable/game_item_btn_plugin_up.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file