diff --git a/app/src/main/java/com/gh/common/constant/ItemViewType.java b/app/src/main/java/com/gh/common/constant/ItemViewType.java index 7117d0d930..902918063b 100644 --- a/app/src/main/java/com/gh/common/constant/ItemViewType.java +++ b/app/src/main/java/com/gh/common/constant/ItemViewType.java @@ -8,6 +8,7 @@ public class ItemViewType { public static final int COLUMN_HEADER = 0; // 专题头部布局 public static final int GAME_SLIDE = 1; // 滚动图布局 public static final int GAME_NORMAL = 2; // 正常游戏布局 + public static final int GAME_SUBJECT = 19; public static final int GAME_TEST = 3; // 测试游戏布局 public static final int GAME_IMAGE = 4; // 游戏大图布局 public static final int NEWS_HEADER = 5; // 新闻头部布局 diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index e3fd49a2ec..3c0786e1a9 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -3,6 +3,7 @@ package com.gh.common.databind; import android.content.Intent; import android.databinding.BindingAdapter; import android.support.v4.content.ContextCompat; +import android.support.v4.widget.SwipeRefreshLayout; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -18,6 +19,8 @@ import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.GameUtils; +import com.gh.common.util.GameViewUtils; +import com.gh.common.util.KaiFuUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.NewsUtils; import com.gh.common.util.PackageUtils; @@ -27,6 +30,7 @@ import com.gh.common.view.DownloadProgressBar; import com.gh.download.DownloadManager; import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.databinding.KaifuAddItemBinding; import com.gh.gamecenter.databinding.KaifuDetailItemRowBinding; import com.gh.gamecenter.entity.ApkEntity; @@ -412,4 +416,34 @@ public class BindingAdapters { Utils.toast(progressBar.getContext(), msg); } } + + @BindingAdapter({"gameLabelList", "subjectTag"}) + public static void setGameLabelList(LinearLayout layout, GameEntity gameEntity, String subjectTag) { + if (gameEntity == null) return; + if (gameEntity.getTest() != null) { + View testView = LayoutInflater.from(layout.getContext()).inflate(R.layout.game_test_label, null); + TextView testType = testView.findViewById(R.id.test_type); + TextView testTime = testView.findViewById(R.id.test_time); + String type = gameEntity.getTest().getType(); + KaiFuUtils.setKaiFuType(testType, type); + + if (gameEntity.getTest().getStart() == 0) { + testTime.setVisibility(View.GONE); + } else { + testTime.setText(GameViewUtils.getGameTestDate(gameEntity.getTest().getStart())); + } + } else { + GameViewUtils.setLabelList(layout.getContext(), layout, gameEntity.getTag(), subjectTag); + } + + } + + @BindingAdapter("isRefreshing") + public static void isRefreshing(SwipeRefreshLayout layout, LoadStatus status) { + if (status == LoadStatus.INIT_LOADING) { + layout.setRefreshing(true); + } else { + layout.setRefreshing(false); + } + } } diff --git a/app/src/main/java/com/gh/common/view/ExpendTextView.java b/app/src/main/java/com/gh/common/view/ExpendTextView.java index 6ac403032f..26ebd99dc4 100644 --- a/app/src/main/java/com/gh/common/view/ExpendTextView.java +++ b/app/src/main/java/com/gh/common/view/ExpendTextView.java @@ -72,11 +72,12 @@ public class ExpendTextView extends android.support.v7.widget.AppCompatTextView content = content.toString().trim() + mExpendText; } else { CharSequence lastText = mSnapshotText.subSequence(lastLineStart, lastLineEnd); - for (int i = 0; i < lastText.length(); i++) { + for (int i = lastText.length() - 1; i > 0; i--) { CharSequence sequence = lastText.subSequence(0, i); float w = paint.measureText(sequence.toString()); if (viewWidth - w > expendTextWidth) { content = mSnapshotText.subSequence(start, lastLineStart + i) + mExpendText; + break; } } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.java index 66c503920c..34b76a63de 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.java @@ -1,36 +1,33 @@ package com.gh.gamecenter.adapter.viewholder; -import android.view.View; -import android.widget.ProgressBar; -import android.widget.TextView; - import com.gh.base.BaseRecyclerViewHolder; -import com.gh.gamecenter.R; - -import butterknife.BindView; +import com.gh.gamecenter.databinding.GameHeadItemBinding; /** * Created by LGT on 2016/7/5. */ public class GameHeadViewHolder extends BaseRecyclerViewHolder { - @BindView(R.id.head_title) - public TextView title; +// @BindView(R.id.head_title) +// public TextView title; +// +// @BindView(R.id.head_more) +// public TextView more; +// +// @BindView(R.id.head_pb) +// public ProgressBar progressBar; +// +// @BindView(R.id.head_line) +// public View line; +// +// @BindView(R.id.head_line_top) +// public View lineTop; - @BindView(R.id.head_more) - public TextView more; + public GameHeadItemBinding binding; - @BindView(R.id.head_pb) - public ProgressBar progressBar; - - @BindView(R.id.head_line) - public View line; - - @BindView(R.id.head_line_top) - public View lineTop; - - public GameHeadViewHolder(View itemView) { - super(itemView); + public GameHeadViewHolder(GameHeadItemBinding bind) { + super(bind.getRoot()); + binding = bind; } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameTestViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameTestViewHolder.java index ba6f0c338e..52179f994c 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameTestViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameTestViewHolder.java @@ -1,26 +1,15 @@ package com.gh.gamecenter.adapter.viewholder; -import android.content.Context; import android.view.View; -import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; -import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.GameViewUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.KaiFuUtils; -import com.gh.common.util.StringUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.SubjectEntity; -import com.halo.assistant.fragment.game.GameFragmentAdapter; - -import java.util.Date; -import java.util.List; import butterknife.BindView; @@ -61,80 +50,80 @@ public class GameTestViewHolder extends GameViewHolder { } - public void initGameTestViewHolder(Context context, GameFragmentAdapter adapter, List subjectList, - List pluginList, int position, - final OnGameTestItemClickListener onGameTestItemClickListener) { - int offset = 1; - if (!pluginList.isEmpty()) { - offset += 1; - } - for (int i = 0, size = subjectList.size(); i < size; i++) { - if (position > offset && position <= subjectList.get(i).getData().size() + offset) { - final GameEntity gameEntity = subjectList.get(i).getData().get(position - offset - 1); - if (gameEntity.getTest() != null) { - int order = position - offset - 1; - if (subjectList.get(i).getData().get(0).getImage() != null) { - order--; - } - final SubjectEntity subjectEntity = subjectList.get(i); - if (subjectEntity.isOrder()) { - gameOrder.setVisibility(View.VISIBLE); - gameOrder.setText(String.valueOf(order + 1)); - } else { - gameOrder.setVisibility(View.GONE); - } - - ImageUtils.Companion.display(gameThumb, gameEntity.getIcon()); - gameName.setText(gameEntity.getName()); - if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { - gameDes.setText(gameEntity.getBrief()); - } else { - gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); - } - - String type = gameEntity.getTest().getType(); - KaiFuUtils.setKaiFuType(gameTestType, type); - - if (gameEntity.getTest().getStart() == 0) { - gameTestTime.setVisibility(View.GONE); - } else { - gameTestTime.setText(GameViewUtils.getGameTestDate(gameEntity.getTest().getStart())); - } - - final int finalI = i; - itemView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (onGameTestItemClickListener != null) { - onGameTestItemClickListener.onClick(gameEntity, subjectEntity, finalI); - } - } - }); - - if (gameEntity.getTest().getEnd() != 0) { - long endTime = Long.valueOf(gameEntity.getTest().getEnd() + "000"); - long todayTime = new Date().getTime(); - if (todayTime > endTime) { - // 测试时间已过 - gameEntity.setApk(null); - } - } - - DownloadItemUtils.setOnClickListener(context, - gameDownloadBtn, gameEntity, i, adapter, - StringUtils.buildString("(游戏-专题:", - subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])"), - StringUtils.buildString("游戏-专题-", - subjectEntity.getName(), ":", gameEntity.getName())); - - DownloadItemUtils.updateItem(context, gameEntity, this, true); -// adapter.initGameTest(this, gameEntity, order, subjectEntity); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - } +// public void initGameTestViewHolder(Context context, GameFragmentAdapter adapter, List subjectList, +// List pluginList, int position, +// final OnGameTestItemClickListener onGameTestItemClickListener) { +// int offset = 1; +// if (!pluginList.isEmpty()) { +// offset += 1; +// } +// for (int i = 0, size = subjectList.size(); i < size; i++) { +// if (position > offset && position <= subjectList.get(i).getData().size() + offset) { +// final GameEntity gameEntity = subjectList.get(i).getData().get(position - offset - 1); +// if (gameEntity.getTest() != null) { +// int order = position - offset - 1; +// if (subjectList.get(i).getData().get(0).getImage() != null) { +// order--; +// } +// final SubjectEntity subjectEntity = subjectList.get(i); +// if (subjectEntity.isOrder()) { +// gameOrder.setVisibility(View.VISIBLE); +// gameOrder.setText(String.valueOf(order + 1)); +// } else { +// gameOrder.setVisibility(View.GONE); +// } +// +// ImageUtils.Companion.display(gameThumb, gameEntity.getIcon()); +// gameName.setText(gameEntity.getName()); +// if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { +// gameDes.setText(gameEntity.getBrief()); +// } else { +// gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); +// } +// +// String type = gameEntity.getTest().getType(); +// KaiFuUtils.setKaiFuType(gameTestType, type); +// +// if (gameEntity.getTest().getStart() == 0) { +// gameTestTime.setVisibility(View.GONE); +// } else { +// gameTestTime.setText(GameViewUtils.getGameTestDate(gameEntity.getTest().getStart())); +// } +// +// final int finalI = i; +// itemView.setOnClickListener(new OnClickListener() { +// @Override +// public void onClick(View v) { +// if (onGameTestItemClickListener != null) { +// onGameTestItemClickListener.onClick(gameEntity, subjectEntity, finalI); +// } +// } +// }); +// +// if (gameEntity.getTest().getEnd() != 0) { +// long endTime = Long.valueOf(gameEntity.getTest().getEnd() + "000"); +// long todayTime = new Date().getTime(); +// if (todayTime > endTime) { +// // 测试时间已过 +// gameEntity.setApk(null); +// } +// } +// +// DownloadItemUtils.setOnClickListener(context, +// gameDownloadBtn, gameEntity, i, adapter, +// StringUtils.buildString("(游戏-专题:", +// subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])"), +// StringUtils.buildString("游戏-专题-", +// subjectEntity.getName(), ":", gameEntity.getName())); +// +// DownloadItemUtils.updateItem(context, gameEntity, this, true); +//// adapter.initGameTest(this, gameEntity, order, subjectEntity); +// break; +// } +// } +// offset = subjectList.get(i).getData().size() + offset + 1; +// } +// } public interface OnGameTestItemClickListener { void onClick(GameEntity gameEntity, SubjectEntity subjectEntity, int position); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java index eb8749f0a6..fb3fac02bb 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java @@ -12,6 +12,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.R; +import com.gh.gamecenter.databinding.GameItemBinding; import com.gh.gamecenter.entity.GameEntity; @@ -34,6 +35,17 @@ public class GameViewHolder extends BaseRecyclerViewHolder { super(itemView); } + public GameViewHolder(GameItemBinding binding) { + super(binding.getRoot()); + gameDownloadBtn = binding.downloadBtn; + gameProgressbar = binding.gameProgressbar; + gameInfo = binding.gameInfo; + gameLibaoIcon = binding.gameLibaoIcon; + gameDownloadPercentage = binding.downloadPercentage; + gameDes = binding.gameDes; + gameDownloadSpeed = binding.downloadSpeed; + } + public void initServerType(GameEntity gameEntity, Context context) { int paddRight = 0; String serverType = gameEntity.getServerType(); diff --git a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java index 7972205554..5727217da2 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java @@ -1,340 +1,340 @@ -package com.gh.gamecenter.fragment; - -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.LinearLayout; - -import com.facebook.drawee.backends.pipeline.Fresco; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.OnRequestCallBackListener; -import com.gh.base.fragment.BaseFragment; -import com.gh.common.util.DownloadItemUtils; -import com.gh.download.DownloadManager; -import com.gh.gamecenter.MainActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.entity.SubjectEntity; -import com.gh.gamecenter.eventbus.EBDownloadStatus; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBPackage; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.eventbus.EBUISwitch; -import com.halo.assistant.fragment.game.GameFragmentAdapter; -import com.lightgame.download.DataWatcher; -import com.lightgame.download.DownloadEntity; - -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by khy on 2016/12/6. - * 新主界面 - */ -public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener { - - private SwipeRefreshLayout mGameSwipeRefresh; - private RecyclerView mGameRv; - private GameFragmentAdapter adapter; - private LinearLayout mReuseNoConn; - private ProgressBarCircularIndeterminate mGameLoading; - - private boolean isEverpause; - - Runnable initPluginRunnable = new Runnable() { - @Override - public void run() { - if (adapter.isInitPlugin()) { - postDelayedRunnable(initPluginRunnable, 100); - } else { - adapter.initPlugin(); - } - } - }; - - Runnable runnable = new Runnable() { - @Override - public void run() { - adapter = new GameFragmentAdapter(GameFragment.this, mGameSwipeRefresh); - mGameRv.setAdapter(adapter); - } - }; - - private DataWatcher dataWatcher = new DataWatcher() { - @Override - public void onDataChanged(DownloadEntity downloadEntity) { - if (!mGameSwipeRefresh.isRefreshing()) { - ArrayList locationList = adapter.getLocationMap().get(downloadEntity.getPackageName()); - if (locationList != null && locationList.size() != 0) { - GameEntity gameEntity; - for (int location : locationList) { - if (location == 1) { // 刷新插件化模块 - ArrayList locationPluginList = adapter.getPluginLocationMap().get(downloadEntity.getPackageName()); - for (Integer locationPlugin : locationPluginList) { - gameEntity = adapter.getPluginList().get(locationPlugin); - RecyclerView.Adapter pluginAdapter = adapter.getPluginAdapter(); - if (gameEntity != null && pluginAdapter != null) { - DownloadItemUtils.processDate(getActivity(), gameEntity, - downloadEntity, pluginAdapter, locationPlugin); - } - } - } else { - gameEntity = adapter.getGameEntityByLocation(location); - if (gameEntity != null) { - DownloadItemUtils.processDate(getActivity(), gameEntity, - downloadEntity, adapter, location); - } - } - } - } - } - } - }; - private LinearLayoutManager mLayoutManager; - - @Override - protected int getLayoutId() { - return R.layout.fragment_game; - } - - @Override - protected void initView(final View view) { - super.initView(view); - - mReuseNoConn = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - mGameSwipeRefresh = (SwipeRefreshLayout) view.findViewById(R.id.fm_game_swipe_refresh); - mGameRv = (RecyclerView) view.findViewById(R.id.fm_game_rv_list); - mGameLoading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.fm_game_pb_loading); - - mReuseNoConn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mGameSwipeRefresh.setRefreshing(true); - mGameRv.setVisibility(View.VISIBLE); - mGameLoading.setVisibility(View.VISIBLE); - mReuseNoConn.setVisibility(View.GONE); - view.postDelayed(runnable, 1000); - } - }); - - mGameSwipeRefresh.setColorSchemeResources(R.color.theme); - mGameSwipeRefresh.setOnRefreshListener(this); - - ((DefaultItemAnimator) mGameRv.getItemAnimator()).setSupportsChangeAnimations(false); - mGameRv.setHasFixedSize(true); - mLayoutManager = new LinearLayoutManager(getActivity()); - mGameRv.setLayoutManager(mLayoutManager); - adapter = new GameFragmentAdapter(this, mGameSwipeRefresh); - mGameRv.setAdapter(adapter); - - mGameRv.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - Fresco.getImagePipeline().resume(); - } else { - Fresco.getImagePipeline().pause(); - } - - if (mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1 - && newState == RecyclerView.SCROLL_STATE_IDLE) adapter.initSubjectList(); - } - }); - - } - - // 打开下载按钮事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (("Refresh".equals(reuse.getType()) || "PlatformChanged".equals(reuse.getType())) - && adapter != null) { - adapter.notifyItemRangeChanged(0, adapter.getItemCount()); - } - } - - //下载被删除事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBDownloadStatus status) { - if ("delete".equals(status.getStatus())) { - DownloadManager.getInstance(getActivity()).removePlatform(status.getName(), status.getPlatform()); - - ArrayList locationList = adapter.getLocationMap().get(status.getPackageName()); - GameEntity gameEntity; - if (locationList != null && locationList.size() != 0) { - for (int location : locationList) { - if (location == 1) { // 刷新插件化模块 - ArrayList locationPluginList = adapter.getPluginLocationMap().get(status.getPackageName()); - for (Integer locationPlugin : locationPluginList) { - gameEntity = adapter.getPluginList().get(locationPlugin); - if (gameEntity != null && gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(status.getPlatform()); - } - } - } else { - gameEntity = adapter.getGameEntityByLocation(location); - if (gameEntity != null && gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(status.getPlatform()); - } - } - adapter.notifyItemChanged(location); - } - } - } else if ("plugin".equals(status.getStatus())) { - postDelayedRunnable(initPluginRunnable, 100); - } - } - - @Override - public void loadDone() { - if (mGameSwipeRefresh != null && mGameSwipeRefresh.isRefreshing()) { - mGameSwipeRefresh.setRefreshing(false); - } - if (mGameLoading != null && mGameLoading.getVisibility() == View.VISIBLE) { - mGameLoading.setVisibility(View.GONE); - } - } - - @Override - public void loadDone(Object obj) { - if ("scrollTop".equals(obj)) { - mLayoutManager.smoothScrollToPosition(mGameRv, null, 0); - } - } - - @Override - public void loadError() { - mGameRv.setVisibility(View.GONE); - mGameLoading.setVisibility(View.GONE); - mReuseNoConn.setVisibility(View.VISIBLE); - } - - @Override - public void loadEmpty() { - - } - - //安装、卸载事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBPackage busFour) { - ArrayList locationList = adapter.getLocationMap().get(busFour.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - if (location == 1) { - List pluginList = adapter.getPluginList(); - for (int i = 0; i < pluginList.size(); i++) { - final GameEntity entity = pluginList.get(i); - final ArrayList apkEntities = entity.getApk(); - final ApkEntity pluginApkEntity = apkEntities.get(0); - - if (pluginApkEntity.getPackageName().equals(busFour.getPackageName())) { - if ("卸载".equals(busFour.getType()) && // 插件化过程中 卸载卸载原包后 更新下载按钮 - DownloadManager.getInstance(getContext()).getDownloadEntityByUrl(pluginApkEntity.getUrl()) != null) { - adapter.notifyItemChanged(1); - } else { - // 安装完成 插件化区域消失 - pluginList.remove(i); - if (pluginList.isEmpty()) { - adapter.initItemCount(); - adapter.notifyItemRemoved(1); - } else { - adapter.initPlugin(); - adapter.initLocationMap(); - adapter.notifyItemChanged(1); - } - } - break; - } - } - } else { - gameEntity = adapter.getGameEntityByLocation(location); - if ("安装".equals(busFour.getType())) { - for (ApkEntity apkEntity : gameEntity.getApk()) { - if (apkEntity.getPackageName().equals(busFour.getPackageName())) { - if (gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(apkEntity.getPlatform()); - } - adapter.notifyItemChanged(location); - break; - } - } - } else if ("卸载".equals(busFour.getType())) { - adapter.notifyItemChanged(location); - } - } - } - adapter.initLocationMap(); - } - } - - //连接上网络事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (mReuseNoConn.getVisibility() == View.VISIBLE) { - mGameSwipeRefresh.setRefreshing(true); - mGameRv.setVisibility(View.VISIBLE); - mGameLoading.setVisibility(View.GONE); - mReuseNoConn.setVisibility(View.GONE); - postDelayedRunnable(runnable, 1000); - } else if (adapter.isNetworkError()) { - adapter.setNetworkError(false); - adapter.notifyItemChanged(adapter.getItemCount() - 1); - adapter.initSubjectDigest(true); - } - } - } - - //Fragment界面切换事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUISwitch busNine) { - if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) { - if (busNine.getPosition() == 0) { - adapter.startAutoScroll(); - } else { - adapter.stopAutoScroll(); - } - } - } - - @Override - public void onResume() { - super.onResume(); - isEverpause = false; - for (SubjectEntity subjectEntity : adapter.getSubjectList()) { - for (GameEntity entity : subjectEntity.getData()) { - entity.setEntryMap(DownloadManager.getInstance(getActivity()).getEntryMap(entity.getName())); - } - } - for (GameEntity entity : adapter.getPluginList()) { - entity.setEntryMap(DownloadManager.getInstance(getActivity()).getEntryMap(entity.getName())); - } - adapter.notifyDataSetChanged(); - DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); - adapter.startAutoScroll(); - } - - @Override - public void onPause() { - super.onPause(); - isEverpause = true; - DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); - adapter.stopAutoScroll(); - } - - public boolean isEverpause() { - return isEverpause; - } - - @Override - public void onRefresh() { - postDelayedRunnable(runnable, 1000); - } - -} +//package com.gh.gamecenter.fragment; +// +//import android.support.v4.widget.SwipeRefreshLayout; +//import android.support.v7.widget.DefaultItemAnimator; +//import android.support.v7.widget.LinearLayoutManager; +//import android.support.v7.widget.RecyclerView; +//import android.view.View; +//import android.widget.LinearLayout; +// +//import com.facebook.drawee.backends.pipeline.Fresco; +//import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +//import com.gh.base.OnRequestCallBackListener; +//import com.gh.base.fragment.BaseFragment; +//import com.gh.common.util.DownloadItemUtils; +//import com.gh.download.DownloadManager; +//import com.gh.gamecenter.MainActivity; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.entity.ApkEntity; +//import com.gh.gamecenter.entity.GameEntity; +//import com.gh.gamecenter.entity.SubjectEntity; +//import com.gh.gamecenter.eventbus.EBDownloadStatus; +//import com.gh.gamecenter.eventbus.EBNetworkState; +//import com.gh.gamecenter.eventbus.EBPackage; +//import com.gh.gamecenter.eventbus.EBReuse; +//import com.gh.gamecenter.eventbus.EBUISwitch; +//import com.halo.assistant.fragment.game.GameFragmentAdapter; +//import com.lightgame.download.DataWatcher; +//import com.lightgame.download.DownloadEntity; +// +//import org.greenrobot.eventbus.Subscribe; +//import org.greenrobot.eventbus.ThreadMode; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * Created by khy on 2016/12/6. +// * 新主界面 +// */ +//public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener { +// +// private SwipeRefreshLayout mGameSwipeRefresh; +// private RecyclerView mGameRv; +// private GameFragmentAdapter adapter; +// private LinearLayout mReuseNoConn; +// private ProgressBarCircularIndeterminate mGameLoading; +// +// private boolean isEverpause; +// +// Runnable initPluginRunnable = new Runnable() { +// @Override +// public void run() { +// if (adapter.isInitPlugin()) { +// postDelayedRunnable(initPluginRunnable, 100); +// } else { +// adapter.initPlugin(); +// } +// } +// }; +// +// Runnable runnable = new Runnable() { +// @Override +// public void run() { +// adapter = new GameFragmentAdapter(GameFragment.this, mGameSwipeRefresh); +// mGameRv.setAdapter(adapter); +// } +// }; +// +// private DataWatcher dataWatcher = new DataWatcher() { +// @Override +// public void onDataChanged(DownloadEntity downloadEntity) { +// if (!mGameSwipeRefresh.isRefreshing()) { +// ArrayList locationList = adapter.getLocationMap().get(downloadEntity.getPackageName()); +// if (locationList != null && locationList.size() != 0) { +// GameEntity gameEntity; +// for (int location : locationList) { +// if (location == 1) { // 刷新插件化模块 +// ArrayList locationPluginList = adapter.getPluginLocationMap().get(downloadEntity.getPackageName()); +// for (Integer locationPlugin : locationPluginList) { +// gameEntity = adapter.getPluginList().get(locationPlugin); +// RecyclerView.Adapter pluginAdapter = adapter.getPluginAdapter(); +// if (gameEntity != null && pluginAdapter != null) { +// DownloadItemUtils.processDate(getActivity(), gameEntity, +// downloadEntity, pluginAdapter, locationPlugin); +// } +// } +// } else { +// gameEntity = adapter.getGameEntityByLocation(location); +// if (gameEntity != null) { +// DownloadItemUtils.processDate(getActivity(), gameEntity, +// downloadEntity, adapter, location); +// } +// } +// } +// } +// } +// } +// }; +// private LinearLayoutManager mLayoutManager; +// +// @Override +// protected int getLayoutId() { +// return R.layout.fragment_game; +// } +// +// @Override +// protected void initView(final View view) { +// super.initView(view); +// +// mReuseNoConn = (LinearLayout) view.findViewById(R.id.reuse_no_connection); +// mGameSwipeRefresh = (SwipeRefreshLayout) view.findViewById(R.id.fm_game_swipe_refresh); +// mGameRv = (RecyclerView) view.findViewById(R.id.fm_game_rv_list); +// mGameLoading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.fm_game_pb_loading); +// +// mReuseNoConn.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// mGameSwipeRefresh.setRefreshing(true); +// mGameRv.setVisibility(View.VISIBLE); +// mGameLoading.setVisibility(View.VISIBLE); +// mReuseNoConn.setVisibility(View.GONE); +// view.postDelayed(runnable, 1000); +// } +// }); +// +// mGameSwipeRefresh.setColorSchemeResources(R.color.theme); +// mGameSwipeRefresh.setOnRefreshListener(this); +// +// ((DefaultItemAnimator) mGameRv.getItemAnimator()).setSupportsChangeAnimations(false); +// mGameRv.setHasFixedSize(true); +// mLayoutManager = new LinearLayoutManager(getActivity()); +// mGameRv.setLayoutManager(mLayoutManager); +// adapter = new GameFragmentAdapter(this, mGameSwipeRefresh); +// mGameRv.setAdapter(adapter); +// +// mGameRv.addOnScrollListener(new RecyclerView.OnScrollListener() { +// @Override +// public void onScrollStateChanged(RecyclerView recyclerView, int newState) { +// if (newState == RecyclerView.SCROLL_STATE_IDLE) { +// Fresco.getImagePipeline().resume(); +// } else { +// Fresco.getImagePipeline().pause(); +// } +// +// if (mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1 +// && newState == RecyclerView.SCROLL_STATE_IDLE) adapter.initSubjectList(); +// } +// }); +// +// } +// +// // 打开下载按钮事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBReuse reuse) { +// if (("Refresh".equals(reuse.getType()) || "PlatformChanged".equals(reuse.getType())) +// && adapter != null) { +// adapter.notifyItemRangeChanged(0, adapter.getItemCount()); +// } +// } +// +// //下载被删除事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBDownloadStatus status) { +// if ("delete".equals(status.getStatus())) { +// DownloadManager.getInstance(getActivity()).removePlatform(status.getName(), status.getPlatform()); +// +// ArrayList locationList = adapter.getLocationMap().get(status.getPackageName()); +// GameEntity gameEntity; +// if (locationList != null && locationList.size() != 0) { +// for (int location : locationList) { +// if (location == 1) { // 刷新插件化模块 +// ArrayList locationPluginList = adapter.getPluginLocationMap().get(status.getPackageName()); +// for (Integer locationPlugin : locationPluginList) { +// gameEntity = adapter.getPluginList().get(locationPlugin); +// if (gameEntity != null && gameEntity.getEntryMap() != null) { +// gameEntity.getEntryMap().remove(status.getPlatform()); +// } +// } +// } else { +// gameEntity = adapter.getGameEntityByLocation(location); +// if (gameEntity != null && gameEntity.getEntryMap() != null) { +// gameEntity.getEntryMap().remove(status.getPlatform()); +// } +// } +// adapter.notifyItemChanged(location); +// } +// } +// } else if ("plugin".equals(status.getStatus())) { +// postDelayedRunnable(initPluginRunnable, 100); +// } +// } +// +// @Override +// public void loadDone() { +// if (mGameSwipeRefresh != null && mGameSwipeRefresh.isRefreshing()) { +// mGameSwipeRefresh.setRefreshing(false); +// } +// if (mGameLoading != null && mGameLoading.getVisibility() == View.VISIBLE) { +// mGameLoading.setVisibility(View.GONE); +// } +// } +// +// @Override +// public void loadDone(Object obj) { +// if ("scrollTop".equals(obj)) { +// mLayoutManager.smoothScrollToPosition(mGameRv, null, 0); +// } +// } +// +// @Override +// public void loadError() { +// mGameRv.setVisibility(View.GONE); +// mGameLoading.setVisibility(View.GONE); +// mReuseNoConn.setVisibility(View.VISIBLE); +// } +// +// @Override +// public void loadEmpty() { +// +// } +// +// //安装、卸载事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBPackage busFour) { +// ArrayList locationList = adapter.getLocationMap().get(busFour.getPackageName()); +// if (locationList != null) { +// GameEntity gameEntity; +// for (int location : locationList) { +// if (location == 1) { +// List pluginList = adapter.getPluginList(); +// for (int i = 0; i < pluginList.size(); i++) { +// final GameEntity entity = pluginList.get(i); +// final ArrayList apkEntities = entity.getApk(); +// final ApkEntity pluginApkEntity = apkEntities.get(0); +// +// if (pluginApkEntity.getPackageName().equals(busFour.getPackageName())) { +// if ("卸载".equals(busFour.getType()) && // 插件化过程中 卸载卸载原包后 更新下载按钮 +// DownloadManager.getInstance(getContext()).getDownloadEntityByUrl(pluginApkEntity.getUrl()) != null) { +// adapter.notifyItemChanged(1); +// } else { +// // 安装完成 插件化区域消失 +// pluginList.remove(i); +// if (pluginList.isEmpty()) { +// adapter.initItemCount(); +// adapter.notifyItemRemoved(1); +// } else { +// adapter.initPlugin(); +// adapter.initLocationMap(); +// adapter.notifyItemChanged(1); +// } +// } +// break; +// } +// } +// } else { +// gameEntity = adapter.getGameEntityByLocation(location); +// if ("安装".equals(busFour.getType())) { +// for (ApkEntity apkEntity : gameEntity.getApk()) { +// if (apkEntity.getPackageName().equals(busFour.getPackageName())) { +// if (gameEntity.getEntryMap() != null) { +// gameEntity.getEntryMap().remove(apkEntity.getPlatform()); +// } +// adapter.notifyItemChanged(location); +// break; +// } +// } +// } else if ("卸载".equals(busFour.getType())) { +// adapter.notifyItemChanged(location); +// } +// } +// } +// adapter.initLocationMap(); +// } +// } +// +// //连接上网络事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBNetworkState busNetworkState) { +// if (busNetworkState.isNetworkConnected()) { +// if (mReuseNoConn.getVisibility() == View.VISIBLE) { +// mGameSwipeRefresh.setRefreshing(true); +// mGameRv.setVisibility(View.VISIBLE); +// mGameLoading.setVisibility(View.GONE); +// mReuseNoConn.setVisibility(View.GONE); +// postDelayedRunnable(runnable, 1000); +// } else if (adapter.isNetworkError()) { +// adapter.setNetworkError(false); +// adapter.notifyItemChanged(adapter.getItemCount() - 1); +// adapter.initSubjectDigest(true); +// } +// } +// } +// +// //Fragment界面切换事件 +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onEventMainThread(EBUISwitch busNine) { +// if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) { +// if (busNine.getPosition() == 0) { +// adapter.startAutoScroll(); +// } else { +// adapter.stopAutoScroll(); +// } +// } +// } +// +// @Override +// public void onResume() { +// super.onResume(); +// isEverpause = false; +// for (SubjectEntity subjectEntity : adapter.getSubjectList()) { +// for (GameEntity entity : subjectEntity.getData()) { +// entity.setEntryMap(DownloadManager.getInstance(getActivity()).getEntryMap(entity.getName())); +// } +// } +// for (GameEntity entity : adapter.getPluginList()) { +// entity.setEntryMap(DownloadManager.getInstance(getActivity()).getEntryMap(entity.getName())); +// } +// adapter.notifyDataSetChanged(); +// DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); +// adapter.startAutoScroll(); +// } +// +// @Override +// public void onPause() { +// super.onPause(); +// isEverpause = true; +// DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); +// adapter.stopAutoScroll(); +// } +// +// public boolean isEverpause() { +// return isEverpause; +// } +// +// @Override +// public void onRefresh() { +// postDelayedRunnable(runnable, 1000); +// } +// +//} diff --git a/app/src/main/java/com/gh/gamecenter/fragment/GameWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/GameWrapperFragment.java index 3e288b7474..119475c4c4 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/GameWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/GameWrapperFragment.java @@ -8,6 +8,7 @@ import com.gh.base.fragment.BaseFragment; import com.gh.common.constant.Config; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBReuse; +import com.gh.gamecenter.game.GameFragment; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt new file mode 100644 index 0000000000..1947ba8be6 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt @@ -0,0 +1,97 @@ +package com.gh.gamecenter.game + +import android.arch.lifecycle.Observer +import android.arch.lifecycle.ViewModelProviders +import android.os.Bundle +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.View +import com.gh.base.fragment.BaseFragment +import com.gh.download.DownloadManager +import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.FragmentGameBinding +import com.lightgame.download.DataWatcher +import com.lightgame.download.DownloadEntity + +class GameFragment : BaseFragment() { + + private var mBinding: FragmentGameBinding? = null + +// private val mNoConn by bindView(R.id.reuse_no_connection) + + private var mViewModel: GameViewModel? = null + + private var mListAdapter: GameFragmentAdapter? = null + + private var mLayoutManager: LinearLayoutManager? = null + + private val dataWatcher = object : DataWatcher() { + override fun onDataChanged(downloadEntity: DownloadEntity) { + mListAdapter?.notifyItemByDownload(downloadEntity) + } + } + + override fun getLayoutId(): Int { + return R.layout.fragment_game + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + mViewModel = ViewModelProviders.of(this).get(GameViewModel::class.java) + mViewModel?.slideList?.observe(this, Observer { + if (it != null) mListAdapter?.setSlideList(it) + }) + mViewModel?.subjectDigestList?.observe(this, Observer { + if (it != null) mListAdapter?.setSubjectDigestList(it) + }) + mViewModel?.pluginList?.observe(this, Observer { + if (it != null) mListAdapter?.setPluginList(it) + }) + mViewModel?.subjectList?.observe(this, Observer { + if (it != null) { + mListAdapter?.setSubjectList(it) + } + }) + + mViewModel?.loadStatus?.observe(this, Observer { + if (it != null) mBinding?.loadStatus = it + }) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + mBinding = FragmentGameBinding.bind(view) + mListAdapter = GameFragmentAdapter(context!!, mViewModel!!) + mLayoutManager = LinearLayoutManager(context) + + (mBinding?.gameList?.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false + mBinding?.gameList?.layoutManager = mLayoutManager + mBinding?.gameList?.adapter = mListAdapter + mBinding?.gameList?.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + if (mLayoutManager!!.findLastVisibleItemPosition() == mListAdapter!!.itemCount - 1 + && RecyclerView.SCROLL_STATE_IDLE == newState) mViewModel?.getSubjectList(false) + } + }) + + mBinding?.gameRefresh?.setOnRefreshListener { + mViewModel?.initData() + } + + mBinding?.gameRefresh?.isRefreshing + } + + + override fun onPause() { + super.onPause() + DownloadManager.getInstance(context).removeObserver(dataWatcher) + } + + override fun onResume() { + super.onResume() + DownloadManager.getInstance(context).addObserver(dataWatcher) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt new file mode 100644 index 0000000000..87f6b72d6d --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt @@ -0,0 +1,270 @@ +package com.gh.gamecenter.game + +import android.content.Context +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.View +import android.view.ViewGroup +import com.gh.common.constant.ItemViewType +import com.gh.common.util.DownloadItemUtils +import com.gh.common.util.StringUtils +import com.gh.gamecenter.R +import com.gh.gamecenter.adapter.viewholder.* +import com.gh.gamecenter.baselist.LoadStatus +import com.gh.gamecenter.databinding.GameHeadItemBinding +import com.gh.gamecenter.databinding.GameItemBinding +import com.gh.gamecenter.databinding.GameSubjectItemBinding +import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.SlideEntity +import com.gh.gamecenter.entity.SubjectDigestEntity +import com.gh.gamecenter.entity.SubjectEntity +import com.halo.assistant.fragment.game.GamePluginAdapter +import com.halo.assistant.fragment.game.GamePluginViewHolder +import com.lightgame.adapter.BaseRecyclerAdapter +import com.lightgame.download.DownloadEntity +import java.util.* + +class GameFragmentAdapter(context: Context, model: GameViewModel) : BaseRecyclerAdapter(context) { + + data class PositionMap(val columnIndex: Int, val dataIndex: Int?) + + private val mViewModel: GameViewModel = model + + private var slideList: List = ArrayList() // 轮播图 + private var pluginList: List = ArrayList() // 插件化 + private var subjectList: List = ArrayList() // 专题 + private var subjectDigestList: List = ArrayList() // 专题入口 + + private var mPositionAndIdMap = HashMap() // key: gameId + position, value: position + + private var mLoadStatus: LoadStatus? = null + + private var mSubjectAdapterMap: MutableMap = HashMap() + + private var mPluginAdapter: GamePluginAdapter? = null + + private var mIsOpenPluginList: Boolean = false + + fun setSubjectList(subjectList: List) { + this.subjectList = subjectList + notifyDataSetChanged() + } + + fun setPluginList(pluginList: List) { + this.pluginList = pluginList + notifyDataSetChanged() + } + + fun setSlideList(slideList: List) { + this.slideList = slideList + notifyDataSetChanged() + } + + fun setSubjectDigestList(subjectDigestList: List) { + this.subjectDigestList = subjectDigestList + notifyDataSetChanged() + } + + + override fun getItemViewType(position: Int): Int { + if (position == 0) { + return ItemViewType.GAME_SLIDE + } + + if (!pluginList.isEmpty() && position == 1) { + return ItemViewType.GAME_PULGIN + } + + if (position == itemCount - 1) { + return ItemViewType.LOADING + } + + val positionMap = getColumnPositionMap(position) + + if (positionMap.dataIndex == null) { + return ItemViewType.COLUMN_HEADER + } + + val entity = subjectList[positionMap.columnIndex].data!![positionMap.dataIndex] + + if (!entity.image.isNullOrEmpty()) { + return ItemViewType.GAME_IMAGE + } else { + return ItemViewType.GAME_NORMAL + } + + return ItemViewType.GAME_SUBJECT + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder? { + return when (viewType) { + ItemViewType.GAME_SLIDE -> { + val displayMetrics = mContext.resources.displayMetrics.widthPixels + GameViewPagerViewHolder(mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false), displayMetrics) + } + ItemViewType.LOADING -> { + FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)) + } + ItemViewType.GAME_SUBJECT -> { + val inflate = mLayoutInflater.inflate(R.layout.game_subject_item, parent, false) + GameSubjectItemViewHolder(GameSubjectItemBinding.bind(inflate)) + } + ItemViewType.GAME_NORMAL -> { + GameItemViewHolder(GameItemBinding.bind(mLayoutInflater.inflate(R.layout.game_item, parent, false))) + } + + ItemViewType.GAME_IMAGE -> { + GameImageViewHolder(mLayoutInflater.inflate(R.layout.game_image_item, parent, false)) + } + ItemViewType.COLUMN_HEADER -> { + GameHeadViewHolder(GameHeadItemBinding.bind(mLayoutInflater.inflate(R.layout.game_head_item, parent, false))) + } + ItemViewType.GAME_PULGIN -> { + GamePluginViewHolder(mLayoutInflater.inflate(R.layout.game_plugin_item, parent, false)) + } + else -> null + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (getItemViewType(position)) { + ItemViewType.COLUMN_HEADER -> { + if (holder is GameHeadViewHolder) { + val positionMap = getColumnPositionMap(position) + holder.binding.subject = subjectList[positionMap.columnIndex] + } + } + ItemViewType.GAME_PULGIN -> { + if (holder is GamePluginViewHolder) { + if (mPluginAdapter == null) { + holder.mPluginRv.layoutManager = LinearLayoutManager(mContext) + (holder.mPluginRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false + mPluginAdapter = GamePluginAdapter(mContext, pluginList) + mPluginAdapter!!.openList(mIsOpenPluginList) + holder.mPluginRv.adapter = mPluginAdapter + } else { + mPluginAdapter!!.openList(mIsOpenPluginList) + mPluginAdapter!!.notifyDataSetChanged() + } + + holder.mHeadTitle.text = String.format(Locale.getDefault(), "你有%d个游戏可以升级插件版", pluginList.size) + holder.mPluginHead.setOnClickListener({ + if (mIsOpenPluginList) { + mIsOpenPluginList = false + holder.mHeadOpen.setImageResource(R.drawable.gamedetail_open_icon) + } else { + mIsOpenPluginList = true + holder.mHeadOpen.setImageResource(R.drawable.gamedetail_colse_icon) + } + notifyItemChanged(holder.adapterPosition) + }) + } + } + + ItemViewType.GAME_NORMAL -> { + if (holder is GameItemViewHolder) { + val positionMap = getColumnPositionMap(position) + val subjectEntity = subjectList[positionMap.columnIndex] + val gameEntity = subjectEntity.data!![positionMap.dataIndex!!] + holder.binding.game = gameEntity + holder.binding.executePendingBindings() + holder.binding.subjectTag = subjectEntity.tag + + if (subjectEntity.isOrder) { + holder.binding.gameOrder.visibility = View.VISIBLE + holder.binding.gameOrder.text = (positionMap.dataIndex + + if (subjectEntity.data!![0].image.isNullOrEmpty()) 1 else 0).toString() + } else { + holder.binding.gameOrder.visibility = View.GONE + } + + DownloadItemUtils.setOnClickListener(mContext, holder.binding.downloadBtn, gameEntity, position, + this@GameFragmentAdapter, + StringUtils.buildString("(游戏-专题:", subjectEntity.name, "-列表[", (position + 1).toString(), "])"), + StringUtils.buildString("游戏-专题-", subjectEntity.name, ":", gameEntity.name)) + DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable) + } + } + ItemViewType.GAME_SLIDE -> { + + } + ItemViewType.LOADING -> { + if (holder is FooterViewHolder) { + + } + } + ItemViewType.GAME_SUBJECT -> { + if (holder is GameSubjectItemViewHolder) { +// val subjectEntity = subjectList[position - 1] +// var subjectAdapter: GameSubjectAdapter? = mSubjectAdapterMap[subjectEntity.id] +// if (subjectAdapter == null) { +// subjectAdapter = GameSubjectAdapter(mContext, subjectEntity.data!!) +// mSubjectAdapterMap[subjectEntity.id!!] = subjectAdapter +// } +// +// holder.binding.subjectRv.layoutManager = LinearLayoutManager(mContext) +// holder.binding.subjectRv.adapter = subjectAdapter +// +// holder.binding.subject = subjectEntity + } + } + } + } + + override fun getItemCount(): Int { + var index = 0 + + for (entity in subjectList) { + index += if (entity.data == null) 1 else entity.data?.size!! + 1 + } + + if (!pluginList.isEmpty()) index++ + + return index + 2 + } + + private fun getColumnPositionMap(position: Int): PositionMap { + var index = 1 + if (pluginList.isNotEmpty()) index++ + + for (i in 0 until subjectList.size) { + if (!subjectList[i].data!![0].image.isNullOrEmpty()) { + if (index == position) { + return PositionMap(i, 0) + } + index++ + } + + if (index == position) { + return PositionMap(i, null) + } + index++ + + val data = subjectList[i].data + for (j in 0 until data?.size!!) { + if (j == 0 && data[0].image != null) continue + if (index == position) { + mPositionAndIdMap[data[j].id!!] = position + return PositionMap(i, j) + } + index++ + } + } + + return PositionMap(-1, null) + } + + fun notifyItemByDownload(entity: DownloadEntity) { + for (id in mPositionAndIdMap.keys) { + if (id.contains(entity.gameId)) { + val position = mPositionAndIdMap[id]!! + val positionMap = getColumnPositionMap(position) + if (positionMap.dataIndex == null) return + val entryMap = subjectList[positionMap.columnIndex].data!![positionMap.dataIndex].getEntryMap() + entryMap[entity.platform] = entity + notifyItemChanged(position) + } + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/game/GameHorizontalAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalAdapter.kt new file mode 100644 index 0000000000..ea3c3cf8e7 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalAdapter.kt @@ -0,0 +1,26 @@ +package com.gh.gamecenter.game + +import android.content.Context +import android.view.ViewGroup +import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.GameHorizontalItemBinding +import com.gh.gamecenter.entity.GameEntity +import com.lightgame.adapter.BaseRecyclerAdapter + +class GameHorizontalAdapter(context: Context, gameList: List) : BaseRecyclerAdapter(context) { + private val mGameList: List = gameList + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): GameHorizontalItemViewHolder { + val binding: GameHorizontalItemBinding = GameHorizontalItemBinding.bind(mLayoutInflater.inflate(R.layout.game_horizontal_item, parent, false)) + return GameHorizontalItemViewHolder(binding) + } + + override fun getItemCount(): Int { + return if (mGameList.size > 4) 4 else mGameList.size + } + + override fun onBindViewHolder(holder: GameHorizontalItemViewHolder?, position: Int) { + holder?.binding?.game = mGameList[position] + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameHorizontalItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalItemViewHolder.kt new file mode 100644 index 0000000000..c9cbbf0af4 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalItemViewHolder.kt @@ -0,0 +1,9 @@ +package com.gh.gamecenter.game + +import com.gh.base.BaseRecyclerViewHolder +import com.gh.gamecenter.databinding.GameHorizontalItemBinding +import com.gh.gamecenter.entity.GameEntity + +class GameHorizontalItemViewHolder(bind: GameHorizontalItemBinding) : BaseRecyclerViewHolder(bind.root) { + val binding: GameHorizontalItemBinding = bind +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameHorizontalListViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalListViewHolder.kt new file mode 100644 index 0000000000..36e42d5bb4 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameHorizontalListViewHolder.kt @@ -0,0 +1,9 @@ +package com.gh.gamecenter.game + +import com.gh.base.BaseRecyclerViewHolder +import com.gh.gamecenter.databinding.GameHorizontalListBinding +import com.gh.gamecenter.entity.GameEntity + +class GameHorizontalListViewHolder(bind: GameHorizontalListBinding) : BaseRecyclerViewHolder(bind.root) { + val binding: GameHorizontalListBinding = bind +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/GameItemViewHolder.kt new file mode 100644 index 0000000000..27ad212579 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameItemViewHolder.kt @@ -0,0 +1,8 @@ +package com.gh.gamecenter.game + +import com.gh.base.BaseRecyclerViewHolder +import com.gh.gamecenter.databinding.GameItemBinding + +class GameItemViewHolder(bind: GameItemBinding) : BaseRecyclerViewHolder(bind.root) { + var binding = bind +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameSubjectAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameSubjectAdapter.kt new file mode 100644 index 0000000000..1fde1515f4 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameSubjectAdapter.kt @@ -0,0 +1,25 @@ +package com.gh.gamecenter.game + +import android.content.Context +import android.view.ViewGroup +import com.gh.gamecenter.R +import com.gh.gamecenter.databinding.GameItemBinding +import com.gh.gamecenter.entity.GameEntity +import com.lightgame.adapter.BaseRecyclerAdapter + +class GameSubjectAdapter(context: Context, gameList: List) : BaseRecyclerAdapter(context) { + + private val mGameList = gameList + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GameItemViewHolder? { + return GameItemViewHolder(GameItemBinding.bind(mLayoutInflater.inflate(R.layout.game_item, parent, false))) + } + + override fun onBindViewHolder(holder: GameItemViewHolder, position: Int) { + holder.binding.game = mGameList[position] + } + + override fun getItemCount(): Int { + return if (mGameList[0].id.isNullOrEmpty()) mGameList.size else mGameList.size - 1 + } +} diff --git a/app/src/main/java/com/gh/gamecenter/game/GameSubjectItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/GameSubjectItemViewHolder.kt new file mode 100644 index 0000000000..77e034ba3e --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameSubjectItemViewHolder.kt @@ -0,0 +1,8 @@ +package com.gh.gamecenter.game + +import com.gh.base.BaseRecyclerViewHolder +import com.gh.gamecenter.databinding.GameSubjectItemBinding + +class GameSubjectItemViewHolder(bind: GameSubjectItemBinding) : BaseRecyclerViewHolder(bind.root) { + var binding = bind +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt new file mode 100644 index 0000000000..1fd84f176d --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt @@ -0,0 +1,236 @@ +package com.gh.gamecenter.game + +import android.app.Application +import android.arch.lifecycle.AndroidViewModel +import android.arch.lifecycle.MutableLiveData +import android.support.v4.util.ArrayMap +import android.text.TextUtils +import android.view.View +import android.widget.ProgressBar +import com.gh.common.util.ApkActiveUtils +import com.gh.common.util.GameUtils +import com.gh.common.util.RandomUtils +import com.gh.download.DownloadManager +import com.gh.gamecenter.baselist.LoadStatus +import com.gh.gamecenter.entity.* +import com.gh.gamecenter.manager.PackageManager +import com.gh.gamecenter.retrofit.Response +import com.gh.gamecenter.retrofit.RetrofitManager +import com.lightgame.utils.Utils +import retrofit2.HttpException +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers + +class GameViewModel(application: Application) : AndroidViewModel(application) { + var mApi = RetrofitManager.getInstance(getApplication()).api + + var slideList: MutableLiveData> = MutableLiveData() // 轮播图 + var pluginList: MutableLiveData> = MutableLiveData() // 插件化 + var subjectList: MutableLiveData> = MutableLiveData() // 专题 + var subjectDigestList: MutableLiveData> = MutableLiveData() // 专题入口 + + val loadStatus = MutableLiveData() + + private val mSubjectChangedMap: ArrayMap> = ArrayMap() //存储换一换的数据 + + private var mSubjectPage = 1 // 专分页 + + private var mIsLoading = false + private var mIsInitPlugin = false + + + init { + initData() + } + + fun initData() { + loadStatus.postValue(LoadStatus.INIT_LOADED) + getSlideData(true) + initPlugin() + } + + private fun initPlugin() { + if (mIsInitPlugin) { + return + } + mIsInitPlugin = true + val updateList = PackageManager.getUpdateList() + if (updateList.isEmpty()) { + mIsInitPlugin = false + return + } + val list = java.util.ArrayList() + var gameUpdateEntity: GameUpdateEntity + var i = 0 + val size = updateList.size + while (i < size) { + gameUpdateEntity = updateList[i] + if (gameUpdateEntity.isPluggable) { + val gameEntity = GameEntity() + gameEntity.id = gameUpdateEntity.id + gameEntity.name = gameUpdateEntity.name + gameEntity.icon = gameUpdateEntity.icon + gameEntity.setTag(gameUpdateEntity.tag) + gameEntity.brief = gameUpdateEntity.brief + gameEntity.isPluggable = true + + val apkEntity = ApkEntity() + apkEntity.url = gameUpdateEntity.url + apkEntity.packageName = gameUpdateEntity.packageName + apkEntity.size = gameUpdateEntity.size + apkEntity.version = gameUpdateEntity.version + apkEntity.ghVersion = gameUpdateEntity.ghVersion + apkEntity.setPlatform(gameUpdateEntity.platform!!) + apkEntity.etag = gameUpdateEntity.etag + + val apk = java.util.ArrayList() + apk.add(apkEntity) + gameEntity.setApk(apk) + + list.add(gameEntity) + } + i++ + } + if (!list.isEmpty()) { + for (gEntity in list) { + gEntity.setEntryMap(DownloadManager.getInstance(getApplication()).getEntryMap(gEntity.name)) + } + pluginList.postValue(list) + } + mIsInitPlugin = false + } + + private fun getSlideData(initData: Boolean) { + mApi.slide + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List) { + slideList.postValue(response) + if (initData) getSubjectDigest(initData) + } + + override fun onFailure(e: HttpException) { + if (initData) getSubjectDigest(initData) + } + }) + } + + + private fun getSubjectDigest(initData: Boolean) { + mApi + .subjectDigest + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List) { + subjectDigestList.postValue(response) + if (initData) getSubjectList(initData) + } + + override fun onFailure(e: HttpException) { + if (initData) getSubjectList(initData) + } + }) + } + + + fun getSubjectList(initData: Boolean) { + if (mIsLoading) return + mIsLoading = true + + if (initData) mSubjectPage = 1 + mApi + .getColumn(mSubjectPage) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List) { + when { + initData -> { + subjectList.postValue(response as MutableList?) + loadStatus.postValue(LoadStatus.INIT_LOADED) + } + response.isEmpty() -> { + loadStatus.postValue(LoadStatus.LIST_OVER) + } + else -> { + val value = if (subjectList.value == null) ArrayList() else subjectList.value + value?.addAll(response) + subjectList.postValue(value) + } + } + mSubjectPage++ + mIsLoading = false + } + + override fun onFailure(e: HttpException) { + if (initData && slideList.value == null && subjectDigestList.value == null) { + loadStatus.postValue(LoadStatus.INIT_FAILED) + } else { + loadStatus.postValue(LoadStatus.LIST_FAILED) + } + mIsLoading = false + } + }) + } + + + //换一换 + fun changeSubjectGame(progressBar: ProgressBar, subjectEntity: SubjectEntity) { + mApi + .getSubjectGame(subjectEntity.id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + + override fun onResponse(response: List) { + progressBar.visibility = View.GONE + if (response.size < subjectEntity.data!!.size) { + Utils.toast(getApplication(), "数据异常") + } else { + mSubjectChangedMap[subjectEntity.id] = response + initRandomGame((subjectEntity.data as MutableList?)!!, java.util.ArrayList(response)) + } + } + + override fun onFailure(e: HttpException) { + progressBar.visibility = View.GONE + Utils.toast(getApplication(), "网络异常") + } + }) + + } + + // 随机产生专题数据(换一换) + private fun initRandomGame(rawList: MutableList, sourceList: List?) { + var sourceList = sourceList + + var size = rawList.size // 判断是否有大图 + + var i = 0 + while (i < rawList.size) { //删除原数据,排除大图 + if (TextUtils.isEmpty(rawList[i].image)) { + rawList.removeAt(i) + i-- + } else { + size-- + } + i++ + } + + if (size * 2 <= sourceList!!.size) { + sourceList = GameUtils.removeDuplicateData(rawList, sourceList)//排除重复 + } + + val indexes = RandomUtils.getRandomArray(size, sourceList!!.size) + for (index in indexes) { + val gameEntity = sourceList[index] + ApkActiveUtils.filterHideApk(gameEntity) + rawList.add(gameEntity) + } + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GameFragmentAdapter.java b/app/src/main/java/com/halo/assistant/fragment/game/GameFragmentAdapter.java index 77c63d89a7..6ac339a762 100644 --- a/app/src/main/java/com/halo/assistant/fragment/game/GameFragmentAdapter.java +++ b/app/src/main/java/com/halo/assistant/fragment/game/GameFragmentAdapter.java @@ -1,1016 +1,1032 @@ -package com.halo.assistant.fragment.game; - -import android.content.Intent; -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.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.facebook.drawee.view.SimpleDraweeView; -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.constant.Config; -import com.gh.common.constant.ItemViewType; -import com.gh.common.util.ApkActiveUtils; -import com.gh.common.util.DataCollectionUtils; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.GameUtils; -import com.gh.common.util.GameViewUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.NewsUtils; -import com.gh.common.util.PlatformUtils; -import com.gh.common.util.RandomUtils; -import com.gh.common.util.StringUtils; -import com.gh.download.DownloadManager; -import com.gh.gamecenter.GameDetailActivity; -import com.gh.gamecenter.KaiFuActivity; -import com.gh.gamecenter.MainActivity; -import com.gh.gamecenter.NewsDetailActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.SubjectActivity; -import com.gh.gamecenter.adapter.ImagePagerAdapter; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameImageViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder.OnGameTestItemClickListener; -import com.gh.gamecenter.adapter.viewholder.GameViewPagerViewHolder; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.entity.GameUpdateEntity; -import com.gh.gamecenter.entity.SlideEntity; -import com.gh.gamecenter.entity.SubjectDigestEntity; -import com.gh.gamecenter.entity.SubjectEntity; -import com.gh.gamecenter.fragment.GameFragment; -import com.gh.gamecenter.manager.GameManager; -import com.gh.gamecenter.manager.PackageManager; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import retrofit2.HttpException; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Func1; -import rx.schedulers.Schedulers; - - -/** - * Created by khy on 2016/12/6. - */ -public class GameFragmentAdapter extends BaseRecyclerAdapter { - - private GameFragment mGameFragment; - private OnRequestCallBackListener mCallBackListener; - - private SwipeRefreshLayout mSwipeRefreshLayout; - - private List mSlideList; - private List mPluginList; - private List mSubjectList; - private List mSubjectDigestList; - - private ArrayMap> mLocationMap; // 包名对应游戏位置 - private ArrayMap> mPluginLocationMap; // 插件化模块 包名对应游戏位置 - private ArrayMap> mSubjectChangedMap; //存储换一换的数据 - - private GamePluginAdapter mPluginAdapter; - - private int mItemCount; - private int mSubjectPage; - - private boolean mIsNetworkError; - private boolean mIsSlideError; - private boolean mIsListError; - private boolean mIsSubjectDigestError; - private boolean mIsOver; - private boolean mIsInitPlugin; - private boolean mIsAutoScroll; - private boolean isOpenPluginList; - private boolean mIsSubjectLoading; - - public GameFragmentAdapter(GameFragment gameFragment, SwipeRefreshLayout refreshLayout) { - super(gameFragment.getContext()); - - mGameFragment = gameFragment; - mCallBackListener = gameFragment; - - mSwipeRefreshLayout = refreshLayout; - - mSlideList = new ArrayList<>(); - mPluginList = new ArrayList<>(); - mSubjectList = new ArrayList<>(); - mSubjectDigestList = new ArrayList<>(); - - mLocationMap = new ArrayMap<>(); - mPluginLocationMap = new ArrayMap<>(); - mSubjectChangedMap = new ArrayMap<>(); - - mItemCount = 0; - mSubjectPage = 1; - - mIsNetworkError = false; - mIsSlideError = false; - mIsListError = false; - mIsSubjectDigestError = false; - mIsOver = false; - mIsInitPlugin = false; - mIsAutoScroll = false; - mIsSubjectLoading = false; - - if (MainActivity.isNewFirstLaunch) { - isOpenPluginList = true; - } - - initSubjectDigest(true); - } - - public ArrayMap> getLocationMap() { - return mLocationMap; - } - - public ArrayMap> getPluginLocationMap() { - return mPluginLocationMap; - } - - public GameEntity getGameEntityByLocation(int location) { - - if (!mPluginList.isEmpty() && location == 1) { - return mPluginList.get(location); - } - - int offset = 1; - if (!mPluginList.isEmpty()) { - offset += 1; - } - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - List gameEntities = mSubjectList.get(i).getData(); - if (location > offset && location <= gameEntities.size() + offset) { - return gameEntities.get(location - offset - 1); - } - offset = gameEntities.size() + offset + 1; - } - - return null; - } - - public void initSubjectDigest(final boolean isLoadMore) { - RetrofitManager.getInstance(mContext).getApi() - .getSubjectDigest() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - if (response.size() > 0) { - mSubjectDigestList = response; - } else { - mIsSubjectDigestError = true; - Utils.toast(mContext, "专题入口数据异常" + response.size()); - } - notifyItemChanged(0); - if (isLoadMore) { - initSlide(true); - } - } - - @Override - public void onFailure(HttpException e) { - mIsSubjectDigestError = true; - notifyItemChanged(0); - if (isLoadMore) { - initSlide(true); - } - } - }); - } - - private void initSlide(final boolean isFirst) { - RetrofitManager.getInstance(mContext).getApi().getSlide() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - mSlideList = response; - if (mSlideList.size() != 0) { - notifyItemChanged(0); - } - if (isFirst) { - initSubjectList(); - initPlugin(); - } - } - - @Override - public void onFailure(HttpException e) { - mIsSlideError = true; - showView(); - if (isFirst) { - initSubjectList(); - initPlugin(); - } - } - }); - } - - public void initSubjectList() { - if (mIsSubjectLoading || mIsOver) return; - mIsSubjectLoading = true; - - RetrofitManager.getInstance(mContext).getApi().getColumn(mSubjectPage) - .map(new Func1, List>() { - @Override - public List call(List list) { - GameManager manager = new GameManager(mContext); - SubjectEntity subjectEntity; - GameEntity gameEntity; - for (int j = 0; j < list.size(); j++) { - subjectEntity = list.get(j); - if (subjectEntity.getData().size() == 1 - && !TextUtils.isEmpty(subjectEntity.getData().get(0).getImage()) - || subjectEntity.getData().size() == 0) { - list.remove(j); - j--; - continue; - } - for (int i = 0; i < subjectEntity.getData().size(); i++) { - gameEntity = subjectEntity.getData().get(i); - ArrayList apkist = gameEntity.getApk(); - if (!apkist.isEmpty()) { - gameEntity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(gameEntity.getName())); - manager.addOrUpdate(gameEntity); - } else if (TextUtils.isEmpty(gameEntity.getId())) { - if (TextUtils.isEmpty(gameEntity.getType()) - || TextUtils.isEmpty(gameEntity.getLink()) - || TextUtils.isEmpty(gameEntity.getName()) - || TextUtils.isEmpty(gameEntity.getImage())) { - subjectEntity.getData().remove(i); - i--; - } - } - - ApkActiveUtils.filterHideApk(gameEntity); - } - } - return list; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - if (response.size() != 0) { - mSubjectList.addAll(response); - notifyDataSetChanged(); - initItemCount(); - initLocationMap(); - } - - if (mCallBackListener != null) { - mCallBackListener.loadDone(); - } - mSubjectPage++; - mIsSubjectLoading = false; - if (response.size() < 5) mIsOver = true; // todo 读取的数量与page_size对不上 - notifyItemChanged(getItemCount() - 1); - } - - @Override - public void onFailure(HttpException e) { - mIsSubjectLoading = false; - if (mCallBackListener != null) { - mCallBackListener.loadDone(); - } - mIsListError = true; - mIsNetworkError = true; - showView(); - } - }); - } - - public void initPlugin() { - if (mIsInitPlugin) { - return; - } - mIsInitPlugin = true; - ArrayList updateList = PackageManager.getUpdateList(); - if (updateList.isEmpty()) { - mIsInitPlugin = false; - return; - } - List list = new ArrayList<>(); - GameUpdateEntity gameUpdateEntity; - for (int i = 0, size = updateList.size(); i < size; i++) { - gameUpdateEntity = updateList.get(i); - if (gameUpdateEntity.isPluggable()) { - GameEntity gameEntity = new GameEntity(); - gameEntity.setId(gameUpdateEntity.getId()); - gameEntity.setName(gameUpdateEntity.getName()); - gameEntity.setIcon(gameUpdateEntity.getIcon()); - gameEntity.setTag(gameUpdateEntity.getTag()); - gameEntity.setBrief(gameUpdateEntity.getBrief()); - gameEntity.setPluggable(true); - - ApkEntity apkEntity = new ApkEntity(); - apkEntity.setUrl(gameUpdateEntity.getUrl()); - apkEntity.setPackageName(gameUpdateEntity.getPackageName()); - apkEntity.setSize(gameUpdateEntity.getSize()); - apkEntity.setVersion(gameUpdateEntity.getVersion()); - apkEntity.setGhVersion(gameUpdateEntity.getGhVersion()); - apkEntity.setPlatform(gameUpdateEntity.getPlatform()); - apkEntity.setEtag(gameUpdateEntity.getEtag()); - - ArrayList apk = new ArrayList<>(); - apk.add(apkEntity); - gameEntity.setApk(apk); - - list.add(gameEntity); - } - } - if (!list.isEmpty()) { - for (GameEntity gEntity : list) { - gEntity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(gEntity.getName())); - } - if (mPluginList.isEmpty()) { - mPluginList = list; - initItemCount(); - notifyItemRangeInserted(1, 1); -// if (getItemCount() > 2) { -// notifyItemChanged(2); +//package com.halo.assistant.fragment.game; +// +//import android.content.Intent; +//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.DefaultItemAnimator; +//import android.support.v7.widget.GridLayoutManager; +//import android.support.v7.widget.LinearLayoutManager; +//import android.support.v7.widget.RecyclerView; +//import android.support.v7.widget.RecyclerView.ViewHolder; +//import android.text.TextUtils; +//import android.util.DisplayMetrics; +//import android.view.View; +//import android.view.View.OnClickListener; +//import android.view.ViewGroup; +//import android.widget.ImageView; +//import android.widget.LinearLayout; +//import android.widget.ProgressBar; +//import android.widget.TextView; +// +//import com.facebook.drawee.view.SimpleDraweeView; +//import com.gh.base.OnRequestCallBackListener; +//import com.gh.common.constant.Config; +//import com.gh.common.constant.ItemViewType; +//import com.gh.common.util.ApkActiveUtils; +//import com.gh.common.util.DataCollectionUtils; +//import com.gh.common.util.DataUtils; +//import com.gh.common.util.DisplayUtils; +//import com.gh.common.util.DownloadItemUtils; +//import com.gh.common.util.GameUtils; +//import com.gh.common.util.GameViewUtils; +//import com.gh.common.util.ImageUtils; +//import com.gh.common.util.NewsUtils; +//import com.gh.common.util.PlatformUtils; +//import com.gh.common.util.RandomUtils; +//import com.gh.common.util.StringUtils; +//import com.gh.download.DownloadManager; +//import com.gh.gamecenter.GameDetailActivity; +//import com.gh.gamecenter.KaiFuActivity; +//import com.gh.gamecenter.MainActivity; +//import com.gh.gamecenter.NewsDetailActivity; +//import com.gh.gamecenter.R; +//import com.gh.gamecenter.SubjectActivity; +//import com.gh.gamecenter.game.GameHorizontalAdapter; +//import com.gh.gamecenter.adapter.ImagePagerAdapter; +//import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +//import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder; +//import com.gh.gamecenter.game.GameHorizontalListViewHolder; +//import com.gh.gamecenter.adapter.viewholder.GameImageViewHolder; +//import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; +//import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; +//import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder.OnGameTestItemClickListener; +//import com.gh.gamecenter.adapter.viewholder.GameViewPagerViewHolder; +//import com.gh.gamecenter.databinding.GameHorizontalListBinding; +//import com.gh.gamecenter.entity.ApkEntity; +//import com.gh.gamecenter.entity.GameEntity; +//import com.gh.gamecenter.entity.GameUpdateEntity; +//import com.gh.gamecenter.entity.SlideEntity; +//import com.gh.gamecenter.entity.SubjectDigestEntity; +//import com.gh.gamecenter.entity.SubjectEntity; +//import com.gh.gamecenter.fragment.GameFragment; +//import com.gh.gamecenter.manager.GameManager; +//import com.gh.gamecenter.manager.PackageManager; +//import com.gh.gamecenter.retrofit.Response; +//import com.gh.gamecenter.retrofit.RetrofitManager; +//import com.lightgame.adapter.BaseRecyclerAdapter; +//import com.lightgame.utils.Utils; +// +//import java.util.ArrayList; +//import java.util.HashMap; +//import java.util.List; +//import java.util.Locale; +//import java.util.Map; +// +//import retrofit2.HttpException; +//import rx.android.schedulers.AndroidSchedulers; +//import rx.functions.Func1; +//import rx.schedulers.Schedulers; +// +// +///** +// * Created by khy on 2016/12/6. +// */ +//public class GameFragmentAdapter extends BaseRecyclerAdapter { +// +// private GameFragment mGameFragment; +// private OnRequestCallBackListener mCallBackListener; +// +// private SwipeRefreshLayout mSwipeRefreshLayout; +// +// private List mSlideList; +// private List mPluginList; +// private List mSubjectList; +// private List mSubjectDigestList; +// +// private ArrayMap> mLocationMap; // 包名对应游戏位置 +// private ArrayMap> mPluginLocationMap; // 插件化模块 包名对应游戏位置 +// private ArrayMap> mSubjectChangedMap; //存储换一换的数据 +// +// private GamePluginAdapter mPluginAdapter; +// +// private int mItemCount; +// private int mSubjectPage; +// +// private boolean mIsNetworkError; +// private boolean mIsSlideError; +// private boolean mIsListError; +// private boolean mIsSubjectDigestError; +// private boolean mIsOver; +// private boolean mIsInitPlugin; +// private boolean mIsAutoScroll; +// private boolean isOpenPluginList; +// private boolean mIsSubjectLoading; +// +// public GameFragmentAdapter(GameFragment gameFragment, SwipeRefreshLayout refreshLayout) { +// super(gameFragment.getContext()); +// +// mGameFragment = gameFragment; +// mCallBackListener = gameFragment; +// +// mSwipeRefreshLayout = refreshLayout; +// +// mSlideList = new ArrayList<>(); +// mPluginList = new ArrayList<>(); +// mSubjectList = new ArrayList<>(); +// mSubjectDigestList = new ArrayList<>(); +// +// mLocationMap = new ArrayMap<>(); +// mPluginLocationMap = new ArrayMap<>(); +// mSubjectChangedMap = new ArrayMap<>(); +// +// mItemCount = 0; +// mSubjectPage = 1; +// +// mIsNetworkError = false; +// mIsSlideError = false; +// mIsListError = false; +// mIsSubjectDigestError = false; +// mIsOver = false; +// mIsInitPlugin = false; +// mIsAutoScroll = false; +// mIsSubjectLoading = false; +// +// if (MainActivity.isNewFirstLaunch) { +// isOpenPluginList = true; +// } +// +// initSubjectDigest(true); +// } +// +// public ArrayMap> getLocationMap() { +// return mLocationMap; +// } +// +// public ArrayMap> getPluginLocationMap() { +// return mPluginLocationMap; +// } +// +// public GameEntity getGameEntityByLocation(int location) { +// +// if (!mPluginList.isEmpty() && location == 1) { +// return mPluginList.get(location); +// } +// +// int offset = 1; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// List gameEntities = mSubjectList.get(i).getData(); +// if (location > offset && location <= gameEntities.size() + offset) { +// return gameEntities.get(location - offset - 1); +// } +// offset = gameEntities.size() + offset + 1; +// } +// +// return null; +// } +// +// public void initSubjectDigest(final boolean isLoadMore) { +// RetrofitManager.getInstance(mContext).getApi() +// .getSubjectDigest() +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response>() { +// @Override +// public void onResponse(List response) { +// if (response.size() > 0) { +// mSubjectDigestList = response; +// } else { +// mIsSubjectDigestError = true; +// Utils.toast(mContext, "专题入口数据异常" + response.size()); +// } +// notifyItemChanged(0); +// if (isLoadMore) { +// initSlide(true); +// } +// } +// +// @Override +// public void onFailure(HttpException e) { +// mIsSubjectDigestError = true; +// notifyItemChanged(0); +// if (isLoadMore) { +// initSlide(true); +// } +// } +// }); +// } +// +// private void initSlide(final boolean isFirst) { +// RetrofitManager.getInstance(mContext).getApi().getSlide() +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response>() { +// @Override +// public void onResponse(List response) { +// mSlideList = response; +// if (mSlideList.size() != 0) { +// notifyItemChanged(0); +// } +// if (isFirst) { +// initSubjectList(); +// initPlugin(); +// } +// } +// +// @Override +// public void onFailure(HttpException e) { +// mIsSlideError = true; +// showView(); +// if (isFirst) { +// initSubjectList(); +// initPlugin(); +// } +// } +// }); +// } +// +// public void initSubjectList() { +// if (mIsSubjectLoading || mIsOver) return; +// mIsSubjectLoading = true; +// +// RetrofitManager.getInstance(mContext).getApi().getColumn(mSubjectPage) +// .map(new Func1, List>() { +// @Override +// public List call(List list) { +// GameManager manager = new GameManager(mContext); +// SubjectEntity subjectEntity; +// GameEntity gameEntity; +// for (int j = 0; j < list.size(); j++) { +// subjectEntity = list.get(j); +// if (subjectEntity.getData().size() == 1 +// && !TextUtils.isEmpty(subjectEntity.getData().get(0).getImage()) +// || subjectEntity.getData().size() == 0) { +// list.remove(j); +// j--; +// continue; +// } +// for (int i = 0; i < subjectEntity.getData().size(); i++) { +// gameEntity = subjectEntity.getData().get(i); +// ArrayList apkist = gameEntity.getApk(); +// if (!apkist.isEmpty()) { +// gameEntity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(gameEntity.getName())); +// manager.addOrUpdate(gameEntity); +// } else if (TextUtils.isEmpty(gameEntity.getId())) { +// if (TextUtils.isEmpty(gameEntity.getType()) +// || TextUtils.isEmpty(gameEntity.getLink()) +// || TextUtils.isEmpty(gameEntity.getName()) +// || TextUtils.isEmpty(gameEntity.getImage())) { +// subjectEntity.getData().remove(i); +// i--; +// } +// } +// +// ApkActiveUtils.filterHideApk(gameEntity); +// } +// } +// return list; +// } +// }) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response>() { +// @Override +// public void onResponse(List response) { +// if (response.size() != 0) { +// mSubjectList.addAll(response); +// notifyDataSetChanged(); +// initItemCount(); +// initLocationMap(); +// } +// +// if (mCallBackListener != null) { +// mCallBackListener.loadDone(); +// } +// mSubjectPage++; +// mIsSubjectLoading = false; +// if (response.size() < 5) mIsOver = true; // todo 读取的数量与page_size对不上 +// notifyItemChanged(getItemCount() - 1); +// } +// +// @Override +// public void onFailure(HttpException e) { +// mIsSubjectLoading = false; +// if (mCallBackListener != null) { +// mCallBackListener.loadDone(); +// } +// mIsListError = true; +// mIsNetworkError = true; +// showView(); +// } +// }); +// } +// +// public void initPlugin() { +// if (mIsInitPlugin) { +// return; +// } +// mIsInitPlugin = true; +// ArrayList updateList = PackageManager.getUpdateList(); +// if (updateList.isEmpty()) { +// mIsInitPlugin = false; +// return; +// } +// List list = new ArrayList<>(); +// GameUpdateEntity gameUpdateEntity; +// for (int i = 0, size = updateList.size(); i < size; i++) { +// gameUpdateEntity = updateList.get(i); +// if (gameUpdateEntity.isPluggable()) { +// GameEntity gameEntity = new GameEntity(); +// gameEntity.setId(gameUpdateEntity.getId()); +// gameEntity.setName(gameUpdateEntity.getName()); +// gameEntity.setIcon(gameUpdateEntity.getIcon()); +// gameEntity.setTag(gameUpdateEntity.getTag()); +// gameEntity.setBrief(gameUpdateEntity.getBrief()); +// gameEntity.setPluggable(true); +// +// ApkEntity apkEntity = new ApkEntity(); +// apkEntity.setUrl(gameUpdateEntity.getUrl()); +// apkEntity.setPackageName(gameUpdateEntity.getPackageName()); +// apkEntity.setSize(gameUpdateEntity.getSize()); +// apkEntity.setVersion(gameUpdateEntity.getVersion()); +// apkEntity.setGhVersion(gameUpdateEntity.getGhVersion()); +// apkEntity.setPlatform(gameUpdateEntity.getPlatform()); +// apkEntity.setEtag(gameUpdateEntity.getEtag()); +// +// ArrayList apk = new ArrayList<>(); +// apk.add(apkEntity); +// gameEntity.setApk(apk); +// +// list.add(gameEntity); +// } +// } +// if (!list.isEmpty()) { +// for (GameEntity gEntity : list) { +// gEntity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(gEntity.getName())); +// } +// if (mPluginList.isEmpty()) { +// mPluginList = list; +// initItemCount(); +// notifyItemRangeInserted(1, 1); +//// if (getItemCount() > 2) { +//// notifyItemChanged(2); +//// } +// } else { +// mPluginList = list; +// notifyDataSetChanged(); +// } +// initLocationMap(); +// } +// mIsInitPlugin = false; +// } +// +// private void showView() { +// if (mIsSlideError && mIsListError) { +// mCallBackListener.loadError(); +// Utils.toast(mContext, R.string.loading_failed_hint); +// } else if (mIsSlideError) { +// notifyItemChanged(0); +// } else if (mIsListError) { +// notifyItemChanged(getItemCount() - 1); +// } +// } +// +// public void initLocationMap() { +// mLocationMap.clear(); +// mPluginLocationMap.clear(); +// +// int count = getItemCount(); +// if (!mPluginList.isEmpty()) { +// GameEntity gameEntity; +// ArrayList list; +// ArrayList pluginList; +// for (int position = 0, size = mPluginList.size(); position < size; position++) { +// gameEntity = mPluginList.get(position); +// if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { +// for (ApkEntity apkEntity : gameEntity.getApk()) { +// list = mLocationMap.get(apkEntity.getPackageName()); +// pluginList = mPluginLocationMap.get(apkEntity.getPackageName()); +// if (list == null) { +// list = new ArrayList<>(); +// mLocationMap.put(apkEntity.getPackageName(), list); +// +// pluginList = new ArrayList<>(); +// mPluginLocationMap.put(apkEntity.getPackageName(), pluginList); +// } +// list.add(1); +// pluginList.add(position); +// } // } - } else { - mPluginList = list; - notifyDataSetChanged(); - } - initLocationMap(); - } - mIsInitPlugin = false; - } - - private void showView() { - if (mIsSlideError && mIsListError) { - mCallBackListener.loadError(); - Utils.toast(mContext, R.string.loading_failed_hint); - } else if (mIsSlideError) { - notifyItemChanged(0); - } else if (mIsListError) { - notifyItemChanged(getItemCount() - 1); - } - } - - public void initLocationMap() { - mLocationMap.clear(); - mPluginLocationMap.clear(); - - int count = getItemCount(); - if (!mPluginList.isEmpty()) { - GameEntity gameEntity; - ArrayList list; - ArrayList pluginList; - for (int position = 0, size = mPluginList.size(); position < size; position++) { - gameEntity = mPluginList.get(position); - if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { - for (ApkEntity apkEntity : gameEntity.getApk()) { - list = mLocationMap.get(apkEntity.getPackageName()); - pluginList = mPluginLocationMap.get(apkEntity.getPackageName()); - if (list == null) { - list = new ArrayList<>(); - mLocationMap.put(apkEntity.getPackageName(), list); - - pluginList = new ArrayList<>(); - mPluginLocationMap.put(apkEntity.getPackageName(), pluginList); - } - list.add(1); - pluginList.add(position); - } - } - } - } - - if (!mSubjectList.isEmpty()) { - int offset; - GameEntity gameEntity; - ArrayList list; - for (int position = 0; position < count; position++) { - offset = 1; - if (!mPluginList.isEmpty()) { - offset += 1; - } - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - if (position > offset && position <= mSubjectList.get(i).getData().size() + offset) { - gameEntity = mSubjectList.get(i).getData().get(position - offset - 1); - if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) { - for (ApkEntity apkEntity : gameEntity.getApk()) { - list = mLocationMap.get(apkEntity.getPackageName()); - if (list == null) { - list = new ArrayList<>(); - mLocationMap.put(apkEntity.getPackageName(), list); - } - list.add(position); - } - } - break; - } - offset = mSubjectList.get(i).getData().size() + offset + 1; - } - } - } - } - - public void initItemCount() { - int pluginSize = 0; - if (!mPluginList.isEmpty()) { - pluginSize += 1; - } - int subjectSize = 0; - if (!mSubjectList.isEmpty()) { - SubjectEntity subjectEntity; - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - subjectEntity = mSubjectList.get(i); - subjectSize += 1 + subjectEntity.getData().size(); //getDataSize判断个数 - } - } - mItemCount = pluginSize + subjectSize; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - switch (viewType) { - case ItemViewType.GAME_PULGIN: - return new GamePluginViewHolder(mLayoutInflater.inflate(R.layout.game_plugin_item, parent, false)); - case ItemViewType.GAME_SLIDE: - DisplayMetrics outMetrics = new DisplayMetrics(); - mGameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - return new GameViewPagerViewHolder(mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false), - outMetrics.widthPixels); - case ItemViewType.COLUMN_HEADER: - return new GameHeadViewHolder(mLayoutInflater.inflate(R.layout.game_head_item, parent, false)); - case ItemViewType.GAME_NORMAL: - return new GameNormalViewHolder(mLayoutInflater.inflate(R.layout.game_normal_item, parent, false)); - case ItemViewType.GAME_TEST: - return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false)); - case ItemViewType.GAME_IMAGE: - return new GameImageViewHolder(mLayoutInflater.inflate(R.layout.game_image_item, parent, false)); - case ItemViewType.LOADING: - return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); - default: - return null; - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof GameViewPagerViewHolder) { - initGameViewPagerViewHolder((GameViewPagerViewHolder) holder); - } else if (holder instanceof GameHeadViewHolder) { - initGameHeadViewHolder((GameHeadViewHolder) holder, position); - } else if (holder instanceof GameImageViewHolder) { - initGameImageViewHolder((GameImageViewHolder) holder, position); - } else if (holder instanceof GameNormalViewHolder) { - initGameNormalViewHolder((GameNormalViewHolder) holder, position); - } else if (holder instanceof GameTestViewHolder) { - initGameTestViewHolder((GameTestViewHolder) holder, position); - } else if (holder instanceof FooterViewHolder) { - initFooterViewHolder((FooterViewHolder) holder); - } else if (holder instanceof GamePluginViewHolder) { - initGamePluginViewHolder((GamePluginViewHolder) holder); - } - } - - @Override - public int getItemViewType(int position) { - - if (position == 0) { - return ItemViewType.GAME_SLIDE; - } - - if (!mPluginList.isEmpty()) { - if (position == 1) { - return ItemViewType.GAME_PULGIN; - } - } - - int offset = 1; - if (!mPluginList.isEmpty()) { - offset += 1; - } - GameEntity gameEntity; - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - if (position >= offset && position <= mSubjectList.get(i).getData().size() + offset) { - int index = position - offset - 1; - if (index < 0) { - index = 0; - } - SubjectEntity subjectEntity = mSubjectList.get(i); - gameEntity = subjectEntity.getData().get(index); - if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())) { - return ItemViewType.GAME_IMAGE; - } else if (position == offset) { - return ItemViewType.COLUMN_HEADER; - } - if (position == offset + 1 && !TextUtils.isEmpty(mSubjectList.get(i).getData().get(0).getImage())) { - return ItemViewType.COLUMN_HEADER; - } - if (!TextUtils.isEmpty(gameEntity.getImage())) { - return ItemViewType.GAME_IMAGE; - } - if (gameEntity.getTest() != null - && subjectEntity.getTag() != null && "test".equals(subjectEntity.getTag())) { - return ItemViewType.GAME_TEST; - } - return ItemViewType.GAME_NORMAL; - } - offset = mSubjectList.get(i).getData().size() + offset + 1; - } - return ItemViewType.LOADING; - } - - @Override - public int getItemCount() { - return 1 + mItemCount + 1; - } - - private void initGamePluginViewHolder(final GamePluginViewHolder holder) { +// } +// } +// +// if (!mSubjectList.isEmpty()) { +// int offset; +// GameEntity gameEntity; +// ArrayList list; +// for (int position = 0; position < count; position++) { +// offset = 1; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// if (position > offset && position <= mSubjectList.get(i).getData().size() + offset) { +// gameEntity = mSubjectList.get(i).getData().get(position - offset - 1); +// if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) { +// for (ApkEntity apkEntity : gameEntity.getApk()) { +// list = mLocationMap.get(apkEntity.getPackageName()); +// if (list == null) { +// list = new ArrayList<>(); +// mLocationMap.put(apkEntity.getPackageName(), list); +// } +// list.add(position); +// } +// } +// break; +// } +// offset = mSubjectList.get(i).getData().size() + offset + 1; +// } +// } +// } +// } +// +// public void initItemCount() { +// int pluginSize = 0; +// if (!mPluginList.isEmpty()) { +// pluginSize += 1; +// } +// int subjectSize = 0; +// if (!mSubjectList.isEmpty()) { +// SubjectEntity subjectEntity; +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// subjectEntity = mSubjectList.get(i); +// subjectSize += 1 + subjectEntity.getData().size(); //getDataSize判断个数 +// } +// } +// mItemCount = pluginSize + subjectSize; +// } +// +// @Override +// public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// switch (viewType) { +// case ItemViewType.GAME_PULGIN: +// return new GamePluginViewHolder(mLayoutInflater.inflate(R.layout.game_plugin_item, parent, false)); +// case ItemViewType.GAME_SLIDE: +// DisplayMetrics outMetrics = new DisplayMetrics(); +// mGameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); +// return new GameViewPagerViewHolder(mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false), +// outMetrics.widthPixels); +// case ItemViewType.COLUMN_HEADER: +// return new GameHeadViewHolder(mLayoutInflater.inflate(R.layout.game_head_item, parent, false)); +// case ItemViewType.GAME_NORMAL: +// return new GameNormalViewHolder(mLayoutInflater.inflate(R.layout.game_normal_item, parent, false)); +// case ItemViewType.GAME_TEST: +// return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false)); +// case ItemViewType.GAME_IMAGE: +// return new GameImageViewHolder(mLayoutInflater.inflate(R.layout.game_image_item, parent, false)); +// case ItemViewType.LOADING: +// return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); +// case ItemViewType.GAME_HORIZONTAL: +// GameHorizontalListBinding binding = GameHorizontalListBinding.bind(mLayoutInflater.inflate(R.layout.game_horizontal_list, parent, false)); +// return new GameHorizontalListViewHolder(binding); +// default: +// return null; +// } +// } +// +// @Override +// public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { +// if (holder instanceof GameViewPagerViewHolder) { +// initGameViewPagerViewHolder((GameViewPagerViewHolder) holder); +// } else if (holder instanceof GameHeadViewHolder) { +// initGameHeadViewHolder((GameHeadViewHolder) holder, position); +// } else if (holder instanceof GameImageViewHolder) { +// initGameImageViewHolder((GameImageViewHolder) holder, position); +// } else if (holder instanceof GameNormalViewHolder) { +// initGameNormalViewHolder((GameNormalViewHolder) holder, position); +// } else if (holder instanceof GameTestViewHolder) { +// initGameTestViewHolder((GameTestViewHolder) holder, position); +// } else if (holder instanceof FooterViewHolder) { +// initFooterViewHolder((FooterViewHolder) holder); +// } else if (holder instanceof GamePluginViewHolder) { +// initGamePluginViewHolder((GamePluginViewHolder) holder); +// } else if (holder instanceof GameHorizontalListViewHolder) { +// GameHorizontalListBinding binding = ((GameHorizontalListViewHolder) holder).getBinding(); +// SubjectEntity subjectEntity = mSubjectList.get(position - 1); +// binding.horizontalRv.setLayoutManager(new GridLayoutManager(mContext, 4)); +// binding.horizontalRv.setAdapter(new GameHorizontalAdapter(mContext, subjectEntity.getData())); +// } +// } +// +// @Override +// public int getItemViewType(int position) { +// +// if (position == 0) { +// return ItemViewType.GAME_SLIDE; +// } +// +// if (!mPluginList.isEmpty()) { +// if (position == 1) { +// return ItemViewType.GAME_PULGIN; +// } +// } +// +// int offset = 1; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// GameEntity gameEntity; +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// if (position >= offset && position <= mSubjectList.get(i).getData().size() + offset) { +// int index = position - offset - 1; +// if (index < 0) { +// index = 0; +// } +// SubjectEntity subjectEntity = mSubjectList.get(i); +// gameEntity = subjectEntity.getData().get(index); +// if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())) { +// return ItemViewType.GAME_IMAGE; +// } else if (position == offset) { +// return ItemViewType.COLUMN_HEADER; +// } +// if (position == offset + 1 && !TextUtils.isEmpty(mSubjectList.get(i).getData().get(0).getImage())) { +// return ItemViewType.COLUMN_HEADER; +// } +// if (!TextUtils.isEmpty(gameEntity.getImage())) { +// return ItemViewType.GAME_IMAGE; +// } +// if (gameEntity.getTest() != null +// && subjectEntity.getTag() != null && "test".equals(subjectEntity.getTag())) { +// return ItemViewType.GAME_TEST; +// } +// return ItemViewType.GAME_NORMAL; +// } +// offset = mSubjectList.get(i).getData().size() + offset + 1; +// } +// +// if (mSubjectList.size() > 0 && position < mSubjectList.size()) +// return ItemViewType.GAME_HORIZONTAL; +// +// return ItemViewType.LOADING; +// } +// +// @Override +// public int getItemCount() { +// return 1 + mItemCount + 1; +// } +// +// private void initGamePluginViewHolder(final GamePluginViewHolder holder) { // if (mPluginAdapter == null) { - holder.mPluginRv.setLayoutManager(new LinearLayoutManager(mContext)); - ((DefaultItemAnimator) holder.mPluginRv.getItemAnimator()).setSupportsChangeAnimations(false); - mPluginAdapter = new GamePluginAdapter(mContext, mPluginList); - mPluginAdapter.openList(isOpenPluginList); - holder.mPluginRv.setAdapter(mPluginAdapter); -// } else { // 复用旧的adapter 数据变化无法刷新界面 点解??? +// holder.mPluginRv.setLayoutManager(new LinearLayoutManager(mContext)); +// ((DefaultItemAnimator) holder.mPluginRv.getItemAnimator()).setSupportsChangeAnimations(false); +// mPluginAdapter = new GamePluginAdapter(mContext, mPluginList); +// mPluginAdapter.openList(isOpenPluginList); +// holder.mPluginRv.setAdapter(mPluginAdapter); +// } else { // mPluginAdapter.openList(isOpenPluginList); // mPluginAdapter.notifyDataSetChanged(); // } - - holder.mHeadTitle.setText(String.format(Locale.getDefault(), "你有%d个游戏可以升级插件版", mPluginList.size())); - holder.mPluginHead.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (isOpenPluginList) { - isOpenPluginList = false; - holder.mHeadOpen.setImageResource(R.drawable.gamedetail_open_icon); - } else { - isOpenPluginList = true; - holder.mHeadOpen.setImageResource(R.drawable.gamedetail_colse_icon); - } - notifyItemChanged(holder.getAdapterPosition()); - } - }); - } - - private void initGameViewPagerViewHolder(final GameViewPagerViewHolder viewHolder) { - - if (mIsSlideError) { - viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE); - viewHolder.viewPager.setVisibility(View.GONE); - } else { - viewHolder.viewpager_tv_failure.setVisibility(View.GONE); - viewHolder.viewPager.setVisibility(View.VISIBLE); - } - - if (mIsSubjectDigestError) { - viewHolder.subjectLl.setVisibility(View.GONE); - viewHolder.subjectFailure.setVisibility(View.VISIBLE); - } else { - viewHolder.subjectLl.setVisibility(View.VISIBLE); - viewHolder.subjectFailure.setVisibility(View.GONE); - } - - if (mSlideList.size() != 0 && viewHolder.viewPager.getAdapter() == null) { - viewHolder.viewpager_ll_hint.removeAllViews(); - int margin = DisplayUtils.dip2px(mContext, 6); - for (int i = 0, size = mSlideList.size(); i < size; i++) { - ImageView imageView = new ImageView(mContext); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(margin, margin); -// lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6); - if (i == 0) { - imageView.setImageResource(R.drawable.oval_hint_up); - } else { - imageView.setImageResource(R.drawable.oval_hint_dn); - } - if (i != 0) { - lparams.leftMargin = margin; - } - imageView.setLayoutParams(lparams); - viewHolder.viewpager_ll_hint.addView(imageView); - } - - viewHolder.viewPager.setAdapter(new ImagePagerAdapter(mContext, mSlideList, true)); - viewHolder.viewPager.setInterval(3000); - viewHolder.viewPager.startAutoScroll(); - viewHolder.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - - } - - @Override - public void onPageSelected(int position) { - for (int i = 0, size = viewHolder.viewpager_ll_hint.getChildCount(); i < size; i++) { - if (i == position % size) { - ((ImageView) viewHolder.viewpager_ll_hint.getChildAt(i)) - .setImageResource(R.drawable.oval_hint_up); - } else { - ((ImageView) viewHolder.viewpager_ll_hint.getChildAt(i)) - .setImageResource(R.drawable.oval_hint_dn); - } - } - } - - @Override - public void onPageScrollStateChanged(int state) { - // 解决viewpager和SwipeRefreshLayout滑动冲突 - if (state == ViewPager.SCROLL_STATE_DRAGGING) { - mSwipeRefreshLayout.setEnabled(false); - } else { - mSwipeRefreshLayout.setEnabled(true); - } - } - }); - } - - viewHolder.viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mIsSlideError = false; - notifyItemChanged(0); - initSlide(false); - } - }); - - if (mIsAutoScroll) { - viewHolder.viewPager.startAutoScroll(); - } else { - viewHolder.viewPager.stopAutoScroll(); - } - - viewHolder.subjectFailure.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mIsSubjectDigestError = false; - notifyItemChanged(0); - initSubjectDigest(false); - } - }); - - //初始化专题入口 - viewHolder.subjectLl.removeAllViews(); - final int entrance_size = 5; - for (int i = 0; i < entrance_size; i++) { - View contentView = View.inflate(mContext, R.layout.home_subject_entrance_item, null); - TextView subjectName = (TextView) contentView.findViewById(R.id.home_subject_name); - SimpleDraweeView subjectIcon = (SimpleDraweeView) contentView.findViewById(R.id.home_subject_icon); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f); - contentView.setLayoutParams(lp); - viewHolder.subjectLl.addView(contentView); - - if (mSubjectDigestList.size() >= i + 1) { -// if (mSubjectDigestList.size() >= 5 && i < 5) { - - ImageUtils.Companion.display(subjectIcon, mSubjectDigestList.get(i).getIcon()); - if (Config.isShowPlugin()) { - subjectName.setText(mSubjectDigestList.get(i).getName()); - } else { - subjectName.setText(mSubjectDigestList.get(i).getNameNormal()); - } - } - - if (i == 4) { - subjectName.setText(R.string.title_kaifu); - ImageUtils.Companion.display(subjectIcon, R.drawable.home_entrance_kaifu); - } - - final int finalI = i; - contentView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (finalI < 4 && !mIsSubjectDigestError && mSubjectDigestList.size() > finalI) { - SubjectDigestEntity entity = mSubjectDigestList.get(finalI); - SubjectActivity.startSubjectActivity(mContext, entity.getColumnId(), entity.getColumnName(), entity.getOrder() - , StringUtils.buildString("(游戏-专题:", entity.getName(), "[1-", String.valueOf(finalI + 1), "]", ")")); - - DataCollectionUtils.uploadPosition(mContext, "游戏", String.valueOf(finalI + 1), - mSubjectDigestList.get(finalI).getName()); - } else if (finalI == 4) { - Intent intent = KaiFuActivity.getIntent(mContext, "(游戏-专题:开服表[1-6])"); - mContext.startActivity(intent); - - DataCollectionUtils.uploadPosition(mContext, "游戏", "6", "开服表"); - } else { - Utils.toast(mContext, "数据异常"); - } - } - }); - } - } - - private void initGameTestViewHolder(GameTestViewHolder holder, int position) { - holder.initGameTestViewHolder(mContext, this, mSubjectList, mPluginList, position, new OnGameTestItemClickListener() { - @Override - public void onClick(GameEntity gameEntity, SubjectEntity subjectEntity, int position) { - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", String.valueOf(position + 1)); - DataUtils.onEvent(mContext, "点击", "游戏-专题-" + subjectEntity.getName(), kv); - - DataCollectionUtils.uploadClick(mContext, subjectEntity.getName() + "-列表", "游戏-专题", gameEntity.getName()); - - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(position + 1), "])")); - } - }); - - } - - private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) { - GameEntity gameEntity; - - int offset = 1; - if (!mPluginList.isEmpty()) { - offset += 1; - } - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - if (position > offset && position <= mSubjectList.get(i).getData().size() + offset) { - int index = position - offset - 1; - if (index < 0) { - index = 0; - } - gameEntity = mSubjectList.get(i).getData().get(index); - if (TextUtils.isEmpty(gameEntity.getImage())) { - int order = position - offset - 1; - if (mSubjectList.get(i).getData().get(0).getImage() != null) { - order--; - } - initGameNormal(holder, gameEntity, order, mSubjectList.get(i)); - break; - } - } - offset = mSubjectList.get(i).getData().size() + offset + 1; - } - } - - private void initGameNormal(GameNormalViewHolder holder, final GameEntity gameEntity, - final int i, final SubjectEntity subjectEntity) { - holder.initServerType(gameEntity, mContext); - - if (subjectEntity.isOrder()) { - holder.gameOrder.setVisibility(View.VISIBLE); - holder.gameOrder.setText(String.valueOf(i + 1)); - } else { - holder.gameOrder.setVisibility(View.GONE); - } - - ImageUtils.Companion.display(holder.gameThumb, gameEntity.getIcon()); - if (gameEntity.isPluggable() && gameEntity.getApk().size() > 0) { - holder.gameName.setText(String.format("%s - %s", gameEntity.getName(), - PlatformUtils.getInstance(mContext).getPlatformName( - gameEntity.getApk().get(0).getPlatform()))); - } else { - holder.gameName.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(mContext, holder.gameLabelList, gameEntity.getTag(), subjectEntity.getTag()); - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", String.valueOf(i + 1)); - DataUtils.onEvent(mContext, "点击", "游戏-专题-" + subjectEntity.getName(), kv); - - DataCollectionUtils.uploadClick(mContext, subjectEntity.getName() + "-列表", "游戏-专题", gameEntity.getName()); - - if (gameEntity.isPluggable()) { - GameDetailActivity.startGameDetailActivity(mContext, gameEntity.getId(), - StringUtils.buildString("(游戏-专题:插件化-列表[", String.valueOf(i + 1), "])")); - } else { - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])")); - } - } - }); - - DownloadItemUtils.setOnClickListener(mContext, holder.gameDownloadBtn, gameEntity, i, - GameFragmentAdapter.this, - StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])"), - StringUtils.buildString("游戏-专题-", subjectEntity.getName(), ":", gameEntity.getName())); - - DownloadItemUtils.updateItem(mContext, gameEntity, holder, !gameEntity.isPluggable()); - } - - private void initGameImageViewHolder(GameImageViewHolder holder, int position) { - int offset = 1; - if (!mPluginList.isEmpty()) { - offset += 1; - } - GameEntity gameEntity; - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - if (position >= offset && position <= mSubjectList.get(i).getData().size() + offset) { - int index = position - offset - 1; - if (index < 0) { - index = 0; - } - gameEntity = mSubjectList.get(i).getData().get(index); - if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())) { - - final GameEntity entity = gameEntity; - final String name = mSubjectList.get(i).getName(); - String tag = entity.getImage(); - holder.image.setTag(tag); - ImageUtils.Companion.getInstance().display(holder.image, entity.getImage(), - mContext.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(mContext, 16)); - holder.image.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Map kv = new HashMap<>(); - kv.put("名字", entity.getName()); - kv.put("位置", "大图"); - DataUtils.onEvent(mContext, "点击", "游戏-专题-" + name, kv); - - DataCollectionUtils.uploadClick(mContext, name + "-大图", "游戏-专题"); - - switch (entity.getType()) { - case "game": - GameDetailActivity.startGameDetailActivity(mContext, entity.getLink(), "(游戏-专题:" + name + "-大图)"); - break; - case "news": - // 统计阅读量 - NewsUtils.statNewsViews(mContext, entity.getLink()); - - Intent intent = NewsDetailActivity.getIntentById(mContext, entity.getLink(), "(游戏-专题:" + name + "-大图)"); - mContext.startActivity(intent); - break; - case "column": - SubjectActivity.startSubjectActivity(mContext, entity.getLink(), entity.getName(), false - , "(游戏-专题:" + name + "-大图)"); - break; - } - } - }); - break; - } - } - offset = mSubjectList.get(i).getData().size() + offset + 1; - } - } - - private void initGameHeadViewHolder(final GameHeadViewHolder holder, int position) { - int offset = 1; - GameEntity gameEntity; - if (!mPluginList.isEmpty()) { - offset += 1; - } - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - SubjectEntity subjectEntity = mSubjectList.get(i); - if (position >= offset && position <= subjectEntity.getData().size() + offset) { - int index = position - offset - 1; - if (index < 0) { - index = 0; - } - - if (TextUtils.isEmpty(subjectEntity.getData().get(0).getImage())) { - holder.lineTop.setVisibility(View.VISIBLE); - } else { - holder.lineTop.setVisibility(View.GONE); - } - - gameEntity = subjectEntity.getData().get(index); - String image = subjectEntity.getData().get(0).getImage(); - if (position == offset && TextUtils.isEmpty(gameEntity.getImage()) || position == offset + 1 - && !TextUtils.isEmpty(image)) { - - holder.line.setVisibility(subjectEntity.isOrder() ? View.VISIBLE : View.GONE); - holder.title.setText(subjectEntity.getName()); - holder.title.setTextColor(Color.BLACK); - final int ii = i; - int subjectSize = subjectEntity.getData().size(); - int moreSize = Integer.parseInt(subjectEntity.getMore()); - if (TextUtils.isEmpty(image) && subjectSize >= moreSize || - !TextUtils.isEmpty(image) && subjectSize >= moreSize + 1) { - holder.more.setVisibility(View.GONE); - } else { - holder.more.setVisibility(View.VISIBLE); - if ("change".equals(subjectEntity.getHome())) { - holder.more.setText("换一批"); - } else { - holder.more.setText("全部"); - } - } - - holder.more.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if ("全部".equals(holder.more.getText())) { - SubjectActivity.startSubjectActivity(mContext, subjectEntity.getId(), subjectEntity.getName() - , subjectEntity.isOrder(), "(游戏-专题:" + subjectEntity.getName() + "-全部)"); - } else { - holder.progressBar.setVisibility(View.VISIBLE); - List list = mSubjectChangedMap.get(subjectEntity.getId()); - if (list != null) { - initRandomGame(subjectEntity.getData(), new ArrayList<>(list)); - holder.progressBar.postDelayed(new Runnable() { - @Override - public void run() { - holder.progressBar.setVisibility(View.GONE); - } - }, 500); - } else { - changeSubjectGame(holder.progressBar, subjectEntity); - } - } - } - }); - } - } - offset = mSubjectList.get(i).getData().size() + offset + 1; - } - } - - private void initRandomGame(List rawList, List sourceList) { - - int size = rawList.size(); // 判断是否有大图 - - for (int i = 0; i < rawList.size(); i++) { //删除原数据,排除大图 - if (TextUtils.isEmpty(rawList.get(i).getImage())) { - rawList.remove(i); - i--; - } else { - size--; - } - } - - if (size * 2 <= sourceList.size()) { - sourceList = GameUtils.removeDuplicateData(rawList, sourceList);//排除重复 - } - - int[] indexes = RandomUtils.getRandomArray(size, sourceList.size()); - for (int index : indexes) { - GameEntity gameEntity = sourceList.get(index); - ApkActiveUtils.filterHideApk(gameEntity); - rawList.add(gameEntity); - } - - notifyDataSetChanged(); - - initLocationMap(); - } - - private void changeSubjectGame(final ProgressBar progressBar, final SubjectEntity subjectEntity) { - RetrofitManager.getInstance(mContext).getApi() - .getSubjectGame(subjectEntity.getId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - - @Override - public void onResponse(List response) { - progressBar.setVisibility(View.GONE); - if (response.size() < subjectEntity.getData().size()) { - Utils.toast(mContext, "数据异常"); - } else { - mSubjectChangedMap.put(subjectEntity.getId(), response); - initRandomGame(subjectEntity.getData(), new ArrayList<>(response)); - } - } - - @Override - public void onFailure(HttpException e) { - progressBar.setVisibility(View.GONE); - Utils.toast(mContext, "网络异常"); - } - }); - - } - - private void initFooterViewHolder(FooterViewHolder holder) { +// +// holder.mHeadTitle.setText(String.format(Locale.getDefault(), "你有%d个游戏可以升级插件版", mPluginList.size())); +// holder.mPluginHead.setOnClickListener(new OnClickListener() { +// @Override +// public void onClick(View v) { +// if (isOpenPluginList) { +// isOpenPluginList = false; +// holder.mHeadOpen.setImageResource(R.drawable.gamedetail_open_icon); +// } else { +// isOpenPluginList = true; +// holder.mHeadOpen.setImageResource(R.drawable.gamedetail_colse_icon); +// } +// notifyItemChanged(holder.getAdapterPosition()); +// } +// }); +// } +// +// private void initGameViewPagerViewHolder(final GameViewPagerViewHolder viewHolder) { +// +// if (mIsSlideError) { +// viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE); +// viewHolder.viewPager.setVisibility(View.GONE); +// } else { +// viewHolder.viewpager_tv_failure.setVisibility(View.GONE); +// viewHolder.viewPager.setVisibility(View.VISIBLE); +// } +// +// if (mIsSubjectDigestError) { +// viewHolder.subjectLl.setVisibility(View.GONE); +// viewHolder.subjectFailure.setVisibility(View.VISIBLE); +// } else { +// viewHolder.subjectLl.setVisibility(View.VISIBLE); +// viewHolder.subjectFailure.setVisibility(View.GONE); +// } +// +// if (mSlideList.size() != 0 && viewHolder.viewPager.getAdapter() == null) { +// viewHolder.viewpager_ll_hint.removeAllViews(); +// int margin = DisplayUtils.dip2px(mContext, 6); +// for (int i = 0, size = mSlideList.size(); i < size; i++) { +// ImageView imageView = new ImageView(mContext); +// LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(margin, margin); +//// lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6); +// if (i == 0) { +// imageView.setImageResource(R.drawable.oval_hint_up); +// } else { +// imageView.setImageResource(R.drawable.oval_hint_dn); +// } +// if (i != 0) { +// lparams.leftMargin = margin; +// } +// imageView.setLayoutParams(lparams); +// viewHolder.viewpager_ll_hint.addView(imageView); +// } +// +// viewHolder.viewPager.setAdapter(new ImagePagerAdapter(mContext, mSlideList, true)); +// viewHolder.viewPager.setInterval(3000); +// viewHolder.viewPager.startAutoScroll(); +// viewHolder.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { +// @Override +// public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { +// +// } +// +// @Override +// public void onPageSelected(int position) { +// for (int i = 0, size = viewHolder.viewpager_ll_hint.getChildCount(); i < size; i++) { +// if (i == position % size) { +// ((ImageView) viewHolder.viewpager_ll_hint.getChildAt(i)) +// .setImageResource(R.drawable.oval_hint_up); +// } else { +// ((ImageView) viewHolder.viewpager_ll_hint.getChildAt(i)) +// .setImageResource(R.drawable.oval_hint_dn); +// } +// } +// } +// +// @Override +// public void onPageScrollStateChanged(int state) { +// // 解决viewpager和SwipeRefreshLayout滑动冲突 +// if (state == ViewPager.SCROLL_STATE_DRAGGING) { +// mSwipeRefreshLayout.setEnabled(false); +// } else { +// mSwipeRefreshLayout.setEnabled(true); +// } +// } +// }); +// } +// +// viewHolder.viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// mIsSlideError = false; +// notifyItemChanged(0); +// initSlide(false); +// } +// }); +// +// if (mIsAutoScroll) { +// viewHolder.viewPager.startAutoScroll(); +// } else { +// viewHolder.viewPager.stopAutoScroll(); +// } +// +// viewHolder.subjectFailure.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// mIsSubjectDigestError = false; +// notifyItemChanged(0); +// initSubjectDigest(false); +// } +// }); +// +// //初始化专题入口 +// viewHolder.subjectLl.removeAllViews(); +// final int entrance_size = 5; +// for (int i = 0; i < entrance_size; i++) { +// View contentView = View.inflate(mContext, R.layout.home_subject_entrance_item, null); +// TextView subjectName = (TextView) contentView.findViewById(R.id.home_subject_name); +// SimpleDraweeView subjectIcon = (SimpleDraweeView) contentView.findViewById(R.id.home_subject_icon); +// LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f); +// contentView.setLayoutParams(lp); +// viewHolder.subjectLl.addView(contentView); +// +// if (mSubjectDigestList.size() >= i + 1) { +//// if (mSubjectDigestList.size() >= 5 && i < 5) { +// +// ImageUtils.Companion.display(subjectIcon, mSubjectDigestList.get(i).getIcon()); +// if (Config.isShowPlugin()) { +// subjectName.setText(mSubjectDigestList.get(i).getName()); +// } else { +// subjectName.setText(mSubjectDigestList.get(i).getNameNormal()); +// } +// } +// +// if (i == 4) { +// subjectName.setText(R.string.title_kaifu); +// ImageUtils.Companion.display(subjectIcon, R.drawable.home_entrance_kaifu); +// } +// +// final int finalI = i; +// contentView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (finalI < 4 && !mIsSubjectDigestError && mSubjectDigestList.size() > finalI) { +// SubjectDigestEntity entity = mSubjectDigestList.get(finalI); +// SubjectActivity.startSubjectActivity(mContext, entity.getColumnId(), entity.getColumnName(), entity.getOrder() +// , StringUtils.buildString("(游戏-专题:", entity.getName(), "[1-", String.valueOf(finalI + 1), "]", ")")); +// +// DataCollectionUtils.uploadPosition(mContext, "游戏", String.valueOf(finalI + 1), +// mSubjectDigestList.get(finalI).getName()); +// } else if (finalI == 4) { +// Intent intent = KaiFuActivity.getIntent(mContext, "(游戏-专题:开服表[1-6])"); +// mContext.startActivity(intent); +// +// DataCollectionUtils.uploadPosition(mContext, "游戏", "6", "开服表"); +// } else { +// Utils.toast(mContext, "数据异常"); +// } +// } +// }); +// } +// } +// +// private void initGameTestViewHolder(GameTestViewHolder holder, int position) { +// holder.initGameTestViewHolder(mContext, this, mSubjectList, mPluginList, position, new OnGameTestItemClickListener() { +// @Override +// public void onClick(GameEntity gameEntity, SubjectEntity subjectEntity, int position) { +// Map kv = new HashMap<>(); +// kv.put("名字", gameEntity.getName()); +// kv.put("位置", String.valueOf(position + 1)); +// DataUtils.onEvent(mContext, "点击", "游戏-专题-" + subjectEntity.getName(), kv); +// +// DataCollectionUtils.uploadClick(mContext, subjectEntity.getName() + "-列表", "游戏-专题", gameEntity.getName()); +// +// GameDetailActivity.startGameDetailActivity(mContext, gameEntity, +// StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(position + 1), "])")); +// } +// }); +// +// } +// +// private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) { +// GameEntity gameEntity; +// +// int offset = 1; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// if (position > offset && position <= mSubjectList.get(i).getData().size() + offset) { +// int index = position - offset - 1; +// if (index < 0) { +// index = 0; +// } +// gameEntity = mSubjectList.get(i).getData().get(index); +// if (TextUtils.isEmpty(gameEntity.getImage())) { +// int order = position - offset - 1; +// if (mSubjectList.get(i).getData().get(0).getImage() != null) { +// order--; +// } +// initGameNormal(holder, gameEntity, order, mSubjectList.get(i)); +// break; +// } +// } +// offset = mSubjectList.get(i).getData().size() + offset + 1; +// } +// } +// +// private void initGameNormal(GameNormalViewHolder holder, final GameEntity gameEntity, +// final int i, final SubjectEntity subjectEntity) { +// holder.initServerType(gameEntity, mContext); +// +// if (subjectEntity.isOrder()) { +// holder.gameOrder.setVisibility(View.VISIBLE); +// holder.gameOrder.setText(String.valueOf(i + 1)); +// } else { +// holder.gameOrder.setVisibility(View.GONE); +// } +// +// ImageUtils.Companion.display(holder.gameThumb, gameEntity.getIcon()); +// if (gameEntity.isPluggable() && gameEntity.getApk().size() > 0) { +// holder.gameName.setText(String.format("%s - %s", gameEntity.getName(), +// PlatformUtils.getInstance(mContext).getPlatformName( +// gameEntity.getApk().get(0).getPlatform()))); +// } else { +// holder.gameName.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(mContext, holder.gameLabelList, gameEntity.getTag(), subjectEntity.getTag()); +// +// holder.itemView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Map kv = new HashMap<>(); +// kv.put("名字", gameEntity.getName()); +// kv.put("位置", String.valueOf(i + 1)); +// DataUtils.onEvent(mContext, "点击", "游戏-专题-" + subjectEntity.getName(), kv); +// +// DataCollectionUtils.uploadClick(mContext, subjectEntity.getName() + "-列表", "游戏-专题", gameEntity.getName()); +// +// if (gameEntity.isPluggable()) { +// GameDetailActivity.startGameDetailActivity(mContext, gameEntity.getId(), +// StringUtils.buildString("(游戏-专题:插件化-列表[", String.valueOf(i + 1), "])")); +// } else { +// GameDetailActivity.startGameDetailActivity(mContext, gameEntity, +// StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])")); +// } +// } +// }); +// +// DownloadItemUtils.setOnClickListener(mContext, holder.gameDownloadBtn, gameEntity, i, +// GameFragmentAdapter.this, +// StringUtils.buildString("(游戏-专题:", subjectEntity.getName(), "-列表[", String.valueOf(i + 1), "])"), +// StringUtils.buildString("游戏-专题-", subjectEntity.getName(), ":", gameEntity.getName())); +// +// DownloadItemUtils.updateItem(mContext, gameEntity, holder, !gameEntity.isPluggable()); +// } +// +// private void initGameImageViewHolder(GameImageViewHolder holder, int position) { +// int offset = 1; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// GameEntity gameEntity; +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// if (position >= offset && position <= mSubjectList.get(i).getData().size() + offset) { +// int index = position - offset - 1; +// if (index < 0) { +// index = 0; +// } +// gameEntity = mSubjectList.get(i).getData().get(index); +// if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())) { +// +// final GameEntity entity = gameEntity; +// final String name = mSubjectList.get(i).getName(); +// String tag = entity.getImage(); +// holder.image.setTag(tag); +// ImageUtils.Companion.getInstance().display(holder.image, entity.getImage(), +// mContext.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(mContext, 16)); +// holder.image.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Map kv = new HashMap<>(); +// kv.put("名字", entity.getName()); +// kv.put("位置", "大图"); +// DataUtils.onEvent(mContext, "点击", "游戏-专题-" + name, kv); +// +// DataCollectionUtils.uploadClick(mContext, name + "-大图", "游戏-专题"); +// +// switch (entity.getType()) { +// case "game": +// GameDetailActivity.startGameDetailActivity(mContext, entity.getLink(), "(游戏-专题:" + name + "-大图)"); +// break; +// case "news": +// // 统计阅读量 +// NewsUtils.statNewsViews(mContext, entity.getLink()); +// +// Intent intent = NewsDetailActivity.getIntentById(mContext, entity.getLink(), "(游戏-专题:" + name + "-大图)"); +// mContext.startActivity(intent); +// break; +// case "column": +// SubjectActivity.startSubjectActivity(mContext, entity.getLink(), entity.getName(), false +// , "(游戏-专题:" + name + "-大图)"); +// break; +// } +// } +// }); +// break; +// } +// } +// offset = mSubjectList.get(i).getData().size() + offset + 1; +// } +// } +// +// private void initGameHeadViewHolder(final GameHeadViewHolder holder, int position) { +// int offset = 1; +// GameEntity gameEntity; +// if (!mPluginList.isEmpty()) { +// offset += 1; +// } +// for (int i = 0, size = mSubjectList.size(); i < size; i++) { +// SubjectEntity subjectEntity = mSubjectList.get(i); +// if (position >= offset && position <= subjectEntity.getData().size() + offset) { +// int index = position - offset - 1; +// if (index < 0) { +// index = 0; +// } +// +// if (TextUtils.isEmpty(subjectEntity.getData().get(0).getImage())) { +// holder.lineTop.setVisibility(View.VISIBLE); +// } else { +// holder.lineTop.setVisibility(View.GONE); +// } +// +// gameEntity = subjectEntity.getData().get(index); +// String image = subjectEntity.getData().get(0).getImage(); +// if (position == offset && TextUtils.isEmpty(gameEntity.getImage()) || position == offset + 1 +// && !TextUtils.isEmpty(image)) { +// +// holder.line.setVisibility(subjectEntity.isOrder() ? View.VISIBLE : View.GONE); +// holder.title.setText(subjectEntity.getName()); +// holder.title.setTextColor(Color.BLACK); +// final int ii = i; +// int subjectSize = subjectEntity.getData().size(); +// int moreSize = Integer.parseInt(subjectEntity.getMore()); +// if (TextUtils.isEmpty(image) && subjectSize >= moreSize || +// !TextUtils.isEmpty(image) && subjectSize >= moreSize + 1) { +// holder.more.setVisibility(View.GONE); +// } else { +// holder.more.setVisibility(View.VISIBLE); +// if ("change".equals(subjectEntity.getHome())) { +// holder.more.setText("换一批"); +// } else { +// holder.more.setText("全部"); +// } +// } +// +// holder.more.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if ("全部".equals(holder.more.getText())) { +// SubjectActivity.startSubjectActivity(mContext, subjectEntity.getId(), subjectEntity.getName() +// , subjectEntity.isOrder(), "(游戏-专题:" + subjectEntity.getName() + "-全部)"); +// } else { +// holder.progressBar.setVisibility(View.VISIBLE); +// List list = mSubjectChangedMap.get(subjectEntity.getId()); +// if (list != null) { +// initRandomGame(subjectEntity.getData(), new ArrayList<>(list)); +// holder.progressBar.postDelayed(new Runnable() { +// @Override +// public void run() { +// holder.progressBar.setVisibility(View.GONE); +// } +// }, 500); +// } else { +// changeSubjectGame(holder.progressBar, subjectEntity); +// } +// } +// } +// }); +// } +// } +// offset = mSubjectList.get(i).getData().size() + offset + 1; +// } +// } +// +// private void initRandomGame(List rawList, List sourceList) { +// +// int size = rawList.size(); // 判断是否有大图 +// +// for (int i = 0; i < rawList.size(); i++) { //删除原数据,排除大图 +// if (TextUtils.isEmpty(rawList.get(i).getImage())) { +// rawList.remove(i); +// i--; +// } else { +// size--; +// } +// } +// +// if (size * 2 <= sourceList.size()) { +// sourceList = GameUtils.removeDuplicateData(rawList, sourceList);//排除重复 +// } +// +// int[] indexes = RandomUtils.getRandomArray(size, sourceList.size()); +// for (int index : indexes) { +// GameEntity gameEntity = sourceList.get(index); +// ApkActiveUtils.filterHideApk(gameEntity); +// rawList.add(gameEntity); +// } +// +// notifyDataSetChanged(); +// +// initLocationMap(); +// } +// +// private void changeSubjectGame(final ProgressBar progressBar, final SubjectEntity subjectEntity) { +// RetrofitManager.getInstance(mContext).getApi() +// .getSubjectGame(subjectEntity.getId()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response>() { +// +// @Override +// public void onResponse(List response) { +// progressBar.setVisibility(View.GONE); +// if (response.size() < subjectEntity.getData().size()) { +// Utils.toast(mContext, "数据异常"); +// } else { +// mSubjectChangedMap.put(subjectEntity.getId(), response); +// initRandomGame(subjectEntity.getData(), new ArrayList<>(response)); +// } +// } +// +// @Override +// public void onFailure(HttpException e) { +// progressBar.setVisibility(View.GONE); +// Utils.toast(mContext, "网络异常"); +// } +// }); +// +// } +// +// private void initFooterViewHolder(FooterViewHolder holder) { holder.initFooterViewHolder(mIsNetworkError, mIsOver, new OnClickListener() { @Override public void onClick(View v) { @@ -1023,39 +1039,39 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter { } } }); - } - - public void startAutoScroll() { - mIsAutoScroll = true; - notifyItemChanged(0); - } - - public void stopAutoScroll() { - mIsAutoScroll = false; - notifyItemChanged(0); - } - - public RecyclerView.Adapter getPluginAdapter() { - return mPluginAdapter; - } - - public List getPluginList() { - return mPluginList; - } - - public List getSubjectList() { - return mSubjectList; - } - - public boolean isNetworkError() { - return mIsNetworkError; - } - - public void setNetworkError(boolean networkError) { - mIsNetworkError = networkError; - } - - public boolean isInitPlugin() { - return mIsInitPlugin; - } -} +// } +// +// public void startAutoScroll() { +// mIsAutoScroll = true; +// notifyItemChanged(0); +// } +// +// public void stopAutoScroll() { +// mIsAutoScroll = false; +// notifyItemChanged(0); +// } +// +// public RecyclerView.Adapter getPluginAdapter() { +// return mPluginAdapter; +// } +// +// public List getPluginList() { +// return mPluginList; +// } +// +// public List getSubjectList() { +// return mSubjectList; +// } +// +// public boolean isNetworkError() { +// return mIsNetworkError; +// } +// +// public void setNetworkError(boolean networkError) { +// mIsNetworkError = networkError; +// } +// +// public boolean isInitPlugin() { +// return mIsInitPlugin; +// } +//} diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginViewHolder.java b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginViewHolder.java index 72c6be8ef3..b55af6c6af 100644 --- a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginViewHolder.java +++ b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginViewHolder.java @@ -18,13 +18,13 @@ import butterknife.BindView; public class GamePluginViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.plugin_head_title) - TextView mHeadTitle; + public TextView mHeadTitle; @BindView(R.id.plugin_head_open) - ImageView mHeadOpen; + public ImageView mHeadOpen; @BindView(R.id.plugin_rv) - RecyclerView mPluginRv; + public RecyclerView mPluginRv; @BindView(R.id.plugin_head) - LinearLayout mPluginHead; + public LinearLayout mPluginHead; public GamePluginViewHolder(View itemView) { super(itemView); diff --git a/app/src/main/res/layout/fragment_game.xml b/app/src/main/res/layout/fragment_game.xml index 1a448dfef6..3837f062bf 100644 --- a/app/src/main/res/layout/fragment_game.xml +++ b/app/src/main/res/layout/fragment_game.xml @@ -1,28 +1,46 @@ - - + + + + + + + + + + android:layout_height = "match_parent" + android:focusableInTouchMode = "true" > - + android:layout_height = "match_parent" + isRefreshing="@{loadStatus}"> - + - + - + - \ No newline at end of file + + + + diff --git a/app/src/main/res/layout/game_head_item.xml b/app/src/main/res/layout/game_head_item.xml index ddbc6a3170..49a2b0b0d3 100644 --- a/app/src/main/res/layout/game_head_item.xml +++ b/app/src/main/res/layout/game_head_item.xml @@ -1,67 +1,82 @@ - + - + - + + + + + + android:layout_height = "wrap_content" + android:background = "@android:color/white" + android:orientation = "vertical" > + android:id = "@+id/head_line_top" + android:layout_width = "match_parent" + android:layout_height = "8dp" + visibleGone="@{TextUtils.isEmpty(subject.getData().get(0).getImage())?true:false}" + android:background = "@color/background" /> - + android:orientation = "horizontal" + android:paddingLeft = "18dp" + android:paddingRight = "18dp" > - + - + + + + + + + + + + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/game_horizontal_item.xml b/app/src/main/res/layout/game_horizontal_item.xml index 1c29a2a354..8689748a88 100644 --- a/app/src/main/res/layout/game_horizontal_item.xml +++ b/app/src/main/res/layout/game_horizontal_item.xml @@ -11,13 +11,14 @@ diff --git a/app/src/main/res/layout/game_horizontal_list.xml b/app/src/main/res/layout/game_horizontal_list.xml new file mode 100644 index 0000000000..9286758f50 --- /dev/null +++ b/app/src/main/res/layout/game_horizontal_list.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/game_item.xml b/app/src/main/res/layout/game_item.xml new file mode 100644 index 0000000000..f7e3b454fd --- /dev/null +++ b/app/src/main/res/layout/game_item.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/game_subject_item.xml b/app/src/main/res/layout/game_subject_item.xml new file mode 100644 index 0000000000..b86a0205c4 --- /dev/null +++ b/app/src/main/res/layout/game_subject_item.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/game_test_label.xml b/app/src/main/res/layout/game_test_label.xml new file mode 100644 index 0000000000..46615b5efe --- /dev/null +++ b/app/src/main/res/layout/game_test_label.xml @@ -0,0 +1,36 @@ + + + + + + + \ No newline at end of file