diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 64c1b0ee1d..2d55430bc7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -147,9 +147,6 @@ - diff --git a/app/src/main/java/com/gh/common/util/ImageUtils.java b/app/src/main/java/com/gh/common/util/ImageUtils.java index 2ee2a2d936..479ff6430b 100644 --- a/app/src/main/java/com/gh/common/util/ImageUtils.java +++ b/app/src/main/java/com/gh/common/util/ImageUtils.java @@ -9,6 +9,7 @@ import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.widget.ImageView; import android.widget.ImageView.ScaleType; +import android.widget.RelativeLayout; import com.gh.common.view.CircleImageView; import com.gh.gamecenter.R; @@ -27,11 +28,9 @@ import java.util.concurrent.Executors; import de.greenrobot.event.EventBus; public class ImageUtils { - private static ImageUtils singleton; private static ImageLoader imageLoader; private static DisplayImageOptions options; - private ArrayMap> imageCache = new ArrayMap>(); ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); @@ -80,14 +79,16 @@ public class ImageUtils { } @Override - public void onLoadingComplete(String arg0, View view, Bitmap arg2) { + public void onLoadingComplete(String arg0, View view, + Bitmap arg2) { AlphaAnimation animation = new AlphaAnimation(0f, 1f); animation.setDuration(500); view.startAnimation(animation); } @Override - public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { + public void onLoadingFailed(String arg0, View arg1, + FailReason arg2) { } @@ -99,20 +100,25 @@ public class ImageUtils { }); } //增加一个上下文环境,图片宽度设最大,高度自适应 - public void display(String url, ImageView imageView, int drawable, Context context) { - display(url, imageView, drawable, ScaleType.FIT_XY, null, context); + public void display(String url, ImageView imageView, int drawable,Context context) { + display(url, imageView, drawable, ScaleType.FIT_XY, null ,context); + } + // 主页大图布局用到的 + public void display(String url, ImageView imageView, int drawable,Context context,RelativeLayout rlImage,int position) { + display(url, imageView, drawable, ScaleType.FIT_XY, null ,context, rlImage,position); } - public void display(String url, ImageView imageView, int drawable) { display(url, imageView, drawable, ScaleType.FIT_XY, null); } - public void display(final String url, final ImageView imageView, final int drawable, - final ScaleType scaleType, final OnLoadingCompleteListener listener) { + public void display(final String url, final ImageView imageView, + final int drawable, final ScaleType scaleType, + final OnLoadingCompleteListener listener) { imageLoader.displayImage(url, imageView, options, new ImageLoadingListener() { @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { if (imageView instanceof CircleImageView) { imageView.setScaleType(ScaleType.CENTER_CROP); } else { @@ -137,24 +143,36 @@ public class ImageUtils { } @Override - public void onLoadingFailed(String imageUri, View view, FailReason reason) { + public void onLoadingFailed(String imageUri, View view, + FailReason reason) { } }); } - public void display(final String url, final ImageView imageView, final int drawable, - final ScaleType scaleType, final OnLoadingCompleteListener listener, final Context context) { + public void display(final String url, final ImageView imageView, + final int drawable, final ScaleType scaleType, + final OnLoadingCompleteListener listener,final Context context,final RelativeLayout rlImage, final int position) { imageLoader.displayImage(url, imageView, options, new ImageLoadingListener() { @Override - public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { int width = loadedImage.getWidth(); int height = loadedImage.getHeight(); int widthPixels = context.getResources().getDisplayMetrics().widthPixels; - widthPixels = widthPixels - DisplayUtils.dip2px(context, 10); - float scale = (float) height / (float) width; - int newHeight = (int)(scale * widthPixels); + widthPixels = widthPixels - DisplayUtils.dip2px(context,10); + float index = (float) height / (float) width; + int newHeight = (int)(index * widthPixels); + + if (rlImage!= null){ + ViewGroup.LayoutParams layoutParams = rlImage.getLayoutParams(); + if (position != 0){ + layoutParams.height = newHeight + DisplayUtils.dip2px(context,8); + }else { + layoutParams.height = newHeight; + } + } ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams(); if (layoutParams!=null){ @@ -189,14 +207,71 @@ public class ImageUtils { } @Override - public void onLoadingFailed(String imageUri, View view, FailReason reason) { + public void onLoadingFailed(String imageUri, View view, + FailReason reason) { } }); } - public void display(final String url, final ImageView imageView, final int drawable, - final ScaleType scaleType, final OnLoadingCompleteListener listener, final int i) { + public void display(final String url, final ImageView imageView, + final int drawable, final ScaleType scaleType, + final OnLoadingCompleteListener listener,final Context context) { + imageLoader.displayImage(url, imageView, options, + new ImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + int width = loadedImage.getWidth(); + int height = loadedImage.getHeight(); + int widthPixels = context.getResources().getDisplayMetrics().widthPixels; + widthPixels = widthPixels - DisplayUtils.dip2px(context,10); + float index = (float) height / (float) width; + int newHeight = (int)(index * widthPixels); + + ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams(); + if (layoutParams!=null){ + layoutParams.height = newHeight; + layoutParams.width = widthPixels; + imageView.setLayoutParams(layoutParams); + } + + EventBus.getDefault().post(new EBImage(imageUri, newHeight)); + + if (imageView instanceof CircleImageView) { + imageView.setScaleType(ScaleType.CENTER_CROP); + } else { + imageView.setScaleType(scaleType); + } + if (listener != null) { + listener.onLoadingComplete(); + } + } + + @Override + public void onLoadingStarted(String imageUri, View view) { + imageView.setScaleType(ScaleType.CENTER); + if (drawable != -1) { + imageView.setImageResource(drawable); + } + } + + @Override + public void onLoadingCancelled(String imageUri, View view) { + + } + + @Override + public void onLoadingFailed(String imageUri, View view, + FailReason reason) { + + } + }); + } + + public void display(final String url, final ImageView imageView, + final int drawable, final ScaleType scaleType, + final OnLoadingCompleteListener listener, final int i) { imageLoader.displayImage(url, imageView, options, new ImageLoadingListener() { @Override 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 7cecf26956..f65157fc77 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -135,6 +135,7 @@ public class DownloadDialog { private TextView download_percentage; private LinearLayout linearLayout; private ViewPager viewPager; + private LinearLayout llCollection; private int row; private int column; @@ -198,8 +199,22 @@ public class DownloadDialog { TextView textView = (TextView) contentView.findViewById(R.id.dialog_title); textView.setText(gameName); + int size = game.getApk().size(); + int vpHeight = 0; + if (size<=3){ + vpHeight = 72; + }else if (size<=6){ + vpHeight = 136; + }else { + vpHeight = 200; + } + linearLayout = (LinearLayout) contentView.findViewById(R.id.dialog_ll_hint); viewPager = (ViewPager) contentView.findViewById(R.id.dialog_viewPager); + llCollection = (LinearLayout) contentView.findViewById(R.id.dialog_collection); + ViewGroup.LayoutParams layoutParams = viewPager.getLayoutParams(); + layoutParams.height = DisplayUtils.dip2px(context,vpHeight); + viewPager.setLayoutParams(layoutParams); isLoadPlatform = false; @@ -571,6 +586,7 @@ public class DownloadDialog { viewHolder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { + llCollection.setVisibility(View.VISIBLE); if (viewHolder.download_item_tv_status.getVisibility() == View.GONE) { //下载游戏 addDownloadEntry(apkEntity, viewHolder.download_item_tv_status); diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java index 9e7cd9ae04..04b632830b 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java @@ -1,974 +1,981 @@ package com.gh.gamecenter; +import android.app.Dialog; +import android.content.Context; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; +import android.os.Message; import android.support.v4.util.ArrayMap; -import android.support.v4.view.ViewPager; -import android.support.v4.view.ViewPager.OnPageChangeListener; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.text.Spanned; import android.text.TextUtils; -import android.util.DisplayMetrics; +import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup.LayoutParams; +import android.view.ViewGroup; +import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.android.volley.NoConnectionError; import com.android.volley.Response; import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.gh.base.AppController; -import com.gh.base.BaseFragmentActivity; +import com.gh.base.BaseActivity; import com.gh.common.constant.Config; import com.gh.common.constant.Constants; +import com.gh.common.util.ConcernUtils; 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.ImageUtils; import com.gh.common.util.MD5Utils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; -import com.gh.common.util.TimestampUtils; import com.gh.common.util.Utils; import com.gh.common.view.DownloadDialog; +import com.gh.common.view.HorizontalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.DismissEntity; +import com.gh.gamecenter.entity.GameDetailsEntity; import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.eventbus.EBDownloadDelete; -import com.gh.gamecenter.eventbus.EBMoveTop; -import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.eventbus.EBNewsType; import com.gh.gamecenter.eventbus.EBPWDismiss; -import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBPutUrl; import com.gh.gamecenter.eventbus.EBRedDot; -import com.gh.gamecenter.eventbus.EBSlide; -import com.gh.gamecenter.gamedetails.GameDetailsFragment; -import com.gh.gamecenter.gamedetails.GameInformationFragment; -import com.gh.gamecenter.gamedetails.GameStrategyFragment; import com.gh.gamecenter.manager.ConcernManager; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.PackageManager; -import com.gh.gamecenter.personal.PersonalFragmentAdapter; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; -import java.util.Calendar; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import de.greenrobot.event.EventBus; /** - * 游戏详情页面 如果要启动该页面,需要传 GameEntity 对象进来 对应key game - * - * @author 黄壮华 - * + * Created by khy on 2016/8/12. */ -public class GameDetailsActivity extends BaseFragmentActivity implements - OnClickListener, OnPageChangeListener { - - private TextView gamedetails_tv_details, gamedetails_tv_information, - gamedetails_tv_strategy, gamedetails_tv_download, top_tv_name, - top_tv_info, top_tv_attention, titlebar_tv_details, - titlebar_tv_information, titlebar_tv_strategy, gamedetails_tv_per, - actionbar_tv_title; - private ImageView top_iv_icon, gamedetails_iv_share; - private View gamedetails_slide_line, titlebar_slide_line; - private LinearLayout gamedetails_ll_top, gamedetails_ll_topbar, - gamedetails_ll_bottom, gamedetails_ll_loading, reuse_no_connection; - private ViewPager gamedetails_vp_show; - private ProgressBar gamedetails_progressbar; - private LinearLayout.LayoutParams lparams; - private RelativeLayout.LayoutParams rparams; - - private ConcernManager concernManager; - private DownloadEntry downloadEntry; - private GameEntity entity; - - private int currentItem = -1; - private int previous = 0; - private int width; - private boolean isDestory; - private String gameId; - private String entrance; - - private DismissEntity dismissEntity; - - private long start = 0L; - private boolean isSentReport = false; - - private ArrayMap statusMap; - - private Handler handler = new Handler(); - - private DataWatcher dataWatcher = new DataWatcher() { - @Override - public void onDataChanged( - HashMap downloadingEntries) { - if (entity != null && entity.getApk().size() == 1) { - String url = entity.getApk().get(0).getUrl(); - for (Entry entry : downloadingEntries - .entrySet()) { - if (url.equals(entry.getValue().getUrl())) { - if (!"pause".equals(statusMap.get(entry.getValue() - .getUrl()))) { - downloadEntry = entry.getValue(); - invalidate(); - } - break; - } - } - } - } - }; - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - Utils.log(this.getClass().getSimpleName() + " onSaveInstanceState"); - outState.putInt("CurrentItem", gamedetails_vp_show.getCurrentItem()); - AppController.put("GameEntity", entity); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - isDestory = false; - - View contentView = View.inflate(this, R.layout.activity_gamedetails, null); - - gameId = getIntent().getStringExtra("gameId"); - entrance = getIntent().getStringExtra("entrance"); - if (savedInstanceState != null) { - currentItem = savedInstanceState.getInt("CurrentItem"); - } - - init(contentView); - - dismissEntity = new DismissEntity(false); - - if (gameId != null) { - reuse_no_connection.setOnClickListener(this); - } else { - entity = (GameEntity) AppController.get("GameEntity", true); - } - - statusMap = new ArrayMap(); - - concernManager = new ConcernManager(getApplicationContext()); - - gamedetails_ll_bottom.setOnClickListener(this); - if (Config.isShow) { - gamedetails_ll_bottom.setVisibility(View.VISIBLE); - } else { - gamedetails_ll_bottom.setVisibility(View.GONE); - } - - gamedetails_tv_download.setOnClickListener(this); - gamedetails_progressbar.setOnClickListener(this); - gamedetails_tv_per.setOnClickListener(this); - gamedetails_iv_share.setOnClickListener(this); - - gamedetails_tv_details.setOnClickListener(this); - gamedetails_tv_information.setOnClickListener(this); - gamedetails_tv_strategy.setOnClickListener(this); - - titlebar_tv_details.setOnClickListener(this); - titlebar_tv_information.setOnClickListener(this); - titlebar_tv_strategy.setOnClickListener(this); - - titlebar_tv_details.setClickable(false); - titlebar_tv_information.setClickable(true); - titlebar_tv_strategy.setClickable(true); - - gamedetails_tv_details.setClickable(false); - gamedetails_tv_information.setClickable(true); - gamedetails_tv_strategy.setClickable(true); - - top_tv_attention.setOnClickListener(this); - - DisplayMetrics outMetrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - width = outMetrics.widthPixels / 3; - lparams = new LinearLayout.LayoutParams(width / 2, DisplayUtils.dip2px( - getApplicationContext(), 2)); - lparams.leftMargin = outMetrics.widthPixels / 12; - gamedetails_slide_line.setLayoutParams(lparams); - titlebar_slide_line.setLayoutParams(lparams); - - rparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.WRAP_CONTENT); - - start = Calendar.getInstance().getTimeInMillis(); - - if (entity != null) { - init(); - } else { - gamedetails_ll_loading.setVisibility(View.VISIBLE); - gamedetails_vp_show.setVisibility(View.GONE); - gamedetails_ll_top.setVisibility(View.GONE); - gamedetails_ll_bottom.setVisibility(View.GONE); - getGameDetails(); - } - } - - private void getGameDetails() { - JsonObjectExtendedRequest objectRequest = new JsonObjectExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" - + gameId + "/digest", Constants.GAME_CD), - new Response.Listener() { - - @Override - public void onResponse(JSONObject response) { - if (!isDestory) { - Gson gson = new Gson(); - entity = gson.fromJson(response.toString(), - GameEntity.class); - gamedetails_ll_loading.setVisibility(View.GONE); - gamedetails_vp_show.setVisibility(View.VISIBLE); - gamedetails_ll_top.setVisibility(View.VISIBLE); - if (Config.isShow) { - gamedetails_ll_bottom.setVisibility(View.VISIBLE); - } else { - gamedetails_ll_bottom.setVisibility(View.GONE); - } - init(); - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - if (!isDestory) { - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - toast("网络错误"); - reuse_no_connection.setVisibility(View.VISIBLE); - gamedetails_ll_loading.setVisibility(View.GONE); - } - } - } - }); - AppController.addToRequestQueue(objectRequest, - PersonalFragmentAdapter.class); - } - - private void init() { - - actionbar_tv_title.setText(entity.getName()); - - top_tv_name.setText(entity.getName()); - - for (int i = 0, size = entity.getApk().size(); i < size; i++) { - ApkEntity apkEntity = entity.getApk().get(i); - if ("9u".equals(apkEntity.getPlatform())) { - top_tv_info.setText("V" + apkEntity.getVersion() + " | " - + apkEntity.getSize()); - break; - } - if (i == size - 1) { - top_tv_info.setText("V" + apkEntity.getVersion() + " | " - + apkEntity.getSize()); - } - } - - if (entity.getApk() == null || entity.getApk().isEmpty()) { - gamedetails_tv_download.setText("暂无下载"); - gamedetails_tv_download - .setBackgroundResource(R.drawable.textview_gray_style); - gamedetails_tv_download.setTextColor(getResources().getColor(R.color.btn_gray)); - gamedetails_tv_download.setClickable(false); - } else { - boolean isInstalled = false; - if (entity.getApk() != null - && entity.getApk().size() == 1 - && PackageManager.isInstalled(entity.getApk().get(0) - .getPackageName())) { - isInstalled = true; - } - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - if (isInstalled) { - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - gamedetails_tv_download.setText("启动《" + entity.getName() - + "》"); - } else { - gamedetails_tv_download.setText("启动《" + entity.getName() - + "》" + entity.getDownloadAddWord()); - } - } else { - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - gamedetails_tv_download.setText("下载《" + entity.getName() - + "》"); - } else { - gamedetails_tv_download.setText("下载《" + entity.getName() - + "》" + entity.getDownloadAddWord()); - } - } - } - - if (concernManager.isConcern(entity.getId())) { - top_tv_attention.setText("取消关注"); - top_tv_attention.setBackgroundResource(R.drawable.border_red_bg); - top_tv_attention.setTextColor(0xffbc2132); - } else { - top_tv_attention.setText("关注"); - top_tv_attention - .setBackgroundResource(R.drawable.textview_red_style); - top_tv_attention.setTextColor(Color.WHITE); - } - - ImageUtils.getInstance(this).display(entity.getIcon(), top_iv_icon); - - gamedetails_vp_show.setAdapter(new FragmentAdapter( - getSupportFragmentManager())); - gamedetails_vp_show.setOffscreenPageLimit(3); - gamedetails_vp_show.addOnPageChangeListener(this); - - if (currentItem != -1) { - lparams.leftMargin = width * currentItem + width / 4; - gamedetails_slide_line.setLayoutParams(lparams); - titlebar_slide_line.setLayoutParams(lparams); - } else { - int current = getIntent().getIntExtra("current", -1); - if (current != -1) { - gamedetails_vp_show.setCurrentItem(current); - lparams.leftMargin = width * current + width / 4; - gamedetails_slide_line.setLayoutParams(lparams); - titlebar_slide_line.setLayoutParams(lparams); - } - } - } - - @Override - public void onClick(final View v) { - switch (v.getId()) { - case R.id.actionbar_rl_back: - finish(); - break; - case R.id.gamedetails_tv_details: - case R.id.titlebar_tv_details: - gamedetails_vp_show.setCurrentItem(0); - break; - case R.id.gamedetails_tv_information: - case R.id.titlebar_tv_information: - gamedetails_vp_show.setCurrentItem(1); - break; - case R.id.gamedetails_tv_strategy: - case R.id.titlebar_tv_strategy: - gamedetails_vp_show.setCurrentItem(2); - break; - case R.id.top_tv_attention: - if ("关注".equals(top_tv_attention.getText().toString())) { - - Map kv = new HashMap(); - kv.put("状态", "关注"); - DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", - entity.getName(), kv); - - Map kv2 = new HashMap(); - kv2.put("点击", "关注"); - DataUtils.onEvent(GameDetailsActivity.this, "插件数据", - entity.getName(), kv2); - - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("type", "关注"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(GameDetailsActivity.this, - "concern", map); - - concernManager.addByEntity(entity); - top_tv_attention.setText("取消关注"); - top_tv_attention - .setBackgroundResource(R.drawable.border_red_bg); - top_tv_attention.setTextColor(0xffbc2132); - - DialogUtils.showSuccessDialog(this); - } else { - Map kv2 = new HashMap(); - kv2.put("点击", "取消关注"); - DataUtils.onEvent(GameDetailsActivity.this, "插件数据", entity.getName(), kv2); - - DialogUtils.showCancelDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - Map kv = new HashMap(); - kv.put("状态", "取消关注"); - DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", entity.getName(), kv); - - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("type", "关注"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(GameDetailsActivity.this, "concern", map); - - concernManager.deleteConcern(entity.getId()); - - top_tv_attention.setText("关注"); - top_tv_attention.setBackgroundResource(R.drawable.textview_red_style); - top_tv_attention.setTextColor(Color.WHITE); - } - }); - } - break; - case R.id.gamedetails_tv_download: - Map kv0 = new HashMap(); - kv0.put("点击", "下载"); - DataUtils.onEvent(GameDetailsActivity.this, "插件数据", entity.getName(), - kv0); - if (entity.getApk() != null && !entity.getApk().isEmpty()) { - if (NetworkUtils.isWifiConnected(this)) { - download(v); - } else { - DialogUtils.showWarningDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - download(v); - } - }); - } - } else { - toast("稍等片刻~!游戏正在上传中..."); - } - break; - case R.id.gamedetails_iv_share: - // http://news.ghzhushou.com - Map kv = new HashMap(); - kv.put("点击", "分享"); - DataUtils.onEvent(this, "插件数据", entity.getName(), kv); - - Map map = new HashMap(); - map.put("location", "分享"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("news", entity.getName()); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(this, "click-item", map); - - String url = "http://112.124.59.31/game_center/static/game_" - + entity.getId() + ".html"; - showShare(url, entity.getName(), entity.getIcon(), entrance, "游戏"); - break; - case R.id.gamedetails_progressbar: - case R.id.gamedetails_tv_per: - String str = gamedetails_tv_per.getText().toString(); - if ("下载中".equals(str)) { - startActivity(new Intent(this, DownloadManagerActivity.class)); - } else if ("安装".equals(str)) { - final String path = downloadEntry.getPath(); - PackageManager manager = new PackageManager( - getApplicationContext()); - if (manager.launchSetup(path)) { - startActivity(PackageUtils.getInstallIntent(path)); - } else { - DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - MainActivity.uninstallMap.put( - PackageUtils.getPackageNameByPath(GameDetailsActivity.this, path), path); - startActivity(PackageUtils.getUninstallIntent(GameDetailsActivity.this, - path)); - } - }, null); - } - } - break; - case R.id.reuse_no_connection: - gamedetails_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - handler.postDelayed(runnable, 1000); - break; - default: - break; - } - } - - private void download(View v) { - if (entity.getApk().size() == 1) { - if (gamedetails_tv_download.getText().toString() - .contains("启动")) { - - Map kv = new HashMap(); - kv.put("版本", entity.getApk().get(0).getPlatform()); - DataUtils.onEvent(GameDetailsActivity.this, "游戏启动", - entity.getName(), kv); - - PackageUtils.launchApplicationByPackageName( - getApplicationContext(), entity.getApk() - .get(0).getPackageName()); - } else { - ApkEntity apkEntity = entity.getApk().get(0); - String msg = FileUtils.isCanDownload(apkEntity - .getSize()); - if (TextUtils.isEmpty(msg)) { - Map kv = new HashMap(); - kv.put("版本", apkEntity.getPlatform()); - kv.put("状态", "下载开始"); - DataUtils.onEvent(GameDetailsActivity.this, - "游戏下载", entity.getName(), kv); - - Map kv2 = new HashMap(); - kv2.put("版本", apkEntity.getPlatform()); - kv2.put("状态", "下载开始"); - kv2.put("位置", entrance + "-游戏详情-开始"); - DataUtils.onEvent(GameDetailsActivity.this, - "游戏下载位置", entity.getName(), kv2); - - Map kv3 = new HashMap(); - kv3.put(entrance, "下载数"); - kv3.put(entrance, "下载开始"); - DataUtils.onEvent(GameDetailsActivity.this, - "应用数据", entity.getName(), kv3); - - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("method", "正常"); - map.put("platform", - PlatformUtils.getInstance( - getApplicationContext()) - .getPlatformName( - entity.getApk().get(0) - .getPlatform())); - map.put("status", "开始"); - map.put("location", "游戏详情:" + entity.getName()); - map.put("from", entrance); - map.put("network", - NetworkUtils.getConnectedType(this)); - map.put("createdOn", - System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(this, "download", map); - - DownloadEntry entry = new DownloadEntry(); - - entry.setUrl(apkEntity.getUrl()); - entry.setName(entity.getName()); - entry.setPath(FileUtils.getDownloadPath( - GameDetailsActivity.this, - 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("gameId", entity.getId()); - meta.put("entrance", entrance + "-游戏详情"); - meta.put("location", "游戏详情:" + entity.getName()); - entry.setMeta(meta); - - DownloadManager.getInstance( - getApplicationContext()).add(entry); - - EventBus.getDefault().post(new EBRedDot(1)); - - gamedetails_tv_download - .setVisibility(View.GONE); - gamedetails_progressbar - .setVisibility(View.VISIBLE); - gamedetails_tv_per.setVisibility(View.VISIBLE); - gamedetails_progressbar.setProgress(0); - gamedetails_tv_per.setText("0.0%"); - - statusMap.put(entry.getUrl(), "downloading"); - - } else { - toast(msg); - } - } - } else { - if (!dismissEntity.isShow()) { - dismissEntity.setShow(true); - DownloadDialog - .getInstance(GameDetailsActivity.this) - .showPopupWindow(v, entity, - entrance + "-游戏详情", statusMap, - "游戏详情:" + entity.getName()); - } - } - } - - @Override - public void onPageSelected(int position) { - switch (position) { - case 0: - if (gamedetails_ll_topbar.getVisibility() == View.VISIBLE) { - EventBus.getDefault().post(new EBSlide(0, previous, true)); - } - previous = 0; - - titlebar_tv_details.setClickable(false); - titlebar_tv_information.setClickable(true); - titlebar_tv_strategy.setClickable(true); - - gamedetails_tv_details.setClickable(false); - gamedetails_tv_information.setClickable(true); - gamedetails_tv_strategy.setClickable(true); - - titlebar_tv_details.setTextColor(getResources().getColor(R.color.theme)); - titlebar_tv_information.setTextColor(getResources().getColor(R.color.title)); - titlebar_tv_strategy.setTextColor(getResources().getColor(R.color.title)); - - gamedetails_tv_details.setTextColor(getResources().getColor(R.color.theme)); - gamedetails_tv_information.setTextColor(getResources().getColor(R.color.title)); - gamedetails_tv_strategy.setTextColor(getResources().getColor(R.color.title)); - break; - case 1: - if (gamedetails_ll_topbar.getVisibility() == View.VISIBLE) { - EventBus.getDefault().post(new EBSlide(0, previous, true)); - } - previous = 1; - - titlebar_tv_details.setClickable(true); - titlebar_tv_information.setClickable(false); - titlebar_tv_strategy.setClickable(true); - - gamedetails_tv_details.setClickable(true); - gamedetails_tv_information.setClickable(false); - gamedetails_tv_strategy.setClickable(true); - - titlebar_tv_details.setTextColor(getResources().getColor(R.color.title)); - titlebar_tv_information.setTextColor(getResources().getColor(R.color.theme)); - titlebar_tv_strategy.setTextColor(getResources().getColor(R.color.title)); - - gamedetails_tv_details.setTextColor(getResources().getColor(R.color.title)); - gamedetails_tv_information.setTextColor(getResources().getColor(R.color.theme)); - gamedetails_tv_strategy.setTextColor(getResources().getColor(R.color.title)); - break; - case 2: - if (gamedetails_ll_topbar.getVisibility() == View.VISIBLE) { - EventBus.getDefault().post(new EBSlide(0, previous, true)); - } - previous = 2; - - titlebar_tv_details.setClickable(true); - titlebar_tv_information.setClickable(true); - titlebar_tv_strategy.setClickable(false); - - gamedetails_tv_details.setClickable(true); - gamedetails_tv_information.setClickable(true); - gamedetails_tv_strategy.setClickable(false); - - titlebar_tv_details.setTextColor(getResources().getColor(R.color.title)); - titlebar_tv_information.setTextColor(getResources().getColor(R.color.title)); - titlebar_tv_strategy.setTextColor(getResources().getColor(R.color.theme)); - - gamedetails_tv_details.setTextColor(getResources().getColor(R.color.title)); - gamedetails_tv_information.setTextColor(getResources().getColor(R.color.title)); - gamedetails_tv_strategy.setTextColor(getResources().getColor(R.color.theme)); - break; - } - } - - @Override - public void onPageScrolled(int position, float positionOffset, - int positionOffsetPixels) { - if (positionOffset != 0) { - lparams.leftMargin = (int) (width * (positionOffset + position)) + width / 4; - gamedetails_slide_line.setLayoutParams(lparams); - titlebar_slide_line.setLayoutParams(lparams); - } - } - - @Override - public void onPageScrollStateChanged(int state) { - - } - - private class FragmentAdapter extends FragmentPagerAdapter { - - public FragmentAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - Fragment fragment; - if (position == 0) { - GameDetailsFragment gameDetailsFragment = new GameDetailsFragment(); - gameDetailsFragment.setParams(entity.getId(), - entity.getName(), entrance); - fragment = gameDetailsFragment; - } else if (position == 1) { - GameInformationFragment gameInformationFragment = new GameInformationFragment(); - gameInformationFragment.setParams(entity.getId(), - entity.getName(), entrance); - fragment = gameInformationFragment; - } else { - GameStrategyFragment gameStrategyFragment = new GameStrategyFragment(); - gameStrategyFragment.setParams(entity.getId(), - entity.getName(), entrance); - fragment = gameStrategyFragment;; - } - return fragment; - } - - @Override - public int getCount() { - return 3; - } - - } - - private void invalidate() { - gamedetails_progressbar - .setProgress((int) (downloadEntry.getPercent() * 10)); - switch (downloadEntry.getStatus()) { - case downloading: - case pause: - case timeout: - case neterror: - case waiting: - gamedetails_tv_per.setText("下载中"); - break; - case done: - EventBus.getDefault().post( - new EBPutUrl(entity.getApk().get(0).getPackageName(), - downloadEntry.getUrl())); - gamedetails_tv_per.setText("安装"); - break; - case cancel: - case hijack: - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - gamedetails_tv_download.setText("下载《" + entity.getName() + "》"); - } else { - gamedetails_tv_download.setText("下载《" + entity.getName() + "》" - + entity.getDownloadAddWord()); - } - break; - default: - break; - } - } - - @Override - protected void onResume() { - super.onResume(); - if (entity != null && entity.getApk().size() == 1) { - if (PackageManager.isInstalled(entity.getApk().get(0) - .getPackageName())) { - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - gamedetails_tv_download.setText("启动《" + entity.getName() + "》"); - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - gamedetails_tv_download.setText("启动《" + entity.getName() - + "》"); - } else { - gamedetails_tv_download.setText("启动《" + entity.getName() - + "》" + entity.getDownloadAddWord()); - } - } else { - String url = entity.getApk().get(0).getUrl(); - for (DownloadEntry entry : DownloadManager.getInstance( - getApplicationContext()).getAll()) { - if (url.equals(entry.getUrl())) { - downloadEntry = entry; - gamedetails_tv_download.setVisibility(View.GONE); - gamedetails_progressbar.setVisibility(View.VISIBLE); - gamedetails_tv_per.setVisibility(View.VISIBLE); - invalidate(); - break; - } - } - } - } - DownloadManager.getInstance(getApplicationContext()).addObserver( - dataWatcher); - } - - @Override - protected void onPause() { - super.onPause(); - statusMap.clear(); - DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher); - if (!isSentReport) { - long end = Calendar.getInstance().getTimeInMillis(); - - int seconds = (int) ((end - start) / 1000); - - String cost = ""; - if (seconds < 5) { - cost = "小于5秒"; - } else if (seconds < 30) { - cost = "5秒-30秒"; - } else if (seconds < 60) { - cost = "30秒-60秒"; - } else { - cost = "大于60秒"; - } - - if (entity != null && !TextUtils.isEmpty(entity.getName())) { - Map kv = new HashMap(); - kv.put("停留时长", cost); - DataUtils.onEvent(this, "插件数据", entity.getName(), kv); - - if ("主页-最新插件".equals(entrance)) { - Map kv2 = new HashMap(); - kv2.put(entity.getName(), "阅读时长:" + cost); - DataUtils.onEvent(this, "主页数据", "最新插件", kv2); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv2 = new HashMap(); - kv2.put(entity.getName(), "阅读时长:" + cost); - DataUtils.onEvent(this, "主页数据", "热门卡牌", kv2); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv2 = new HashMap(); - kv2.put(entity.getName(), "阅读时长:" + cost); - DataUtils.onEvent(this, "主页数据", "新测卡牌", kv2); - } - - if (seconds > 0) { - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("time", seconds); - map.put("from", entrance); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(this, "game", map); - } - - isSentReport = true; - } - } - } - - //接收下载被删除消息 - public void onEvent(EBDownloadDelete delete) { - if (entity != null && entity.getApk().size() == 1) { - String url = entity.getApk().get(0).getUrl(); - if (url.equals(delete.getUrl())) { - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - gamedetails_tv_download.setText("下载《" + entity.getName() + "》"); - } else { - gamedetails_tv_download.setText("下载《" + entity.getName() + "》" + entity.getDownloadAddWord()); - } - } - } - } - - public void onEventMainThread(EBPWDismiss dismiss) { - if (dismissEntity != null) { - dismissEntity.setShow(false); - } - } - - public void onEventMainThread(EBPackage busFour) { - if (entity.getApk().size() == 1) { - String packageName = entity.getApk().get(0).getPackageName(); - if (packageName.equals(busFour.getPackageName())) { - if ("安装".equals(busFour.getType())) { - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - gamedetails_tv_download.setText("启动《" + entity.getName() - + "》"); - } else if ("卸载".equals(busFour.getType())) { - gamedetails_tv_download.setVisibility(View.VISIBLE); - gamedetails_progressbar.setVisibility(View.GONE); - gamedetails_tv_per.setVisibility(View.GONE); - gamedetails_tv_download.setText("下载《" + entity.getName() - + "》"); - } - } - } - } - - public void onEventMainThread(EBNetworkState busNetworkState) { - if (gameId != null && busNetworkState.isNetworkConnected() - && reuse_no_connection.getVisibility() == View.VISIBLE) { - gamedetails_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - handler.postDelayed(runnable, 1000); - } - } - - public void onEventMainThread(EBMoveTop moveTop) { - if (moveTop.getType().equals("top")) { - if (moveTop.getVisibility() == View.VISIBLE) { - gamedetails_ll_topbar.setVisibility(View.VISIBLE); - } else if (moveTop.getVisibility() == View.GONE) { - gamedetails_ll_topbar.setVisibility( View.GONE); - } else if (moveTop.getVisibility() == View.INVISIBLE) { - gamedetails_ll_topbar.setVisibility(View.INVISIBLE); - } - if (rparams.topMargin != moveTop.getTopMargin()) { - rparams.topMargin = moveTop.getTopMargin(); - gamedetails_ll_top.setLayoutParams(rparams); - } - } else if (moveTop.getType().equals("topbar")) { - gamedetails_vp_show.setCurrentItem(2); - } - } - - Runnable runnable = new Runnable() { - @Override - public void run() { - getGameDetails(); - } - }; - - @Override - protected void onDestroy() { - super.onDestroy(); - isDestory = true; - gamedetails_tv_details = null; - gamedetails_tv_information = null; - gamedetails_tv_strategy = null; - gamedetails_tv_download = null; - top_tv_name = null; - top_tv_info = null; - top_tv_attention = null; - titlebar_tv_details = null; - titlebar_tv_information = null; - titlebar_tv_strategy = null; - gamedetails_tv_per = null; - actionbar_tv_title = null; - top_iv_icon = null; - gamedetails_iv_share = null; - gamedetails_slide_line = null; - titlebar_slide_line = null; - gamedetails_ll_top = null; - gamedetails_ll_topbar = null; - gamedetails_ll_bottom = null; - gamedetails_ll_loading = null; - reuse_no_connection = null; - gamedetails_vp_show = null; - gamedetails_progressbar = null; - lparams = null; - rparams = null; - concernManager = null; - downloadEntry = null; - entity = null; - gameId = null; - entrance = null; - dismissEntity = null; - statusMap = null; - handler = null; - dataWatcher = null; - } +public class GameDetailsActivity extends BaseActivity implements View.OnClickListener{ + + private Context context = this; + + private String gameId ; + private String entrance; + private GameDetailsAdapter detailsAdapter; + private RecyclerView detailsRecyclerView; + private LinearLayout llLoading; + private LinearLayout noConnection; + private GameDetailsEntity entity = new GameDetailsEntity(); + private GameEntity gameEntity; + private TextView tvDowload,tvPer; + private ImageView iv_share; + private ProgressBar progressBar; + private ArrayMap statusMap; + private DismissEntity dismissEntity; + private DownloadEntry downloadEntry; + private ConcernManager concernManager; + + private boolean isConcern = false; + private int concernCode = 0;//0关注不做操作,1添加关注,2删除关注 + private Handler handler = new Handler(); + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged( + HashMap downloadingEntries) { + if (gameEntity != null && gameEntity.getApk().size() == 1) { + String url = gameEntity.getApk().get(0).getUrl(); + for (Map.Entry entry : downloadingEntries + .entrySet()) { + if (url.equals(entry.getValue().getUrl())) { + if (!"pause".equals(statusMap.get(entry.getValue() + .getUrl()))) { + downloadEntry = entry.getValue(); + invalidate(); + } + break; + } + } + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + View contentView = View.inflate(this, R.layout.activity_new_gamedetails, null); + RelativeLayout reuse_actionbar = (RelativeLayout) contentView.findViewById(R.id.reuse_actionbar); + iv_share = new ImageView(this); + iv_share.setImageResource(R.drawable.share_icon); + float dp = getResources().getDisplayMetrics().density; + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int)(dp*20),(int)(dp*20)); + params.addRule( RelativeLayout.CENTER_VERTICAL); + params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT ); + params.setMargins(0,0,(int)(dp*10),0); + reuse_actionbar.addView(iv_share,params); + gameId = getIntent().getStringExtra("gameId"); + entrance = getIntent().getStringExtra("entrance"); + if (gameId != null) { + + } else { + gameEntity = (GameEntity) AppController.get("GameEntity", true); + gameId = gameEntity.getId(); + } + + init(contentView,gameEntity.getName()); + dismissEntity = new DismissEntity(false); + statusMap = new ArrayMap<>(); + + //初始化关注 + concernManager = new ConcernManager(getApplicationContext()); + for (int i = 0; i < concernManager.getAllConcern().size(); i++) { + if (concernManager.getAllConcern().get(i).getId().equals(gameId)){ + isConcern = true; + } + } + + tvDowload = (TextView) findViewById(R.id.gamedetails_tv_download); + progressBar = (ProgressBar) findViewById(R.id.gamedetails_progressbar); + llLoading = (LinearLayout) findViewById(R.id.gamedetails_ll_loading); + tvPer = (TextView) findViewById(R.id.gamedetails_tv_per); + noConnection = (LinearLayout) findViewById(R.id.reuse_no_connection); + detailsRecyclerView = (RecyclerView) findViewById(R.id.gamedetails_rv); + detailsAdapter = new GameDetailsAdapter(context); + detailsRecyclerView.setLayoutManager(new LinearLayoutManager(context)); + detailsRecyclerView.setAdapter(detailsAdapter); + if (entity != null) { + initDowload(); + } else { + + } + tvDowload.setOnClickListener(this); + tvPer.setOnClickListener(this); + noConnection.setOnClickListener(this); + iv_share.setOnClickListener(this); + + } + @Override + public void onClick(final View v) { + switch (v.getId()){ + case R.id.gamedetails_tv_download: + Map kv0 = new HashMap(); + kv0.put("点击", "下载"); + DataUtils.onEvent(GameDetailsActivity.this, "插件数据", gameEntity.getName(), + kv0); + if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) { + if (NetworkUtils.isWifiConnected(this)) { + download(v); + } else { + DialogUtils.showWarningDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + download(v); + } + }); + } + } else { + toast("稍等片刻~!游戏正在上传中..."); + } + break; + case R.id.gamedetails_tv_per: + String str = tvPer.getText().toString(); + if ("继续".equals(str)) { + statusMap.put(downloadEntry.getUrl(), "downloading"); + tvPer.setText(downloadEntry.getPercent() + "%"); + Message msg = Message.obtain(); + msg.what = Constants.CONTINUE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); + } else if ("安装".equals(str)) { + final String path = downloadEntry.getPath(); + PackageManager manager = new PackageManager( + context); + if (manager.launchSetup(path)) { + startActivity(PackageUtils.getInstallIntent(path)); + } else { + DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + MainActivity.uninstallMap.put( + PackageUtils.getPackageNameByPath(GameDetailsActivity.this, path), path); + startActivity(PackageUtils.getUninstallIntent(GameDetailsActivity.this, + path)); + } + }, null); + } + } else if("等待".equals(str)){ + + } else { + statusMap.put(downloadEntry.getUrl(), "pause"); + tvPer.setText("继续"); + Message msg = Message.obtain(); + msg.what = Constants.PAUSE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); + } + break; + case R.id.reuse_no_connection: + noConnection.setVisibility(View.GONE); + llLoading.setVisibility(View.VISIBLE); + handler.postDelayed(new Runnable() { + @Override + public void run() { + getGameNews(); + getGameDetail(); + } + },1000); + break; + } + if (v == iv_share){ + Map kv = new HashMap(); + kv.put("点击", "分享"); + DataUtils.onEvent(this, "插件数据", gameEntity.getName(), kv); + + Map map = new HashMap(); + map.put("location", "分享"); + map.put("createOn", System.currentTimeMillis() / 1000); + map.put("news", gameEntity.getName()); + map.put("page", "游戏详情"); + DataCollectionManager.onEvent(this, "click-item", map); + + String url = "http://112.124.59.31/game_center/static/game_" + + gameEntity.getId() + ".html"; + showShare(url, gameEntity.getName(), gameEntity.getIcon(), entrance, "游戏"); + } + } + private void invalidate() { + progressBar.setProgress((int) (downloadEntry.getPercent() * 10)); + switch (downloadEntry.getStatus()) { + case downloading: + tvPer.setText(downloadEntry.getPercent() + "%"); + break; + case pause: + case timeout: + case neterror: + tvPer.setText("继续"); + break; + case waiting: + tvPer.setText("等待"); + break; + case done: + EventBus.getDefault().post( + new EBPutUrl(gameEntity.getApk().get(0).getPackageName(), + downloadEntry.getUrl())); + tvPer.setText("安装"); + break; + case cancel: + case hijack: + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + if (TextUtils.isEmpty(entity.getDownloadAddWord())) { + tvDowload.setText("下载《" + gameEntity.getName() + "》"); + } else { + tvDowload.setText("下载《" + gameEntity.getName() + "》" + + entity.getDownloadAddWord()); + } + break; + default: + break; + } + } + + private void initDowload() { + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { + tvDowload.setText("暂无下载"); + tvDowload + .setBackgroundResource(R.drawable.textview_gray_style); + tvDowload.setTextColor(0xFF999999); + tvDowload.setClickable(false); + } else { + boolean isInstalled = false; + if (gameEntity.getApk() != null + && gameEntity.getApk().size() == 1 + && PackageManager.isInstalled(gameEntity.getApk().get(0) + .getPackageName())) { + isInstalled = true; + } + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + if (isInstalled) { + if (TextUtils.isEmpty(gameEntity.getDownloadAddWord())) { + tvDowload.setText("启动《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("启动《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } else { + if (TextUtils.isEmpty(gameEntity.getDownloadAddWord())) { + tvDowload.setText("下载《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("下载《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } + } + } + private void download(View v) { + if (gameEntity.getApk().size() == 1) { + if (tvDowload.getText().toString() + .contains("启动")) { + + Map kv = new HashMap(); + kv.put("版本", gameEntity.getApk().get(0).getPlatform()); + DataUtils.onEvent(GameDetailsActivity.this, "游戏启动", + gameEntity.getName(), kv); + + PackageUtils.launchApplicationByPackageName( + context, gameEntity.getApk() + .get(0).getPackageName()); + } else { + ApkEntity apkEntity = gameEntity.getApk().get(0); + String msg = FileUtils.isCanDownload(apkEntity + .getSize()); + if (TextUtils.isEmpty(msg)) { + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(GameDetailsActivity.this, + "游戏下载", gameEntity.getName(), kv); + + Map kv2 = new HashMap(); + kv2.put("版本", apkEntity.getPlatform()); + kv2.put("状态", "下载开始"); + kv2.put("位置", entrance + "-游戏详情-开始"); + DataUtils.onEvent(GameDetailsActivity.this, + "游戏下载位置", gameEntity.getName(), kv2); + + Map kv3 = new HashMap(); + kv3.put(entrance, "下载数"); + kv3.put(entrance, "下载开始"); + DataUtils.onEvent(GameDetailsActivity.this, + "应用数据", gameEntity.getName(), kv3); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("method", "正常"); + map.put("platform", + PlatformUtils.getInstance( + context) + .getPlatformName( + gameEntity.getApk().get(0) + .getPlatform())); + map.put("status", "开始"); + map.put("location", "游戏详情:" + gameEntity.getName()); + map.put("from", entrance); + map.put("network", + NetworkUtils.getConnectedType(this)); + map.put("createdOn", + System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(this, "download", map); + + DownloadEntry entry = new DownloadEntry(); + + entry.setUrl(apkEntity.getUrl()); + entry.setName(gameEntity.getName()); + entry.setPath(FileUtils.getDownloadPath( + GameDetailsActivity.this, + MD5Utils.getContentMD5(gameEntity.getName() + + "_" + + System.currentTimeMillis()) + + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", gameEntity.getIcon()); + meta.put("platform", apkEntity.getPlatform()); + meta.put("gameId", gameEntity.getId()); + meta.put("entrance", entrance + "-游戏详情"); + meta.put("location", "游戏详情:" + gameEntity.getName()); + entry.setMeta(meta); + + DownloadManager.getInstance( + context).add(entry); + + EventBus.getDefault().post(new EBRedDot(1)); + + tvDowload.setVisibility(View.GONE); + progressBar.setVisibility(View.VISIBLE); + tvPer.setVisibility(View.VISIBLE); + progressBar.setProgress(0); + tvPer.setText("0.0%"); + + statusMap.put(entry.getUrl(), "downloading"); + + } else { + toast(msg); + } + } + } else { + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog + .getInstance(GameDetailsActivity.this) + .showPopupWindow(v, gameEntity, + entrance + "-游戏详情", statusMap, + "游戏详情:" + gameEntity.getName()); + } + } + } + + private void getGameNews() { + String url = Config.HOST + "v1d45/game/" + gameId + "/news?limit=3"; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Utils.log(response.toString()); + Gson gson = new Gson(); + ArrayList news = gson.fromJson( + response.toString(), + new TypeToken>() { + }.getType()); + if (entity!= null && news!= null){ + entity.setNews(news); + } + llLoading.setVisibility(View.GONE); + detailsAdapter.notifyDataSetChanged(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // 无网络连接和访问超时 + if (error.getClass().equals(NoConnectionError.class) + || error.getClass().equals(TimeoutError.class)) { + llLoading.setVisibility(View.GONE); + } + } + }); + AppController.addToRequestQueue(request, GameDetailsActivity.class); + } + + private void getGameDetail() { + String url = Config.HOST + "v2d0/game/" + gameId + "/detail"; + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + + Utils.log(response.toString()); + Gson gson = new Gson(); + GameDetailsEntity gameDetailsEntity = gson + .fromJson(response.toString(), + GameDetailsEntity.class); + if (entity.getNews() != null) { + gameDetailsEntity.setNews(entity.getNews()); + } + entity = gameDetailsEntity; + HashMap> map = new HashMap>(); + if (!response.isNull("news_type")) { + try { + JSONArray newsType = response + .getJSONArray("news_type"); + for (int i = 0, size = newsType.length(); i < size; i++) { + JSONObject jsonObject = newsType + .getJSONObject(i); + JSONArray subType = jsonObject + .getJSONArray("sub_type"); + ArrayList list = new ArrayList(); + for (int j = 0; j < subType.length(); j++) { + list.add(subType.getString(j)); + } + map.put(jsonObject.getString("type"), + list); + } + } catch (JSONException e) { + + e.printStackTrace(); + } + } + for (String type : map.keySet()) { + EventBus.getDefault().post( + new EBNewsType(type, map.get(type))); + } + llLoading.setVisibility(View.GONE); + noConnection.setVisibility(View.GONE); + detailsAdapter.notifyDataSetChanged(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + noConnection.setVisibility(View.VISIBLE); + // 无网络连接和访问超时 + } + }); + AppController.addToRequestQueue(request, GameDetailsActivity.class); + } + public void onEventMainThread(EBPWDismiss dismiss) { + if (dismissEntity != null) { + dismissEntity.setShow(false); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (gameEntity != null && gameEntity.getApk().size() == 1) { + if (PackageManager.isInstalled(gameEntity.getApk().get(0) + .getPackageName())) { + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + tvDowload.setText("启动《" + gameEntity.getName() + "》"); + if (TextUtils.isEmpty(entity.getDownloadAddWord())) { + tvDowload.setText("启动《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("启动《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } else { + String url = gameEntity.getApk().get(0).getUrl(); + for (DownloadEntry entry : DownloadManager.getInstance( + context).getAll()) { + if (url.equals(entry.getUrl())) { + downloadEntry = entry; + tvDowload.setVisibility(View.GONE); + progressBar.setVisibility(View.VISIBLE); + tvPer.setVisibility(View.VISIBLE); + invalidate(); + break; + } + } + } + } + DownloadManager.getInstance(context).addObserver( + dataWatcher); + } + @Override + protected void onDestroy() { + super.onDestroy(); + String uuid = ConcernUtils.UUID(this); + if (isConcern == true&&concernCode ==2){ + //取消关注 + ConcernUtils.DeleteConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern/" + gameId, new ConcernUtils.DownJsonListener() { + @Override + public void downSucced(String str) { + Utils.log("删除提交成功==游戏详情"); + } + + @Override + public void downFailed() { + Utils.log("删除提交失败==游戏详情"); + } + }); + + }else if (isConcern == false&& concernCode == 1){ + //添加关注 + ConcernUtils.PostConcernGameId("[" + gameId + "]", Config.HOST + "v2d0/device/" + uuid + "/concern", new ConcernUtils.DownJsonListener() { + @Override + public void downSucced(String str) { + Utils.log("关注提交成功==游戏详情"); + } + + @Override + public void downFailed() { + Utils.log("关注提交失败==游戏详情"); + } + }); + }else { + Utils.log("无关注操作==游戏详情"); + } + gameId = null; + entrance = null; + detailsAdapter = null; + context = null; + detailsRecyclerView = null; + llLoading = null; + noConnection = null; + entity = null; + gameEntity = null; + tvDowload = null; + tvPer = null; + progressBar = null; + statusMap = null; + dismissEntity = null; + downloadEntry = null; + concernManager = null; + handler = null; + } + + + public class GameDetailsAdapter extends RecyclerView.Adapter{ + private Context context; + + public GameDetailsAdapter(Context context) { + this.context = context; + getGameDetail(); + getGameNews(); + } + @Override + public int getItemViewType(int position){ + if (position == 0){ + + return 0; + } + else if (entity.getTag()!=null && entity.getTag().size()>0&&position == 1){ + return 1; + }else if (entity.getNews()!=null && entity.getNews().size()>0&&(position == 1||entity.getTag()!=null&&entity.getTag().size()>0&&position == 2)){ + return 2; + }else if (entity.getGallery()!=null && entity.getGallery().size()>0){ + return 3; + } + else { + return super.getItemViewType(position); + } + + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view ; + switch (viewType){ + case 0: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_top,parent,false); + return new TopViewHolder(view); + case 1: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_plugin,parent,false); + return new PluginViewHolder(view); + case 2: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_zixun,parent,false); + return new ZiXunViewHolder(view); + case 3: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_game,parent,false); + return new GameViewHolder(view); + default: + return null; + } + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (holder instanceof TopViewHolder){ + TopViewHolder topViewHolder = (TopViewHolder) holder; + initTopViewHolder(topViewHolder); + } else if (holder instanceof PluginViewHolder){ + PluginViewHolder pluginViewHolder = (PluginViewHolder) holder; + initPluginViewHolder(pluginViewHolder); + } else if (holder instanceof ZiXunViewHolder){ + ZiXunViewHolder ziXunViewHolder = (ZiXunViewHolder) holder; + initZiXunViewHolder(ziXunViewHolder); + } else if (holder instanceof GameViewHolder){ + GameViewHolder gameViewHolder = (GameViewHolder) holder; + initGameViewHolder(gameViewHolder); + } + } + + private void initGameViewHolder(GameViewHolder gameViewHolder) { + gameViewHolder.gamepic_rv.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false)); + gameViewHolder.gamepic_rv.setAdapter(new GamePicAdapter()); + gameViewHolder.gamepic_rv.addItemDecoration(new HorizontalItemDecoration( + context, 1, entity.getGallery().size())); + gameViewHolder.game_content.setText(entity.getDes()); + + } + + private void initZiXunViewHolder(ZiXunViewHolder ziXunViewHolder) { + LinearLayout llContainer = ziXunViewHolder.llContainer; + int childCount = llContainer.getChildCount(); + if (entity.getNews().size()<3){ + ziXunViewHolder.llMore.setVisibility(View.GONE); + }else if (entity.getNews().size()==0){ + ziXunViewHolder.view.setVisibility(View.GONE); + } + if ( childCount == 0){ + for (int i =0;i kv = new HashMap(); + kv.put("状态", "关注"); + DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", gameEntity.getName(), kv); + + Map kv2 = new HashMap(); + kv2.put("点击", "关注"); + DataUtils.onEvent(GameDetailsActivity.this, "插件数据", gameEntity.getName(), kv2); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("type", "关注"); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(GameDetailsActivity.this, "concern", map); + concernCode = 1; + concernManager.addByEntity(gameEntity); + topViewHolder.tv_concern.setText("取消关注"); + topViewHolder.tv_concern.setBackgroundResource(R.drawable.border_red_bg); + topViewHolder.tv_concern.setTextColor(0xffbc2132); + Toast.makeText(context,"关注成功",Toast.LENGTH_SHORT).show(); + } else { + Map kv2 = new HashMap(); + kv2.put("点击", "取消关注"); + DataUtils.onEvent(GameDetailsActivity.this, "插件数据", gameEntity.getName(), kv2); + + showCancelDialog(topViewHolder.tv_concern); + } + } + }); + + } + private void showCancelDialog(final TextView attention) { + final Dialog dialog = new Dialog(context); + View view = View.inflate(context, R.layout.common_alertdialog, + null); + TextView title = (TextView) view.findViewById(R.id.alertdialog_title); + title.setText("取消关注"); + TextView cancel = (TextView) view.findViewById(R.id.alertdialog_cannel); + cancel.setText("暂不取消"); + TextView confirm = (TextView) view.findViewById(R.id.alertdialog_confirm); + confirm.setText("确定取消"); + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + TextView message = (TextView) view.findViewById(R.id.alertdialog_content); + + Spanned content = Html + .fromHtml("取消关注游戏后,您将无法及时收到游戏的攻略资讯等最新动态提醒,您确定取消吗?"); + message.setText(content); + + view.findViewById(R.id.alertdialog_confirm).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + + Map kv = new HashMap(); + kv.put("状态", "取消关注"); + DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", + gameEntity.getName(), kv); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("type", "关注"); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(GameDetailsActivity.this, + "concern", map); + + concernCode = 2; + concernManager.deleteConcern(gameEntity.getId()); + dialog.dismiss(); + attention.setText("关注"); + attention + .setBackgroundResource(R.drawable.textview_red_style); + attention.setTextColor(0xffffffff); + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + @Override + public int getItemCount() { + int index = 1 ; + if (entity.getTag()!=null && entity.getTag().size()>0){ + index++; + } + if (entity.getNews()!=null && entity.getNews().size()>0){ + index++; + } + if (entity.getGallery()!=null && entity.getGallery().size()>0){ + index++; + } + return index; + } + public class TopViewHolder extends ViewHolder{ + View view; + TextView tv_name,tv_info,tv_concern; + ImageView iv_game; + public TopViewHolder(View itemView) { + super(itemView); + view = itemView; + tv_name = (TextView) view.findViewById(R.id.gamedetails_game_name); + tv_concern = (TextView) view.findViewById(R.id.gamedetails_concern_btn); + tv_info = (TextView) view.findViewById(R.id.gamedetails_top_tv_info); + iv_game = (ImageView) view.findViewById(R.id.gamedetails_game_thumb); + if (isConcern) { + tv_concern.setText("取消关注"); + tv_concern.setBackgroundResource(R.drawable.border_red_bg); + tv_concern.setTextColor(0xffbc2132); + } else { + tv_concern.setText("关注"); + tv_concern.setBackgroundResource(R.drawable.textview_red_style); + tv_concern.setTextColor(0xffffffff); + } + } + } + public class PluginViewHolder extends ViewHolder{ + View view; + LinearLayout llContainer; + public PluginViewHolder(View itemView) { + super(itemView); + view = itemView; + llContainer = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_plugin_ll); + } + } + public class ZiXunViewHolder extends ViewHolder{ + View view; + LinearLayout llContainer; + LinearLayout llMore; + public ZiXunViewHolder(View itemView) { + super(itemView); + view = itemView; + llContainer = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_zixun_ll); + llMore = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_zixun_more); + } + } + public class GameViewHolder extends ViewHolder{ + View view; + RecyclerView gamepic_rv; + TextView game_content; + + public GameViewHolder(View itemView) { + super(itemView); + view = itemView; + gamepic_rv = (RecyclerView) view.findViewById(R.id.gamedetails_rv_item_game_rv); + game_content = (TextView) view.findViewById(R.id.gamedetails_rv_item_game_content); + } + } + + public class ViewHolder extends RecyclerView.ViewHolder{ + public ViewHolder(View itemView) { + super(itemView); + } + } + } + public class GamePicAdapter extends RecyclerView.Adapter{ + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View inflate = LayoutInflater.from(context).inflate(R.layout.gamedetails_screenshot_item, parent, false); + return new ViewHolder(inflate); + } + + @Override + public void onBindViewHolder(ViewHolder holder, final int position) { + holder.gamepic_iv.setImageResource(R.drawable.me_icon); + holder.gamepic_iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ImageUtils.getInstance(context).display(entity.getGallery().get(position),holder.gamepic_iv); + holder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(GameDetailsActivity.this,ViewImageActivity.class); + intent.putExtra("urls",entity.getGallery()); + intent.putExtra("currentItem",position); + startActivity(intent); + } + }); + + } + + @Override + public int getItemCount() { + return 5; + } + + public class ViewHolder extends RecyclerView.ViewHolder { + View view; + ImageView gamepic_iv; + public ViewHolder(View itemView) { + super(itemView); + view = itemView; + gamepic_iv = (ImageView) view.findViewById(R.id.screenshot_item_iv); + gamepic_iv.setPadding((int)(context.getResources().getDisplayMetrics().density*2),0,(int)(context.getResources().getDisplayMetrics().density*2),0); + } + } + } } diff --git a/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java b/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java index d90e9352ac..972337a7ac 100644 --- a/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java @@ -4,8 +4,11 @@ import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; @@ -17,15 +20,20 @@ import java.util.ArrayList; /** * Created by LGT on 2016/8/29. */ -public class GameNewsActivity extends BaseActivity { +public class GameNewsActivity extends BaseActivity implements View.OnClickListener{ + + private static GameNewsAdapter adapter; + private static GameNewsTypeListAdapter typeListAdapter; private RecyclerView game_news_list; - private GameNewsAdapter adapter; - private LinearLayoutManager layoutManager; private RecyclerView game_news_top_type_list; + private LinearLayoutManager layoutManager; + private ImageView ivSearch; private boolean isDestroy; + public static int selectedPosition = 0; //新闻类型选中位置 + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -34,10 +42,23 @@ public class GameNewsActivity extends BaseActivity { View contentView = View.inflate(this, R.layout.activity_game_news, null); + ivSearch = new ImageView(this); + ivSearch.setImageResource(R.drawable.search_icon); + + RelativeLayout.LayoutParams ivSearchParams = new RelativeLayout.LayoutParams( + DisplayUtils.dip2px(this, 20), DisplayUtils.dip2px(this, 20)); + ivSearchParams.addRule( RelativeLayout.CENTER_VERTICAL); + ivSearchParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + ivSearchParams.setMargins(0, 0, DisplayUtils.dip2px(this, 10), 0); + + RelativeLayout reuse_actionbar = (RelativeLayout) contentView.findViewById(R.id.reuse_actionbar); + reuse_actionbar.addView(ivSearch,ivSearchParams); + ivSearch.setOnClickListener(this); + String gameName = getIntent().getStringExtra("gameName"); init(contentView, gameName); - ArrayList typeList = getIntent().getStringArrayListExtra("articleTypes"); + final ArrayList typeList = getIntent().getStringArrayListExtra("articleTypes"); typeList.add(0, "全部"); String gameId = getIntent().getStringExtra("gameId"); @@ -45,17 +66,18 @@ public class GameNewsActivity extends BaseActivity { game_news_list.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); game_news_list.setLayoutManager(layoutManager); - adapter = new GameNewsAdapter(this, typeList, gameId); + adapter = new GameNewsAdapter(this, typeList, gameId, game_news_top_type_list,game_news_list); game_news_list.setAdapter(adapter); game_news_list.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - if (layoutManager.findFirstVisibleItemPosition() >= 1) { game_news_top_type_list.setVisibility(View.VISIBLE); + ivSearch.setVisibility(View.VISIBLE); } else { game_news_top_type_list.setVisibility(View.GONE); + ivSearch.setVisibility(View.GONE); } } @@ -74,15 +96,54 @@ public class GameNewsActivity extends BaseActivity { game_news_top_type_list.setHasFixedSize(true); game_news_top_type_list.setLayoutManager(new GridLayoutManager(this, 5)); - game_news_top_type_list.setAdapter(new GameNewsTypeListAdapter(this, typeList)); + typeListAdapter = new GameNewsTypeListAdapter(this, typeList); + game_news_top_type_list.setAdapter(typeListAdapter); + ViewGroup.LayoutParams params = game_news_top_type_list.getLayoutParams(); - params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(this, 40); + params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(this, 37); game_news_top_type_list.setLayoutParams(params); + //禁止由于滑动出现的阴影 + game_news_top_type_list.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + float Y1 = 0; + float Y2; + switch (event.getAction()){ + case MotionEvent.ACTION_DOWN: + Y1 = event.getY(); + break; + case MotionEvent.ACTION_MOVE: + Y2 = event.getY(); + if (Math.abs(Y1 - Y2)>0){ + return true; + } + break; + } + return false; + } + }); + } + + public static void notifyTypeItem(String type){ + adapter.notifyDataTypeAdapter(type); + typeListAdapter.notifyDataSetChanged(); } @Override protected void onDestroy() { super.onDestroy(); isDestroy = true; + adapter = null; + typeListAdapter = null; + selectedPosition = 0; + } + + @Override + public void onClick(View v) { + if (v == ivSearch){ + game_news_list.scrollToPosition(0); + game_news_top_type_list.setVisibility(View.GONE); + ivSearch.setVisibility(View.GONE); + } } } diff --git a/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java b/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java index 2414931c05..3b2dde7cc8 100644 --- a/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; +import android.os.Message; import android.support.v4.util.ArrayMap; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -30,6 +31,7 @@ import com.android.volley.VolleyError; import com.gh.base.AppController; import com.gh.base.BaseActivity; import com.gh.common.constant.Config; +import com.gh.common.constant.Constants; import com.gh.common.util.ConcernUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; @@ -51,7 +53,6 @@ import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameDetailsEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.eventbus.EBDownloadDelete; import com.gh.gamecenter.eventbus.EBNewsType; import com.gh.gamecenter.eventbus.EBPWDismiss; import com.gh.gamecenter.eventbus.EBPutUrl; @@ -204,8 +205,15 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick break; case R.id.gamedetails_tv_per: String str = tvPer.getText().toString(); - if ("下载中".equals(str)) { - startActivity(new Intent(this, DownloadManagerActivity.class)); + if ("继续".equals(str)) { + statusMap.put(downloadEntry.getUrl(), "downloading"); + tvPer.setText(downloadEntry.getPercent() + "%"); + Message msg = Message.obtain(); + msg.what = Constants.CONTINUE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); } else if ("安装".equals(str)) { final String path = downloadEntry.getPath(); PackageManager manager = new PackageManager( @@ -223,6 +231,17 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick } }, null); } + } else if("等待".equals(str)){ + + } else { + statusMap.put(downloadEntry.getUrl(), "pause"); + tvPer.setText("继续"); + Message msg = Message.obtain(); + msg.what = Constants.PAUSE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); } break; case R.id.reuse_no_connection: @@ -258,11 +277,15 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick progressBar.setProgress((int) (downloadEntry.getPercent() * 10)); switch (downloadEntry.getStatus()) { case downloading: + tvPer.setText(downloadEntry.getPercent() + "%"); + break; case pause: case timeout: case neterror: + tvPer.setText("继续"); + break; case waiting: - tvPer.setText("下载中"); + tvPer.setText("等待"); break; case done: EventBus.getDefault().post( @@ -324,7 +347,6 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick } } } - private void download(View v) { if (gameEntity.getApk().size() == 1) { if (tvDowload.getText().toString() @@ -512,24 +534,6 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick }); AppController.addToRequestQueue(request, NewGameDetailsActivity.class); } - - //接收下载被删除消息 - public void onEvent(EBDownloadDelete delete) { - if (gameEntity != null && gameEntity.getApk().size() == 1) { - String url = gameEntity.getApk().get(0).getUrl(); - if (url.equals(delete.getUrl())) { - tvDowload.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.GONE); - tvPer.setVisibility(View.GONE); - if (TextUtils.isEmpty(entity.getDownloadAddWord())) { - tvDowload.setText("下载《" + gameEntity.getName() + "》"); - } else { - tvDowload.setText("下载《" + gameEntity.getName() + "》" + entity.getDownloadAddWord()); - } - } - } - } - public void onEventMainThread(EBPWDismiss dismiss) { if (dismissEntity != null) { dismissEntity.setShow(false); @@ -732,13 +736,11 @@ public class NewGameDetailsActivity extends BaseActivity implements View.OnClick ziXunViewHolder.llMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (entity.getArticleTypes() != null - && gameEntity.getId() != null - && gameEntity.getName() != null) { - Intent intent = new Intent(context, GameNewsActivity.class); - intent.putExtra("articleTypes", entity.getArticleTypes()); - intent.putExtra("gameName", gameEntity.getName()); - intent.putExtra("gameId", gameId); + if (entity.getArticleTypes()!= null&&gameEntity.getId()!=null&&gameEntity.getName()!= null){ + Intent intent = new Intent(context,GameDeatilsNewsActivity.class); + intent.putExtra("articleTypes",entity.getArticleTypes()); + intent.putExtra("gameName",gameEntity.getName()); + intent.putExtra("gameId",gameId); context.startActivity(intent); } } diff --git a/app/src/main/java/com/gh/gamecenter/NewsActivity.java b/app/src/main/java/com/gh/gamecenter/NewsActivity.java index cac9c67308..98453503ab 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsActivity.java @@ -712,7 +712,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { return; } JsonObjectExtendedRequest gameRequest = new JsonObjectExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" + TimestampUtils.addTimestamp(Config.HOST + "v2d0/game/"//版本号修改了 + game_id + "/news_digest", Constants.GAME_CD), new Response.Listener() { @Override @@ -1022,6 +1022,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { holder.essaydetails_ll_top.setVisibility(View.VISIBLE); holder.cardView.setVisibility(View.VISIBLE); ImageUtils.getInstance(getApplicationContext()).displayFile(gameEntity.getIcon(), holder.essaydetails_icon); + holder.essaydetails_name.setText(gameEntity.getName()); for (int i = 0; i < concernManager.getAllConcern().size(); i++) { if (concernManager.getAllConcern().get(i).getId().equals(gameEntity.getId())){ isConcern = true; diff --git a/app/src/main/java/com/gh/gamecenter/NewsSearchActivity.java b/app/src/main/java/com/gh/gamecenter/NewsSearchActivity.java index b8ace771f2..c2c43e877f 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsSearchActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsSearchActivity.java @@ -1,5 +1,6 @@ package com.gh.gamecenter; +import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.net.Uri; @@ -10,6 +11,7 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; @@ -109,10 +111,22 @@ public class NewsSearchActivity extends BaseActivity { @Override public void onClick(View v) { searchKey = edSearch.getText().toString().trim(); - if (searchKey.length()>=1){ + if (searchKey.length() >= 1){ newsEntities.clear(); - page = 1; - LoadNewsData(page); + searchAdapter.notifyDataSetChanged(); + llLoading.setVisibility(View.VISIBLE); + searchNonews.setVisibility(View.GONE); + cardView.setVisibility(View.GONE); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + handler.postDelayed(new Runnable() { + @Override + public void run() { + page = 1; + LoadNewsData(page); + } + },1000); + }else { Toast.makeText(getApplicationContext(),"请输入关键字",Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java index 7bdc632dc8..d0fe4fc75b 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.adapter; import android.content.Context; +import android.content.Intent; import android.net.Uri; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; @@ -8,6 +9,7 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import com.android.volley.Response; import com.android.volley.VolleyError; @@ -16,6 +18,7 @@ import com.gh.common.constant.Config; import com.gh.common.util.DisplayUtils; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.GameNewsActivity; +import com.gh.gamecenter.NewsSearchActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.CardListViewHolder; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; @@ -39,6 +42,11 @@ import java.util.List; public class GameNewsAdapter extends RecyclerView.Adapter { private Context context; + private RecyclerView game_news_top_type_list; + private RecyclerView game_news_list; + + private GameNewsTypeListAdapter typeListAdapter; + private NewsListAdapter newsListAdapter; private ArrayList newsList; private ArrayList typeList; @@ -52,9 +60,13 @@ public class GameNewsAdapter extends RecyclerView.Adapter { private boolean isRemove; private boolean isNetworkError; - public GameNewsAdapter(Context context, ArrayList tList, String id) { + + public GameNewsAdapter(Context context, ArrayList tList, String id, RecyclerView game_news_top_type_list, RecyclerView game_news_list) { this.context = context; + this.game_news_top_type_list = game_news_top_type_list; + this.game_news_list = game_news_list; + newsList = new ArrayList<>(); typeList = tList; @@ -91,14 +103,24 @@ public class GameNewsAdapter extends RecyclerView.Adapter { Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); List list = gson.fromJson(response.toString(), listType); - + if (offset == 0){ + newsList.clear(); + } if (list != null && list.size() != 0) { newsList.addAll(list); if (offset == 0) { - notifyItemRangeInserted(0, 4); + if (newsListAdapter != null){ + newsListAdapter.notifyDataSetChanged(); + } + game_news_list.scrollToPosition(1); + notifyDataSetChanged(); } else { notifyItemChanged(2); } + if (list.size()<20){ + isRemove = true; + notifyItemChanged(3); + } } isLoading = false; @@ -108,6 +130,7 @@ public class GameNewsAdapter extends RecyclerView.Adapter { @Override public void onErrorResponse(VolleyError error) { isLoading = false; + isNetworkError = true; } }); AppController.addToRequestQueue(request, GameNewsActivity.class); @@ -135,17 +158,18 @@ public class GameNewsAdapter extends RecyclerView.Adapter { } @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { if (holder instanceof GameNewsTypeListViewHolder) { GameNewsTypeListViewHolder viewHolder = (GameNewsTypeListViewHolder) holder; ViewGroup.LayoutParams params = viewHolder.game_news_type_list.getLayoutParams(); - params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(context, 40); + params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(context, 37); viewHolder.game_news_type_list.setLayoutParams(params); if (viewHolder.game_news_type_list.getAdapter() == null) { viewHolder.game_news_type_list.setHasFixedSize(true); viewHolder.game_news_type_list.setLayoutManager(new GridLayoutManager(context, 5)); - viewHolder.game_news_type_list.setAdapter(new GameNewsTypeListAdapter(context, typeList)); + typeListAdapter = new GameNewsTypeListAdapter(context, typeList); + viewHolder.game_news_type_list.setAdapter(typeListAdapter); } } else if (holder instanceof CardListViewHolder) { CardListViewHolder viewHolder = (CardListViewHolder) holder; @@ -154,10 +178,15 @@ public class GameNewsAdapter extends RecyclerView.Adapter { ViewGroup.LayoutParams params = viewHolder.card_list_show.getLayoutParams(); params.height = height; viewHolder.card_list_show.setLayoutParams(params); + //解决悬挂的typeList,由于新闻条目过少造成的BUG + if (newsList.size()<14){ + game_news_top_type_list.setVisibility(View.GONE); + } if (viewHolder.card_list_show.getAdapter() == null) { viewHolder.card_list_show.setHasFixedSize(true); viewHolder.card_list_show.setLayoutManager(new LinearLayoutManager(context)); - viewHolder.card_list_show.setAdapter(new NewsListAdapter(context, newsList, "游戏新闻")); + newsListAdapter = new NewsListAdapter(context, newsList, "游戏新闻"); + viewHolder.card_list_show.setAdapter(newsListAdapter); viewHolder.card_list_show.addItemDecoration(new VerticalItemDecoration(context, 1)); listsize = newsList.size(); } else { @@ -165,6 +194,32 @@ public class GameNewsAdapter extends RecyclerView.Adapter { listsize + 1, newsList.size() - listsize); listsize = newsList.size(); } + }else if (holder instanceof FooterViewHolder){ + FooterViewHolder footerViewHolder = ((FooterViewHolder) holder); + if (isRemove){ + footerViewHolder.footerview_tv_loading.setText("加载完毕"); + footerViewHolder.footerview_progressbar.setVisibility(View.GONE); + }else { + footerViewHolder.footerview_tv_loading.setText("加载中..."); + footerViewHolder.footerview_progressbar.setVisibility(View.VISIBLE); + } + }else if (holder instanceof GameNewsSearchViewHolder){ + GameNewsSearchViewHolder searchViewHolder = ((GameNewsSearchViewHolder) holder); + searchViewHolder.game_news_tv_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String searchKey = ((GameNewsSearchViewHolder) holder).game_news_et_search.getText().toString().trim(); + if (searchKey.length()>=1){ + Intent intent = new Intent(context,NewsSearchActivity.class); + intent.putExtra("gameName","搜索结果"); + intent.putExtra("searchKey",searchKey); + intent.putExtra("gameId",gameId); + context.startActivity(intent); + }else { + Toast.makeText(context,"请输入关键字",Toast.LENGTH_SHORT).show(); + } + } + }); } } @@ -197,4 +252,11 @@ public class GameNewsAdapter extends RecyclerView.Adapter { return isNetworkError; } + public void notifyDataTypeAdapter(String type){ + typeListAdapter.notifyDataSetChanged(); + newsType = type; + isRemove = false; + addList(0); + } + } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java index f49a157141..40fd33fd50 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java @@ -1,11 +1,15 @@ package com.gh.gamecenter.adapter; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.StateListDrawable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.gh.gamecenter.GameNewsActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.GameNewsTypeViewHolder; @@ -26,16 +30,61 @@ public class GameNewsTypeListAdapter extends RecyclerView.Adapter packages; + + public void setColor(String color) { + this.color = color; + } + public String getColor() { + return color; + } + + public void setIcon(String icon) { + this.icon = icon; + } + public String getIcon() { + return icon; + } + + public void setName(String name) { + this.name = name; + } + public String getName() { + return name; + } + + public void setPackage(List packages) { + this.packages = packages; + } + public List getPackage() { + return packages; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.java b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.java index 286158d1ee..cb7bfc83db 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.java @@ -22,6 +22,8 @@ public class GameEntity { private ArrayList apk; + private ArrayList collection; + private String slide; private TestEntity test; @@ -98,6 +100,14 @@ public class GameEntity { this.apk = apk; } + public ArrayList getCollection() { + return collection; + } + + public void setCollection(ArrayList collection) { + this.collection = collection; + } + public String getSlide() { return slide; } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java index 18b20bea8d..c65c9d6804 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -29,13 +29,11 @@ import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.SubjectEntity; import com.gh.gamecenter.eventbus.EBDownloadDelete; -import com.gh.gamecenter.eventbus.EBImage; import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPWDismiss; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBUISwitch; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,9 +60,6 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr private ArrayMap nameMap; private ArrayMap pluginNameMap; private ArrayMap statusMap; - private ArrayMap heightMap; - - private List msgList; private DismissEntity dismissEntity; @@ -138,15 +133,12 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); - locationMap = new ArrayMap<>(); - gameMap = new ArrayMap<>(); - platformMap = new ArrayMap<>(); - nameMap = new ArrayMap<>(); - pluginNameMap = new ArrayMap<>(); - statusMap = new ArrayMap<>(); - heightMap = new ArrayMap<>(); - - msgList = new ArrayList<>(); + locationMap = new ArrayMap(); + gameMap = new ArrayMap>(); + platformMap = new ArrayMap>(); + nameMap = new ArrayMap(); + pluginNameMap = new ArrayMap(); + statusMap = new ArrayMap(); dismissEntity = new DismissEntity(false); @@ -180,21 +172,10 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr recyclerview.setHasFixedSize(true); recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new Game1FragmentAdapter(Game1Fragment.this, locationMap, gameMap, - platformMap, nameMap, pluginNameMap, heightMap, recyclerview, game_swipe_refresh, reuse_no_connection, + platformMap, nameMap, pluginNameMap,recyclerview, game_swipe_refresh, reuse_no_connection, statusMap, dismissEntity, game_pb_loading, false); recyclerview.setAdapter(adapter); - recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - - if (newState == RecyclerView.SCROLL_STATE_IDLE && msgList.size() != 0) { - for (int i = 0; i < msgList.size(); i++) { - adapter.notifyItemChanged(msgList.remove(i)); - } - } - } - }); +// recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); EventBus.getDefault().register(this); } @@ -302,7 +283,7 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr handler.postDelayed(runnable, 1000); } else if (adapter.isNetworkError()) { adapter.setNetworkError(false); - adapter.notifyItemChanged(adapter.getItemCount() - 1); +// adapter.notifyItemChanged(adapter.getItemCount() - 1); adapter.load(); } } @@ -330,31 +311,6 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } } - // 图片大小改变的消息 - public void onEvent(EBImage image) { - heightMap.put(image.getUrl(), image.getHeight()); - - for (int i = 0, size = adapter.getSubjectList().size(); i < size; i++) { - if (!TextUtils.isEmpty(adapter.getSubjectList().get(i).getData().get(0).getImage()) - && adapter.getSubjectList().get(i).getData().get(0).getImage().equals(image.getUrl())) { - if (adapter.getPluginList().isEmpty()) { - if (recyclerview.getScrollState() == RecyclerView.SCROLL_STATE_IDLE){ - adapter.notifyItemChanged(i + 1); - } else { - msgList.add(i + 1); - } - } else { - if (recyclerview.getScrollState() == RecyclerView.SCROLL_STATE_IDLE){ - adapter.notifyItemChanged(i + 2); - } else { - msgList.add(i + 2); - } - } - break; - } - } - } - private GameEntity getEntityByLocation(int position) { List pluginList = adapter.getPluginList(); List subjectList = adapter.getSubjectList(); @@ -420,7 +376,7 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr public void run() { if (!isDestroy) { adapter = new Game1FragmentAdapter(Game1Fragment.this, locationMap, gameMap, - platformMap, nameMap, pluginNameMap, heightMap, recyclerview, game_swipe_refresh, reuse_no_connection, + platformMap, nameMap, pluginNameMap, recyclerview, game_swipe_refresh, reuse_no_connection, statusMap, dismissEntity, game_pb_loading, true); recyclerview.setAdapter(adapter); } 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 5777c50cf6..22a3ff06fe 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -6,7 +6,6 @@ import android.graphics.Color; import android.support.v4.util.ArrayMap; import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -33,18 +32,14 @@ import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.PlatformUtils; import com.gh.common.util.TimestampUtils; -import com.gh.common.util.Utils; import com.gh.common.view.AutoScrollViewPager; -import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DownloadEntry; import com.gh.gamecenter.GameDetailsActivity; -import com.gh.gamecenter.NewGameDetailsActivity; import com.gh.gamecenter.NewsActivity; import com.gh.gamecenter.PluginActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.adapter.ImagePagerAdapter; -import com.gh.gamecenter.adapter.viewholder.CardListViewHolder; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder; import com.gh.gamecenter.adapter.viewholder.GameImageViewHolder; @@ -82,10 +77,12 @@ import java.util.concurrent.LinkedBlockingQueue; public class Game1FragmentAdapter extends RecyclerView.Adapter { private class ITEM_TYPE { - public static final int slide = 1;// 滚动图 - public static final int plugin_list = 2;// 插件化 - public static final int game_list = 3;// 专题 - public static final int footer_view = 4;// 加载布局 + public static final int slide = 0;// 滚动图 + public static final int head = 1;// 专题头部 + public static final int game_normal_type = 2;// 游戏布局1 + public static final int game_test_type = 3;// 游戏布局2 + public static final int image = 4;// 大图布局 + public static final int footer_view = 5;// 加载布局 } private Game1Fragment fragment; @@ -113,24 +110,22 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter nameMap; private ArrayMap pluginNameMap; private ArrayMap statusMap; - private ArrayMap heightMap; private DismissEntity dismissEntity; public Game1FragmentAdapter(Game1Fragment fragment, - ArrayMap lMap, - ArrayMap> gMap, - ArrayMap> pMap, - ArrayMap nMap, - ArrayMap pnMap, - ArrayMap hMap, - RecyclerView rView, - SwipeRefreshLayout refreshLayout, - LinearLayout linearLayout, - ArrayMap sMap, - DismissEntity dEntity, - ProgressBarCircularIndeterminate pbLoading, - boolean isLoad) { + ArrayMap lMap, + ArrayMap> gMap, + ArrayMap> pMap, + ArrayMap nMap, + ArrayMap pnMap, + RecyclerView rView, + SwipeRefreshLayout refreshLayout, + LinearLayout linearLayout, + ArrayMap sMap, + DismissEntity dEntity, + ProgressBarCircularIndeterminate pbLoading, + boolean isLoad) { this.fragment = fragment; this.context = fragment.getActivity(); @@ -144,12 +139,11 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter(); - pluginList = new ArrayList<>(); - subjectList = new ArrayList<>(); + slideList = new ArrayList(); + pluginList = new ArrayList(); + subjectList = new ArrayList(); pluginSize = 0; @@ -168,7 +162,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter() { - @Override - public void onResponse(JSONArray response) { - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - slideList = gson.fromJson(response.toString(), listType); - if (slideList != null && !slideList.isEmpty()) { - notifyItemChanged(0); - } - if (isFirst) { - initSubjectList(); - } + Constants.GAME_CD), new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + slideList = gson.fromJson(response.toString(), listType); + if (slideList != null && !slideList.isEmpty()) { + notifyItemChanged(0); + } + if (isFirst) { + initSubjectList(); + } + } + + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // 无网络连接 + if (error.getClass().equals(NoConnectionError.class) + || error.getClass().equals(TimeoutError.class)) { + isSlideError = true; + if (!isFirst) { + Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); + notifyItemChanged(0); + } else { + showView(); } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - isSlideError = true; - if (!isFirst) { - Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); - notifyItemChanged(0); - } else { - showView(); - } - } - if (isFirst) { - initSubjectList(); - } - } - }); + } + if (isFirst) { + initSubjectList(); + } + } + }); AppController.addToRequestQueue(slideRequest, Game1Fragment.class); } @@ -325,7 +318,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter infos = concernManager.getInstalledGame(); final int size = infos.size(); - final List list = new ArrayList<>(); + final List list = new ArrayList(); count = 0; for (ConcernInfo info : infos) { JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( @@ -341,8 +334,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter 0 && position <= subjectList.size()) { - return ITEM_TYPE.game_list; + if (!pluginList.isEmpty()) { + if (position == 1) { + return ITEM_TYPE.head; } - } else { - if (position > 1 && position <= subjectList.size() + 1) { - return ITEM_TYPE.game_list; + if (position > 1 && position <= 1 + pluginList.size()) { + return ITEM_TYPE.game_normal_type; } } + int offset = 1; + if (!pluginList.isEmpty()) { + offset += 1 + pluginList.size(); + } + GameEntity gameEntity; + for (int i = 0, size = subjectList.size(); i < size; i++) { +// if (position == offset) { +// return ITEM_TYPE.head; +// } + if (position >= offset && position <= subjectList.get(i).getData().size() + offset) { + int index = position -offset-1; + if (index<0){ + index = 0; + } + gameEntity = subjectList.get(i).getData().get(index); + if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())){ + return ITEM_TYPE.image; + }else if (position == offset){ + return ITEM_TYPE.head; + } + if (position == offset+1&&!TextUtils.isEmpty(subjectList.get(i).getData().get(0).getImage())){ + return ITEM_TYPE.head; + } + if (!TextUtils.isEmpty(gameEntity.getImage())) { + return ITEM_TYPE.image; + } + if (gameEntity.getTest() != null) { + return ITEM_TYPE.game_test_type; + } + return ITEM_TYPE.game_normal_type; + } + offset = subjectList.get(i).getData().size() + offset + 1; + } return ITEM_TYPE.footer_view; } @@ -502,14 +525,22 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter offset - && position <= subjectList.get(i).getData().size() + offset) { + if (position > offset && position <= subjectList.get(i).getData().size() + offset) { int index = position -offset-1; - if (index < 0){ + if (index<0){ index = 0; } gameEntity = subjectList.get(i).getData().get(index); @@ -757,20 +737,20 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter=Integer.parseInt(subjectList.get(i).getMore())){ + if (subjectList.get(i).getData().size()>= Integer.parseInt(subjectList.get(i).getMore())){ holder.link.setVisibility(View.GONE); }else { holder.link.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java index 50d42c6108..30f6aedddd 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java @@ -19,7 +19,6 @@ import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; -import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; @@ -153,7 +152,7 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr platformMap, nameMap, recyclerview, game_swipe_refresh, reuse_no_connection, statusMap, dismissEntity, game_pb_loading, false); recyclerview.setAdapter(adapter); - recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); +// recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); EventBus.getDefault().register(this); } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java index 890e20afda..f0498903aa 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java @@ -300,19 +300,19 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter=Integer.parseInt(subjectList.get(i).getMore())){ + if (TextUtils.isEmpty(subjectList.get(i).getData().get(0).getImage())&&position!=0){ + holder.frameTop.setVisibility(View.VISIBLE); + }else { + holder.frameTop.setVisibility(View.GONE); + } + + if (subjectList.get(i).getData().size()>= Integer.parseInt(subjectList.get(i).getMore())){ holder.link.setVisibility(View.GONE); }else { holder.link.setVisibility(View.VISIBLE); @@ -555,12 +556,12 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter { - - private class ITEM_TYPE { - public static final int head = 1;// 专题头部 - public static final int game_normal = 2;// 游戏布局1 - public static final int game_test = 3;// 游戏布局2 - public static final int image = 4;// 大图布局 - } - - private Context context; - - private List data; - - private SubjectEntity subjectEntity; - - private boolean isPlugin; - - public GameListAdapter(Context context, SubjectEntity entity) { - this.context = context; - - subjectEntity = entity; - data = subjectEntity.getData(); - isPlugin = false; - } - - public GameListAdapter(Context context, List list) { - this.context = context; - - data = list; - isPlugin = true; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == ITEM_TYPE.head) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.home_game_head_item, parent, false); - return new GameHeadViewHolder(view); - } else if (viewType == ITEM_TYPE.game_test) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_test_item, parent, false); - return new GameTestViewHolder(view); - } else if (viewType == ITEM_TYPE.image) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.home_game_image_item, parent, false); - return new GameImageViewHolder(view); - } else { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_normal_item, parent, false); - return new GameNormalViewHolder(view); - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof GameHeadViewHolder) { - initGameHeadViewHolder((GameHeadViewHolder) holder); - } else if (holder instanceof GameImageViewHolder) { - initGameImageViewHolder((GameImageViewHolder) holder); - } else if (holder instanceof GameNormalViewHolder){ - initGameNormalViewHolder((GameNormalViewHolder) holder, position); - } else if (holder instanceof GameTestViewHolder) { - initGameTestViewHolder((GameTestViewHolder) holder, position); - } - } - - private void initGameHeadViewHolder(GameHeadViewHolder holder) { - holder.thumb.setVisibility(View.GONE); - holder.title.setText(subjectEntity.getName()); - holder.title.setTextColor(Color.BLACK); - if (data.size() >= Integer.parseInt(subjectEntity.getMore())){ - holder.link.setVisibility(View.GONE); - }else { - holder.link.setVisibility(View.VISIBLE); - } - holder.link.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - Intent intent = new Intent(context, SubjectActivity.class); - intent.putExtra("id", subjectEntity.getId()); - intent.putExtra("name", subjectEntity.getName()); - intent.putExtra("order", subjectEntity.getOrder()); - context.startActivity(intent); - - } - }); - } - - private void initGameImageViewHolder(GameImageViewHolder holder) { - final GameEntity gameEntity = data.get(0); - - holder.image.setTag(gameEntity.getImage()); - ImageUtils.getInstance(context).display(gameEntity.getImage(), holder.image, -1, context);//默认应该设置占位符,防止图片混乱 - holder.image.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", 1); - DataUtils.onEvent(context, "点击", "游戏-插件-" + subjectEntity.getName(), kv); - - if ("game".equals(gameEntity.getType())) { - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("gameId", gameEntity.getLink()); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - context.startActivity(intent); - } else if ("news".equals(gameEntity.getType())) { - Intent intent = new Intent(context, NewsActivity.class); - intent.putExtra("newsId", gameEntity.getLink()); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - context.startActivity(intent); - } else if ("column".equals(gameEntity.getType())) { - Intent intent = new Intent(context, SubjectActivity.class); - intent.putExtra("id", gameEntity.getLink()); - intent.putExtra("name", gameEntity.getName()); - context.startActivity(intent); - } - - } - }); - } - - private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) { - final GameEntity gameEntity = data.get(position - 1); - - final int i; - if (!TextUtils.isEmpty(data.get(0).getImage())) { - i = position - 1; - } else { - i = position; - } - - if (subjectEntity.getOrder()) { - holder.home1_game_order.setVisibility(View.VISIBLE); - holder.home1_game_order.setText(String.valueOf(i)); - } else { - holder.home1_game_order.setVisibility(View.GONE); - } - ImageUtils.getInstance(context).display(gameEntity.getIcon(), holder.gameThumb); - if (gameEntity.getPluginPlatform() != null) { - holder.gameNameAndSize.setText(String.format("%s - %s", gameEntity.getName(), gameEntity.getPluginPlatform())); - } else { - holder.gameNameAndSize.setText(gameEntity.getName()); - } - if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { - holder.gameDes.setText(gameEntity.getBrief()); - } else { - holder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); - } - GameViewUtils.setLabelList(context, holder.labelList, gameEntity.getTag()); - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", i); - DataUtils.onEvent(context, "点击", "游戏-插件-" + gameEntity, kv); - - if (gameEntity.getPluginPlatform() != null) { - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("gameId", gameEntity.getId()); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - context.startActivity(intent); - } else { - AppController.put("GameEntity", gameEntity); - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - } - }); - -// DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, -// holder.download_speed, holder.download_percentage, gameEntity, position, -// GameListAdapter.this, -// statusMap, platformMap, "游戏-插件-" + subjectEntity.getName(), -// dismissEntity, "游戏-插件-" + subjectEntity.getName() + ":" + gameEntity.getName()); - -// DownloadItemUtils.updateItem(context, holder.gameDes, -// holder.game_progressbar, holder.game_ll_info, holder.download_speed, -// holder.download_percentage, holder.downloadBtn, gameEntity, platformMap, -// statusMap, gameEntity.getPluginPlatform() != null); - } - - private void initGameTestViewHolder(GameTestViewHolder holder, int position) { - final GameEntity gameEntity = data.get(position - 1); - - final int i; - if (!TextUtils.isEmpty(data.get(0).getImage())) { - i = position - 1; - } else { - i = position; - } - - if (subjectEntity.getOrder()) { - holder.home2_game_order.setVisibility(View.VISIBLE); - holder.home2_game_order.setText(String.valueOf(i)); - } else { - holder.home2_game_order.setVisibility(View.GONE); - } - ImageUtils.getInstance(context).display(gameEntity.getIcon(), holder.gameThumb); - holder.gameNameAndSize.setText(gameEntity.getName()); - if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { - holder.gameDes.setText(gameEntity.getBrief()); - } else { - holder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); - } - holder.gameTestType.setText(gameEntity.getTest().getType()); - if (gameEntity.getTest().getStart() == 0) { - holder.gameTestTime.setVisibility(View.GONE); - } else { - holder.gameTestTime.setText(GameViewUtils.getGameTestDate(gameEntity.getTest().getStart())); - } - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", i); - DataUtils.onEvent(context, "点击", "游戏-插件-" + subjectEntity.getName(), kv); - - AppController.put("GameEntity", gameEntity); - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - }); - - if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { - holder.downloadBtn.setVisibility(View.GONE); - } else { - if (gameEntity.getTest().getEnd() == 0) { - holder.downloadBtn.setVisibility(View.VISIBLE); -// DownloadItemUtils.setOnClickListener(context, -// holder.downloadBtn, holder.download_speed, -// holder.download_percentage, gameEntity, i, -// GameListAdapter.this, -// statusMap, platformMap, "游戏-插件-" + subjectEntity.getName(), -// dismissEntity, "游戏-插件-" + subjectEntity.getName() + ":" + gameEntity.getName()); - } else { - long endTime = Long.valueOf(gameEntity.getTest().getEnd() - + "000"); - long todayTime = new Date().getTime(); - if (todayTime > endTime) { - // 测试时间已过 - holder.downloadBtn.setVisibility(View.GONE); - } else { - // 测试时间未过 - holder.downloadBtn.setVisibility(View.VISIBLE); -// DownloadItemUtils.setOnClickListener(context, -// holder.downloadBtn, holder.download_speed, -// holder.download_percentage, gameEntity, i, -// GameListAdapter.this, statusMap, platformMap, -// "游戏-插件-" + subjectEntity.getName(), dismissEntity, -// "游戏-插件-" + subjectEntity.getName() + ":" + gameEntity.getName()); - } - } - } - -// DownloadItemUtils.updateItem(context, holder.gameDes, -// holder.game_progressbar, holder.game_ll_info, holder.download_speed, -// holder.download_percentage, holder.downloadBtn, gameEntity, platformMap, -// statusMap); - } - - @Override - public int getItemCount() { - return 1 + data.size(); - } - - @Override - public int getItemViewType(int position) { - - if (position == 0) { - if (!TextUtils.isEmpty(data.get(0).getImage())) { - return ITEM_TYPE.image; - } else { - return ITEM_TYPE.head; - } - } - - if (position == 1) { - if (!TextUtils.isEmpty(data.get(0).getImage())) { - return ITEM_TYPE.head; - } - } - - if (data.get(position - 1).getTest() != null) { - return ITEM_TYPE.game_test; - } - - return ITEM_TYPE.game_normal; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/game/NewGame2Fragment.java b/app/src/main/java/com/gh/gamecenter/game/NewGame2Fragment.java deleted file mode 100644 index 30b9647483..0000000000 --- a/app/src/main/java/com/gh/gamecenter/game/NewGame2Fragment.java +++ /dev/null @@ -1,266 +0,0 @@ -package com.gh.gamecenter.game; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.util.ArrayMap; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.common.constant.Constants; -import com.gh.common.util.DownloadItemUtils; -import com.gh.download.DataWatcher; -import com.gh.download.DownloadEntry; -import com.gh.download.DownloadManager; -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.SubjectEntity; -import com.gh.gamecenter.eventbus.EBDownloadDelete; -import com.gh.gamecenter.eventbus.EBPWDismiss; -import com.gh.gamecenter.eventbus.EBPackage; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.LinkedBlockingQueue; - -import de.greenrobot.event.EventBus; - -/** - * Created by khy on 2016/8/18. - */ -public class NewGame2Fragment extends Fragment { - private View mView; - private RecyclerView mGame2Rv; - private LinearLayoutManager mLayoutManager; - private SwipeRefreshLayout mSwipeRefresh; - private NewGame2FragmentAdapter adapter; - private ProgressBarCircularIndeterminate llLoading; - - //下载用到的map - private ArrayMap locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; - private ArrayMap pluginNameMap; - private ArrayMap statusMap; - - - private DismissEntity dismissEntity; - private boolean isDestroy = false; - private int gamePosition = -1; - - private Handler handler = new Handler() { - @Override - public void handleMessage(Message msg) { - if (!isDestroy) { - if (msg.what == Constants.DOWNLOAD_ROLL) { - String name = (String) msg.obj; - if (platformMap != null) { - LinkedBlockingQueue queue = platformMap.get(name); - if (queue.size() > 1) { - queue.offer(queue.poll()); - Message msg2 = Message.obtain(); - msg2.obj = name; - msg2.what = Constants.DOWNLOAD_ROLL; - sendMessageDelayed(msg2, 3000); - } - } - } - } - } - }; - private GameEntity getEntityByLocation(int position) { - List list = adapter.getSubjectList(); - SubjectEntity subjectEntity; - GameEntity gameEntity; - int offset = 0; - for (int i = 0; i < list.size(); i++) { - offset++; - subjectEntity = list.get(i); - for (int i1 = 0; i1 < subjectEntity.getData().size(); i1++) { - gameEntity = subjectEntity.getData().get(i1); - if (offset == position){ - gamePosition = i; - return gameEntity; - } - offset++; - } - } - return null; - } - - - private DataWatcher dataWatcher = new DataWatcher() { - - @Override - public void onDataChanged( - HashMap downloadingEntries) { - if (!mSwipeRefresh.isRefreshing()) { - for (Map.Entry entry : downloadingEntries.entrySet()) { - DownloadEntry downloadEntry = entry.getValue(); - Integer location = locationMap.get(downloadEntry.getName()); - if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - - if (detailedEntity != null&&gamePosition != -1) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler,adapter , gamePosition, statusMap); - } - } - } - } - } - }; - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - locationMap = new ArrayMap<>(); - gameMap = new ArrayMap<>(); - platformMap = new ArrayMap<>(); - nameMap = new ArrayMap<>(); - pluginNameMap = new ArrayMap<>(); - statusMap = new ArrayMap<>(); - - dismissEntity = new DismissEntity(false); - DownloadItemUtils.initializeGameMap(getActivity(), gameMap); - - mView = View.inflate(getActivity(), R.layout.plugin1_fragment, null); - mGame2Rv = (RecyclerView) mView.findViewById(R.id.game_list); - llLoading = (ProgressBarCircularIndeterminate) mView.findViewById(R.id.game_pb_loading); - mSwipeRefresh = (SwipeRefreshLayout) mView.findViewById(R.id.game_swipe_refresh); - mLayoutManager = new LinearLayoutManager(getActivity()); - mGame2Rv.setLayoutManager(mLayoutManager); - adapter = new NewGame2FragmentAdapter(getActivity(),locationMap,gameMap - ,platformMap,nameMap,pluginNameMap,statusMap,dismissEntity,llLoading,mSwipeRefresh); - mGame2Rv.setHasFixedSize(true); - mGame2Rv.setAdapter(adapter); - - mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - handler.postDelayed(new Runnable() { - @Override - public void run() { - llLoading.setVisibility(View.VISIBLE); - adapter = new NewGame2FragmentAdapter(getActivity(),locationMap,gameMap - ,platformMap,nameMap,pluginNameMap,statusMap,dismissEntity,llLoading,mSwipeRefresh); - mGame2Rv.setAdapter(adapter); - } - },1000); - } - }); - - EventBus.getDefault().register(this); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (container != null){ - container.removeView(mView); - } - return mView; - } - - @Override - public void onResume() { - super.onResume(); - DownloadItemUtils.initializeGameMap(getActivity(), gameMap); - for (SubjectEntity subjectEntity : adapter.getSubjectList()) { - for (GameEntity entity :subjectEntity.getData()) { - entity.setEntryMap(gameMap.get(entity.getName())); - } - } - adapter.notifyDataSetChanged(); - DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); - } - - @Override - public void onPause() { - super.onPause(); - DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); - } - - @Override - public void onDestroy() { - super.onDestroy(); - EventBus.getDefault().unregister(this); - } - - //版本选择框消失事件 - public void onEventMainThread(EBPWDismiss dismiss) { - if (dismissEntity != null) { - dismissEntity.setShow(false); - } - } - - //下载被删除事件 - public void onEventMainThread(EBDownloadDelete busThree) { - LinkedBlockingQueue queue = platformMap.get(busThree.getName()); - if (queue != null) { - queue.remove(busThree.getPlatform()); - platformMap.put(busThree.getName(), queue); - } - Integer location = locationMap.get(busThree.getName()); - if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - if (detailedEntity != null) { - if (TextUtils.isEmpty(busThree.getPlatform())) { - detailedEntity.getEntryMap().remove("官方版"); - } else { - detailedEntity.getEntryMap().remove(busThree.getPlatform()); - } - } - if (gamePosition != -1){ - adapter.notifyItemChanged(gamePosition); - }else { - adapter.notifyDataSetChanged(); - } - - } - } - //安装、卸载事件 - public void onEventMainThread(EBPackage busFour) { - String name = nameMap.get(busFour.getPackageName()); - if (name != null) { - Integer location = locationMap.get(name); - if (location != null) { - if ("安装".equals(busFour.getType())) { - GameEntity detailedEntity = getEntityByLocation(location); - for (ApkEntity apkEntity : detailedEntity.getApk()) { - if (apkEntity.getPackageName().equals( - busFour.getPackageName())) { - detailedEntity.getEntryMap().remove( - apkEntity.getPlatform()); - if (gamePosition != -1){ - adapter.notifyItemChanged(gamePosition); - }else { - adapter.notifyDataSetChanged(); - } - break; - } - } - } else if ("卸载".equals(busFour.getType())) { - if (gamePosition != -1){ - adapter.notifyItemChanged(gamePosition); - }else { - adapter.notifyDataSetChanged(); - } - } - } - } - } -} diff --git a/app/src/main/java/com/gh/gamecenter/game/NewGame2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/NewGame2FragmentAdapter.java deleted file mode 100644 index 0fe13dd220..0000000000 --- a/app/src/main/java/com/gh/gamecenter/game/NewGame2FragmentAdapter.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.gh.gamecenter.game; - -import android.content.Context; -import android.content.Intent; -import android.support.v4.util.ArrayMap; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.android.volley.Response; -import com.android.volley.VolleyError; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.AppController; -import com.gh.common.constant.Config; -import com.gh.common.constant.Constants; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.GameViewUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.TimestampUtils; -import com.gh.common.util.Utils; -import com.gh.download.DownloadEntry; -import com.gh.gamecenter.GameDetailsActivity; -import com.gh.gamecenter.NewGameDetailsActivity; -import com.gh.gamecenter.NewsActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.SubjectActivity; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.DismissEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.entity.SubjectEntity; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import org.json.JSONArray; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * Created by khy on 2016/8/18. - */ -public class NewGame2FragmentAdapter extends RecyclerView.Adapter { - private Context mContext; - private List subjectList; - - private ArrayMap locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; - private ArrayMap statusMap; - - private ProgressBarCircularIndeterminate llLoading; - private SwipeRefreshLayout mSwipeRefresh; - - private DismissEntity dismissEntity; - - public NewGame2FragmentAdapter(Context mContext, ArrayMap locationMap - , ArrayMap> gameMap, ArrayMap> platformMap - , ArrayMap nameMap, ArrayMap pluginNameMap, ArrayMap statusMap - , DismissEntity dismissEntity, ProgressBarCircularIndeterminate llLoading, SwipeRefreshLayout mSwipeRefresh) { - this.mContext = mContext; - this.locationMap = locationMap; - this.gameMap = gameMap; - this.platformMap = platformMap; - this.nameMap = nameMap; - this.statusMap = statusMap; - this.dismissEntity = dismissEntity; - this.mSwipeRefresh = mSwipeRefresh; - this.llLoading = llLoading; - subjectList = new ArrayList<>(); - initSubjectList(); - - } - public void initSubjectList() { - new Thread(new Runnable() { - @Override - public void run() { - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST + "v1d50/game/tuijian", - Constants.GAME_CD), - new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - List list = gson.fromJson(response.toString(), listType); - subjectList.addAll(list); - llLoading.setVisibility(View.GONE); - notifyDataSetChanged(); - initLocationMap(); - if (mSwipeRefresh.isRefreshing()){ - mSwipeRefresh.setRefreshing(false); - } - - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - if (mSwipeRefresh.isRefreshing()){ - mSwipeRefresh.setRefreshing(false); - } - llLoading.setVisibility(View.GONE); - // 无网络连接和访问超时 - } - }); - AppController.addToRequestQueue(request, Game1Fragment.class); - } - }).start(); - - } - - private void initLocationMap() { - locationMap.clear(); - - if (!subjectList.isEmpty()) { - int count = getItemCount(); - int offset = 0; - SubjectEntity subjectEntity; - GameEntity gameEntity; - for (int position = 0; position < count; position++) { - offset++; - subjectEntity = subjectList.get(position); - for (int i = 0; i < subjectEntity.getData().size(); i++) { - gameEntity = subjectEntity.getData().get(i); - if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()){ - locationMap.put(gameEntity.getName(), offset); - for (ApkEntity apkEntity : gameEntity.getApk()) { - nameMap.put(apkEntity.getPackageName(), gameEntity.getName()); - } - } - offset++; - } - - } - } - Utils.log(locationMap.toString()); - } - - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.game_item_rv,parent,false)); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - initItem(subjectList.get(position), ((ViewHolder) holder).item_ll,position); - } - - private void initItem(final SubjectEntity subjectEntity, LinearLayout item_ll, final int position) { - item_ll.removeAllViews(); - GameEntity entity; - List data = subjectEntity.getData(); - int index; - for (int i = 0; i < subjectEntity.getData().size()+1; i++) { - index = i-1; - if (index<0){ - index = 0; - } - entity = data.get(index); - if (i == 0 && entity.getImage() != null){ - ImageView imageView = new ImageView(mContext); - ImageUtils.getInstance(mContext).display(data.get(index).getImage(),imageView,-1,mContext); - item_ll.addView(imageView); - final GameEntity finalEntity1 = entity; - item_ll.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap<>(); - kv.put("名字", finalEntity1.getName()); - kv.put("位置", position + 1); - DataUtils.onEvent(mContext, "点击", "游戏-推荐-" + subjectEntity.getName(), kv); - - if (TextUtils.isEmpty(finalEntity1.getLink())){ - Toast.makeText(mContext, "数据缺失", Toast.LENGTH_SHORT).show(); - return; - } - if ("game".equals(finalEntity1.getType())) { - Intent intent = new Intent(mContext, GameDetailsActivity.class); - intent.putExtra("gameId", finalEntity1.getLink()); - intent.putExtra("entrance", "游戏-推荐-" + subjectEntity.getName()); - mContext.startActivity(intent); - } else if ("news".equals(finalEntity1.getType())) { - Intent intent = new Intent(mContext, NewsActivity.class); - intent.putExtra("newsId", finalEntity1.getLink()); - intent.putExtra("entrance", "游戏-推荐-" + subjectEntity.getName()); - mContext.startActivity(intent); - } else if ("column".equals(finalEntity1.getType())) { - Intent intent = new Intent(mContext, SubjectActivity.class); - intent.putExtra("id", finalEntity1.getLink()); - intent.putExtra("name", finalEntity1.getName()); - mContext.startActivity(intent); - } - - } - }); - } else if (i == 1 &&entity.getImage()!=null || i == 0 && entity.getImage() == null){ - View view = View.inflate(mContext,R.layout.home_game_head_item, null); - TextView tvTitle = (TextView) view.findViewById(R.id.head_title); - LinearLayout llLink = (LinearLayout) view.findViewById(R.id.head_link); - if (subjectEntity.getData().size()>=Integer.parseInt(subjectList.get(i).getMore())){ - llLink.setVisibility(View.GONE); - }else { - llLink.setVisibility(View.VISIBLE); - } - tvTitle.setText(subjectEntity.getName()); - item_ll.addView(view); - llLink.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(mContext, SubjectActivity.class); - intent.putExtra("id", subjectEntity.getId()); - intent.putExtra("name", subjectEntity.getName()); - intent.putExtra("order",subjectEntity.getOrder()); - mContext.startActivity(intent); - } - }); - } else { - View view = View.inflate(mContext,R.layout.home_game_normal_item, null); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); - params.setMargins(DisplayUtils.dip2px(mContext,10),DisplayUtils.dip2px(mContext,10),DisplayUtils.dip2px(mContext,12),DisplayUtils.dip2px(mContext,10)); - view.setLayoutParams(params); - ImageView gameIcon = (ImageView) view.findViewById(R.id.home1_game_thumb); - TextView gameName = (TextView) view.findViewById(R.id.home1_game_nameAndsize); - TextView gameDes = (TextView) view.findViewById(R.id.home1_game_des); - - TextView home1_game_order = (TextView) view.findViewById(R.id.home1_game_order); - TextView downloadBtn = (TextView) view.findViewById(R.id.home1_download_btn); - LinearLayout game_ll_info = (LinearLayout) view.findViewById(R.id.home1_game_ll_info); - ProgressBar game_progressbar = (ProgressBar) view.findViewById(R.id.home1_game_progressbar); - TextView download_speed = (TextView) view.findViewById(R.id.home1_download_speed); - TextView download_percentage = (TextView) view.findViewById(R.id.home1_download_percentage); - - ImageUtils.getInstance(mContext).display(data.get(index).getIcon(),gameIcon); - - item_ll.addView(view); - gameDes.setText(String.format("%s %s", entity.getApk().get(0).getSize(), data.get(index).getBrief())); - gameName.setText(data.get(index).getName()); - LinearLayout labelListTest = (LinearLayout) view.findViewById(R.id.home2_label_list); - LinearLayout labelList = (LinearLayout) view.findViewById(R.id.home1_label_list); - if (entity.getTest() != null) { - labelListTest.setVisibility(View.VISIBLE); - labelList.setVisibility(View.GONE); - TextView tvTestType = (TextView) view.findViewById(R.id.home2_test_type); - TextView tvTestTime = (TextView) view.findViewById(R.id.home2_test_time); - tvTestType.setText(entity.getTest().getType()); - if (entity.getTest().getStart() == 0) { - tvTestTime.setVisibility(View.GONE); - } else { - tvTestTime.setText(GameViewUtils.getGameTestDate(entity.getTest().getStart())); - } - }else { - labelList.setVisibility(View.VISIBLE); - labelListTest.setVisibility(View.GONE); - GameViewUtils.setLabelList(mContext, labelList, entity.getTag()); - } - - - if (subjectEntity.getOrder()) { - home1_game_order.setVisibility(View.VISIBLE); - if (data.get(0).getImage() != null){ - home1_game_order.setText(String.valueOf(i - 1)); - }else { - home1_game_order.setText(String.valueOf(i)); - } - } else { - home1_game_order.setVisibility(View.GONE); - } - - final GameEntity finalEntity = entity; - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Map kv = new HashMap<>(); - kv.put("名字", finalEntity.getName()); - kv.put("位置", position); - DataUtils.onEvent(mContext, "点击", "游戏-插件-" + subjectEntity.getName(), kv); - - if (finalEntity.getPluginPlatform() != null) { - Intent intent = new Intent(mContext, NewGameDetailsActivity.class); - intent.putExtra("gameId", finalEntity.getId()); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - mContext.startActivity(intent); - } else { - AppController.put("GameEntity", finalEntity); - Intent intent = new Intent(mContext, NewGameDetailsActivity.class); - intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - }); - - DownloadItemUtils.setOnClickListener(mContext, downloadBtn, - download_speed, download_percentage, entity, position, - NewGame2FragmentAdapter.this, - statusMap, platformMap, "游戏-推荐-" + subjectEntity.getName(), - dismissEntity, "游戏-推荐-" + subjectEntity.getName() + ":" + entity.getName()); - - DownloadItemUtils.updateItem(mContext, gameDes, - game_progressbar, game_ll_info, download_speed, - download_percentage, downloadBtn, entity, platformMap, - statusMap); - } - } - } - - @Override - public int getItemCount() { - return subjectList.size(); - } - - public class ViewHolder extends RecyclerView.ViewHolder{ - View view; - LinearLayout item_ll; - public ViewHolder(View itemView) { - super(itemView); - view = itemView; - item_ll = (LinearLayout) view.findViewById(R.id.game_item_ll); - - } - } - public List getSubjectList() { - return subjectList; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java deleted file mode 100644 index d6f242c39f..0000000000 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java +++ /dev/null @@ -1,1294 +0,0 @@ -package com.gh.gamecenter.gamedetails; - -import android.content.Intent; -import android.graphics.Color; -import android.os.Bundle; -import android.os.Handler; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.widget.AbsListView.OnScrollListener; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.android.volley.NoConnectionError; -import com.android.volley.Response; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.gh.base.AppController; -import com.gh.common.constant.Config; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.NewsUtils; -import com.gh.common.util.Utils; -import com.gh.common.view.HorizontalItemDecoration; -import com.gh.common.view.MyRecyclerView; -import com.gh.common.view.MyViewPager; -import com.gh.gamecenter.R; -import com.gh.gamecenter.ViewImageActivity; -import com.gh.gamecenter.entity.GameDetailsEntity; -import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.entity.ServerEntity; -import com.gh.gamecenter.entity.TagEntity; -import com.gh.gamecenter.eventbus.EBMoveTop; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBNewsType; -import com.gh.gamecenter.eventbus.EBSlide; -import com.gh.gamecenter.manager.DataCollectionManager; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import de.greenrobot.event.EventBus; - -/** - * 游戏详情 fragment - * - * @author 黄壮华 - * - */ -public class GameDetailsFragment extends Fragment { - - public static class ITEM_TYPE { - public static final int blank_top1 = 1;// 空白顶部1 - public static final int blank_top2 = 2;// 空白顶部2 - public static final int newservice = 3;// 新服布局类型 - public static final int primatte = 4;// 插件介绍布局类型 - public static final int newsstrategy = 5;// 新闻攻略布局类型 - public static final int news_item = 6;// 新闻攻略item布局类型 - public static final int screenshot = 7;// 游戏截图布局类型 - public static final int intro = 8;// 游戏简介布局类型 - public static final int blank_bottom = 9;// 空白底部 - } - - private int count_newservice = 0; - private int count_plugin = 0; - private int count_news = 0; - private int count_gallery = 0; - private int count_intro = 0; - - private int position_news = -1; - - private View view; - private RecyclerView fm_gamedetails_rv_show; - private LinearLayoutManager linearLayoutManager; - private GameDetailsAdapter adapter; - private LinearLayout fm_gamedetails_ll_loading, reuse_no_connection; - private RelativeLayout.LayoutParams rparams; - - private GameDetailsEntity entity; - - private String id; - private String gameName; - private String entrance; - - private int dis = 0; - private int distance; - private int todayPosition = -1; - private int tomorrowPosition = -1; - private int count; - private int topbarVisibility = View.GONE; - - private boolean isDestroy; - - private Handler handler = new Handler(); - - public void setParams(String id, String gameName, String entrance) { - this.id = id; - this.entrance = entrance; - this.gameName = gameName; - } - - Runnable runnable = new Runnable() { - public void run() { - entity = new GameDetailsEntity(); - count = 3; - getServerInfo(); - getGameNews(); - getGameDetail(); - } - }; - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - Utils.log(this.getClass().getSimpleName() + " onSaveInstanceState"); - outState.putString("id", id); - outState.putString("entrance", entrance); - outState.putString("gameName", gameName); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if (savedInstanceState != null) { - id = savedInstanceState.getString("id"); - gameName = savedInstanceState.getString("gameName"); - entrance = savedInstanceState.getString("entrance"); - } - - isDestroy = false; - - view = View.inflate(getActivity(), R.layout.gamedetails, null); - - distance = DisplayUtils.dip2px(getActivity(), 66); - - fm_gamedetails_ll_loading = (LinearLayout) view - .findViewById(R.id.fm_gamedetails_ll_loading); - - reuse_no_connection = (LinearLayout) view - .findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - fm_gamedetails_rv_show.setVisibility(View.GONE); - fm_gamedetails_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - handler.postDelayed(runnable, 1000); - } - }); - - rparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.WRAP_CONTENT); - - linearLayoutManager = new LinearLayoutManager(getActivity()); - linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - adapter = new GameDetailsAdapter(); - fm_gamedetails_rv_show = (RecyclerView) view - .findViewById(R.id.fm_gamedetails_rv_show); - fm_gamedetails_rv_show.setHasFixedSize(true); - fm_gamedetails_rv_show - .setOnScrollListener(new GameDetailsOnScrollListener()); - fm_gamedetails_rv_show.setLayoutManager(linearLayoutManager); - fm_gamedetails_rv_show.setAdapter(adapter); - - EventBus.getDefault().register(this); - - MyRecyclerView.isCanMove = false; - MyViewPager.isCanMove = false; - - handler.postDelayed(runnable, 200); - } - - @Override - @Nullable - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - if (container != null) { - container.removeView(view); - } - return view; - } - - private class GameDetailsOnScrollListener extends RecyclerView.OnScrollListener { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - - super.onScrolled(recyclerView, dx, dy); - - int visibility; - if (linearLayoutManager.findFirstVisibleItemPosition() >= 1) { - visibility = View.VISIBLE; - } else { - visibility = View.GONE; - } - - dis += dy; - - rparams.topMargin -= dy; - - EventBus.getDefault().post(new EBMoveTop("top", visibility, rparams.topMargin)); - } - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - if (newState == OnScrollListener.SCROLL_STATE_IDLE) { - if (dis > distance) { - EventBus.getDefault().post(new EBSlide(distance, 1, false)); - EventBus.getDefault().post(new EBSlide(distance, 2, false)); - } else if (dis < -distance) { - EventBus.getDefault().post(new EBSlide(0, 1, false)); - EventBus.getDefault().post(new EBSlide(0, 2, false)); - } else { - EventBus.getDefault().post(new EBSlide(dis, 1, false)); - EventBus.getDefault().post(new EBSlide(dis, 2, false)); - } - } - } - } - - public void onEventMainThread(EBSlide busOne) { - if (busOne.getPosition() == 0) { - Utils.log("details:" + busOne.getDistance()); - if (busOne.isReset()) { - fm_gamedetails_rv_show.scrollBy(0, distance - dis); - } else { - if (busOne.getDistance() == 0) { - fm_gamedetails_rv_show.scrollToPosition(0); - rparams.topMargin = 0; - dis = 0; - } else { - fm_gamedetails_rv_show.scrollBy(0, busOne.getDistance() - - dis); - } - } - } - } - - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected() - && reuse_no_connection.getVisibility() == View.VISIBLE) { - fm_gamedetails_rv_show.setVisibility(View.GONE); - fm_gamedetails_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - handler.postDelayed(runnable, 1000); - } - } - - public void onEventMainThread(EBMoveTop moveTop) { - if (moveTop.getType().equals("top")) { - topbarVisibility = moveTop.getVisibility(); - } - } - - private void getServerInfo() { - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - Config.HOST + "v2/game/" + id + "/serverInfo", - new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - if (!isDestroy) { - try { - ArrayList serverInfo = new ArrayList(); - SimpleDateFormat format = new SimpleDateFormat( - "Mdd", Locale.getDefault()); - int today = Integer.valueOf(format - .format(new Date())); - for (int j = 0, sizej = response.length(); j < sizej; j++) { - ServerEntity entity = new ServerEntity(); - JSONObject jsonObject2; - jsonObject2 = response.getJSONObject(j); - String server = jsonObject2 - .getString("server"); - if (server.length() > 4) { - server = server.substring(0, 4); - } - entity.setServer(server); - entity.setTime(Long.valueOf(jsonObject2 - .getString("time") + "000")); - int day = Integer.valueOf(format - .format(new Date(entity.getTime()))); - if (day == today + 1) { - entity.setTag("明天"); - serverInfo.add(entity); - } else if (day == today - 1) { - entity.setTag("昨天"); - serverInfo.add(entity); - } else if (day == today) { - entity.setTag("今天"); - serverInfo.add(entity); - } - } - - Comparator comparator = new Comparator() { - @Override - public int compare(ServerEntity lhs, - ServerEntity rhs) { - - return (int) (lhs.getTime() - rhs - .getTime()); - } - }; - - Collections.sort(serverInfo, comparator); - - for (int j = 0, sizej = serverInfo.size(); j < sizej; j++) { - if ("今天".equals(serverInfo.get(j).getTag()) - && todayPosition == -1) { - todayPosition = j; - } else if ("明天".equals(serverInfo.get(j) - .getTag()) - && tomorrowPosition == -1) { - tomorrowPosition = j; - } - } - entity.setServerInfo(serverInfo); - refresh(); - } catch (JSONException e) { - - e.printStackTrace(); - } - } - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - fm_gamedetails_rv_show.setVisibility(View.GONE); - fm_gamedetails_ll_loading - .setVisibility(View.GONE); - reuse_no_connection.setVisibility(View.VISIBLE); - } - } - } - }); - AppController.addToRequestQueue(request, GameDetailsFragment.class); - } - - private void getGameNews() { - String url = Config.HOST + "v1d45/game/" + id + "/news?limit=3"; - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, - new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - Utils.log(response.toString()); - if (!isDestroy) { - Gson gson = new Gson(); - ArrayList news = gson.fromJson( - response.toString(), - new TypeToken>() { - }.getType()); - entity.setNews(news); - refresh(); - } - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - fm_gamedetails_rv_show.setVisibility(View.GONE); - fm_gamedetails_ll_loading - .setVisibility(View.GONE); - reuse_no_connection.setVisibility(View.VISIBLE); - } - } - } - }); - AppController.addToRequestQueue(request, GameDetailsFragment.class); - } - - private void getGameDetail() { - String url = Config.HOST + "v1d45/game/" + id + "/detail"; - JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, - new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - - Utils.log(response.toString()); - if (!isDestroy) { - Gson gson = new Gson(); - GameDetailsEntity gameDetailsEntity = gson - .fromJson(response.toString(), - GameDetailsEntity.class); - if (entity.getNews() != null) { - gameDetailsEntity.setNews(entity.getNews()); - } - entity = gameDetailsEntity; - HashMap> map = new HashMap>(); - if (!response.isNull("news_type")) { - try { - JSONArray newsType = response - .getJSONArray("news_type"); - for (int i = 0, size = newsType.length(); i < size; i++) { - JSONObject jsonObject = newsType - .getJSONObject(i); - JSONArray subType = jsonObject - .getJSONArray("sub_type"); - ArrayList list = new ArrayList(); - for (int j = 0; j < subType.length(); j++) { - list.add(subType.getString(j)); - } - map.put(jsonObject.getString("type"), - list); - } - } catch (JSONException e) { - - e.printStackTrace(); - } - } - for (String type : map.keySet()) { - EventBus.getDefault().post( - new EBNewsType(type, map.get(type))); - } - refresh(); - } - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - fm_gamedetails_rv_show.setVisibility(View.GONE); - fm_gamedetails_ll_loading - .setVisibility(View.GONE); - reuse_no_connection.setVisibility(View.VISIBLE); - } - } - } - }); - AppController.addToRequestQueue(request, GameDetailsFragment.class); - } - - private void refresh() { - if (count == 1) { - fm_gamedetails_rv_show.setVisibility(View.VISIBLE); - fm_gamedetails_ll_loading.setVisibility(View.GONE); - adapter.notifyDataSetChanged(); - } else { - count--; - } - } - - private class GameDetailsViewHolder extends RecyclerView.ViewHolder - implements OnClickListener { - - private RecyclerView fm_gamedetails_newservice_show; - private ImageView fm_gamedetails_newservice_left, - fm_gamedetails_newservice_right; - - private LinearLayout fm_gamedetails_ll_primatte_details, - fm_gamedetails_ll_primatte_warmprompt, - fm_gamedetails_ll_primatte_details_show; - private TextView fm_gamedetails_primatte_content, - fm_gamedetails_tv_primatte_details; - private RecyclerView recyclerView; - private ImageView fm_gamedetails_iv_primatte_details; - - private LinearLayout fm_gamedetails_newsstrategy_more; - - private TextView news_type, news_title; - private View news_item; - - private RecyclerView fm_gamedetails_screenshot_show; - - private TextView fm_gamedetails_intro_content; - - private int type; - - public GameDetailsViewHolder(View convertView) { - super(convertView); - - type = (Integer) convertView.getTag(); - if (type == ITEM_TYPE.newservice) { - fm_gamedetails_newservice_left = (ImageView) convertView - .findViewById(R.id.fm_gamedetails_newservice_left); - fm_gamedetails_newservice_right = (ImageView) convertView - .findViewById(R.id.fm_gamedetails_newservice_right); - fm_gamedetails_newservice_show = (RecyclerView) convertView - .findViewById(R.id.fm_gamedetails_newservice_show); - fm_gamedetails_newservice_show.setHasFixedSize(true); - final LinearLayoutManager newServiceManager = new LinearLayoutManager( - getActivity()); - newServiceManager - .setOrientation(LinearLayoutManager.HORIZONTAL); - fm_gamedetails_newservice_show - .setLayoutManager(newServiceManager); - GameNewServiceAdapter gameNewServiceAdapter = new GameNewServiceAdapter(); - fm_gamedetails_newservice_show - .setAdapter(gameNewServiceAdapter); - fm_gamedetails_newservice_show - .setOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrolled(RecyclerView recyclerView, - int dx, int dy) { - - super.onScrolled(recyclerView, dx, dy); - if (newServiceManager - .findFirstVisibleItemPosition() == 0 - && newServiceManager - .findViewByPosition(0) - .getLeft() == 0) { - fm_gamedetails_newservice_left - .setVisibility(View.INVISIBLE); - fm_gamedetails_newservice_right - .setVisibility(View.VISIBLE); - } else if (newServiceManager - .findLastVisibleItemPosition() == fm_gamedetails_newservice_show - .getAdapter().getItemCount() - 1 - && newServiceManager - .findViewByPosition( - fm_gamedetails_newservice_show - .getAdapter() - .getItemCount() - 1) - .getRight() == fm_gamedetails_newservice_show - .getWidth()) { - fm_gamedetails_newservice_left - .setVisibility(View.VISIBLE); - fm_gamedetails_newservice_right - .setVisibility(View.INVISIBLE); - } else { - fm_gamedetails_newservice_left - .setVisibility(View.VISIBLE); - fm_gamedetails_newservice_right - .setVisibility(View.VISIBLE); - } - } - - }); - } else if (type == ITEM_TYPE.primatte) { - fm_gamedetails_ll_primatte_details = (LinearLayout) convertView - .findViewById(R.id.fm_gamedetails_ll_primatte_details); - fm_gamedetails_ll_primatte_warmprompt = (LinearLayout) convertView - .findViewById(R.id.fm_gamedetails_ll_primatte_warmprompt); - fm_gamedetails_primatte_content = (TextView) convertView - .findViewById(R.id.fm_gamedetails_primatte_content); - fm_gamedetails_tv_primatte_details = (TextView) convertView - .findViewById(R.id.fm_gamedetails_tv_primatte_details); - fm_gamedetails_ll_primatte_details_show = (LinearLayout) convertView - .findViewById(R.id.fm_gamedetails_ll_primatte_details_show); - fm_gamedetails_ll_primatte_details_show - .setOnClickListener(this); - fm_gamedetails_iv_primatte_details = (ImageView) convertView - .findViewById(R.id.fm_gamedetails_iv_primatte_details); - } else if (type == ITEM_TYPE.newsstrategy) { - fm_gamedetails_newsstrategy_more = (LinearLayout) convertView - .findViewById(R.id.fm_gamedetails_newsstrategy_more); - fm_gamedetails_newsstrategy_more.setOnClickListener(this); - } else if (type == ITEM_TYPE.news_item) { - news_item = convertView; - news_type = (TextView) convertView.findViewById(R.id.news_type); - news_title = (TextView) convertView - .findViewById(R.id.news_title); - } else if (type == ITEM_TYPE.screenshot) { - fm_gamedetails_screenshot_show = (RecyclerView) convertView - .findViewById(R.id.fm_gamedetails_screenshot_show); - fm_gamedetails_screenshot_show.setHasFixedSize(true); - final LinearLayoutManager screenshotManager = new LinearLayoutManager( - getActivity()); - screenshotManager - .setOrientation(LinearLayoutManager.HORIZONTAL); - fm_gamedetails_screenshot_show - .setLayoutManager(screenshotManager); - GameScreenshotAdapter gameScreenshotAdapter = new GameScreenshotAdapter(); - fm_gamedetails_screenshot_show - .setAdapter(gameScreenshotAdapter); - fm_gamedetails_screenshot_show - .addItemDecoration(new HorizontalItemDecoration( - getActivity(), 6, entity.getGallery().size())); - fm_gamedetails_screenshot_show - .setOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, - int dx, int dy) { - - super.onScrolled(recyclerView, dx, dy); - if (screenshotManager - .findLastVisibleItemPosition() == recyclerView - .getAdapter().getItemCount() - 1) { - if (screenshotManager.findViewByPosition( - recyclerView.getAdapter() - .getItemCount() - 1) - .getRight() == fm_gamedetails_screenshot_show - .getWidth()) { - MyRecyclerView.isCanMove = true; - } - } - } - }); - } else if (type == ITEM_TYPE.intro) { - fm_gamedetails_intro_content = (TextView) convertView - .findViewById(R.id.fm_gamedetails_intro_content); - } - } - - @Override - public void onClick(View v) { - final int id = v.getId(); - if (id == R.id.fm_gamedetails_newsstrategy_more) { - Map kv = new HashMap(); - kv.put("点击", "新闻攻略-更多>"); - DataUtils.onEvent(getActivity(), "插件数据", gameName, kv); - - Map map = new HashMap(); - map.put("location", "新闻攻略-更多"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - EventBus.getDefault().post(new EBMoveTop("topbar", 0, 0)); - } else if (id == R.id.fm_gamedetails_ll_primatte_details_show) { - int plugin_position = 0; - if (count_newservice == 0) { - plugin_position = 2; - } else { - plugin_position = 3; - } - if ("收回".equals(fm_gamedetails_tv_primatte_details.getText().toString())) { - - Map kv0 = new HashMap(); - kv0.put("点击", "插件介绍-收回^"); - DataUtils.onEvent(getActivity(), "插件数据", gameName, kv0); - - Map map = new HashMap(); - map.put("location", "插件介绍-收回"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - fm_gamedetails_tv_primatte_details.setText("详情"); - fm_gamedetails_iv_primatte_details.setImageResource(R.drawable.down); - adapter.notifyItemChanged(plugin_position); - } else { - Map kv0 = new HashMap(); - kv0.put("点击", "插件介绍-详情v"); - DataUtils.onEvent(getActivity(), "插件数据", gameName, kv0); - - Map map = new HashMap(); - map.put("location", "插件介绍-详情"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", - map); - - fm_gamedetails_tv_primatte_details.setText("收回"); - fm_gamedetails_iv_primatte_details.setImageResource(R.drawable.up); - adapter.notifyItemChanged(plugin_position); - } - } - } - - } - - private class GameDetailsAdapter extends RecyclerView.Adapter { - - @Override - public int getItemCount() { - - int count = 3; - if (entity.getServerInfo() != null - && !entity.getServerInfo().isEmpty()) { - count++; - count_newservice = 1; - } - if ((entity.getTag() != null && !entity.getTag().isEmpty()) - || !TextUtils.isEmpty(entity.getRemind())) { - count++; - count_plugin = 1; - } - if (entity.getNews() != null && !entity.getNews().isEmpty()) { - count += (entity.getNews().size() + 1); - count_news = 1; - } - if (entity.getGallery() != null && !entity.getGallery().isEmpty()) { - count++; - count_gallery = 1; - } - if (!TextUtils.isEmpty(entity.getDes())) { - count++; - count_intro = 1; - } - return count; - } - - @Override - public void onBindViewHolder(GameDetailsViewHolder viewHolder, - int position) { - - if (viewHolder.type == ITEM_TYPE.newservice) { - if (!(todayPosition == 0 || todayPosition == 1 || todayPosition == -1)) { - if (entity.getServerInfo().size() >= todayPosition + 2) { - viewHolder.fm_gamedetails_newservice_show - .scrollToPosition(todayPosition - 1); - } else { - viewHolder.fm_gamedetails_newservice_show - .scrollToPosition(todayPosition); - } - } else if (todayPosition == -1 - && !(tomorrowPosition == 0 || tomorrowPosition == 1 || tomorrowPosition == -1)) { - if (entity.getServerInfo().size() >= todayPosition + 2) { - viewHolder.fm_gamedetails_newservice_show - .scrollToPosition(tomorrowPosition - 1); - } else { - viewHolder.fm_gamedetails_newservice_show - .scrollToPosition(tomorrowPosition); - } - } else if (todayPosition == -1 && tomorrowPosition == -1) { - viewHolder.fm_gamedetails_newservice_show - .scrollToPosition(entity.getServerInfo().size() - 1); - viewHolder.fm_gamedetails_newservice_right - .setVisibility(View.GONE); - } else { - viewHolder.fm_gamedetails_newservice_left - .setVisibility(View.GONE); - } - if (todayPosition == entity.getServerInfo().size() - 1 - || todayPosition == entity.getServerInfo().size() - 2) { - viewHolder.fm_gamedetails_newservice_right - .setVisibility(View.GONE); - } - if (todayPosition == -1 - && (tomorrowPosition == entity.getServerInfo().size() - 1 || tomorrowPosition == entity - .getServerInfo().size() - 2)) { - viewHolder.fm_gamedetails_newservice_right - .setVisibility(View.GONE); - } - if (entity.getServerInfo().size() <= 3) { - viewHolder.fm_gamedetails_newservice_left - .setVisibility(View.GONE); - viewHolder.fm_gamedetails_newservice_right - .setVisibility(View.GONE); - } - } else if (viewHolder.type == ITEM_TYPE.primatte) { - if (!TextUtils.isEmpty(entity.getRemind())) { - viewHolder.fm_gamedetails_ll_primatte_warmprompt - .setVisibility(View.VISIBLE); - viewHolder.fm_gamedetails_primatte_content - .setVisibility(View.VISIBLE); - viewHolder.fm_gamedetails_primatte_content.setText(entity - .getRemind()); - } else { - viewHolder.fm_gamedetails_ll_primatte_warmprompt - .setVisibility(View.GONE); - viewHolder.fm_gamedetails_primatte_content - .setVisibility(View.GONE); - } - if (entity.getTag() == null || entity.getTag().isEmpty()) { - viewHolder.fm_gamedetails_ll_primatte_details_show.setVisibility(View.GONE); - } else { - viewHolder.fm_gamedetails_ll_primatte_details.removeAllViews(); - if (entity.getTag().size() >= 3) { - viewHolder.fm_gamedetails_ll_primatte_details_show.setVisibility(View.VISIBLE); - if ("详情".equals(viewHolder.fm_gamedetails_tv_primatte_details.getText().toString())) { - TagEntity tagEntity = entity.getTag().get(0); - View child = View.inflate(getActivity(), - R.layout.primatte_details_item, null); - ImageView primatte_item_icon = (ImageView) child - .findViewById(R.id.primatte_item_icon); - final TextView primatte_item_title = (TextView) child - .findViewById(R.id.primatte_item_title); - TextView primatte_item_intro = (TextView) child - .findViewById(R.id.primatte_item_intro); - ImageUtils.getInstance(getActivity()).display( - tagEntity.getIcon(), primatte_item_icon, - R.drawable.primatte_default_icon); - primatte_item_title.setText(tagEntity.getName()); - primatte_item_intro.setText(tagEntity.getDes()); - viewHolder.fm_gamedetails_ll_primatte_details - .addView(child); - - if (viewHolder.recyclerView == null) { - RecyclerView recyclerView = new RecyclerView( - getActivity()); - recyclerView.setHasFixedSize(true); - recyclerView - .setLayoutManager(new GridLayoutManager( - getActivity(), 3)); - recyclerView.setAdapter(new PrimatteAdapter( - entity.getTag())); - int height = (int) Math.ceil((entity.getTag() - .size() - 1) / 3d) - * DisplayUtils - .dip2px(getActivity(), 21); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - LayoutParams.MATCH_PARENT, height); - recyclerView.setLayoutParams(lparams); - viewHolder.recyclerView = recyclerView; - } - viewHolder.fm_gamedetails_ll_primatte_details - .addView(viewHolder.recyclerView); - return; - } - } else { - viewHolder.fm_gamedetails_ll_primatte_details_show.setVisibility(View.GONE); - } - for (int i = 0, size = entity.getTag().size(); i < size; i++) { - TagEntity tagEntity = entity.getTag().get(i); - View child = View.inflate(getActivity(), - R.layout.primatte_details_item, null); - ImageView primatte_item_icon = (ImageView) child - .findViewById(R.id.primatte_item_icon); - TextView primatte_item_title = (TextView) child - .findViewById(R.id.primatte_item_title); - TextView primatte_item_intro = (TextView) child - .findViewById(R.id.primatte_item_intro); - ImageUtils.getInstance(getActivity()).display( - tagEntity.getIcon(), primatte_item_icon, - R.drawable.primatte_default_icon); - primatte_item_title.setText(tagEntity.getName()); - primatte_item_intro.setText(tagEntity.getDes()); - viewHolder.fm_gamedetails_ll_primatte_details - .addView(child); - } - } - } else if (viewHolder.type == ITEM_TYPE.news_item) { - final NewsEntity newsEntity = entity.getNews().get( - position - position_news - 1); - viewHolder.news_type.setBackgroundResource(NewsUtils - .getDrawableIdByType(newsEntity.getType())); - viewHolder.news_type.setText(newsEntity.getType()); - viewHolder.news_title.setText(newsEntity.getTitle()); - viewHolder.news_item.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Map kv = new HashMap(); - kv.put("点击", "新闻攻略"); - DataUtils.onEvent(getActivity(), "插件数据", gameName, kv); - - //统计阅读量 - NewsUtils.statNewsViews(newsEntity.getId()); - NewsUtils.startNewsActivity(getActivity(), newsEntity, - entrance + "-游戏详情-详情"); - } - }); - } else if (viewHolder.type == ITEM_TYPE.intro) { - viewHolder.fm_gamedetails_intro_content - .setText(entity.getDes()); - } - } - - @Override - public GameDetailsViewHolder onCreateViewHolder(ViewGroup viewGroup, - int type) { - View view; - if (type == ITEM_TYPE.blank_top1) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 66)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (type == ITEM_TYPE.blank_top2) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 29)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (type == ITEM_TYPE.newservice) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_newservice, viewGroup, false); - } else if (type == ITEM_TYPE.primatte) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_primatte, viewGroup, false); - if (count_newservice == 1) { - view.findViewById(R.id.fm_gamedetails_primatte_cutting_line) - .setVisibility(View.VISIBLE); - } - } else if (type == ITEM_TYPE.newsstrategy) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_newsstrategy, viewGroup, - false); - } else if (type == ITEM_TYPE.news_item) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_news_item, viewGroup, false); - } else if (type == ITEM_TYPE.screenshot) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_screenshot, viewGroup, false); - if (count_news == 1) { - view.findViewById( - R.id.fm_gamedetails_screenshot_cutting_line) - .setVisibility(View.VISIBLE); - } - } else if (type == ITEM_TYPE.intro) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_intro, viewGroup, false); - } else { - int normalHeight = DisplayUtils.dip2px(getActivity(), 44); - - if (!Config.isShow) { - normalHeight = 0; - } - - if (topbarVisibility != View.VISIBLE) { - int height = 0; - for (int i = 0, size = fm_gamedetails_rv_show - .getChildCount(); i < size; i++) { - height += fm_gamedetails_rv_show.getChildAt(i) - .getMeasuredHeight(); - } - - int totalHeight = fm_gamedetails_rv_show.getHeight() - + DisplayUtils.dip2px(getActivity(), 66); - - int bottom = totalHeight - height; - - if (bottom > normalHeight) { - int count = 0; - if (count_newservice != 0) { - count++; - } - if (count_plugin != 0) { - count++; - } - if (count_news != 0) { - count++; - } - if (count_gallery != 0) { - count++; - } - normalHeight = bottom - count - * DisplayUtils.dip2px(getActivity(), 4); - } - } - - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - relativeLayout.setBackgroundColor(Color.WHITE); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, normalHeight); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } - view.setTag(type); - return new GameDetailsViewHolder(view); - } - - @Override - public int getItemViewType(int position) { - if (position == 0) { - return ITEM_TYPE.blank_top1; - } - if (position == 1) { - return ITEM_TYPE.blank_top2; - } - if (count_newservice != 0 && position == 2) { - return ITEM_TYPE.newservice; - } - if (count_plugin != 0) { - if ((count_newservice != 0 && position == 3) - || (count_newservice == 0 && position == 2)) { - return ITEM_TYPE.primatte; - } - } - if (count_news != 0) { - if ((count_newservice != 0 && count_plugin != 0 && position == 4) - || (count_newservice == 0 && count_plugin != 0 && position == 3) - || (count_newservice != 0 && count_plugin == 0 && position == 3) - || (count_newservice == 0 && count_plugin == 0 && position == 2)) { - position_news = position; - return ITEM_TYPE.newsstrategy; - } - } - if (position_news != -1 && position > position_news - && position <= position_news + entity.getNews().size()) { - return ITEM_TYPE.news_item; - } - if (count_gallery != 0) { - if ((count_newservice != 0 && count_plugin != 0 - && count_news != 0 && position == 5 + entity.getNews() - .size()) - || (count_newservice != 0 && count_plugin != 0 - && count_news == 0 && position == 4) - || (count_newservice != 0 && count_plugin == 0 - && count_news != 0 && position == 4 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin != 0 - && count_news != 0 && position == 4 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin == 0 - && count_news != 0 && position == 3 + entity - .getNews().size()) - || (count_newservice != 0 && count_plugin == 0 - && count_news == 0 && position == 3) - || (count_newservice == 0 && count_plugin != 0 - && count_news == 0 && position == 3) - || (count_newservice == 0 && count_plugin == 0 - && count_news == 0 && position == 2)) { - return ITEM_TYPE.screenshot; - } - } - if (count_intro != 0) { - if ((count_newservice != 0 && count_plugin != 0 - && count_news != 0 && count_gallery != 0 && position == 6 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin != 0 - && count_news != 0 && count_gallery != 0 && position == 5 + entity - .getNews().size()) - || (count_newservice != 0 && count_plugin == 0 - && count_news != 0 && count_gallery != 0 && position == 5 + entity - .getNews().size()) - || (count_newservice != 0 && count_plugin != 0 - && count_news == 0 && count_gallery != 0 && position == 5) - || (count_newservice != 0 && count_plugin != 0 - && count_news != 0 && count_gallery == 0 && position == 5 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin == 0 - && count_news != 0 && count_gallery != 0 && position == 4 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin != 0 - && count_news == 0 && count_gallery != 0 && position == 4) - || (count_newservice == 0 && count_plugin != 0 - && count_news != 0 && count_gallery == 0 && position == 4 + entity - .getNews().size()) - || (count_newservice != 0 && count_plugin == 0 - && count_news == 0 && count_gallery != 0 && position == 4) - || (count_newservice != 0 && count_plugin == 0 - && count_news != 0 && count_gallery == 0 && position == 4 + entity - .getNews().size()) - || (count_newservice != 0 && count_plugin != 0 - && count_news == 0 && count_gallery == 0 && position == 4) - || (count_newservice == 0 && count_plugin == 0 - && count_news == 0 && count_gallery != 0 && position == 3) - || (count_newservice == 0 && count_plugin == 0 - && count_news != 0 && count_gallery == 0 && position == 3 + entity - .getNews().size()) - || (count_newservice == 0 && count_plugin != 0 - && count_news == 0 && count_gallery == 0 && position == 3) - || (count_newservice != 0 && count_plugin == 0 - && count_news == 0 && count_gallery == 0 && position == 3) - || (count_newservice == 0 && count_plugin == 0 - && count_news == 0 && count_gallery == 0 && position == 2)) { - return ITEM_TYPE.intro; - } - } - return ITEM_TYPE.blank_bottom; - } - } - - private class PrimatteViewHolder extends RecyclerView.ViewHolder { - - private ImageView primatte_item_icon; - private TextView primatte_item_title; - - public PrimatteViewHolder(View view) { - super(view); - primatte_item_icon = (ImageView) view - .findViewById(R.id.primatte_item_icon); - primatte_item_title = (TextView) view - .findViewById(R.id.primatte_item_title); - view.findViewById(R.id.primatte_item_intro) - .setVisibility(View.GONE); - } - - } - - private class PrimatteAdapter extends - RecyclerView.Adapter { - - private List tags; - - public PrimatteAdapter(List tags) { - this.tags = tags; - } - - @Override - public int getItemCount() { - - return tags.size() - 1; - } - - @Override - public void onBindViewHolder(PrimatteViewHolder viewHodler, int position) { - - TagEntity tagEntity = tags.get(position + 1); - ImageUtils.getInstance(getActivity()).display(tagEntity.getIcon(), - viewHodler.primatte_item_icon, - R.drawable.primatte_default_icon); - viewHodler.primatte_item_title.setText(tagEntity.getName()); - } - - @Override - public PrimatteViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { - - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.primatte_details_item, viewGroup, false); - return new PrimatteViewHolder(view); - } - - } - - private class GameNewServiceViewHolder extends RecyclerView.ViewHolder { - - private TextView newservice_item_name, newservice_item_time; - private ImageView newservice_item_point; - - public GameNewServiceViewHolder(View convertView) { - super(convertView); - - newservice_item_name = (TextView) convertView - .findViewById(R.id.newservice_item_name); - newservice_item_time = (TextView) convertView - .findViewById(R.id.newservice_item_time); - newservice_item_point = (ImageView) convertView - .findViewById(R.id.newservice_item_point); - } - - } - - private class GameNewServiceAdapter extends - RecyclerView.Adapter { - - @Override - public int getItemCount() { - return entity.getServerInfo().size(); - } - - @Override - public void onBindViewHolder(GameNewServiceViewHolder viewHolder, - int position) { - - ServerEntity serverEntity = entity.getServerInfo().get(position); - viewHolder.newservice_item_name.setText(serverEntity.getServer()); - String tag = serverEntity.getTag(); - if ("昨天".equals(tag)) { - viewHolder.newservice_item_name - .setBackgroundResource(R.drawable.newserver_gray); - viewHolder.newservice_item_point - .setBackgroundResource(R.drawable.oval_gray_bg); - } else if ("今天".equals(tag)) { - viewHolder.newservice_item_name - .setBackgroundResource(R.drawable.newserver_red); - viewHolder.newservice_item_point - .setBackgroundResource(R.drawable.oval_scarlet_bg); - } else { - viewHolder.newservice_item_name - .setBackgroundResource(R.drawable.newserver_orange); - viewHolder.newservice_item_point - .setBackgroundResource(R.drawable.oval_orange_bg); - } - SimpleDateFormat format = new SimpleDateFormat(tag + "kk:mm", - Locale.getDefault()); - viewHolder.newservice_item_time.setText(format.format(serverEntity - .getTime())); - } - - @Override - public GameNewServiceViewHolder onCreateViewHolder(ViewGroup viewGroup, - int i) { - - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_newservice_item, viewGroup, false); - DisplayMetrics outMetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay() - .getMetrics(outMetrics); - int width = outMetrics.widthPixels - - DisplayUtils.dip2px(getActivity(), 60); - RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams( - width / 3, DisplayUtils.dip2px(getActivity(), 1)); - rparams.addRule(RelativeLayout.CENTER_IN_PARENT); - view.findViewById(R.id.newservice_item_line).setLayoutParams( - rparams); - return new GameNewServiceViewHolder(view); - } - - } - - private class GameScreenshotViewHolder extends RecyclerView.ViewHolder - implements OnClickListener { - - private ImageView screenshot_item_iv; - - public GameScreenshotViewHolder(View convertView) { - super(convertView); - - screenshot_item_iv = (ImageView) convertView - .findViewById(R.id.screenshot_item_iv); - screenshot_item_iv.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - Map kv = new HashMap(); - kv.put("点击", "游戏截图"); - DataUtils.onEvent(getActivity(), "插件数据", gameName, kv); - - Map map = new HashMap(); - map.put("location", "游戏截图"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - Intent intent = new Intent(getActivity(), ViewImageActivity.class); - intent.putStringArrayListExtra("urls", entity.getGallery()); - intent.putExtra("current", getPosition()); - startActivity(intent); - } - - } - - private class GameScreenshotAdapter extends - RecyclerView.Adapter { - - @Override - public int getItemCount() { - if (entity.getGallery() == null) { - return 0; - } - return entity.getGallery().size(); - } - - @Override - public void onBindViewHolder(GameScreenshotViewHolder viewHolder, - int position) { - ImageUtils.getInstance(getActivity()).display( - entity.getGallery().get(position), - viewHolder.screenshot_item_iv); - } - - @Override - public GameScreenshotViewHolder onCreateViewHolder(ViewGroup viewGroup, - int i) { - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_screenshot_item, viewGroup, false); - return new GameScreenshotViewHolder(view); - } - - @Override - public int getItemViewType(int position) { - return position; - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - isDestroy = true; - EventBus.getDefault().unregister(this); - AppController.canclePendingRequests(GameDetailsFragment.class); - view = null; - fm_gamedetails_rv_show = null; - linearLayoutManager = null; - adapter = null; - fm_gamedetails_ll_loading = null; - reuse_no_connection = null; - rparams = null; - entity = null; - id = null; - entrance = null; - gameName = null; - handler = null; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java deleted file mode 100644 index 099beb7bd8..0000000000 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java +++ /dev/null @@ -1,959 +0,0 @@ -package com.gh.gamecenter.gamedetails; - -import android.content.Context; -import android.content.SharedPreferences; -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.util.ArrayMap; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.Editable; -import android.text.Html; -import android.text.Spanned; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; -import android.widget.AbsListView.OnScrollListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; -import android.widget.Toast; - -import com.android.volley.NoConnectionError; -import com.android.volley.Response; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.gh.base.AppController; -import com.gh.common.constant.Config; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.NewsUtils; -import com.gh.common.util.Utils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.eventbus.EBMoveTop; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBNewsType; -import com.gh.gamecenter.eventbus.EBSlide; -import com.gh.gamecenter.manager.DataCollectionManager; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import org.json.JSONArray; -import org.json.JSONException; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import de.greenrobot.event.EventBus; - -/** - * 游戏资讯 fragment - * - * @author 黄壮华 - * - */ -public class GameInformationFragment extends Fragment { - - private View view; - private RecyclerView fm_gameinformation_rv_show; - private LinearLayoutManager linearLayoutManager; - private GameInformationAdapter adapter; - private LinearLayout fm_gameinformation_ll_loading, reuse_no_connection; - private RelativeLayout.LayoutParams rparams; - - private ArrayMap adapterMap; - private List typeList; - - private String type = "全部"; - private String keyword; - private String id; - private String gameName; - private String entrance; - - private int dis = 0; - private int distance; - private int currentPosition = 0; - private int column; - - private boolean isNull = false; - private boolean isLoading = false; - private boolean isNetworkError = false; - private boolean isDestroy = false; - - public void setParams(String id, String gameName, String entrance) { - this.id = id; - this.gameName = gameName; - this.entrance = entrance; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - Utils.log(this.getClass().getSimpleName() + " onSaveInstanceState"); - outState.putString("id", id); - outState.putString("gameName", gameName); - outState.putString("entrance", entrance); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - if (savedInstanceState != null) { - id = savedInstanceState.getString("id"); - gameName = savedInstanceState.getString("gameName"); - entrance = savedInstanceState.getString("entrance"); - } - - view = View.inflate(getActivity(), R.layout.gameinformation, null); - - distance = DisplayUtils.dip2px(getActivity(), 66); - typeList = new ArrayList(); - adapterMap = new ArrayMap(); - - SharedPreferences sp = getActivity().getSharedPreferences( - Config.PREFERENCE, Context.MODE_PRIVATE); - column = sp.getInt("game_detail_news_type_tab_column", 4); - - fm_gameinformation_ll_loading = (LinearLayout) view - .findViewById(R.id.fm_gameinformation_ll_loading); - - reuse_no_connection = (LinearLayout) view - .findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - fm_gameinformation_rv_show.setVisibility(View.GONE); - fm_gameinformation_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - getGameInformation(0, true); - } - }); - - rparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.WRAP_CONTENT); - - linearLayoutManager = new LinearLayoutManager(getActivity()); - linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - fm_gameinformation_rv_show = (RecyclerView) view - .findViewById(R.id.fm_gameinformation_rv_show); - fm_gameinformation_rv_show.setHasFixedSize(true); - fm_gameinformation_rv_show.setLayoutManager(linearLayoutManager); - fm_gameinformation_rv_show - .setOnScrollListener(new GameInformationOnScrollListener()); - - EventBus.getDefault().register(this); - - getGameInformation(0, true); - } - - @Override - @Nullable - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - - if (container != null) { - container.removeView(view); - } - return view; - } - - private class GameInformationOnScrollListener extends - RecyclerView.OnScrollListener { - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - - super.onScrolled(recyclerView, dx, dy); - int visibility; - if (linearLayoutManager.findFirstVisibleItemPosition() >= 1) { - visibility = View.VISIBLE; - } else { - visibility = View.GONE; - } - - dis += dy; - - rparams.topMargin -= dy; - - EventBus.getDefault().post( - new EBMoveTop("top", visibility, rparams.topMargin)); - } - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - - super.onScrollStateChanged(recyclerView, newState); - if (newState == OnScrollListener.SCROLL_STATE_IDLE) { - int position = adapter.getNewsList().size() + 4; - if (!Config.isShow) { - position--; - } - if (linearLayoutManager.findLastVisibleItemPosition() == position - && !adapter.isRemove() && !isLoading) { - if (currentPosition == -1) { - searchFormServer(adapter.getNewsList().size()); - } else { - getGameInformation(adapter.getNewsList().size()); - } - } - - if (dis > distance) { - EventBus.getDefault().post(new EBSlide(distance, 0, false)); - EventBus.getDefault().post(new EBSlide(distance, 2, false)); - } else if (dis < -distance) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 2, false)); - } else { - EventBus.getDefault().post(new EBSlide(dis, 0, false)); - EventBus.getDefault().post(new EBSlide(dis, 2, false)); - } - } - } - } - - public void onEventMainThread(EBSlide busOne) { - if (busOne.getPosition() == 1) { - if (busOne.isReset()) { - fm_gameinformation_rv_show.scrollBy(0, distance - dis); - } else { - if (busOne.getDistance() == 0) { - fm_gameinformation_rv_show.scrollToPosition(0); - rparams.topMargin = 0; - dis = 0; - } else { - fm_gameinformation_rv_show.scrollBy(0, busOne.getDistance() - - dis); - } - } - } - } - - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (reuse_no_connection.getVisibility() == View.VISIBLE) { - fm_gameinformation_rv_show.setVisibility(View.GONE); - fm_gameinformation_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - getGameInformation(0, true); - } else if (isNetworkError) { - isNetworkError = false; - adapter.notifyItemChanged(adapter.getItemCount() - 2); - if (currentPosition == -1) { - searchFormServer(adapter.getNewsList().size()); - } else { - getGameInformation(adapter.getNewsList().size()); - } - } - } - } - - public void onEventMainThread(EBNewsType type) { - if ("资讯".equals(type.getType())) { - typeList = type.getList(); - adapter.notifyItemChanged(2); - } - } - - private void getGameInformation(final int offset) { - getGameInformation(offset, false); - } - - private void getGameInformation(final int offset, final boolean isFirst) { - if (isLoading) { - return; - } - isLoading = true; - if (offset == 0) { - adapter = adapterMap.get(type); - if (adapter == null) { - adapter = new GameInformationAdapter( - new ArrayList()); - adapterMap.put(type, adapter); - } - fm_gameinformation_rv_show.setAdapter(adapter); - } - - final String url; - - if ("全部".equals(type)) { - url = Config.HOST + "v1d45/game/" + id + "/news?limit=20&offset=" - + offset + "&type_group=" + Uri.encode("资讯"); - } else { - url = Config.HOST + "v1d45/game/" + id + "/news?limit=20&offset=" - + offset + "&type=" + Uri.encode(type); - } - - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, - new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - isLoading = false; - if (!isDestroy) { - try { - processingData(response, offset, isFirst); -// adapter.setLoaded(true); -// adapter.notifyItemChanged(adapter.getItemCount() - 2); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - isLoading = false; - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - if (offset == 0 && isFirst) { - fm_gameinformation_rv_show - .setVisibility(View.GONE); - fm_gameinformation_ll_loading - .setVisibility(View.GONE); - reuse_no_connection - .setVisibility(View.VISIBLE); - } else { - Toast.makeText(getActivity(), "网络错误", - Toast.LENGTH_SHORT).show(); - isNetworkError = true; - adapter.notifyItemChanged(adapter - .getItemCount() - 2); - } - } - } - } - }); - if ((adapter.getNewsList().isEmpty() && !adapter.isRemove() && offset == 0) - || (offset != 0)) { - AppController.addToRequestQueue(request, - GameInformationFragment.class); - } - } - - private void processingData(JSONArray response, int offset, boolean isFirst) throws JSONException { - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - List newsList = gson.fromJson(response.toString(), listType); - if (offset == 0) { - fm_gameinformation_ll_loading.setVisibility(View.GONE); - fm_gameinformation_rv_show.setVisibility(View.VISIBLE); - } - int size = response.length(); - adapter.getNewsList().addAll(newsList); - adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); - if (size < 20) { - adapter.setRemove(true); - adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); - adapter.notifyItemChanged(adapter.getNewsList().size() + 3); - if (isFirst && size == 0 && !isNull) { - isNull = true; - adapter.notifyItemRemoved(2); - } - } - } - - private class GameInformationViewHolder extends RecyclerView.ViewHolder - implements OnClickListener, TextWatcher, OnEditorActionListener { - - private EditText item_et_search; - private ImageView item_iv_delete; - private TextView item_tv_search; - private RecyclerView item_rv_select; - private LinearLayout item_ll_search_result; - private TextView item_tv_search_result; - private ImageView item_iv_search_result; - - private TextView information_type, information_title; - private View itemView; - - private ProgressBar item_pb_loading; - private TextView item_tv_loading; - - public GameInformationViewHolder(View convertView) { - super(convertView); - - itemView = convertView; - int position = (Integer) convertView.getTag(); - if (!isNull && position == 2) { - item_et_search = (EditText) convertView - .findViewById(R.id.item_et_search); - item_et_search.requestFocus(); - item_et_search.addTextChangedListener(this); - item_et_search.setOnEditorActionListener(this); - item_iv_delete = (ImageView) convertView - .findViewById(R.id.item_iv_delete); - item_iv_delete.setOnClickListener(this); - item_tv_search = (TextView) convertView - .findViewById(R.id.item_tv_search); - item_tv_search.setOnClickListener(this); - item_rv_select = (RecyclerView) convertView - .findViewById(R.id.item_rv_select); - item_rv_select.setLayoutManager(new GridLayoutManager( - getActivity(), column)); - item_rv_select.setAdapter(new SelectViewAdapter()); - item_ll_search_result = (LinearLayout) convertView - .findViewById(R.id.item_ll_search_result); - item_tv_search_result = (TextView) convertView - .findViewById(R.id.item_tv_search_result); - item_iv_search_result = (ImageView) convertView - .findViewById(R.id.item_iv_search_result); - item_iv_search_result.setOnClickListener(this); - } else if (position >= 3 - && position <= adapter.getNewsList().size() + 2) { - information_type = (TextView) convertView - .findViewById(R.id.information_type); - information_title = (TextView) convertView - .findViewById(R.id.information_title); - convertView.setOnClickListener(this); - } else if (!adapter.isRemove() - && position == adapter.getNewsList().size() + 3) { - item_pb_loading = (ProgressBar) convertView - .findViewById(R.id.item_pb_loading); - item_tv_loading = (TextView) convertView - .findViewById(R.id.item_tv_loading); - } - } - - @Override - public void onClick(View v) { - if (v == itemView) { - NewsEntity newsEntity = adapter.getNewsList().get( - getPosition() - 3); - - Map kv = new HashMap(); - kv.put("文章类型", newsEntity.getType()); - kv.put("入口", "游戏详情-资讯"); - DataUtils.onEvent(getActivity(), "文章阅读-资讯", - newsEntity.getTitle(), kv); - - Map map = new HashMap(); - map.put("location", "资讯"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("news", newsEntity.getTitle()); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - //统计阅读量 - NewsUtils.statNewsViews(newsEntity.getId()); - NewsUtils.startNewsActivity(getActivity(), newsEntity, entrance + "-游戏详情-资讯"); - } - if (v == item_tv_search) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - if (!TextUtils.isEmpty(item_et_search.getText().toString())) { - keyword = item_et_search.getText().toString(); - - Map kv = new HashMap(); - kv.put("关键字", keyword); - DataUtils.onEvent(getActivity(), "搜索-游戏详情", gameName, kv); - - Map map = new HashMap(); - map.put("key", keyword); - map.put("from", "游戏详情-资讯"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(getActivity(), "search", map); - - searchFormServer(0); - } else { - Toast.makeText(getActivity(), "请输入搜索关键字", - Toast.LENGTH_SHORT).show(); - } - } - if (v == item_iv_delete) { - item_et_search.setText(""); - } - if (v == item_iv_search_result) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 2, false)); - fm_gameinformation_rv_show.scrollBy(0, rparams.topMargin); - currentPosition = 0; - adapter = adapterMap.get("全部"); - fm_gameinformation_rv_show.setAdapter(adapter); - } - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, - int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, - int count) { - if (s.length() > 0) { - item_iv_delete.setVisibility(View.VISIBLE); - } else { - item_iv_delete.setVisibility(View.GONE); - } - } - - @Override - public void afterTextChanged(Editable s) { - - } - - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_SEARCH) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - if (!TextUtils.isEmpty(item_et_search.getText().toString())) { - keyword = item_et_search.getText().toString(); - - Map kv = new HashMap(); - kv.put("关键字", keyword); - DataUtils.onEvent(getActivity(), "搜索-游戏详情", gameName, kv); - - Map map = new HashMap(); - map.put("key", keyword); - map.put("from", "游戏详情-资讯"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(getActivity(), "search", map); - - searchFormServer(0); - } else { - Toast.makeText(getActivity(), "请输入搜索关键字", - Toast.LENGTH_SHORT).show(); - } - } - return false; - } - - } - - private void searchFormServer(final int offset) { - if (isLoading) { - return; - } - isLoading = true; - if (offset == 0) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 2, false)); - fm_gameinformation_rv_show.scrollBy(0, rparams.topMargin); - - currentPosition = -1; - - adapter = new GameInformationAdapter(new ArrayList()); - fm_gameinformation_rv_show.setAdapter(adapter); - } - - final String url = Config.HOST + "v1d45/search/news?type_group=" - + Uri.encode("资讯") + "&game_id=" + id + "&keyword=" - + Uri.encode(keyword) + "&limit=20&offset=" + offset; - JsonArrayExtendedRequest searchRequest = new JsonArrayExtendedRequest( - url, new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - isLoading = false; - if (!isDestroy) { - try { - processingSearchData(response); -// adapter.setLoaded(true); -// adapter.notifyItemChanged(adapter.getItemCount() - 2); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - isLoading = false; - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - Toast.makeText(getActivity(), "网络错误", - Toast.LENGTH_SHORT).show(); - isNetworkError = true; - adapter.notifyItemChanged(adapter - .getItemCount() - 2); - } - } - } - }); - AppController.addToRequestQueue(searchRequest, - GameInformationFragment.class); - } - - private void processingSearchData(JSONArray response) throws JSONException { - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - List newsList = gson.fromJson(response.toString(), listType); - int size = response.length(); - adapter.getNewsList().addAll(newsList); - adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); - if (size < 20) { - adapter.setRemove(true); - adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); - adapter.notifyItemChanged(adapter.getNewsList().size() + 3); - } - adapter.notifyItemChanged(2); - } - - private class GameInformationAdapter extends - RecyclerView.Adapter { - - private ArrayList newsList; - private boolean isRemove; -// private boolean isLoaded; - - public GameInformationAdapter(ArrayList newsList) { - this.newsList = newsList; - isRemove = false; -// isLoaded = false; - } - - public ArrayList getNewsList() { - return newsList; - } - -// public void setLoaded(boolean isLoaded) { -// this.isLoaded = isLoaded; -// } - - public boolean isRemove() { - return isRemove; - } - - public void setRemove(boolean isRemove) { - this.isRemove = isRemove; - } - - @Override - public int getItemCount() { - if (isNull) { - return 3; - } - if (isRemove) { - return newsList.size() + 4; - } - return newsList.size() + 5; - } - - @Override - public void onBindViewHolder(GameInformationViewHolder viewHolder, int position) { - if (!isNull && position == 2) { - if (currentPosition == -1) { - viewHolder.item_et_search.setText(keyword); - viewHolder.item_et_search.setSelection(keyword.length()); - viewHolder.item_et_search.requestFocus(); - Spanned content = Html.fromHtml("与“" - + keyword + "”相关的资讯共" - + adapter.getNewsList().size() + "条"); - viewHolder.item_tv_search_result.setText(content); - viewHolder.item_rv_select.setVisibility(View.GONE); - viewHolder.item_ll_search_result - .setVisibility(View.VISIBLE); - } else if (typeList.isEmpty()) { - viewHolder.item_rv_select.setVisibility(View.GONE); - viewHolder.item_ll_search_result.setVisibility(View.GONE); - } else { - viewHolder.item_rv_select.setVisibility(View.VISIBLE); - viewHolder.item_ll_search_result.setVisibility(View.GONE); - int height = DisplayUtils.dip2px( - getActivity(), - 50 * ((int) Math.ceil((typeList.size() + 1) - / (double) (column)))); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - LayoutParams.MATCH_PARENT, height); - viewHolder.item_rv_select.setLayoutParams(lparams); - } - } else if (position >= 3 && position <= newsList.size() + 2) { - viewHolder.information_type.setText(String.valueOf(position - 2)); - if (currentPosition == -1) { - String title = adapter - .getNewsList() - .get(position - 3) - .getTitle() - .replace(keyword, "" + keyword + ""); - Spanned content = Html.fromHtml(title); - viewHolder.information_title.setText(content); - } else { - viewHolder.information_title.setText(adapter.getNewsList() - .get(position - 3).getTitle()); - } - } else if (isRemove && position == newsList.size() + 3) { - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, 0); - - int itemHeight = DisplayUtils.dip2px(getActivity(), 38); - - int totalHeight = 0; - - if (currentPosition == -1) { - totalHeight = fm_gameinformation_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29 + 51 + 35); - } else { - totalHeight = fm_gameinformation_rv_show.getHeight() - - DisplayUtils.dip2px( - getActivity(), - 29 + 51 + 50 * ((int) Math.ceil((typeList - .size() + 1) / (double) (column)))); - } - int bottomHeight = totalHeight - newsList.size() * itemHeight; - - int normalHeight = DisplayUtils.dip2px(getActivity(), 44); - - if (!Config.isShow) { - normalHeight = 0; - } - - if (bottomHeight > normalHeight) { - params.height = bottomHeight; - } else { - params.height = normalHeight; - } - - viewHolder.itemView.setLayoutParams(params); - } else if (!isRemove && position == newsList.size() + 3) { - if (isNetworkError) { - viewHolder.item_pb_loading.setVisibility(View.GONE); - viewHolder.item_tv_loading.setText("加载失败,点击重试"); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 2); - if (currentPosition == -1) { - searchFormServer(newsList.size()); - } else { - getGameInformation(newsList.size()); - } - } - }); - } -// else if (isLoaded) { -// viewHolder.item_pb_loading.setVisibility(View.GONE); -// viewHolder.item_tv_loading.setText("点击加载更多"); -// viewHolder.itemView.setClickable(true); -// viewHolder.itemView.setOnClickListener(new OnClickListener() { -// @Override -// public void onClick(View v) { -// isLoaded = false; -// notifyItemChanged(getItemCount() - 2); -// if (currentPosition == -1) { -// searchFormServer(newsList.size()); -// } else { -// getGameInformation(newsList.size()); -// } -// } -// }); -// } - else { - viewHolder.item_pb_loading.setVisibility(View.VISIBLE); - viewHolder.item_tv_loading.setText("加载中..."); - viewHolder.itemView.setClickable(false); - } - } - } - - @Override - public GameInformationViewHolder onCreateViewHolder( - ViewGroup viewGroup, int i) { - View view; - if (i == 0) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 66)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (i == 1) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 29)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (isNull && i == 2) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.reuse_none_data, viewGroup, false); - TextView hint = (TextView) view.findViewById(R.id.reuse_tv_none_data); - hint.setText("暂无数据"); - int height = fm_gameinformation_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, height); - view.setLayoutParams(params); - } else if (i == 2) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformaiton_item_search, viewGroup, false); - ((TextView) view.findViewById(R.id.item_tv_search)).setText("搜资讯"); - } else if (isRemove && (newsList == null || newsList.isEmpty()) - && i == 3) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.reuse_none_data, viewGroup, false); - TextView hint = (TextView) view.findViewById(R.id.reuse_tv_none_data); - int height = 0; - if (currentPosition == -1) { - hint.setText("搜索为空"); - height = fm_gameinformation_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29 + 51 + 35); - } else { - hint.setText("暂无数据"); - height = fm_gameinformation_rv_show.getHeight() - - DisplayUtils.dip2px( - getActivity(), - 29 + 51 + 50 * ((int) Math.ceil((typeList - .size() + 1) / (double) (column)))); - } - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, height); - view.setLayoutParams(params); - } else if (!isRemove && i == newsList.size() + 3) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_loading, viewGroup, false); - } else if ((!isRemove && i == newsList.size() + 4) - || (isRemove && i == newsList.size() + 3)) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 44)); - if (!Config.isShow) { - params.height = 0; - } - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformation_item, viewGroup, false); - } - view.setTag(i); - return new GameInformationViewHolder(view); - } - - @Override - public int getItemViewType(int position) { - - return position; - } - } - - private class SelectViewHolder extends RecyclerView.ViewHolder implements - OnClickListener { - - private TextView select_tv_type; - - public SelectViewHolder(View covertView) { - super(covertView); - - select_tv_type = (TextView) covertView - .findViewById(R.id.select_tv_type); - select_tv_type.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 2, false)); - fm_gameinformation_rv_show.scrollBy(0, rparams.topMargin); - type = select_tv_type.getText().toString(); - currentPosition = getPosition(); - - Map map = new HashMap(); - map.put("location", "资讯-" + type); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - getGameInformation(0); - } - - } - - private class SelectViewAdapter extends - RecyclerView.Adapter { - - @Override - public int getItemCount() { - return 1 + typeList.size(); - } - - @Override - public void onBindViewHolder(SelectViewHolder viewHolder, int position) { - if (position == 0) { - viewHolder.select_tv_type.setText("全部"); - } else { - viewHolder.select_tv_type.setText(typeList.get(position - 1)); - } - if (currentPosition == position) { - viewHolder.select_tv_type - .setBackgroundResource(R.drawable.textview_search_dn); - viewHolder.select_tv_type.setClickable(false); - } else { - viewHolder.select_tv_type - .setBackgroundResource(R.drawable.textview_search_up); - viewHolder.select_tv_type.setClickable(true); - } - } - - @Override - public SelectViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) { - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformation_select_item, viewGroup, false); - return new SelectViewHolder(view); - } - - } - - @Override - public void onDestroy() { - super.onDestroy(); - isDestroy = true; - EventBus.getDefault().unregister(this); - AppController.canclePendingRequests(GameInformationFragment.class); - view = null; - fm_gameinformation_rv_show = null; - linearLayoutManager = null; - adapter = null; - fm_gameinformation_ll_loading = null; - reuse_no_connection = null; - rparams = null; - adapterMap = null; - typeList = null; - type = null; - keyword = null; - id = null; - gameName = null; - entrance = null; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java deleted file mode 100644 index f82e3a29c6..0000000000 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java +++ /dev/null @@ -1,983 +0,0 @@ -package com.gh.gamecenter.gamedetails; - -import android.content.Context; -import android.content.SharedPreferences; -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.util.ArrayMap; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.Editable; -import android.text.Html; -import android.text.Spanned; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; -import android.widget.AbsListView.OnScrollListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; -import android.widget.Toast; - -import com.android.volley.NoConnectionError; -import com.android.volley.Response; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.gh.base.AppController; -import com.gh.common.constant.Config; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.NewsUtils; -import com.gh.common.util.Utils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.eventbus.EBMoveTop; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBNewsType; -import com.gh.gamecenter.eventbus.EBSlide; -import com.gh.gamecenter.manager.DataCollectionManager; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import org.json.JSONArray; -import org.json.JSONException; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import de.greenrobot.event.EventBus; - -/** - * 游戏攻略fragment - * - * @author 黄壮华 - * - */ -public class GameStrategyFragment extends Fragment { - - private View view; - private RecyclerView fm_gamestrategy_rv_show; - private LinearLayoutManager linearLayoutManager; - private GameStrategyAdapter adapter; - private LinearLayout fm_gamestrategy_ll_loading, reuse_no_connection; - private RelativeLayout.LayoutParams rparams; - - private ArrayMap adapterMap; - private List typeList; - - private String id; - private String type = "全部"; - private String keyword; - private String gameName; - private String entrance; - - private int dis; - private int distance; - private int currentPosition = 0; - private int column; - - private boolean isNull = false; - private boolean isLoading = false; - private boolean isNetworkError = false; - private boolean isDestroy = false; - - public void setParams(String id, String gameName, String entrance) { - this.id = id; - this.gameName = gameName; - this.entrance = entrance; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - - super.onSaveInstanceState(outState); - Utils.log(this.getClass().getSimpleName() + " onSaveInstanceState"); - outState.putString("id", id); - outState.putString("gameName", gameName); - outState.putString("entrance", entrance); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - if (savedInstanceState != null) { - id = savedInstanceState.getString("id"); - gameName = savedInstanceState.getString("gameName"); - entrance = savedInstanceState.getString("entrance"); - } - - view = View.inflate(getActivity(), R.layout.gamestrategy, null); - - distance = DisplayUtils.dip2px(getActivity(), 66); - typeList = new ArrayList(); - adapterMap = new ArrayMap(); - - SharedPreferences sp = getActivity().getSharedPreferences( - Config.PREFERENCE, Context.MODE_PRIVATE); - column = sp.getInt("game_detail_news_type_tab_column", 4); - - fm_gamestrategy_ll_loading = (LinearLayout) view - .findViewById(R.id.fm_gamestrategy_ll_loading); - - reuse_no_connection = (LinearLayout) view - .findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - fm_gamestrategy_rv_show.setVisibility(View.GONE); - fm_gamestrategy_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - getGameInformation(0, true); - } - }); - - rparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.WRAP_CONTENT); - - fm_gamestrategy_rv_show = (RecyclerView) view - .findViewById(R.id.fm_gamestrategy_rv_show); - fm_gamestrategy_rv_show.setHasFixedSize(true); - linearLayoutManager = new LinearLayoutManager(getActivity()); - linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - fm_gamestrategy_rv_show.setLayoutManager(linearLayoutManager); - fm_gamestrategy_rv_show - .setOnScrollListener(new GameStrategyOnScrollListener()); - - EventBus.getDefault().register(this); - - getGameInformation(0, true); - } - - @Override - @Nullable - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - - if (container != null) { - container.removeView(view); - } - return view; - } - - private class GameStrategyOnScrollListener extends - RecyclerView.OnScrollListener { - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - - super.onScrolled(recyclerView, dx, dy); - - int visibility; - if (linearLayoutManager.findFirstVisibleItemPosition() >= 1) { - visibility = View.VISIBLE; - } else { - visibility = View.GONE; - } - - dis += dy; - - rparams.topMargin -= dy; - - EventBus.getDefault().post( - new EBMoveTop("top", visibility, rparams.topMargin)); - } - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - - super.onScrollStateChanged(recyclerView, newState); - if (newState == OnScrollListener.SCROLL_STATE_IDLE) { - int position = adapter.getNewsList().size() + 4; - if (!Config.isShow) { - position--; - } - if (linearLayoutManager.findLastVisibleItemPosition() == position - && !adapter.isRemove() && !isLoading) { - if (currentPosition == -1) { - searchFormServer(adapter.getNewsList().size()); - } else { - getGameInformation(adapter.getNewsList().size()); - } - } - - if (dis > distance) { - EventBus.getDefault().post(new EBSlide(distance, 0, false)); - EventBus.getDefault().post(new EBSlide(distance, 1, false)); - } else if (dis < -distance) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 1, false)); - } else { - EventBus.getDefault().post(new EBSlide(dis, 0, false)); - EventBus.getDefault().post(new EBSlide(dis, 1, false)); - } - } - } - } - - public void onEventMainThread(EBSlide busOne) { - if (busOne.getPosition() == 2) { - if (busOne.isReset()) { - fm_gamestrategy_rv_show.scrollBy(0, distance - dis); - } else { - if (busOne.getDistance() == 0) { - fm_gamestrategy_rv_show.scrollToPosition(0); - rparams.topMargin = 0; - dis = 0; - } else { - fm_gamestrategy_rv_show.scrollBy(0, busOne.getDistance() - - dis); - } - } - } - } - - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (reuse_no_connection.getVisibility() == View.VISIBLE) { - fm_gamestrategy_rv_show.setVisibility(View.GONE); - fm_gamestrategy_ll_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - getGameInformation(0, true); - } else if (isNetworkError) { - isNetworkError = false; - adapter.notifyItemChanged(adapter.getItemCount() - 2); - if (currentPosition == -1) { - searchFormServer(adapter.getNewsList().size()); - } else { - getGameInformation(adapter.getNewsList().size()); - } - } - } - } - - public void onEventMainThread(EBNewsType type) { - if ("攻略".equals(type.getType())) { - typeList = type.getList(); - adapter.notifyItemChanged(2); - } - } - - private void getGameInformation(final int offset) { - getGameInformation(offset, false); - } - - private void getGameInformation(final int offset, final boolean isFirst) { - if (isLoading) { - return; - } - isLoading = true; - if (offset == 0) { - adapter = adapterMap.get(type); - if (adapter == null) { - adapter = new GameStrategyAdapter(new ArrayList()); - adapterMap.put(type, adapter); - } - fm_gamestrategy_rv_show.setAdapter(adapter); - } - - final String url; - - if ("全部".equals(type)) { - url = Config.HOST + "v1d45/game/" + id + "/news?limit=20&offset=" - + offset + "&type_group=" + Uri.encode("攻略"); - } else { - url = Config.HOST + "v1d45/game/" + id + "/news?limit=20&offset=" - + offset + "&type=" + Uri.encode(type); - } - - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, - new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - isLoading = false; - if (!isDestroy) { - try { - processingData(response, offset, isFirst); -// adapter.setLoaded(true); -// adapter.notifyItemChanged(adapter.getItemCount() - 2); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - isLoading = false; - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - if (offset == 0 && isFirst) { - fm_gamestrategy_rv_show - .setVisibility(View.GONE); - fm_gamestrategy_ll_loading - .setVisibility(View.GONE); - reuse_no_connection - .setVisibility(View.VISIBLE); - } else { - Toast.makeText(getActivity(), "网络错误", - Toast.LENGTH_SHORT).show(); - isNetworkError = true; - adapter.notifyItemChanged(adapter - .getItemCount() - 2); - } - } - } - } - }); - if ((adapter.getNewsList().isEmpty() && !adapter.isRemove() && offset == 0) - || (offset != 0)) { - AppController - .addToRequestQueue(request, GameStrategyFragment.class); - } - } - - private void processingData(JSONArray response, int offset, boolean isFirst) - throws JSONException { - if (offset == 0) { - fm_gamestrategy_ll_loading.setVisibility(View.GONE); - fm_gamestrategy_rv_show.setVisibility(View.VISIBLE); - } - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - List newsList = gson.fromJson(response.toString(), listType); - int size = response.length(); - adapter.getNewsList().addAll(newsList); - adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); - if (size < 20) { - adapter.setRemove(true); - adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); - adapter.notifyItemChanged(adapter.getNewsList().size() + 3); - if (isFirst && size == 0 && !isNull) { - isNull = true; - adapter.notifyItemRemoved(2); - } - } - if (size == 0 && dis != 0) { - int dy = DisplayUtils.dip2px(getActivity(), 35); - dis -= dy; - rparams.topMargin += dy; - EventBus.getDefault().post( - new EBMoveTop("top", View.VISIBLE, rparams.topMargin)); - } - } - - private class GameStrategyViewHolder extends RecyclerView.ViewHolder - implements OnClickListener, TextWatcher, OnEditorActionListener { - - private EditText item_et_search; - private ImageView item_iv_delete; - private TextView item_tv_search; - private RecyclerView item_rv_select; - private LinearLayout item_ll_search_result; - private TextView item_tv_search_result; - private ImageView item_iv_search_result; - - private TextView information_type, information_title; - private View itemView; - - private ProgressBar item_pb_loading; - private TextView item_tv_loading; - - public GameStrategyViewHolder(View convertView) { - super(convertView); - - itemView = convertView; - int position = (Integer) convertView.getTag(); - if (!isNull && position == 2) { - item_et_search = (EditText) convertView - .findViewById(R.id.item_et_search); - item_et_search.addTextChangedListener(this); - item_et_search.setOnEditorActionListener(this); - item_iv_delete = (ImageView) convertView - .findViewById(R.id.item_iv_delete); - item_iv_delete.setOnClickListener(this); - item_tv_search = (TextView) convertView - .findViewById(R.id.item_tv_search); - item_tv_search.setOnClickListener(this); - item_rv_select = (RecyclerView) convertView - .findViewById(R.id.item_rv_select); - item_rv_select.setLayoutManager(new GridLayoutManager( - getActivity(), column)); - item_rv_select.setAdapter(new SelectViewAdapter()); - item_ll_search_result = (LinearLayout) convertView - .findViewById(R.id.item_ll_search_result); - item_tv_search_result = (TextView) convertView - .findViewById(R.id.item_tv_search_result); - item_iv_search_result = (ImageView) convertView - .findViewById(R.id.item_iv_search_result); - item_iv_search_result.setOnClickListener(this); - } else if (position >= 3 - && position <= adapter.getNewsList().size() + 2) { - information_type = (TextView) convertView - .findViewById(R.id.information_type); - information_title = (TextView) convertView - .findViewById(R.id.information_title); - convertView.setOnClickListener(this); - } else if (!adapter.isRemove() - && position == adapter.getNewsList().size() + 3) { - item_pb_loading = (ProgressBar) convertView - .findViewById(R.id.item_pb_loading); - item_tv_loading = (TextView) convertView - .findViewById(R.id.item_tv_loading); - } - } - - @Override - public void onClick(View v) { - if (v == itemView) { - NewsEntity newsEntity = adapter.getNewsList().get( - getPosition() - 3); - - Map kv = new HashMap(); - kv.put("文章类型", newsEntity.getType()); - kv.put("入口", "游戏详情-攻略"); - DataUtils.onEvent(getActivity(), "文章阅读-攻略", - newsEntity.getTitle(), kv); - - Map map = new HashMap(); - map.put("location", "攻略"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("news", newsEntity.getTitle()); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - //统计阅读量 - NewsUtils.statNewsViews(newsEntity.getId()); - NewsUtils.startNewsActivity(getActivity(), newsEntity, entrance - + "-游戏详情-攻略"); - } - if (v == item_tv_search) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - if (!TextUtils.isEmpty(item_et_search.getText().toString())) { - keyword = item_et_search.getText().toString(); - - Map kv = new HashMap(); - kv.put("关键字", keyword); - DataUtils.onEvent(getActivity(), "搜索-游戏详情", gameName, kv); - - Map map = new HashMap(); - map.put("key", keyword); - map.put("from", "游戏详情-攻略"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(getActivity(), "search", map); - - searchFormServer(0); - } else { - Toast.makeText(getActivity(), "请输入搜索关键字", - Toast.LENGTH_SHORT).show(); - } - } - if (v == item_iv_delete) { - item_et_search.setText(""); - } - if (v == item_iv_search_result) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 1, false)); - fm_gamestrategy_rv_show.scrollBy(0, rparams.topMargin); - currentPosition = 0; - adapter = adapterMap.get("全部"); - fm_gamestrategy_rv_show.setAdapter(adapter); - } - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, - int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, - int count) { - if (s.length() > 0) { - item_iv_delete.setVisibility(View.VISIBLE); - } else { - item_iv_delete.setVisibility(View.GONE); - } - } - - @Override - public void afterTextChanged(Editable s) { - - } - - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_SEARCH) { - InputMethodManager imm = (InputMethodManager) getActivity() - .getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - if (!TextUtils.isEmpty(item_et_search.getText().toString())) { - keyword = item_et_search.getText().toString(); - - Map kv = new HashMap(); - kv.put("关键字", keyword); - DataUtils.onEvent(getActivity(), "搜索-游戏详情", gameName, kv); - - Map map = new HashMap(); - map.put("key", keyword); - map.put("from", "游戏详情-攻略"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(getActivity(), "search", map); - - searchFormServer(0); - } else { - Toast.makeText(getActivity(), "请输入搜索关键字", - Toast.LENGTH_SHORT).show(); - } - } - return false; - } - - } - - private void searchFormServer(int offset) { - if (isLoading) { - return; - } - isLoading = true; - if (offset == 0) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 1, false)); - fm_gamestrategy_rv_show.scrollBy(0, rparams.topMargin); - - currentPosition = -1; - - adapter = new GameStrategyAdapter(new ArrayList()); - fm_gamestrategy_rv_show.setAdapter(adapter); - } - - final String url = Config.HOST + "v1d45/search/news?type_group=" - + Uri.encode("攻略") + "&game_id=" + id + "&keyword=" - + Uri.encode(keyword) + "&limit=20&offset=" + offset; - JsonArrayExtendedRequest searchRequest = new JsonArrayExtendedRequest( - url, new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - isLoading = false; - if (!isDestroy) { - try { - processingSearchData(response); -// adapter.setLoaded(true); -// adapter.notifyItemChanged(adapter.getItemCount() - 2); - } catch (JSONException e) { - - e.printStackTrace(); - } - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - isLoading = false; - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - if (!isDestroy) { - Toast.makeText(getActivity(), "网络错误", - Toast.LENGTH_SHORT).show(); - isNetworkError = true; - adapter.notifyItemChanged(adapter - .getItemCount() - 2); - } - } - } - }); - AppController.addToRequestQueue(searchRequest, - GameStrategyFragment.class); - } - - private void processingSearchData(JSONArray response) throws JSONException { - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - List newsList = gson.fromJson(response.toString(), listType); - int size = response.length(); - adapter.getNewsList().addAll(newsList); - adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); - if (size < 20) { - adapter.setRemove(true); - adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); - adapter.notifyItemChanged(adapter.getNewsList().size() + 3); - } - adapter.notifyItemChanged(2); - } - - private class GameStrategyAdapter extends - RecyclerView.Adapter { - - private ArrayList newsList; - private boolean isRemove; -// private boolean isLoaded; - - public GameStrategyAdapter(ArrayList newsList) { - this.newsList = newsList; - isRemove = false; -// isLoaded = false; - } - - public ArrayList getNewsList() { - return newsList; - } - -// public void setLoaded(boolean isLoaded) { -// this.isLoaded = isLoaded; -// } - - public boolean isRemove() { - return isRemove; - } - - public void setRemove(boolean isRemove) { - this.isRemove = isRemove; - } - - @Override - public int getItemCount() { - if (isNull) { - return 3; - } - if (isRemove) { - return newsList.size() + 4; - } - return newsList.size() + 5; - } - - @Override - public void onBindViewHolder(GameStrategyViewHolder viewHolder, - int position) { - - if (!isNull && position == 2) { - if (currentPosition == -1) { - viewHolder.item_et_search.setText(keyword); - viewHolder.item_et_search.setSelection(keyword.length()); - viewHolder.item_et_search.requestFocus(); - Spanned content = Html.fromHtml("与“" - + keyword + "”相关的资讯共" - + adapter.getNewsList().size() + "条"); - viewHolder.item_tv_search_result.setText(content); - viewHolder.item_rv_select.setVisibility(View.GONE); - viewHolder.item_ll_search_result - .setVisibility(View.VISIBLE); - } else if (typeList.isEmpty()) { - viewHolder.item_rv_select.setVisibility(View.GONE); - viewHolder.item_ll_search_result.setVisibility(View.GONE); - } else { - viewHolder.item_rv_select.setVisibility(View.VISIBLE); - viewHolder.item_ll_search_result.setVisibility(View.GONE); - int height = DisplayUtils.dip2px( - getActivity(), - 50 * ((int) Math.ceil((typeList.size() + 1) - / (double) (column)))); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - LayoutParams.MATCH_PARENT, height); - viewHolder.item_rv_select.setLayoutParams(lparams); - } - } else if (position >= 3 - && position <= adapter.getNewsList().size() + 2) { - viewHolder.information_type.setText(String.valueOf(position - 2)); - if (currentPosition == -1) { - String title = adapter - .getNewsList() - .get(position - 3) - .getTitle() - .replace( - keyword, - "" + keyword - + ""); - Spanned content = Html.fromHtml(title); - viewHolder.information_title.setText(content); - } else { - viewHolder.information_title.setText(adapter.getNewsList() - .get(position - 3).getTitle()); - } - } else if (isRemove && position == newsList.size() + 3) { - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, 0); - - int itemHeight = DisplayUtils.dip2px(getActivity(), 38); - - int totalHeight = 0; - - if (currentPosition == -1) { - totalHeight = fm_gamestrategy_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29 + 51 + 35); - } else { - totalHeight = fm_gamestrategy_rv_show.getHeight() - - DisplayUtils.dip2px( - getActivity(), - 29 + 51 + 50 * ((int) Math.ceil((typeList - .size() + 1) / (double) (column)))); - } - int bottomHeight = totalHeight - newsList.size() * itemHeight; - - int normalHeight = DisplayUtils.dip2px(getActivity(), 44); - - if (!Config.isShow) { - normalHeight = 0; - } - - if (bottomHeight > normalHeight) { - params.height = bottomHeight; - } else { - params.height = normalHeight; - } - - viewHolder.itemView.setLayoutParams(params); - } else if (!isRemove && position == newsList.size() + 3) { - if (isNetworkError) { - viewHolder.item_pb_loading.setVisibility(View.GONE); - viewHolder.item_tv_loading.setText("加载失败,点击重试"); - viewHolder.itemView.setClickable(true); - viewHolder.itemView - .setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 2); - if (currentPosition == -1) { - searchFormServer(newsList.size()); - } else { - getGameInformation(newsList.size()); - } - } - }); - } -// else if (isLoaded) { -// viewHolder.item_pb_loading.setVisibility(View.GONE); -// viewHolder.item_tv_loading.setText("点击加载更多"); -// viewHolder.itemView.setClickable(true); -// viewHolder.itemView -// .setOnClickListener(new OnClickListener() { -// @Override -// public void onClick(View v) { -// isLoaded = false; -// notifyItemChanged(getItemCount() - 2); -// if (currentPosition == -1) { -// searchFormServer(newsList.size()); -// } else { -// getGameInformation(newsList.size()); -// } -// } -// }); -// } - else { - viewHolder.item_pb_loading.setVisibility(View.VISIBLE); - viewHolder.item_tv_loading.setText("加载中..."); - viewHolder.itemView.setClickable(false); - } - } - } - - @Override - public GameStrategyViewHolder onCreateViewHolder(ViewGroup viewGroup, - int i) { - - View view; - if (i == 0) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 66)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (i == 1) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 29)); - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else if (isNull && i == 2) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.reuse_none_data, viewGroup, false); - TextView hint = (TextView) view.findViewById(R.id.reuse_tv_none_data); - hint.setText("暂无数据"); - int height = fm_gamestrategy_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, height); - view.setLayoutParams(params); - } else if (i == 2) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformaiton_item_search, viewGroup, false); - ((TextView) view.findViewById(R.id.item_tv_search)) - .setText("搜攻略"); - } else if (isRemove && (newsList == null || newsList.isEmpty()) - && i == 3) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.reuse_none_data, viewGroup, false); - TextView hint = (TextView) view.findViewById(R.id.reuse_tv_none_data); - int height = 0; - if (currentPosition == -1) { - hint.setText("搜索为空"); - height = fm_gamestrategy_rv_show.getHeight() - - DisplayUtils.dip2px(getActivity(), 29 + 51 + 35); - } else { - hint.setText("暂无数据"); - height = fm_gamestrategy_rv_show.getHeight() - - DisplayUtils.dip2px( - getActivity(), - 29 + 51 + 50 * ((int) Math.ceil((typeList - .size() + 1) / (double) (column)))); - } - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, height); - view.setLayoutParams(params); - } else if (!isRemove && i == adapter.getNewsList().size() + 3) { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gamedetails_item_loading, viewGroup, false); - } else if ((!isRemove && i == newsList.size() + 4) - || (isRemove && i == newsList.size() + 3)) { - RelativeLayout relativeLayout = new RelativeLayout( - getActivity()); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, DisplayUtils.dip2px( - getActivity(), 44)); - if (!Config.isShow) { - params.height = 0; - } - relativeLayout.setLayoutParams(params); - view = relativeLayout; - } else { - view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformation_item, viewGroup, false); - } - view.setTag(i); - return new GameStrategyViewHolder(view); - } - - @Override - public int getItemViewType(int position) { - - return position; - } - } - - private class SelectViewHolder extends RecyclerView.ViewHolder implements - OnClickListener { - - private TextView select_tv_type; - - public SelectViewHolder(View covertView) { - super(covertView); - - select_tv_type = (TextView) covertView - .findViewById(R.id.select_tv_type); - select_tv_type.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - EventBus.getDefault().post(new EBSlide(0, 0, false)); - EventBus.getDefault().post(new EBSlide(0, 1, false)); - fm_gamestrategy_rv_show.scrollBy(0, rparams.topMargin); - type = select_tv_type.getText().toString(); - currentPosition = getPosition(); - - Map map = new HashMap(); - map.put("location", "攻略-" + type); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", gameName); - map.put("page", "游戏详情"); - DataCollectionManager.onEvent(getActivity(), "click-item", map); - - getGameInformation(0); - } - - } - - private class SelectViewAdapter extends - RecyclerView.Adapter { - - @Override - public int getItemCount() { - - return 1 + typeList.size(); - } - - @Override - public void onBindViewHolder(SelectViewHolder viewHolder, int position) { - - if (position == 0) { - viewHolder.select_tv_type.setText("全部"); - } else { - viewHolder.select_tv_type.setText(typeList.get(position - 1)); - } - if (currentPosition == position) { - viewHolder.select_tv_type - .setBackgroundResource(R.drawable.textview_search_dn); - viewHolder.select_tv_type.setClickable(false); - } else { - viewHolder.select_tv_type - .setBackgroundResource(R.drawable.textview_search_up); - viewHolder.select_tv_type.setClickable(true); - } - } - - @Override - public SelectViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) { - - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.gameinformation_select_item, viewGroup, false); - return new SelectViewHolder(view); - } - - } - - @Override - public void onDestroy() { - - super.onDestroy(); - isDestroy = true; - EventBus.getDefault().unregister(this); - AppController.canclePendingRequests(GameStrategyFragment.class); - view = null; - fm_gamestrategy_rv_show = null; - linearLayoutManager = null; - adapter = null; - fm_gamestrategy_ll_loading = null; - reuse_no_connection = null; - rparams = null; - adapterMap = null; - typeList = null; - id = null; - type = null; - keyword = null; - gameName = null; - entrance = null; - } -} diff --git a/app/src/main/res/drawable-hdpi/frame_left.png b/app/src/main/res/drawable-hdpi/frame_left.png new file mode 100644 index 0000000000..115d1257f0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_left.png differ diff --git a/app/src/main/res/drawable-hdpi/frame_left_square.png b/app/src/main/res/drawable-hdpi/frame_left_square.png new file mode 100644 index 0000000000..294b630957 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_left_square.png differ diff --git a/app/src/main/res/drawable-hdpi/frame_right.png b/app/src/main/res/drawable-hdpi/frame_right.png new file mode 100644 index 0000000000..616edf02c0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_right.png differ diff --git a/app/src/main/res/drawable-hdpi/frame_right_square.png b/app/src/main/res/drawable-hdpi/frame_right_square.png new file mode 100644 index 0000000000..b20946f16e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_right_square.png differ diff --git a/app/src/main/res/drawable-hdpi/frame_top.png b/app/src/main/res/drawable-hdpi/frame_top.png new file mode 100644 index 0000000000..9868fca9f0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_top.png differ diff --git a/app/src/main/res/drawable-hdpi/frame_top_no_back.png b/app/src/main/res/drawable-hdpi/frame_top_no_back.png new file mode 100644 index 0000000000..3997e16334 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/frame_top_no_back.png differ diff --git a/app/src/main/res/drawable/border_white_bg.xml b/app/src/main/res/drawable/border_white_bg.xml index 00694ff784..3ff397425a 100644 --- a/app/src/main/res/drawable/border_white_bg.xml +++ b/app/src/main/res/drawable/border_white_bg.xml @@ -6,8 +6,8 @@ + android:color="#ff9601" /> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_green_up.xml b/app/src/main/res/drawable/textview_green_up.xml index 632276c61b..28e1aea20f 100644 --- a/app/src/main/res/drawable/textview_green_up.xml +++ b/app/src/main/res/drawable/textview_green_up.xml @@ -2,8 +2,8 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/game_download_dialog.xml b/app/src/main/res/layout/game_download_dialog.xml index ce868f4e3a..c8bf08e765 100644 --- a/app/src/main/res/layout/game_download_dialog.xml +++ b/app/src/main/res/layout/game_download_dialog.xml @@ -42,6 +42,31 @@ android:layout_marginBottom="10dp" android:orientation="horizontal" > + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_news_type_list_item.xml b/app/src/main/res/layout/game_news_type_list_item.xml index 3b142d6dbc..b01ae47949 100644 --- a/app/src/main/res/layout/game_news_type_list_item.xml +++ b/app/src/main/res/layout/game_news_type_list_item.xml @@ -1,10 +1,14 @@ + android:paddingRight="5dp" + android:paddingLeft="5dp" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:clickable="true"> + android:layout_width="20dp" + android:layout_height="20dp" + android:src="@drawable/userinfo_more" + android:scaleType="fitXY" /> + + android:orientation="vertical"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/home_consolegame_item.xml b/app/src/main/res/layout/home_consolegame_item.xml index e71e314a23..4238bcc429 100644 --- a/app/src/main/res/layout/home_consolegame_item.xml +++ b/app/src/main/res/layout/home_consolegame_item.xml @@ -13,33 +13,35 @@ app:contentPaddingBottom="15dp" app:contentPaddingTop="15dp" app:contentPaddingRight="12dp" - app:contentPaddingLeft="12dp" + app:contentPaddingLeft="6dp" app:cardUseCompatPadding="true"> + - + android:clipChildren="false" + android:visibility="gone"/> + android:layout_marginRight="11dp" + android:layout_toRightOf="@+id/home1_game_order" + android:layout_marginLeft="6dp"/> + + + - - + android:orientation="horizontal"> diff --git a/app/src/main/res/layout/home_game_test_item.xml b/app/src/main/res/layout/home_game_test_item.xml index ea5f7ee691..1dd5e4ca93 100644 --- a/app/src/main/res/layout/home_game_test_item.xml +++ b/app/src/main/res/layout/home_game_test_item.xml @@ -1,163 +1,186 @@ - + android:layout_marginLeft="@dimen/cardview_mar_left" + android:layout_marginRight="@dimen/cardview_mar_left" + android:clickable="true" + android:foreground="?android:attr/selectableItemBackground" + app:cardCornerRadius="0dp" + app:cardElevation="2dp" + app:contentPaddingBottom="15dp" + app:contentPaddingTop="15dp" + app:contentPaddingRight="12dp" + app:contentPaddingLeft="6dp" + app:cardUseCompatPadding="true"> - - - - - - - + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:id="@+id/home2_download_btn" + android:layout_width="60dp" + android:layout_height="28.5dp" + android:background="@drawable/textview_blue_style" + android:gravity="center" + android:text="下载" + android:textColor="#ffffff" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:textSize="14sp" /> - - + - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/image_card_game_head_item.xml b/app/src/main/res/layout/image_card_game_head_item.xml new file mode 100644 index 0000000000..683b3f87db --- /dev/null +++ b/app/src/main/res/layout/image_card_game_head_item.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/image_card_home_game_image_item.xml b/app/src/main/res/layout/image_card_home_game_image_item.xml new file mode 100644 index 0000000000..68b26f28cf --- /dev/null +++ b/app/src/main/res/layout/image_card_home_game_image_item.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/image_card_home_game_normal_item.xml b/app/src/main/res/layout/image_card_home_game_normal_item.xml new file mode 100644 index 0000000000..8484279359 --- /dev/null +++ b/app/src/main/res/layout/image_card_home_game_normal_item.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/image_card_home_game_test_item.xml b/app/src/main/res/layout/image_card_home_game_test_item.xml new file mode 100644 index 0000000000..21a6eb05f1 --- /dev/null +++ b/app/src/main/res/layout/image_card_home_game_test_item.xml @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file