From c97db56a74fb6229447689593a291ed58e50e97b Mon Sep 17 00:00:00 2001 From: huangzhuanghua <401742778@qq.com> Date: Tue, 21 Jun 2016 11:56:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E6=94=B6?= =?UTF-8?q?=E9=9B=86=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=8E=BB=E6=8E=89=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=8A=A0=E8=BD=BD=E6=9B=B4=E5=A4=9A=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E9=97=BB=E5=92=8C=E4=B8=8B=E8=BD=BD=E6=95=B0=E6=8D=AE=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 - .../java/com/gh/common/util/ImageUtils.java | 24 ++- ...{Gh_ImageView.java => Gh_ImageLayout.java} | 9 +- .../gh/gamecenter/GameDetailsActivity.java | 17 +- .../com/gh/gamecenter/HotCardActivity.java | 12 +- .../java/com/gh/gamecenter/MainActivity.java | 3 +- .../java/com/gh/gamecenter/NewsActivity.java | 31 +-- .../gh/gamecenter/NewsOrRaidersActivity.java | 12 ++ .../com/gh/gamecenter/OriginalActivity.java | 30 +++ .../gh/gamecenter/SplashScreenActivity.java | 31 ++- .../com/gh/gamecenter/SuggestionActivity.java | 1 - .../com/gh/gamecenter/ViewImageActivity.java | 114 +++++++++-- .../adapter/NewsOrRaidersListAdapter.java | 38 ++-- .../gamecenter/adapter/OriginalAdapter.java | 182 +++++++++++------- .../download/GameUpdateFragment.java | 86 ++++++--- .../gamecenter/entity/GameDetailsEntity.java | 14 -- .../gamecenter/game/Game1FragmentAdapter.java | 14 +- .../com/gh/gamecenter/game/Game2Fragment.java | 14 ++ .../gamecenter/game/Game2FragmentAdapter.java | 52 +++-- .../gamedetails/GameDetailsFragment.java | 6 +- .../gamedetails/GameInformationFragment.java | 108 +++++++---- .../gamedetails/GameStrategyFragment.java | 109 +++++++---- .../gamecenter/home/HomeFragmentAdapter.java | 18 +- .../manager/DataCollectionManager.java | 63 +++++- .../gh/gamecenter/plugin/Plugin1Fragment.java | 18 +- .../plugin/Plugin1FragmentAdapter.java | 58 +++--- .../plugin/Plugin2FragmentAdapter.java | 8 +- .../plugin/Plugin3FragmentAdapter.java | 8 +- .../search/Search1DetailFragmentAdapter.java | 6 +- .../Search2GameListFragmentAdapter.java | 6 +- app/src/main/res/layout/viewimage_item.xml | 16 +- 31 files changed, 744 insertions(+), 365 deletions(-) rename app/src/main/java/com/gh/common/view/{Gh_ImageView.java => Gh_ImageLayout.java} (82%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5a5dc0413c..5706edd9cd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -123,7 +123,6 @@ android:screenOrientation="portrait" /> >() { - }.getType(); + Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); GameManager manager = new GameManager(getApplicationContext()); List gameList = gson @@ -179,14 +178,13 @@ public class HotCardActivity extends BaseActivity { for (GameEntity entity : gameList) { // 黄壮华 初始化游戏状态 修改2015/8/15 entity.setEntryMap(gameMap.get(entity.getName())); - adapter.getList().add(entity); - adapter.notifyItemInserted(adapter.getList().size() - 1); for (ApkEntity apkEntity : entity.getApk()) { - manager.addOrUpdate(new GameInfo( - apkEntity.getPackageName(), entity.getId(), entity - .getName())); + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + entity.getId(), entity.getName())); } } + adapter.getList().addAll(gameList); + adapter.notifyItemRangeInserted(adapter.getList().size() - gameList.size(), gameList.size()); } // 黄壮华 获取游戏位置信息 修改2015/8/15 diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 4c3ff75ced..2baf80e81d 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -235,8 +235,7 @@ public class MainActivity extends BaseFragmentActivity implements .getConnectedType(MainActivity.this)); map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(MainActivity.this, - "download", map); + DataCollectionManager.onEvent(MainActivity.this, "download", map); entryMap.put(PackageUtils.getPackageNameByPath( getApplicationContext(), diff --git a/app/src/main/java/com/gh/gamecenter/NewsActivity.java b/app/src/main/java/com/gh/gamecenter/NewsActivity.java index 98fda54cf9..8b2b6e3222 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsActivity.java @@ -328,8 +328,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { NetworkUtils.getConnectedType(this)); map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(this, "download", - map); + DataCollectionManager.onEvent(this, "download", map); DownloadEntry entry = new DownloadEntry(); @@ -465,9 +464,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { .getConnectedType(NewsActivity.this)); map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent( - NewsActivity.this, "download", - map); + DataCollectionManager.onEvent(NewsActivity.this, "download", map); DownloadEntry entry = new DownloadEntry(); @@ -767,6 +764,12 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } if (gameEntity.getApk() == null) { essaydetails_ll_bottom.setVisibility(View.GONE); + } else if (gameEntity.getApk().isEmpty()) { + essaydetails_ll_bottom.setVisibility(View.VISIBLE); + essaydetails_tv_download.setText("暂无下载"); + essaydetails_tv_download.setBackgroundResource(R.drawable.textview_gray_style); + essaydetails_tv_download.setTextColor(0xFF999999); + essaydetails_tv_download.setClickable(false); } else if (Config.isShow) { essaydetails_ll_bottom.setVisibility(View.VISIBLE); String url = gameEntity.getApk().get(0).getUrl(); @@ -781,6 +784,9 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } } } + if (gameEntity != null && "光环助手".equals(gameEntity.getName())) { + essaydetails_ll_bottom.setVisibility(View.GONE); + } adapter.notifyItemChanged(0); } @@ -1075,19 +1081,11 @@ public class NewsActivity extends BaseActivity implements OnClickListener { view.loadUrl("javascript:(function(){" + "var imgs = document.getElementsByTagName(\"img\");" + "for (var i = 0; i < imgs.length - 1; i++) {" - + " if (typeof(imgs[i].high_quality_image) == 'undefined') {" - + " window.imagelistener.addImage(imgs[i].src);" - + " } else {" - + " window.imagelistener.addImage(imgs[i].high_quality_image);" - + " }" + + " window.imagelistener.addImage(imgs[i].src);" + "}" + "for (var i = 0; i < imgs.length - 1; i++) {" + " imgs[i].onclick = function() {" - + " if (typeof(this.high_quality_image) == 'undefined') {" - + " window.imagelistener.openImage(this.src);" - + " } else {" - + " window.imagelistener.openImage(this.high_quality_image);" - + " }" + + " window.imagelistener.openImage(this.src);" + " }" + "}" + "var as = document.getElementsByTagName(\"a\");" @@ -1255,6 +1253,9 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } } } + if (gameEntity != null && "光环助手".equals(gameEntity.getName())) { + essaydetails_ll_bottom.setVisibility(View.GONE); + } DownloadManager.getInstance(this).addObserver(dataWatcher); } diff --git a/app/src/main/java/com/gh/gamecenter/NewsOrRaidersActivity.java b/app/src/main/java/com/gh/gamecenter/NewsOrRaidersActivity.java index 9fa6b5ce68..c19e1a568e 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsOrRaidersActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsOrRaidersActivity.java @@ -129,6 +129,18 @@ public class NewsOrRaidersActivity extends BaseActivity { news_rl_label.setLayoutParams(rparams); } } + + @Override + public void onScrollStateChanged(RecyclerView recyclerView, + int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (!isDestroy && newState == RecyclerView.SCROLL_STATE_IDLE + && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { + if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) { + adapter.addList(); + } + } + } }); news_list.addItemDecoration(new VerticalItemDecoration(this, 1)); } diff --git a/app/src/main/java/com/gh/gamecenter/OriginalActivity.java b/app/src/main/java/com/gh/gamecenter/OriginalActivity.java index 214df9d559..5bd6159823 100644 --- a/app/src/main/java/com/gh/gamecenter/OriginalActivity.java +++ b/app/src/main/java/com/gh/gamecenter/OriginalActivity.java @@ -25,6 +25,8 @@ public class OriginalActivity extends BaseActivity implements SwipeRefreshLayout private ProgressBarCircularIndeterminate original_pb_loading; private LinearLayout reuse_no_connection; + private boolean isDestroy; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -33,6 +35,8 @@ public class OriginalActivity extends BaseActivity implements SwipeRefreshLayout init(contentView, "原创"); + isDestroy = false; + original_swipe_refresh.setColorSchemeResources(R.color.theme_colors); original_swipe_refresh.setOnRefreshListener(this); @@ -53,6 +57,19 @@ public class OriginalActivity extends BaseActivity implements SwipeRefreshLayout original_pb_loading, reuse_no_connection, true); original_list.setAdapter(adapter); original_list.addItemDecoration(new VerticalItemDecoration(this, 1)); + original_list.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + + if (!isDestroy && newState == RecyclerView.SCROLL_STATE_IDLE + && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { + if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) { + adapter.addList(adapter.getNewsList().size()); + } + } + } + }); } private Handler handler = new Handler(); @@ -70,4 +87,17 @@ public class OriginalActivity extends BaseActivity implements SwipeRefreshLayout public void onRefresh() { handler.postDelayed(runnable, 1000); } + + @Override + protected void onDestroy() { + super.onDestroy(); + isDestroy = true; + original_swipe_refresh = null; + original_list = null; + layoutManager = null; + adapter = null; + original_pb_loading = null; + reuse_no_connection = null; + handler = null; + } } diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 07ff1b78fa..2cec51c81d 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -484,7 +484,7 @@ public class SplashScreenActivity extends BaseActivity { Collections.sort(list, comparator); StringBuilder builder = new StringBuilder(); - String packages = null; + String packages; PackageManager.clearUpdateList(); for (int i = 0, sizei = (list.size() / 10) + 1; i < sizei; i++) { builder.delete(0, builder.length()); @@ -501,15 +501,34 @@ public class SplashScreenActivity extends BaseActivity { @Override public void onResponse(JSONArray response) { - Utils.log("getUpdateList=" - + response.toString()); + Utils.log("getUpdateList=" + response.toString()); if (response.length() != 0) { Gson gson = new Gson(); Type listType = new TypeToken>() {}.getType(); - ArrayList games = gson - .fromJson(response.toString(), - listType); + ArrayList games = gson.fromJson(response.toString(), listType); + GameUpdateEntity gameUpdateEntity; + for (int i = 0; i < games.size(); i++) { + gameUpdateEntity = games.get(i); + // 判断是否gh_version是否相同 + String gh_version = (String) PackageUtils + .getMetaData(SplashScreenActivity.this, gameUpdateEntity.getPackageName(), "gh_version"); + if (gh_version != null) { + gh_version = gh_version.substring(2); + // 判断gh_version是否相同 + if (gh_version.equals(gameUpdateEntity.getGhVersion())) { + // 判断version是否相同 + String version = PackageUtils + .getVersionByPackage(SplashScreenActivity.this, gameUpdateEntity.getPackageName()); + if (version.equals(gameUpdateEntity.getVersion())) { + // 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包 + games.remove(i); + i--; + continue; + } + } + } + } PackageManager.addUpdateList(games); } } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index b839ce0b4e..6bac7525fc 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -25,7 +25,6 @@ import com.gh.base.AppController; import com.gh.base.BaseActivity; import com.gh.common.constant.Config; import com.gh.common.util.PackageUtils; -import com.gh.common.util.Utils; import org.json.JSONException; import org.json.JSONObject; diff --git a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java index 790884af56..a53bdcc86a 100644 --- a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java @@ -2,21 +2,28 @@ package com.gh.gamecenter; import android.content.Intent; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; import com.gh.common.util.ImageUtils; -import com.gh.common.view.Gh_ImageView; -import com.gh.common.view.Gh_ImageView.OnSingleTapListener; +import com.gh.common.view.Gh_ImageLayout; +import com.gh.common.view.Gh_ImageLayout.OnSingleTapListener; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.ArrayList; /** @@ -39,9 +46,42 @@ public class ViewImageActivity extends BaseActivity implements private int width; private String scaleType; + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + notifyItemChanged(msg.arg1); + } + }; + + private void notifyItemChanged(int position) { + Object object = viewimage_vp_show.findViewWithTag(position); + if (object != null) { + RelativeLayout view = (RelativeLayout) object; + ImageView imageView = (ImageView) view.findViewById(R.id.viewimage_iv_show); + final ProgressBarCircularIndeterminate progressBar = (ProgressBarCircularIndeterminate) view.findViewById(R.id.viewimage_pb_loading); + progressBar.setVisibility(View.VISIBLE); + if (scaleType != null) { + ImageUtils.getInstance(getApplicationContext()).display( + urls.get(position), imageView, ScaleType.FIT_CENTER, new ImageUtils.OnLoadingCompleteListener() { + @Override + public void onLoadingComplete() { + progressBar.setVisibility(View.GONE); + } + }); + } else { + ImageUtils.getInstance(getApplicationContext()).display( + urls.get(position), imageView, new ImageUtils.OnLoadingCompleteListener() { + @Override + public void onLoadingComplete() { + progressBar.setVisibility(View.GONE); + } + }); + } + } + } + @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); Intent intent = getIntent(); @@ -49,6 +89,10 @@ public class ViewImageActivity extends BaseActivity implements current = intent.getIntExtra("current", 0); scaleType = intent.getStringExtra("ScaleType"); + if (savedInstanceState != null) { + current = savedInstanceState.getInt("currentItem", 0); + } + setContentView(R.layout.activity_viewimage); DisplayMetrics outMetrics = new DisplayMetrics(); @@ -70,20 +114,26 @@ public class ViewImageActivity extends BaseActivity implements viewimage_vp_show.addOnPageChangeListener(this); } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("currentItem", viewimage_vp_show.getCurrentItem()); + } + private class ViewImageAdapter extends PagerAdapter implements OnSingleTapListener { @Override public int getCount() { - return urls.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { - - Gh_ImageView imageView = new Gh_ImageView(ViewImageActivity.this); - imageView.setOnSingleTapListener(this); + Gh_ImageLayout view = (Gh_ImageLayout) View.inflate(container.getContext(), + R.layout.viewimage_item, null); + view.setOnSingleTapListener(this); + ImageView imageView = (ImageView) view.findViewById(R.id.viewimage_iv_show); if (scaleType != null) { ImageUtils.getInstance(getApplicationContext()).display( urls.get(position), imageView, ScaleType.FIT_CENTER); @@ -91,40 +141,40 @@ public class ViewImageActivity extends BaseActivity implements ImageUtils.getInstance(getApplicationContext()).display( urls.get(position), imageView); } - container.addView(imageView); - return imageView; + if (!urls.get(position).startsWith("http://image.ghzhushou.com/pic/hq/")) { + checkUrl(urls.get(position)); + } + view.setTag(position); + container.addView(view); + return view; } @Override public boolean isViewFromObject(View view, Object object) { - return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { - container.removeView((View) object); object = null; } @Override public void onSingleTap() { - finish(); } + } @Override public void onPageScrollStateChanged(int newState) { - } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - if (positionOffset != 0) { rparams.leftMargin = (int) (width * (positionOffset + position)); viewimage_slide_line.setLayoutParams(rparams); @@ -133,13 +183,45 @@ public class ViewImageActivity extends BaseActivity implements @Override public void onPageSelected(int position) { - } + private void checkUrl(final String url) { + if (!url.startsWith("http://image.ghzhushou.com/pic/")){ + return; + } + new Thread(){ + @Override + public void run() { + try { + String newUrl = "http://image.ghzhushou.com/pic/hq" + url.substring(url.lastIndexOf("/")); + HttpURLConnection connection = (HttpURLConnection) new URL(newUrl).openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5 * 1000); + connection.setReadTimeout(5 * 1000); + connection.connect(); + int code = connection.getResponseCode(); + if (code == 200) { + //图片存在 + for (int i = 0, size = urls.size(); i < size; i++) { + if (urls.get(i).equals(url)){ + urls.set(i, newUrl); + Message msg = new Message(); + msg.arg1 = i; + handler.sendMessage(msg); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }.start(); + } + @Override protected void onDestroy() { - super.onDestroy(); viewimage_vp_show = null; adapter = null; diff --git a/app/src/main/java/com/gh/gamecenter/adapter/NewsOrRaidersListAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/NewsOrRaidersListAdapter.java index 5fd17aed52..135cf1b3a5 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/NewsOrRaidersListAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/NewsOrRaidersListAdapter.java @@ -95,7 +95,7 @@ public class NewsOrRaidersListAdapter extends private boolean isRemove = false; private boolean isLoading = false; - private boolean isLoaded = false; +// private boolean isLoaded = false; private boolean isNetworkError = false; private LayoutInflater layoutInflater; @@ -298,8 +298,8 @@ public class NewsOrRaidersListAdapter extends } refreshCount(); showRecyclerView(); - isLoaded = true; - notifyItemChanged(getItemCount() - 1); +// isLoaded = true; +// notifyItemChanged(getItemCount() - 1); } }, new Response.ErrorListener() { @@ -345,8 +345,8 @@ public class NewsOrRaidersListAdapter extends } } isLoading = false; - isLoaded = true; - notifyItemChanged(getItemCount() - 1); +// isLoaded = true; +// notifyItemChanged(getItemCount() - 1); } }, new Response.ErrorListener() { @@ -763,19 +763,21 @@ public class NewsOrRaidersListAdapter extends holder.footerview_progressbar.setVisibility(View.GONE); holder.footerview_tv_loading.setText("加载完毕"); holder.rootView.setClickable(false); - } else if (isLoaded) { - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("点击加载更多"); - holder.rootView.setClickable(true); - holder.rootView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - isLoaded = false; - notifyItemChanged(getItemCount() - 1); - addList(); - } - }); - } else { + } +// else if (isLoaded) { +// holder.footerview_progressbar.setVisibility(View.GONE); +// holder.footerview_tv_loading.setText("点击加载更多"); +// holder.rootView.setClickable(true); +// holder.rootView.setOnClickListener(new OnClickListener() { +// @Override +// public void onClick(View v) { +// isLoaded = false; +// notifyItemChanged(getItemCount() - 1); +// addList(); +// } +// }); +// } + else { holder.footerview_progressbar.setVisibility(View.VISIBLE); holder.footerview_tv_loading.setText("加载中..."); holder.rootView.setClickable(false); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/OriginalAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/OriginalAdapter.java index 3b68ae0602..b76a40461d 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/OriginalAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/OriginalAdapter.java @@ -2,12 +2,10 @@ package com.gh.gamecenter.adapter; import android.app.Activity; import android.content.Context; -import android.graphics.Color; import android.net.Uri; import android.support.v4.util.ArrayMap; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; @@ -23,14 +21,16 @@ import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.TimeoutError; import com.android.volley.VolleyError; +import com.android.volley.toolbox.DiskBasedCache; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.constant.Config; -import com.gh.common.util.DialogUtils; +import com.gh.common.constant.Constants; import com.gh.common.util.DisplayUtils; +import com.gh.common.util.GzipUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NewsUtils; -import com.gh.common.util.RandomUtils; +import com.gh.common.util.TimestampUtils; import com.gh.common.util.Utils; import com.gh.gamecenter.OriginalActivity; import com.gh.gamecenter.R; @@ -40,20 +40,16 @@ import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.w3c.dom.Text; +import java.io.File; import java.lang.reflect.Type; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; -import java.util.Locale; -import java.util.Random; /** * Created by LGT on 2016/6/3. @@ -67,14 +63,14 @@ public class OriginalAdapter extends RecyclerView.Adapter slideList; private List newsList; private ArrayMap viewsMap; + private List urlList; private boolean isLoading; private boolean isRemove; private boolean isNetworkError; - private boolean isLoaded; +// private boolean isLoaded; public OriginalAdapter(Activity act, RecyclerView recyclerView, @@ -89,14 +85,14 @@ public class OriginalAdapter extends RecyclerView.Adapter(); newsList = new ArrayList(); viewsMap = new ArrayMap(); + urlList = new ArrayList(); isLoading = false; isRemove = false; isNetworkError = false; - isLoaded = false; +// isLoaded = false; if (isLoad) { load(); @@ -119,8 +115,9 @@ public class OriginalAdapter extends RecyclerView.Adapter() { @Override public void onResponse(JSONArray response) { @@ -128,10 +125,8 @@ public class OriginalAdapter extends RecyclerView.Adapter>() {}.getType(); Gson gson = new Gson(); List list = gson.fromJson(response.toString(), listType); - for (int i = 0; i < list.size(); i++) { - newsList.add(list.get(i)); - notifyItemInserted(newsList.size()); - } + newsList.addAll(list); + notifyItemRangeInserted(newsList.size() - list.size(), list.size()); if (offset == 0 && game_swipe_refresh.isRefreshing()) { game_swipe_refresh.setRefreshing(false); @@ -139,12 +134,13 @@ public class OriginalAdapter extends RecyclerView.Adapter list, final int start) { + if (list == null || list.isEmpty()) { + return; + } StringBuilder ids = new StringBuilder(); for (int i = 0, size = list.size(); i < size; i++) { ids.append(list.get(i).getId()); ids.append("-"); } - final JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - Config.HOST + "v1d46/news/views?ids=" + ids.substring(0, ids.length() - 1) - + "&time=" + System.currentTimeMillis(), + final String url = "http://data.ghzhushou.com/v1d46/news/" + ids.substring(0, ids.length() - 1) + "/visit"; + if (!urlList.contains(url)) { + urlList.add(url); + } + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, new Response.Listener() { @Override public void onResponse(JSONArray response) { @@ -204,7 +205,6 @@ public class OriginalAdapter extends RecyclerView.Adapter() { @@ -444,6 +456,9 @@ public class OriginalAdapter extends RecyclerView.Adapter 60 && gap < 3600) { - return Math.floor(gap / 60) + "分钟前"; - } else if (gap >= 3600 && gap < 86400) { - return Math.floor(gap / 3600) + "小时前"; - } else { - SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()); - return format.format(time * 1000); - } - } + private static final String DEFAULT_CACHE_DIR = "volley"; - private void setNewsViwes(TextView textView, int views, String time) { - long now = System.currentTimeMillis() / 1000; - int gap = (int) (now - Long.valueOf(time)) / 100; - if (gap >= 40) { - gap = 40; + private void modifyVolleyCache(String id) { + String key = null; + for (int i = 0, size = urlList.size(); i < size; i++) { + if (urlList.get(i).contains(id)) { + key = urlList.get(i); + break; + } } - int factor = RandomUtils.nextInt(50 - gap) + (gap >= 40 ? RandomUtils.nextInt(40) : gap); - if (views == 0) { - views = 1; + if (key == null) { + return; } - if (factor == 0) { - factor = 1; + File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); + DiskBasedCache cache = new DiskBasedCache(cacheDir); + byte[] data = cache.getData(key); + if (data != null) { + try { + JSONArray jsonArray = new JSONArray(new String(GzipUtils.decompressBytes(data))); + JSONObject jsonObject; + for (int i = 0, size = jsonArray.length(); i < size; i++) { + jsonObject = jsonArray.getJSONObject(i); + if (jsonObject.getString("id").equals(id)) { + jsonObject.put("views", jsonObject.getInt("views") + 1); + break; + } + } + Utils.log(jsonArray.toString()); + cache.modify(key, GzipUtils.compressBytes(jsonArray.toString().getBytes())); + } catch (JSONException e) { + e.printStackTrace(); + } + } else { + Utils.log("modifyVolleyCache is null"); } - textView.setText(views * factor + "次浏览"); } private void setType(TextView textView, String type) { @@ -496,7 +516,7 @@ public class OriginalAdapter extends RecyclerView.Adapter getNewsList() { + return newsList; + } + } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java index b5753892ee..2d9953f752 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java @@ -222,28 +222,51 @@ public class GameUpdateFragment extends Fragment { if (response.length() != 0) { Gson gson = new Gson(); - GameUpdateEntity game = gson.fromJson( - response.toString(), GameUpdateEntity.class); - list.add(game); + Type listType = new TypeToken>() {}.getType(); + ArrayList games = gson.fromJson(response.toString(), listType); - int i = list.size() - 1; - locationMap.put(list.get(i).getPackageName(), i); - packageNameMap.put(list.get(i).getUrl(), list - .get(i).getPackageName()); - successMap.put(i, false); + GameUpdateEntity gameUpdateEntity; + for (int i = 0; i < games.size(); i++) { + gameUpdateEntity = games.get(i); + // 判断是否gh_version是否相同 + String gh_version = (String) PackageUtils + .getMetaData(getActivity(), gameUpdateEntity.getPackageName(), "gh_version"); + if (gh_version != null) { + gh_version = gh_version.substring(2); + // 判断gh_version是否相同 + if (gh_version.equals(gameUpdateEntity.getGhVersion())) { + // 判断version是否相同 + String version = PackageUtils + .getVersionByPackage(getActivity(), gameUpdateEntity.getPackageName()); + if (version.equals(gameUpdateEntity.getVersion())) { + // 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包 + games.remove(i); + i--; + continue; + } + } + } + } + + if (games.size() == 1) { + GameUpdateEntity game = games.get(0); + list.add(game); + + int i = list.size() - 1; + locationMap.put(list.get(i).getPackageName(), i); + packageNameMap.put(list.get(i).getUrl(), list.get(i).getPackageName()); + successMap.put(i, false); + + EventBus.getDefault().post(new EBDownloadChanged("update", + View.VISIBLE, list.size())); + } PackageManager.addUpdateList(list); gameupdate_ll_loading.setVisibility(View.GONE); - EventBus.getDefault().post( - new EBDownloadChanged("update", - View.VISIBLE, list.size())); + gameupdate_rv_show.getAdapter().notifyDataSetChanged(); - gameupdate_rv_show.getAdapter() - .notifyDataSetChanged(); - - if (!list.isEmpty() - && gameupdate_tv_none.getVisibility() == View.VISIBLE) { + if (!list.isEmpty() && gameupdate_tv_none.getVisibility() == View.VISIBLE) { gameupdate_tv_none.setVisibility(View.GONE); } } @@ -252,7 +275,6 @@ public class GameUpdateFragment extends Fragment { @Override public void onErrorResponse(VolleyError error) { - gameupdate_ll_loading.setVisibility(View.GONE); } }); @@ -346,15 +368,35 @@ public class GameUpdateFragment extends Fragment { @Override public void onResponse(JSONArray response) { - Utils.log("getUpdateList=" - + response.toString()); + Utils.log("getUpdateList=" + response.toString()); if (response.length() != 0) { Gson gson = new Gson(); Type listType = new TypeToken>() {}.getType(); - ArrayList games = gson - .fromJson(response.toString(), - listType); + ArrayList games = gson.fromJson(response.toString(), listType); + + GameUpdateEntity gameUpdateEntity; + for (int i = 0; i < games.size(); i++) { + gameUpdateEntity = games.get(i); + // 判断是否gh_version是否相同 + String gh_version = (String) PackageUtils + .getMetaData(getActivity(), gameUpdateEntity.getPackageName(), "gh_version"); + if (gh_version != null) { + gh_version = gh_version.substring(2); + // 判断gh_version是否相同 + if (gh_version.equals(gameUpdateEntity.getGhVersion())) { + // 判断version是否相同 + String version = PackageUtils + .getVersionByPackage(getActivity(), gameUpdateEntity.getPackageName()); + if (version.equals(gameUpdateEntity.getVersion())) { + // 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包 + games.remove(i); + i--; + continue; + } + } + } + } PackageManager.addUpdateList(games); list.addAll(games); diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameDetailsEntity.java b/app/src/main/java/com/gh/gamecenter/entity/GameDetailsEntity.java index 2836b33018..8d5fee9681 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameDetailsEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/GameDetailsEntity.java @@ -1,7 +1,5 @@ package com.gh.gamecenter.entity; -import com.google.gson.annotations.SerializedName; - import java.util.ArrayList; public class GameDetailsEntity { @@ -11,10 +9,6 @@ public class GameDetailsEntity { private String remind; private ArrayList news; private ArrayList gallery; - - @SerializedName("high_quality_image") - private ArrayList highGallery; - private String des; private String downloadAddWord; @@ -58,14 +52,6 @@ public class GameDetailsEntity { this.gallery = gallery; } - public ArrayList getHighGallery() { - return highGallery; - } - - public void setHighGallery(ArrayList highGallery) { - this.highGallery = highGallery; - } - public String getDes() { return des; } 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 c6211ea232..e15c2aef23 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -160,21 +160,15 @@ public class Game1FragmentAdapter extends } public void processingData(JSONArray response, int offset) { - Type listType = new TypeToken>() { - }.getType(); + Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); - List gameList = gson - .fromJson(response.toString(), listType); + List gameList = gson.fromJson(response.toString(), listType); GameManager manager = new GameManager(context); if (gameList != null && !gameList.isEmpty()) { for (GameEntity entity : gameList) { // 黄壮华 初始化游戏状态 修改2015/8/15 if (!TextUtils.isEmpty(entity.getName())) { entity.setEntryMap(gameMap.get(entity.getName())); - list.add(entity); - if (!fragment.isEverpause()) { - notifyItemInserted(list.size() - 1); - } for (ApkEntity apkEntity : entity.getApk()) { manager.addOrUpdate(new GameInfo( apkEntity.getPackageName(), entity.getId(), entity @@ -182,6 +176,10 @@ public class Game1FragmentAdapter extends } } } + list.addAll(gameList); + if (!fragment.isEverpause()) { + notifyItemRangeInserted(list.size() - gameList.size(), gameList.size()); + } } if (fragment.isEverpause()) { 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 f7fdcc04c4..5f6bd1872b 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java @@ -221,6 +221,20 @@ public class Game2Fragment extends Fragment implements OnRefreshListener { } } + @Override + public void onScrollStateChanged(RecyclerView recyclerView, + int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (!isDestroy + && newState == RecyclerView.SCROLL_STATE_IDLE + && layoutManager.findLastVisibleItemPosition() == adapter + .getItemCount() - 1) { + if (!adapter.isRemove() && !adapter.isLoading()) { + adapter.addList(adapter.getTotalSize()); + } + } + } + }); recyclerview.addItemDecoration(new VerticalItemDecoration( getActivity(), 1)); 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 56a95f241a..18d472cdd7 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java @@ -80,7 +80,8 @@ public class Game2FragmentAdapter extends private TextView game_tv_label; private boolean isRemove; - private boolean isLoaded; + private boolean isLoading; +// private boolean isLoaded; private boolean isNetworkError; private boolean isDestory; @@ -124,7 +125,8 @@ public class Game2FragmentAdapter extends beforeGameList = new ArrayList(); isRemove = false; - isLoaded = false; + isLoading = false; +// isLoaded = false; isNetworkError = false; isDestory = false; @@ -132,6 +134,10 @@ public class Game2FragmentAdapter extends } public void addList(final int offset) { + if (isLoading) { + return; + } + isLoading = true; JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/xincekapai?limit=10&offset=" + offset, @@ -142,14 +148,16 @@ public class Game2FragmentAdapter extends if (!isDestory) { processingData(response, offset); } - isLoaded = true; - notifyItemChanged(getItemCount() - 1); + isLoading = false; +// isLoaded = true; +// notifyItemChanged(getItemCount() - 1); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { + isLoading = false; // 无网络连接和访问超时 if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { @@ -480,19 +488,21 @@ public class Game2FragmentAdapter extends holder.footerview_progressbar.setVisibility(View.GONE); holder.footerview_tv_loading.setText("加载完毕"); holder.rootView.setClickable(false); - } else if (isLoaded) { - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("点击加载更多"); - holder.rootView.setClickable(true); - holder.rootView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isLoaded = false; - notifyItemChanged(getItemCount() - 1); - addList(getTotalSize()); - } - }); - } else { + } +// else if (isLoaded) { +// holder.footerview_progressbar.setVisibility(View.GONE); +// holder.footerview_tv_loading.setText("点击加载更多"); +// holder.rootView.setClickable(true); +// holder.rootView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// isLoaded = false; +// notifyItemChanged(getItemCount() - 1); +// addList(getTotalSize()); +// } +// }); +// } + else { holder.footerview_progressbar.setVisibility(View.VISIBLE); holder.footerview_tv_loading.setText("加载中..."); holder.rootView.setClickable(false); @@ -695,6 +705,14 @@ public class Game2FragmentAdapter extends + dayAfterTomorrowGameList.size() + beforeGameList.size(); } + public boolean isRemove() { + return isRemove; + } + + public boolean isLoading() { + return isLoading; + } + public List getTodayList() { return todayGameList; } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java index a9e2fb6fe0..2ca286a47c 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetails/GameDetailsFragment.java @@ -1237,11 +1237,7 @@ public class GameDetailsFragment extends Fragment { DataCollectionManager.onEvent(getActivity(), "click-item", map); Intent intent = new Intent(getActivity(), ViewImageActivity.class); - if (entity.getHighGallery() != null && entity.getHighGallery().size() != 0) { - intent.putStringArrayListExtra("urls", entity.getHighGallery()); - } else { - intent.putStringArrayListExtra("urls", entity.getGallery()); - } + intent.putStringArrayListExtra("urls", entity.getGallery()); intent.putExtra("current", getPosition()); startActivity(intent); } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java index e8b52cb798..e4fa22644c 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetails/GameInformationFragment.java @@ -52,11 +52,12 @@ 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 org.json.JSONObject; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -94,6 +95,7 @@ public class GameInformationFragment extends Fragment { private int column; private boolean isNull = false; + private boolean isLoading = false; private boolean isNetworkError = false; private boolean isDestroy = false; @@ -204,6 +206,19 @@ public class GameInformationFragment extends Fragment { 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)); @@ -266,6 +281,10 @@ public class GameInformationFragment extends Fragment { } private void getGameInformation(final int offset, final boolean isFirst) { + if (isLoading) { + return; + } + isLoading = true; if (offset == 0) { adapter = adapterMap.get(type); if (adapter == null) { @@ -291,11 +310,12 @@ public class GameInformationFragment extends Fragment { @Override public void onResponse(JSONArray response) { + isLoading = false; if (!isDestroy) { try { processingData(response, offset, isFirst); - adapter.setLoaded(true); - adapter.notifyItemChanged(adapter.getItemCount() - 2); +// adapter.setLoaded(true); +// adapter.notifyItemChanged(adapter.getItemCount() - 2); } catch (JSONException e) { e.printStackTrace(); } @@ -305,6 +325,7 @@ public class GameInformationFragment extends Fragment { @Override public void onErrorResponse(VolleyError error) { + isLoading = false; // 无网络连接和访问超时 if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { @@ -334,20 +355,17 @@ public class GameInformationFragment extends Fragment { } } - private void processingData(JSONArray response, int offset, boolean isFirst) - throws JSONException { + private void processingData(JSONArray response, int offset, boolean isFirst) throws JSONException { + Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); - int size = response.length(); + List newsList = gson.fromJson(response.toString(), listType); if (offset == 0) { fm_gameinformation_ll_loading.setVisibility(View.GONE); fm_gameinformation_rv_show.setVisibility(View.VISIBLE); } - for (int i = 0; i < size; i++) { - JSONObject jsonObject = response.getJSONObject(i); - adapter.getNewsList().add( - gson.fromJson(jsonObject.toString(), NewsEntity.class)); - adapter.notifyItemInserted(adapter.getNewsList().size() + 2); - } + 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); @@ -535,6 +553,10 @@ public class GameInformationFragment extends Fragment { } 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)); @@ -554,11 +576,12 @@ public class GameInformationFragment extends Fragment { @Override public void onResponse(JSONArray response) { + isLoading = false; if (!isDestroy) { try { processingSearchData(response); - adapter.setLoaded(true); - adapter.notifyItemChanged(adapter.getItemCount() - 2); +// adapter.setLoaded(true); +// adapter.notifyItemChanged(adapter.getItemCount() - 2); } catch (JSONException e) { e.printStackTrace(); } @@ -568,6 +591,7 @@ public class GameInformationFragment extends Fragment { @Override public void onErrorResponse(VolleyError error) { + isLoading = false; // 无网络连接和访问超时 if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { @@ -586,14 +610,12 @@ public class GameInformationFragment extends Fragment { } 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(); - for (int i = 0; i < size; i++) { - JSONObject jsonObject = response.getJSONObject(i); - adapter.getNewsList().add( - gson.fromJson(jsonObject.toString(), NewsEntity.class)); - adapter.notifyItemInserted(adapter.getNewsList().size() + 2); - } + adapter.getNewsList().addAll(newsList); + adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); if (size < 20) { adapter.setRemove(true); adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); @@ -607,21 +629,21 @@ public class GameInformationFragment extends Fragment { private ArrayList newsList; private boolean isRemove; - private boolean isLoaded; +// private boolean isLoaded; public GameInformationAdapter(ArrayList newsList) { this.newsList = newsList; isRemove = false; - isLoaded = false; +// isLoaded = false; } public ArrayList getNewsList() { return newsList; } - public void setLoaded(boolean isLoaded) { - this.isLoaded = isLoaded; - } +// public void setLoaded(boolean isLoaded) { +// this.isLoaded = isLoaded; +// } public boolean isRemove() { return isRemove; @@ -735,23 +757,25 @@ public class GameInformationFragment extends Fragment { } } }); - } 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 { + } +// 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); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java index 23e197b1e9..689695b6f0 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetails/GameStrategyFragment.java @@ -52,11 +52,12 @@ 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 org.json.JSONObject; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -94,6 +95,7 @@ public class GameStrategyFragment extends Fragment { private int column; private boolean isNull = false; + private boolean isLoading = false; private boolean isNetworkError = false; private boolean isDestroy = false; @@ -205,6 +207,19 @@ public class GameStrategyFragment extends Fragment { 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)); @@ -267,6 +282,10 @@ public class GameStrategyFragment extends Fragment { } private void getGameInformation(final int offset, final boolean isFirst) { + if (isLoading) { + return; + } + isLoading = true; if (offset == 0) { adapter = adapterMap.get(type); if (adapter == null) { @@ -291,11 +310,12 @@ public class GameStrategyFragment extends Fragment { @Override public void onResponse(JSONArray response) { + isLoading = false; if (!isDestroy) { try { processingData(response, offset, isFirst); - adapter.setLoaded(true); - adapter.notifyItemChanged(adapter.getItemCount() - 2); +// adapter.setLoaded(true); +// adapter.notifyItemChanged(adapter.getItemCount() - 2); } catch (JSONException e) { e.printStackTrace(); } @@ -305,6 +325,7 @@ public class GameStrategyFragment extends Fragment { @Override public void onErrorResponse(VolleyError error) { + isLoading = false; // 无网络连接和访问超时 if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { @@ -336,18 +357,16 @@ public class GameStrategyFragment extends Fragment { private void processingData(JSONArray response, int offset, boolean isFirst) throws JSONException { - Gson gson = new Gson(); - int size = response.length(); if (offset == 0) { fm_gamestrategy_ll_loading.setVisibility(View.GONE); fm_gamestrategy_rv_show.setVisibility(View.VISIBLE); } - for (int i = 0; i < size; i++) { - JSONObject jsonObject = response.getJSONObject(i); - adapter.getNewsList().add( - gson.fromJson(jsonObject.toString(), NewsEntity.class)); - adapter.notifyItemInserted(adapter.getNewsList().size() + 2); - } + 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); @@ -541,6 +560,10 @@ public class GameStrategyFragment extends Fragment { } 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)); @@ -560,11 +583,12 @@ public class GameStrategyFragment extends Fragment { @Override public void onResponse(JSONArray response) { + isLoading = false; if (!isDestroy) { try { processingSearchData(response); - adapter.setLoaded(true); - adapter.notifyItemChanged(adapter.getItemCount() - 2); +// adapter.setLoaded(true); +// adapter.notifyItemChanged(adapter.getItemCount() - 2); } catch (JSONException e) { e.printStackTrace(); @@ -575,6 +599,7 @@ public class GameStrategyFragment extends Fragment { @Override public void onErrorResponse(VolleyError error) { + isLoading = false; // 无网络连接和访问超时 if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { @@ -593,14 +618,12 @@ public class GameStrategyFragment extends Fragment { } 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(); - for (int i = 0; i < size; i++) { - JSONObject jsonObject = response.getJSONObject(i); - adapter.getNewsList().add( - gson.fromJson(jsonObject.toString(), NewsEntity.class)); - adapter.notifyItemInserted(adapter.getNewsList().size() + 2); - } + adapter.getNewsList().addAll(newsList); + adapter.notifyItemRangeInserted(adapter.getNewsList().size() - size + 3, size); if (size < 20) { adapter.setRemove(true); adapter.notifyItemRemoved(adapter.getNewsList().size() + 3); @@ -614,21 +637,21 @@ public class GameStrategyFragment extends Fragment { private ArrayList newsList; private boolean isRemove; - private boolean isLoaded; +// private boolean isLoaded; public GameStrategyAdapter(ArrayList newsList) { this.newsList = newsList; isRemove = false; - isLoaded = false; +// isLoaded = false; } public ArrayList getNewsList() { return newsList; } - public void setLoaded(boolean isLoaded) { - this.isLoaded = isLoaded; - } +// public void setLoaded(boolean isLoaded) { +// this.isLoaded = isLoaded; +// } public boolean isRemove() { return isRemove; @@ -748,24 +771,26 @@ public class GameStrategyFragment extends Fragment { } } }); - } 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 { + } +// 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); diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java index ee58d9f0b2..f8cdbea458 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.java @@ -1509,7 +1509,23 @@ public class HomeFragmentAdapter extends } else if (position == position_yuedujingxuan) { title.setText("阅读精选"); thumb.setBackgroundResource(R.drawable.home_yuedujingxuan); - link.setVisibility(View.GONE); + link.setVisibility(View.VISIBLE); + link.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + DataUtils.onEvent(context, "更多>", "阅读精选"); + + Map map = new HashMap(); + map.put("location", "阅读精选-更多"); + map.put("createOn", System.currentTimeMillis() / 1000); + map.put("page", "主页"); + DataCollectionManager.onEvent(context, "click-item", map); + + Intent intent = new Intent(context, OriginalActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + }); } else if (position == position_remenkapai) { title.setText("热门卡牌"); thumb.setBackgroundResource(R.drawable.home_remenkapai); diff --git a/app/src/main/java/com/gh/gamecenter/manager/DataCollectionManager.java b/app/src/main/java/com/gh/gamecenter/manager/DataCollectionManager.java index f600bc33e3..51e52dfd0b 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/DataCollectionManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/DataCollectionManager.java @@ -1,7 +1,6 @@ package com.gh.gamecenter.manager; import android.content.Context; -import android.util.Log; import com.android.volley.Request.Method; import com.android.volley.Response; @@ -34,6 +33,7 @@ public class DataCollectionManager { private DataCollectionManager(Context context) { mContext = context; dao = new DataCollectionDao(mContext); + isUploading = false; } public static DataCollectionManager getInstance(Context context) { @@ -64,8 +64,11 @@ public class DataCollectionManager { onEvent(context, entity, isUpload); } - public static void onEvent(Context context, String type, - Map map) { + public static void onEvent(Context context, String type, Map map) { + if ("news".equals(type) || "download".equals(type)) { + DataCollectionManager.getInstance(context).realTimeUpload(type, map); + return; + } onEvent(context, type, new JSONObject(map).toString(), true); } @@ -119,6 +122,43 @@ public class DataCollectionManager { } } + /* + * 实时上传 + */ + private void realTimeUpload(String type, Map map) { + String version = PackageUtils.getVersion(mContext); + String user = DeviceUtils.getDeviceID(mContext); + String channel = (String) PackageUtils.getMetaData(mContext, + mContext.getPackageName(), "TD_CHANNEL_ID"); + map.put("version", version); + map.put("user", user); + map.put("channel", channel); + Map params = new HashMap(); + params.put("type", type); + params.put("data", new JSONObject(map).toString()); + String url = "http://data.ghzhushou.com/collection/upload2"; + JSONObject body = new JSONObject(params); + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( + Method.POST, url, body.toString(), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Utils.log("realTimeUpload = " + response); + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // 上传失败,检查网络状态,继续上传 + Utils.log("realTimeUpload = " + error); + if (error.networkResponse != null) { + Utils.log(new String(error.networkResponse.data)); + } + } + }); + AppController.addToRequestQueue(request, DataCollectionManager.class); + } + /* * 统计点击数据 */ @@ -158,10 +198,15 @@ public class DataCollectionManager { } } + private boolean isUploading; + // 上传数据 - private void upload(List list) - throws JSONException { - String url = "http://114.215.139.210/data/collection/upload"; + private void upload(List list) throws JSONException { + if (isUploading) { + return; + } + isUploading = true; + String url = "http://data.ghzhushou.com/collection/upload"; final List ids = new ArrayList(); @@ -214,7 +259,7 @@ public class DataCollectionManager { new Response.Listener() { @Override public void onResponse(JSONObject response) { - + isUploading = false; Utils.log(response); try { if ("success".equals(response.getString("status"))) { @@ -222,14 +267,13 @@ public class DataCollectionManager { dao.delete(ids); } } catch (JSONException e) { - e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - + isUploading = false; // 上传失败,检查网络状态,继续上传 Utils.log(error); if (error.networkResponse != null) { @@ -237,7 +281,6 @@ public class DataCollectionManager { } } }); - Log.e("result", new String(request.getBody())); AppController.addToRequestQueue(request, DataCollectionManager.class); } diff --git a/app/src/main/java/com/gh/gamecenter/plugin/Plugin1Fragment.java b/app/src/main/java/com/gh/gamecenter/plugin/Plugin1Fragment.java index e299962007..472c2c8610 100644 --- a/app/src/main/java/com/gh/gamecenter/plugin/Plugin1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/plugin/Plugin1Fragment.java @@ -51,6 +51,7 @@ public class Plugin1Fragment extends Fragment implements OnRefreshListener { private View view; private RecyclerView recyclerview; + private LinearLayoutManager layoutManager; private SwipeRefreshLayout game_swipe_refresh; private Plugin1FragmentAdapter adapter; private LinearLayout reuse_no_connection; @@ -144,7 +145,8 @@ public class Plugin1Fragment extends Fragment implements OnRefreshListener { recyclerview = (RecyclerView) view.findViewById(R.id.game_list); recyclerview.setHasFixedSize(true); - recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); + layoutManager = new LinearLayoutManager(getActivity()); + recyclerview.setLayoutManager(layoutManager); // 黄壮华 添加 初始化游戏状态 修改2015/8/21 DownloadItemUtils.initializeGameMap(getActivity(), gameMap); @@ -171,6 +173,20 @@ public class Plugin1Fragment extends Fragment implements OnRefreshListener { dismissEntity, game_pb_loading, false); recyclerview.setAdapter(adapter); recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (newState == RecyclerView.SCROLL_STATE_IDLE + && layoutManager.findLastVisibleItemPosition() == 1 + adapter + .getList().size()) { + if (!adapter.isRemove() && !adapter.isLoading()) { + adapter.addList(adapter.getList().size()); + } + } + } + + }); EventBus.getDefault().register(this); } diff --git a/app/src/main/java/com/gh/gamecenter/plugin/Plugin1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/plugin/Plugin1FragmentAdapter.java index eeb80a99a4..d5f06e3c36 100644 --- a/app/src/main/java/com/gh/gamecenter/plugin/Plugin1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/plugin/Plugin1FragmentAdapter.java @@ -82,7 +82,7 @@ public class Plugin1FragmentAdapter extends private boolean isRemove; private boolean isLoading; - private boolean isLoaded; +// private boolean isLoaded; private boolean isNetworkError; private boolean isSlideError; private boolean isListError; @@ -131,7 +131,7 @@ public class Plugin1FragmentAdapter extends isRemove = false; isLoading = false; - isLoaded = false; +// isLoaded = false; isNetworkError = false; isSlideError = false; isListError = false; @@ -149,7 +149,6 @@ public class Plugin1FragmentAdapter extends @Override public void run() { initSlide(true); - addList(0); } }; @@ -176,6 +175,8 @@ public class Plugin1FragmentAdapter extends } notifyItemChanged(0); } + + addList(0); } }, new Response.ErrorListener() { @@ -192,6 +193,8 @@ public class Plugin1FragmentAdapter extends showView(); } } + + addList(0); } }); AppController.addToRequestQueue(slideRequest, Plugin1Fragment.class); @@ -211,8 +214,8 @@ public class Plugin1FragmentAdapter extends public void onResponse(JSONArray response) { processingData(response, offset); isLoading = false; - isLoaded = true; - notifyItemChanged(getItemCount() - 1); +// isLoaded = true; +// notifyItemChanged(getItemCount() - 1); } }, new Response.ErrorListener() { @@ -280,16 +283,15 @@ public class Plugin1FragmentAdapter extends for (GameEntity entity : gameList) { // 黄壮华 初始化游戏状态 修改2015/8/15 entity.setEntryMap(gameMap.get(entity.getName())); - list.add(entity); - if (!fragment.isHidden() && !fragment.isEverpause()) { - final int size = list.size(); - notifyItemInserted(size); - } for (ApkEntity apkEntity : entity.getApk()) { manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), entity.getId(), entity.getName())); } } + list.addAll(gameList); + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(list.size() - gameList.size() + 1, gameList.size()); + } } if (fragment.isHidden() || fragment.isEverpause()) { @@ -452,19 +454,21 @@ public class Plugin1FragmentAdapter extends holder.footerview_progressbar.setVisibility(View.GONE); holder.footerview_tv_loading.setText("加载完毕"); holder.rootView.setClickable(false); - } else if (isLoaded) { - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("点击加载更多"); - holder.rootView.setClickable(true); - holder.rootView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isLoaded = false; - notifyItemChanged(getItemCount() - 1); - addList(list.size()); - } - }); - } else { + } +// else if (isLoaded) { +// holder.footerview_progressbar.setVisibility(View.GONE); +// holder.footerview_tv_loading.setText("点击加载更多"); +// holder.rootView.setClickable(true); +// holder.rootView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// isLoaded = false; +// notifyItemChanged(getItemCount() - 1); +// addList(list.size()); +// } +// }); +// } + else { holder.footerview_progressbar.setVisibility(View.VISIBLE); holder.footerview_tv_loading.setText("加载中..."); holder.rootView.setClickable(false); @@ -576,6 +580,14 @@ public class Plugin1FragmentAdapter extends } } + public boolean isRemove() { + return isRemove; + } + + public boolean isLoading() { + return isLoading; + } + public List getList() { return list; } diff --git a/app/src/main/java/com/gh/gamecenter/plugin/Plugin2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/plugin/Plugin2FragmentAdapter.java index 0b17054817..810bd02737 100644 --- a/app/src/main/java/com/gh/gamecenter/plugin/Plugin2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/plugin/Plugin2FragmentAdapter.java @@ -206,15 +206,15 @@ public class Plugin2FragmentAdapter extends for (GameEntity entity : gameList) { // 黄壮华 初始化游戏状态 修改2015/8/15 entity.setEntryMap(gameMap.get(entity.getName())); - list.add(entity); - if (!fragment.isHidden() && !fragment.isEverpause()) { - notifyItemInserted(list.size() - 1); - } for (ApkEntity apkEntity : entity.getApk()) { manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), entity.getId(), entity.getName())); } } + list.addAll(gameList); + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(list.size() - gameList.size(), gameList.size()); + } } if (fragment.isHidden() || fragment.isEverpause()) { diff --git a/app/src/main/java/com/gh/gamecenter/plugin/Plugin3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/plugin/Plugin3FragmentAdapter.java index 080272db78..7f375efedd 100644 --- a/app/src/main/java/com/gh/gamecenter/plugin/Plugin3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/plugin/Plugin3FragmentAdapter.java @@ -214,15 +214,15 @@ public class Plugin3FragmentAdapter extends for (GameEntity entity : gameList) { // 黄壮华 初始化游戏状态 修改2015/8/15 entity.setEntryMap(gameMap.get(entity.getName())); - list.add(entity); - if (!fragment.isHidden() && !fragment.isEverpause()) { - notifyItemInserted(list.size() - 1); - } for (ApkEntity apkEntity : entity.getApk()) { manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), entity.getId(), entity.getName())); } } + list.addAll(gameList); + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(list.size() - gameList.size(), gameList.size()); + } } if (fragment.isHidden() || fragment.isEverpause()) { diff --git a/app/src/main/java/com/gh/gamecenter/search/Search1DetailFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/search/Search1DetailFragmentAdapter.java index 08a3ce71cf..7682374d7c 100644 --- a/app/src/main/java/com/gh/gamecenter/search/Search1DetailFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/search/Search1DetailFragmentAdapter.java @@ -100,10 +100,8 @@ public class Search1DetailFragmentAdapter extends RecyclerView.Adapter list = gson.fromJson(response.toString(), listType); if (list != null && list.size() > 0) { search_detail.setVisibility(View.VISIBLE); - for (int i = 0, size = list.size(); i < size; i++) { - gameList.add(list.get(i)); - notifyItemInserted(gameList.size() + 1); - } + gameList.addAll(list); + notifyItemRangeInserted(gameList.size() - list.size(), list.size()); } else { search_nogame.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/com/gh/gamecenter/search/Search2GameListFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/search/Search2GameListFragmentAdapter.java index cdca065f61..6225b67489 100644 --- a/app/src/main/java/com/gh/gamecenter/search/Search2GameListFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/search/Search2GameListFragmentAdapter.java @@ -102,10 +102,8 @@ public class Search2GameListFragmentAdapter extends List list = gson.fromJson(response.toString(), listType); if (list != null && list.size() > 0) { search_detail.setVisibility(View.VISIBLE); - for (int i = 0, size = list.size(); i < size; i++) { - gameList.add(list.get(i)); - notifyItemInserted(gameList.size() - 1); - } + gameList.addAll(list); + notifyItemRangeInserted(gameList.size() - list.size(), list.size()); } else { search_nogame.setVisibility(View.VISIBLE); } diff --git a/app/src/main/res/layout/viewimage_item.xml b/app/src/main/res/layout/viewimage_item.xml index ab721c1552..b96de8d431 100644 --- a/app/src/main/res/layout/viewimage_item.xml +++ b/app/src/main/res/layout/viewimage_item.xml @@ -1,12 +1,20 @@ - - - \ No newline at end of file + + + \ No newline at end of file