package com.gh.base; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.common.constant.Config; import com.gh.common.util.ApkActiveUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.FileUtils; import com.gh.common.util.GameUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.ShareUtils; import com.gh.common.view.DownloadDialog; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.manager.PackageManager; import com.tencent.tauth.Tencent; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; /** * Created by Administrator on 2016/9/19. * 游戏详情、新闻详情基类(控制底部下载栏) */ public abstract class BaseDetailActivity extends BaseActivity implements View.OnClickListener { protected TextView actionbar_tv_title; protected RecyclerView detail_rv_show; protected LinearLayout detail_ll_bottom; protected TextView detail_tv_download; protected ProgressBar detail_pb_progressbar; protected TextView detail_tv_per; protected LinearLayout reuse_ll_loading; protected LinearLayout reuse_no_connection; protected LinearLayout reuse_none_data; protected TextView reuse_tv_none_data; protected ImageView iv_share; protected GameEntity gameEntity; protected DownloadEntity mDownloadEntity; protected String name; protected String title; protected String downloadAddWord; protected String downloadOffText; private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(DownloadEntity downloadEntity) { if (gameEntity != null && gameEntity.getApk().size() == 1) { String url = gameEntity.getApk().get(0).getUrl(); if (url.equals(downloadEntity.getUrl())) { if (!"pause".equals(DownloadManager.getInstance(BaseDetailActivity.this). getStatus(downloadEntity.getUrl()))) { mDownloadEntity = downloadEntity; invalidate(); } } } } }; @Override protected int getLayoutId() { return R.layout.activity_detail; } //接收QQ或者QQ空间分享回调 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE || requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) { Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // View contentView = View.inflate(this, R.layout.activity_detail, null); // 添加分享图标 iv_share = new ImageView(this); iv_share.setImageResource(R.drawable.ic_share); iv_share.setOnClickListener(this); iv_share.setVisibility(View.GONE); iv_share.setPadding(DisplayUtils.dip2px(this, 13), DisplayUtils.dip2px(this, 11) , DisplayUtils.dip2px(this, 11), DisplayUtils.dip2px(this, 13)); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 48)); params.addRule(RelativeLayout.CENTER_VERTICAL); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); RelativeLayout reuse_actionbar = (RelativeLayout) mContentView.findViewById( R.id.reuse_actionbar); reuse_actionbar.addView(iv_share, params); // init(contentView); actionbar_tv_title = (TextView) findViewById(R.id.actionbar_tv_title); detail_rv_show = (RecyclerView) findViewById(R.id.detail_rv_show); detail_ll_bottom = (LinearLayout) findViewById(R.id.detail_ll_bottom); detail_tv_download = (TextView) findViewById(R.id.detail_tv_download); detail_pb_progressbar = (ProgressBar) findViewById(R.id.detail_pb_progressbar); detail_tv_per = (TextView) findViewById(R.id.detail_tv_per); reuse_ll_loading = (LinearLayout) findViewById(R.id.reuse_ll_loading); reuse_no_connection = (LinearLayout) findViewById(R.id.reuse_no_connection); reuse_none_data = (LinearLayout) findViewById(R.id.reuse_none_data); reuse_tv_none_data = (TextView) findViewById(R.id.reuse_tv_none_data); detail_ll_bottom.setOnClickListener(this); detail_tv_download.setOnClickListener(this); detail_pb_progressbar.setOnClickListener(this); detail_tv_per.setOnClickListener(this); reuse_no_connection.setOnClickListener(this); } @Override protected void onPause() { super.onPause(); DownloadManager.getInstance(this).removeObserver(dataWatcher); } @Override protected void onResume() { super.onResume(); if (gameEntity != null && gameEntity.getApk() != null && gameEntity.getApk().size() == 1) { initDownload(true); } DownloadManager.getInstance(this).addObserver(dataWatcher); } protected void initDownload(boolean isCheck) { if (Config.isShow(this)) { detail_ll_bottom.setVisibility(View.VISIBLE); detail_rv_show.setPadding(0, 0, 0, DisplayUtils.dip2px(getApplicationContext(), 60)); } else { detail_ll_bottom.setVisibility(View.GONE); detail_rv_show.setPadding(0, 0, 0, 0); } if (gameEntity != null && "光环助手".equals(gameEntity.getName())) { detail_ll_bottom.setVisibility(View.GONE); detail_rv_show.setPadding(0, 0, 0, 0); } else if (gameEntity == null || gameEntity.getApk().isEmpty()) { detail_tv_download.setVisibility(View.VISIBLE); detail_pb_progressbar.setVisibility(View.GONE); detail_tv_per.setVisibility(View.GONE); if (TextUtils.isEmpty(downloadOffText)) { detail_tv_download.setText("暂无下载"); } else { detail_tv_download.setText(downloadOffText); } detail_tv_download.setBackgroundResource(R.drawable.game_item_btn_pause_style); detail_tv_download.setTextColor(0xFF999999); detail_tv_download.setClickable(false); } else { detail_tv_download.setVisibility(View.VISIBLE); detail_pb_progressbar.setVisibility(View.GONE); detail_tv_per.setVisibility(View.GONE); boolean isInstalled = false; if (gameEntity.getApk() != null && gameEntity.getApk().size() == 1 && PackageManager.isInstalled(gameEntity.getApk().get(0).getPackageName())) { isInstalled = true; } if (isInstalled) { if (PackageManager.isCanUpdate(gameEntity.getId(), gameEntity.getApk().get(0).getPackageName())) { if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_download_style); detail_tv_download.setText(String.format("更新《%s》", gameEntity.getName())); } else { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_download_style); detail_tv_download.setText(String.format("更新《%s》%s", gameEntity.getName(), downloadAddWord)); } } else { if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 && !TextUtils.isEmpty(gameEntity.getApk().get(0).getGhVersion()) && !PackageUtils.isSignature(this, gameEntity.getApk().get(0).getPackageName())) { if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_plugin_style); detail_tv_download.setText(String.format("插件化《%s》", gameEntity.getName())); } else { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_plugin_style); detail_tv_download.setText(String.format("插件化《%s》%s", gameEntity.getName(), downloadAddWord)); } } else { if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_launch_style); detail_tv_download.setText(String.format("启动《%s》", gameEntity.getName())); } else { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_launch_style); detail_tv_download.setText(String.format("启动《%s》%s", gameEntity.getName(), downloadAddWord)); } } } } else { String status = GameUtils.getDownloadBtnText(this, gameEntity); if ("插件化".equals(status)) { detail_tv_download.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else if ("打开".equals(status)) { detail_tv_download.setBackgroundResource(R.drawable.game_item_btn_launch_style); } else { detail_tv_download.setBackgroundResource(R.drawable.game_item_btn_download_style); } if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setText(String.format(status + "《%s》", gameEntity.getName())); } else { detail_tv_download.setText(String.format(status + "《%s》%s", gameEntity.getName(), downloadAddWord)); } } } if (isCheck && gameEntity != null && gameEntity.getApk() != null && gameEntity.getApk().size() == 1) { String url = gameEntity.getApk().get(0).getUrl(); DownloadEntity downloadEntity = DownloadManager.getInstance(getApplicationContext()).get(url); if (downloadEntity != null) { mDownloadEntity = downloadEntity; detail_tv_download.setVisibility(View.GONE); detail_pb_progressbar.setVisibility(View.VISIBLE); detail_tv_per.setVisibility(View.VISIBLE); invalidate(); } } } private void invalidate() { detail_pb_progressbar.setProgress((int) (mDownloadEntity.getPercent() * 10)); detail_tv_per.setTextColor(0xFFFFFFFF); switch (mDownloadEntity.getStatus()) { case downloading: case pause: case timeout: case neterror: case waiting: detail_tv_per.setText("下载中"); break; case done: detail_tv_per.setText("安装"); if (mDownloadEntity.isPluggable() && PackageManager.isInstalled(mDownloadEntity.getPackageName())) { detail_pb_progressbar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_plugin_radius_style)); } else { detail_pb_progressbar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_normal_radius_style)); } break; case cancel: case hijack: case notfound: initDownload(false); break; default: break; } } // 接收下载被删除消息 @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(EBDownloadStatus status) { if ("delete".equals(status.getStatus()) && gameEntity != null && gameEntity.getApk() != null && gameEntity.getApk().size() == 1) { String url = gameEntity.getApk().get(0).getUrl(); if (url.equals(status.getUrl())) { initDownload(false); } } } // 接受安装、卸载消息 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBPackage busFour) { if (gameEntity != null && gameEntity.getApk() != null && gameEntity.getApk().size() > 0) { for (ApkEntity apkEntity : gameEntity.getApk()) { String packageName = apkEntity.getPackageName(); if (packageName.equals(busFour.getPackageName())) { ApkActiveUtils.filterHideApk(gameEntity); initDownload(false); } } } } @Override public void onClick(View v) { if (v == detail_tv_download) { if (gameEntity != null && !gameEntity.getApk().isEmpty()) { if (gameEntity.getApk().size() == 1) { if (NetworkUtils.isWifiConnected(this)) { download(); } else { DialogUtils.showDownloadDialog(this, new DialogUtils.ConfirmListener() { @Override public void onConfirm() { download(); } }); } } else { DownloadDialog.getInstance(this).showPopupWindow(v, gameEntity, mEntrance, name + ":" + title); } } else { toast("稍等片刻~!游戏正在上传中..."); } } else if (v == detail_pb_progressbar || v == detail_tv_per) { String str = detail_tv_per.getText().toString(); if ("下载中".equals(str)) { DownloadManagerActivity.startDownloadManagerActivity(this, gameEntity.getApk().get(0).getUrl() , mEntrance + "+(" + name + "[" + title + "])"); } else if ("安装".equals(str)) { PackageUtils.launchSetup(this, mDownloadEntity.getPath()); } } } private void download() { String str = detail_tv_download.getText().toString(); if (str.contains("启动")) { DataUtils.onGameLaunchEvent(this, gameEntity.getName(), gameEntity.getApk().get(0).getPlatform(), name); PackageUtils.launchApplicationByPackageName(this, gameEntity.getApk().get(0).getPackageName()); } else { String method; if (str.contains("更新")) { method = "更新"; } else if (str.contains("插件化")) { method = "插件化"; } else { method = "下载"; } ApkEntity apkEntity = gameEntity.getApk().get(0); String msg = FileUtils.isCanDownload(this, apkEntity.getSize()); if (TextUtils.isEmpty(msg)) { DataUtils.onGameDownloadEvent(this, gameEntity.getName(), apkEntity.getPlatform(), mEntrance, "下载开始"); DownloadManager.createDownload(this, apkEntity, gameEntity, method, mEntrance, name + ":" + title); detail_tv_download.setVisibility(View.GONE); detail_pb_progressbar.setVisibility(View.VISIBLE); detail_tv_per.setVisibility(View.VISIBLE); detail_pb_progressbar.setProgress(0); detail_tv_per.setText("0.0%"); DownloadManager.getInstance(BaseDetailActivity.this).putStatus(apkEntity.getUrl(), "downloading"); } else { toast(msg); } } } }