新开服表(默认定位未完成,等待根据游戏id获取开服信息接口)
This commit is contained in:
@ -116,7 +116,7 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
isEverPause = false;
|
||||
isEverPause = false; // TODO 导致根据isEverPause判断的方法无法执行
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -236,13 +236,13 @@ public class GameDetailActivity extends BaseActivity {
|
||||
mKaifuHint.setVisibility(View.VISIBLE);
|
||||
}
|
||||
mTanBarFuLiTv.setTextColor(Color.WHITE);
|
||||
mTanBarFuLiTv.setBackgroundResource(R.drawable.gamedetail_tag_select_bg);
|
||||
mTanBarFuLiTv.setBackgroundResource(R.drawable.tabbar_left_bg);
|
||||
mTanBarXinXiTv.setTextColor(Color.BLACK);
|
||||
mTanBarXinXiTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
} else {
|
||||
mKaifuHint.setVisibility(View.GONE);
|
||||
mTanBarXinXiTv.setTextColor(Color.WHITE);
|
||||
mTanBarXinXiTv.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg);
|
||||
mTanBarXinXiTv.setBackgroundResource(R.drawable.tabbar_right_bg);
|
||||
mTanBarFuLiTv.setTextColor(Color.BLACK);
|
||||
mTanBarFuLiTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
}
|
||||
|
||||
@ -1,111 +1,43 @@
|
||||
package com.gh.gamecenter;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
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.text.TextUtils;
|
||||
import android.view.KeyEvent;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
|
||||
import com.gh.base.BaseActivity;
|
||||
import com.gh.base.OnRequestCallBackListener;
|
||||
import com.gh.common.util.DownloadItemUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.view.VerticalItemDecoration;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.adapter.KaiFuAdapter;
|
||||
import com.gh.gamecenter.adapter.KaiFuDialogAdapter;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.eventbus.EBDownloadStatus;
|
||||
import com.gh.gamecenter.eventbus.EBNetworkState;
|
||||
import com.gh.gamecenter.eventbus.EBPackage;
|
||||
import com.jakewharton.rxbinding.view.RxView;
|
||||
import com.lightgame.download.DataWatcher;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
import com.gh.gamecenter.eventbus.EBKaiFuReset;
|
||||
import com.gh.gamecenter.kaifu.KaiFuFragment;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import butterknife.BindView;
|
||||
import rx.functions.Action1;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/3/16.
|
||||
* 首页-开服表
|
||||
* Created by khy on 18/08/17.
|
||||
*/
|
||||
public class KaiFuActivity extends BaseActivity implements OnRequestCallBackListener,
|
||||
KaiFuDialogAdapter.OnKaiFuDialogCallBackListener, KaiFuAdapter.OnScrollToKaiFuIndexListener,
|
||||
SwipeRefreshLayout.OnRefreshListener {
|
||||
|
||||
@BindView(R.id.kaifu_rv)
|
||||
RecyclerView mRecyclerView;
|
||||
@BindView(R.id.kaifu_pb)
|
||||
ProgressBarCircularIndeterminate mPbLoading;
|
||||
@BindView(R.id.kaifu_refresh)
|
||||
SwipeRefreshLayout mRefreshLayout;
|
||||
@BindView(R.id.kaifu_game_name)
|
||||
TextView mGameName;
|
||||
@BindView(R.id.popup_bg)
|
||||
View mPopupBg;
|
||||
@BindView(R.id.kaifu_select_game_rl)
|
||||
RelativeLayout mSelectGameRl;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConnection;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoData;
|
||||
private PopupWindow mPopupWindow;
|
||||
public class KaiFuActivity extends BaseActivity {
|
||||
|
||||
private KaiFuAdapter mAdapter;
|
||||
@BindView(R.id.reuse_actionbar)
|
||||
RelativeLayout mReuseActionbar;
|
||||
|
||||
private LinearLayoutManager layoutManager;
|
||||
private TextView mResetTv;
|
||||
|
||||
private boolean isEverpause = false;
|
||||
private boolean move = false;
|
||||
private boolean smoothMove = false;
|
||||
private KaiFuFragment mKaiFuFragment;
|
||||
private KaiFuFragment mGameKaiFuFragment;
|
||||
|
||||
private String kaifuType;
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mAdapter = new KaiFuAdapter(KaiFuActivity.this, KaiFuActivity.this, KaiFuActivity.this, kaifuType);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
}
|
||||
};
|
||||
private int mDialogGamePosition; // 顶部弹窗过滤位置
|
||||
private int kaifuOffset = 0;
|
||||
private int mInitMovePosition; // 首次进入移动的位置
|
||||
private int mMovePosition; // 移动位置
|
||||
private DataWatcher dataWatcher = new DataWatcher() {
|
||||
@Override
|
||||
public void onDataChanged(DownloadEntity downloadEntity) {
|
||||
ArrayList<Integer> locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName());
|
||||
if (locationList != null) {
|
||||
GameEntity gameEntity;
|
||||
for (int location : locationList) {
|
||||
gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex());
|
||||
if (gameEntity != null) {
|
||||
DownloadItemUtils.processDate(KaiFuActivity.this, gameEntity, downloadEntity,
|
||||
mAdapter, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
public static final String SINGLE_GAME_KAIFU = "SINGLE_GAME_KAIFU";
|
||||
public static final String ALL_GAME_KAIFU = "ALL_GAME_KAIFU";
|
||||
|
||||
@NonNull
|
||||
public static Intent getIntent(Context context, String entrance) {
|
||||
@ -114,373 +46,71 @@ public class KaiFuActivity extends BaseActivity implements OnRequestCallBackList
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_kaifu;
|
||||
return R.layout.activity_kaifu2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initTitle(getString(R.string.title_kaifu));
|
||||
initTitle("开服表");
|
||||
|
||||
kaifuType = "全部";
|
||||
|
||||
mRefreshLayout.setColorSchemeResources(R.color.theme);
|
||||
mRefreshLayout.setOnRefreshListener(this);
|
||||
mRefreshLayout.setEnabled(false);
|
||||
|
||||
mAdapter = new KaiFuAdapter(this, this, this, kaifuType);
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
((DefaultItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
|
||||
mRecyclerView.addItemDecoration(new VerticalItemDecoration(this, 8, false));
|
||||
mRecyclerView.setLayoutManager(layoutManager);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
|
||||
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (smoothMove && newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
smoothMove = false;
|
||||
int n = mMovePosition - layoutManager.findFirstVisibleItemPosition();
|
||||
if (0 <= n && n < mRecyclerView.getChildCount()) {
|
||||
View view = layoutManager.findViewByPosition(n);
|
||||
if (view != null) {
|
||||
int top = view.getTop();
|
||||
mRecyclerView.smoothScrollBy(0, top);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//上拉加载
|
||||
if (mAdapter.isLoadedBottom() && newState == RecyclerView.SCROLL_STATE_IDLE
|
||||
&& mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) {
|
||||
mAdapter.initListBottom(kaifuOffset + mAdapter.loadCountBottom());
|
||||
}
|
||||
//下拉加载
|
||||
if (kaifuOffset > 0 && mAdapter.isLoadedTop() && newState == RecyclerView.SCROLL_STATE_IDLE
|
||||
&& layoutManager.findFirstVisibleItemPosition() == 0) {
|
||||
int countTop = mAdapter.loadCountTop();
|
||||
// if (countTop % 20 == 0) { // 不是20的倍数 证明加载完毕
|
||||
int offset = kaifuOffset - countTop;
|
||||
int limit = 20;
|
||||
if (offset < 0) {
|
||||
limit = limit + offset;
|
||||
offset = 0;
|
||||
}
|
||||
if (limit == 0) return;
|
||||
|
||||
mAdapter.initListTop(offset, limit);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
if (move) {
|
||||
move = false;
|
||||
int n = mMovePosition - layoutManager.findFirstVisibleItemPosition();
|
||||
if (0 <= n && n < mRecyclerView.getChildCount()) {
|
||||
int top = mRecyclerView.getChildAt(n).getTop();
|
||||
mRecyclerView.scrollBy(0, top);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
mResetTv = new TextView(this);
|
||||
mResetTv.setText("重置");
|
||||
mResetTv.setTextColor(ContextCompat.getColor(this, R.color.title));
|
||||
mResetTv.setGravity(Gravity.CENTER);
|
||||
mResetTv.setVisibility(View.GONE);
|
||||
mResetTv.setBackgroundResource(R.drawable.border_black_bg);
|
||||
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
|
||||
DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 28));
|
||||
params.addRule(RelativeLayout.CENTER_VERTICAL);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
|
||||
params.setMargins(0, 0, DisplayUtils.dip2px(this, 8), 0);
|
||||
mReuseActionbar.addView(mResetTv, params);
|
||||
|
||||
|
||||
// 防抖处理
|
||||
RxView.clicks(mSelectGameRl)
|
||||
.throttleFirst(1, TimeUnit.SECONDS)
|
||||
.subscribe(new Action1<Void>() {
|
||||
@Override
|
||||
public void call(Void aVoid) {
|
||||
initSelectGameDialog();
|
||||
}
|
||||
});
|
||||
|
||||
mNoConnection.setOnClickListener(new View.OnClickListener() {
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
mKaiFuFragment = new KaiFuFragment();
|
||||
fragmentTransaction.add(R.id.layout_fragment_content, mKaiFuFragment);
|
||||
fragmentTransaction.commit();
|
||||
mResetTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mAdapter.initKaiFuOffset();
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
mPbLoading.setVisibility(View.VISIBLE);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void initSelectGameDialog() {
|
||||
isShowPopupBg(true);
|
||||
|
||||
View contentView = View.inflate(this, R.layout.dialog_kaifu_select_game, null);
|
||||
RecyclerView selectGameRv = (RecyclerView) contentView.findViewById(R.id.dialog_kaifu_select_game_rv);
|
||||
final TextView selectGameTitle = (TextView) contentView.findViewById(R.id.dialog_kaifu_title);
|
||||
|
||||
final LinearLayoutManager layout = new LinearLayoutManager(this);
|
||||
selectGameRv.setLayoutManager(layout);
|
||||
selectGameRv.setAdapter(new KaiFuDialogAdapter(this, this, mDialogGamePosition));
|
||||
|
||||
|
||||
mPopupWindow = new PopupWindow(contentView, LinearLayout.LayoutParams.MATCH_PARENT
|
||||
, LinearLayout.LayoutParams.MATCH_PARENT, true);
|
||||
mPopupWindow.setAnimationStyle(R.style.scale_popwindow_anim_style);
|
||||
mPopupWindow.showAtLocation(mSelectGameRl, 0, 0, 0);
|
||||
|
||||
selectGameRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
|
||||
if (layout.findFirstVisibleItemPosition() >= 5) {
|
||||
selectGameTitle.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
selectGameTitle.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
selectGameRv.setOnKeyListener(new View.OnKeyListener() {
|
||||
@Override
|
||||
public boolean onKey(View v, int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK
|
||||
&& event.getRepeatCount() == 0
|
||||
&& mPopupWindow != null
|
||||
&& mPopupWindow.isShowing()) {
|
||||
isShowPopupBg(false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
contentView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
isShowPopupBg(false);
|
||||
resetFragment();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void moveToPosition(int n, boolean isSmooth) {
|
||||
int firstItem = layoutManager.findFirstVisibleItemPosition();
|
||||
int lastItem = layoutManager.findLastVisibleItemPosition();
|
||||
if (n <= firstItem) {
|
||||
if (isSmooth) {
|
||||
mRecyclerView.smoothScrollToPosition(n);
|
||||
} else {
|
||||
mRecyclerView.scrollToPosition(n);
|
||||
}
|
||||
} else if (n <= lastItem) {
|
||||
int top = layoutManager.findViewByPosition(n).getTop();
|
||||
if (isSmooth) {
|
||||
mRecyclerView.smoothScrollBy(0, top);
|
||||
} else {
|
||||
mRecyclerView.scrollBy(0, top);
|
||||
}
|
||||
} else {
|
||||
if (isSmooth) {
|
||||
mRecyclerView.smoothScrollToPosition(n);
|
||||
smoothMove = true;
|
||||
} else {
|
||||
mRecyclerView.scrollToPosition(n);
|
||||
move = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void resetFragment() {
|
||||
mResetTv.setVisibility(View.GONE);
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
fragmentTransaction.remove(mGameKaiFuFragment);
|
||||
fragmentTransaction.show(mKaiFuFragment);
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
|
||||
public void isShowPopupBg(boolean isShow) {
|
||||
if (isShow) {
|
||||
mPopupBg.setVisibility(View.VISIBLE);
|
||||
mPopupBg.animate()
|
||||
.alpha(1f)
|
||||
.setDuration(300)
|
||||
.setListener(null);
|
||||
} else {
|
||||
mPopupWindow.dismiss();
|
||||
mPopupBg.animate()
|
||||
.alpha(0f)
|
||||
.setDuration(300)
|
||||
.setListener(new Animator.AnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mPopupBg.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationRepeat(Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
isEverpause = true;
|
||||
DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (isEverpause) {
|
||||
for (GameEntity entity : mAdapter.getSubjectList()) {
|
||||
entity.setEntryMap(DownloadManager.getInstance(this).getEntryMap(entity.getName()));
|
||||
}
|
||||
}
|
||||
isEverpause = false;
|
||||
DownloadManager.getInstance(getApplicationContext()).addObserver(dataWatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadDone() {
|
||||
mNoData.setVisibility(View.GONE);
|
||||
if (mPbLoading != null && mPbLoading.getVisibility() == View.VISIBLE) {
|
||||
mPbLoading.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (mRefreshLayout.isRefreshing()) {
|
||||
mRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadDone(Object obj) {
|
||||
kaifuOffset = (int) obj;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadError() {
|
||||
if (mPbLoading != null && mPbLoading.getVisibility() == View.VISIBLE) {
|
||||
mPbLoading.setVisibility(View.GONE);
|
||||
}
|
||||
toast("加载失败,请检查网络状态");
|
||||
mPbLoading.setVisibility(View.GONE);
|
||||
mNoData.setVisibility(View.GONE);
|
||||
mNoConnection.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadEmpty() {
|
||||
mNoData.setVisibility(View.VISIBLE);
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectPosition(int position, String tag, String gameName) {
|
||||
mDialogGamePosition = position;
|
||||
if (!TextUtils.isEmpty(gameName)) {
|
||||
mGameName.setText(gameName);
|
||||
} else {
|
||||
mGameName.setText(tag);
|
||||
}
|
||||
isShowPopupBg(false);
|
||||
|
||||
kaifuOffset = 0;
|
||||
kaifuType = tag;
|
||||
|
||||
mRecyclerView.setVisibility(View.VISIBLE);
|
||||
mPbLoading.setVisibility(View.VISIBLE);
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
mNoData.setVisibility(View.GONE);
|
||||
|
||||
mAdapter = new KaiFuAdapter(this, this, this, kaifuType);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
|
||||
}
|
||||
|
||||
// 下载被删除事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBDownloadStatus status) {
|
||||
if ("delete".equals(status.getStatus())) {
|
||||
DownloadManager.getInstance(this).removePlatform(status.getName(), status.getPlatform());
|
||||
|
||||
ArrayList<Integer> locationList = mAdapter.getLocationMap().get(status.getPackageName());
|
||||
if (locationList != null) {
|
||||
GameEntity gameEntity;
|
||||
for (int location : locationList) {
|
||||
|
||||
gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex());
|
||||
if (gameEntity != null && gameEntity.getEntryMap() != null) {
|
||||
gameEntity.getEntryMap().remove(status.getPlatform());
|
||||
}
|
||||
mAdapter.notifyItemChanged(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int getGameEntityIndex() {
|
||||
if (kaifuOffset != 0) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBPackage busFour) {
|
||||
ArrayList<Integer> locationList = mAdapter.getLocationMap().get(busFour.getPackageName());
|
||||
if (locationList != null) {
|
||||
GameEntity gameEntity;
|
||||
for (int location : locationList) {
|
||||
if ("安装".equals(busFour.getType())) {
|
||||
gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex());
|
||||
for (ApkEntity apkEntity : gameEntity.getApk()) {
|
||||
if (apkEntity.getPackageName().equals(busFour.getPackageName())) {
|
||||
if (gameEntity.getEntryMap() != null) {
|
||||
gameEntity.getEntryMap().remove(apkEntity.getPlatform());
|
||||
}
|
||||
mAdapter.notifyItemChanged(location + getGameEntityIndex());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if ("卸载".equals(busFour.getType())) {
|
||||
mAdapter.notifyItemChanged(location + getGameEntityIndex());
|
||||
}
|
||||
}
|
||||
public void onEventMainThread(EBKaiFuReset reset) {
|
||||
if (SINGLE_GAME_KAIFU.equals(reset.getControl())) {
|
||||
mResetTv.setVisibility(View.VISIBLE);
|
||||
|
||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
||||
fragmentTransaction.hide(mKaiFuFragment);
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putString("gameId", reset.getGameId());
|
||||
|
||||
mGameKaiFuFragment = new KaiFuFragment();
|
||||
mGameKaiFuFragment.setArguments(args);
|
||||
|
||||
fragmentTransaction.add(R.id.layout_fragment_content, mGameKaiFuFragment, KaiFuFragment.class.getSimpleName());
|
||||
fragmentTransaction.commit();
|
||||
} else if (ALL_GAME_KAIFU.equals(reset.getControl())) {
|
||||
resetFragment();
|
||||
}
|
||||
}
|
||||
|
||||
//连接上网络事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBNetworkState busNetworkState) {
|
||||
if (busNetworkState.isNetworkConnected()) {
|
||||
if (mNoConnection.getVisibility() == View.VISIBLE) {
|
||||
mRecyclerView.setVisibility(View.VISIBLE);
|
||||
mPbLoading.setVisibility(View.VISIBLE);
|
||||
mNoConnection.setVisibility(View.GONE);
|
||||
mAdapter = new KaiFuAdapter(this, this, this, kaifuType);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScroll(int scrollPosition) {
|
||||
mInitMovePosition = scrollPosition + getGameEntityIndex() + 1;
|
||||
moveToPosition(mInitMovePosition, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
mRecyclerView.postDelayed(runnable, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,596 +0,0 @@
|
||||
package com.gh.gamecenter.adapter;
|
||||
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.gh.base.OnRequestCallBackListener;
|
||||
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.ImageUtils;
|
||||
import com.gh.common.util.KaiFuUtils;
|
||||
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.R;
|
||||
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
||||
import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder;
|
||||
import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.entity.KaiFuServerEntity;
|
||||
import com.gh.gamecenter.manager.GameManager;
|
||||
import com.gh.gamecenter.retrofit.JSONObjectResponse;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.lightgame.adapter.BaseRecyclerAdapter;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/3/16.
|
||||
*/
|
||||
public class KaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
|
||||
|
||||
private OnRequestCallBackListener mOnRequestCallBackListener;
|
||||
private OnScrollToKaiFuIndexListener mOnScrollToKaiFuIndexListener;
|
||||
|
||||
private List<GameEntity> mSubjectList;
|
||||
|
||||
private ArrayMap<String, ArrayList<Integer>> mLocationMap;
|
||||
|
||||
private String mKaifuType;
|
||||
|
||||
private int mKaifuIndex = 0; // 开服零界点
|
||||
private int mInitOffset;
|
||||
private int mLoadCountTop; // 记录加载数量 上
|
||||
private int mLoadCountBottom;// 记录加载数量 下
|
||||
|
||||
private long mTopLastTime;
|
||||
private long mBottomLastTime;
|
||||
|
||||
private boolean mIsRemoveBottom;
|
||||
private boolean mIsRemoveTop;
|
||||
private boolean mIsNetworkError;
|
||||
private boolean mIsLoadedBottom;
|
||||
private boolean mIsLoadedTop;
|
||||
|
||||
public KaiFuAdapter(KaiFuActivity context, OnRequestCallBackListener callBackListener,
|
||||
OnScrollToKaiFuIndexListener scrollToKaiFuIndexListener, String kaifuType) {
|
||||
super(context);
|
||||
mOnRequestCallBackListener = callBackListener;
|
||||
mKaifuType = kaifuType;
|
||||
mOnScrollToKaiFuIndexListener = scrollToKaiFuIndexListener;
|
||||
|
||||
mLocationMap = new ArrayMap<>();
|
||||
|
||||
mSubjectList = new ArrayList<>();
|
||||
mIsLoadedTop = false;
|
||||
mIsLoadedBottom = false;
|
||||
mIsNetworkError = false;
|
||||
|
||||
mKaifuIndex = 0;
|
||||
mLoadCountBottom = 0;
|
||||
mLoadCountTop = 0;
|
||||
|
||||
if ("全部".equals(kaifuType)) {
|
||||
this.mKaifuType = "all";
|
||||
}
|
||||
|
||||
initKaiFuOffset();
|
||||
}
|
||||
|
||||
public void initKaiFuOffset() {
|
||||
RetrofitManager.getApi()
|
||||
.getKaiFuOffset(mKaifuType)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new JSONObjectResponse() {
|
||||
@Override
|
||||
public void onResponse(JSONObject response) {
|
||||
super.onResponse(response);
|
||||
JSONObject jsonObject = response;
|
||||
int offset = 0;
|
||||
try {
|
||||
offset = jsonObject.getInt("offset");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mInitOffset = offset;
|
||||
mOnRequestCallBackListener.loadDone(offset);
|
||||
initListBottom(offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
mOnRequestCallBackListener.loadError();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void initListTop(final int offset, int limit) {
|
||||
|
||||
mIsLoadedTop = false;
|
||||
RetrofitManager.getApi().getKaiFuData(mKaifuType, offset, limit)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<GameEntity> response) {
|
||||
|
||||
GameManager manager = new GameManager(mContext);
|
||||
if (response.size() != 0) {
|
||||
for (int i = 0; i < response.size(); i++) {
|
||||
GameEntity entity = response.get(i);
|
||||
// if (i < response.size() - 1) {
|
||||
// GameEntity lastEntity = response.get(i + 1);
|
||||
//
|
||||
// KaiFuServerEntity curServerEntity = entity.getServerEntity();
|
||||
// KaiFuServerEntity lastServerEntity = lastEntity.getServerEntity();
|
||||
//
|
||||
// if (i == 0 && curServerEntity != null && mTopLastTime > 0) {
|
||||
// KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mTopLastTime, entity, true);
|
||||
// }
|
||||
// if (curServerEntity == null || lastServerEntity == null) return;
|
||||
//
|
||||
// long curTime = curServerEntity.getTime() * 1000;
|
||||
// long lastTime = lastServerEntity.getTime() * 1000;
|
||||
// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true);
|
||||
// } else { // response.size == 1
|
||||
// KaiFuServerEntity curServerEntity = entity.getServerEntity();
|
||||
// if (i == 0 && curServerEntity != null && mTopLastTime > 0) {
|
||||
// KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mTopLastTime, entity, true);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// 黄壮华 初始化游戏状态 修改2015/8/15
|
||||
entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName()));
|
||||
manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName());
|
||||
|
||||
ApkActiveUtils.filterHideApk(entity);
|
||||
}
|
||||
mTopLastTime = response.get(0).getServerEntity().getTime() * 1000;
|
||||
|
||||
mSubjectList.addAll(0, response);
|
||||
notifyItemRangeInserted(0, response.size());
|
||||
|
||||
if (response.size() < 20 || offset == 0) {
|
||||
mIsRemoveTop = true;
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
}
|
||||
|
||||
mLoadCountTop = mLoadCountTop + response.size();
|
||||
} else {
|
||||
mIsRemoveTop = true;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
initLocationMap();
|
||||
mIsLoadedTop = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
if (offset == mInitOffset) {
|
||||
if (mOnRequestCallBackListener != null) {
|
||||
mOnRequestCallBackListener.loadError();
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(mContext, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
|
||||
|
||||
mIsNetworkError = true;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void initListBottom(final int offset) {
|
||||
|
||||
mIsLoadedBottom = false;
|
||||
RetrofitManager.getApi().getKaiFuData(mKaifuType, offset, 20)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameEntity>>() {
|
||||
@Override
|
||||
public void onResponse(List<GameEntity> response) {
|
||||
|
||||
GameManager manager = new GameManager(mContext);
|
||||
if (response.size() != 0) {
|
||||
|
||||
if (offset == mInitOffset) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
long curTime = calendar.getTimeInMillis() / 1000;
|
||||
|
||||
for (int i = 0; i < response.size(); i++) {
|
||||
long time = response.get(i).getServerEntity().getTime();
|
||||
long l = time - curTime;
|
||||
if (l > 0) {
|
||||
mKaifuIndex = i;
|
||||
break;
|
||||
}
|
||||
|
||||
if (mKaifuIndex == 0 && i == response.size() - 1) {
|
||||
mKaifuIndex = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < response.size(); i++) {
|
||||
GameEntity entity = response.get(i);
|
||||
if (i < response.size() - 1) {
|
||||
GameEntity lastEntity = response.get(i + 1);
|
||||
KaiFuServerEntity curServerEntity = entity.getServerEntity();
|
||||
KaiFuServerEntity lastServerEntity = lastEntity.getServerEntity();
|
||||
|
||||
if (i == 0 && curServerEntity != null && mBottomLastTime > 0) {
|
||||
KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mBottomLastTime, entity, true);
|
||||
entity.setShowTop(true);
|
||||
}
|
||||
if (curServerEntity == null || lastServerEntity == null) return;
|
||||
|
||||
long curTime = curServerEntity.getTime() * 1000;
|
||||
long lastTime = lastServerEntity.getTime() * 1000;
|
||||
|
||||
|
||||
if (offset == mInitOffset) {
|
||||
// if (mKaifuIndex >= i + 1) {
|
||||
//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true);
|
||||
// } else if (mKaifuIndex <= i - 1) {
|
||||
KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false);
|
||||
lastEntity.setShowTop(true);
|
||||
// } else {
|
||||
//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false);
|
||||
//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true);
|
||||
//// entity.setShowTop(true);
|
||||
// }
|
||||
|
||||
} else {
|
||||
KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false);
|
||||
lastEntity.setShowTop(true);
|
||||
}
|
||||
} else {
|
||||
KaiFuServerEntity curServerEntity = entity.getServerEntity();
|
||||
if (i == 0 && curServerEntity != null && mBottomLastTime > 0) {
|
||||
KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mBottomLastTime, entity, true);
|
||||
entity.setShowTop(true);
|
||||
}
|
||||
}
|
||||
|
||||
// 黄壮华 初始化游戏状态 修改2015/8/15
|
||||
entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName()));
|
||||
manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName());
|
||||
ApkActiveUtils.filterHideApk(entity);
|
||||
}
|
||||
|
||||
mBottomLastTime = response.get(response.size() - 1).getServerEntity().getTime() * 1000;
|
||||
mTopLastTime = response.get(0).getServerEntity().getTime() * 1000;
|
||||
|
||||
mSubjectList.addAll(response);
|
||||
notifyItemRangeInserted(getItemCount() - 1 - response.size(), response.size());
|
||||
|
||||
if (offset == mInitOffset) {
|
||||
mIsLoadedTop = true; //首次加载 手动设置下拉加载完成
|
||||
mLoadCountTop = response.size();//首次加载 下拉加载减去初始加载值 获取正确偏移量
|
||||
|
||||
mSubjectList.add(mKaifuIndex, new GameEntity()); // 添加一个空的实体当做 零界点ITEM
|
||||
|
||||
int locationTop = mKaifuIndex - 1;
|
||||
if (locationTop > 0) {
|
||||
GameEntity gameEntity = mSubjectList.get(locationTop);
|
||||
gameEntity.setShowTop(false);
|
||||
if (gameEntity.getKaifuTimeHint() == null) {
|
||||
gameEntity.setKaifuTimeHint(gameEntity.getServerEntity().getTime() * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
int locationBottom = mKaifuIndex + 1;
|
||||
if (locationBottom < mSubjectList.size()) {
|
||||
GameEntity gameEntity = mSubjectList.get(locationBottom);
|
||||
if (gameEntity.getKaifuTimeHint() == null) {
|
||||
gameEntity.setKaifuTimeHint(gameEntity.getServerEntity().getTime() * 1000);
|
||||
gameEntity.setShowTop(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (response.size() < 20) {
|
||||
mIsRemoveBottom = true;
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
}
|
||||
|
||||
mLoadCountBottom = mLoadCountBottom + response.size();
|
||||
} else {
|
||||
mIsRemoveBottom = true;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
initLocationMap();
|
||||
|
||||
if (mOnRequestCallBackListener != null) {
|
||||
if (mSubjectList.size() == 0) {
|
||||
mOnRequestCallBackListener.loadEmpty();
|
||||
} else {
|
||||
mOnRequestCallBackListener.loadDone();
|
||||
}
|
||||
}
|
||||
|
||||
mIsLoadedBottom = true;
|
||||
|
||||
if (offset == mInitOffset) { //定位到开服零界点
|
||||
mOnScrollToKaiFuIndexListener.onScroll(mKaifuIndex - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
if (offset == mInitOffset) {
|
||||
if (mOnRequestCallBackListener != null) {
|
||||
mOnRequestCallBackListener.loadError();
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(mContext, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
|
||||
|
||||
mIsNetworkError = true;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initLocationMap() {
|
||||
|
||||
ArrayList<Integer> list;
|
||||
GameEntity gameEntity;
|
||||
for (int i = 0, size = mSubjectList.size(); i < size; i++) {
|
||||
|
||||
int index = 0;
|
||||
if (mInitOffset != 0) {
|
||||
index++;
|
||||
}
|
||||
|
||||
gameEntity = mSubjectList.get(i);
|
||||
if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) {
|
||||
for (ApkEntity apkEntity : gameEntity.getApk()) {
|
||||
list = mLocationMap.get(apkEntity.getPackageName());
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
mLocationMap.put(apkEntity.getPackageName(), list);
|
||||
}
|
||||
list.add(i + index);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
|
||||
View view;
|
||||
switch (viewType) {
|
||||
case ItemViewType.LOADING:
|
||||
view = mLayoutInflater.inflate(R.layout.refresh_footerview, viewGroup, false);
|
||||
return new FooterViewHolder(view);
|
||||
case ItemViewType.GAME_TEST:
|
||||
view = mLayoutInflater.inflate(R.layout.game_test_item, viewGroup, false);
|
||||
return new GameTestViewHolder(view);
|
||||
case 100:
|
||||
view = new View(mContext);
|
||||
view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(mContext, 4)));
|
||||
return new ReuseViewHolder(view);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
|
||||
int index = 0;
|
||||
if (mInitOffset != 0) {
|
||||
index++;
|
||||
}
|
||||
|
||||
if (viewHolder instanceof GameTestViewHolder) {
|
||||
initGameTestViewHolder((GameTestViewHolder) viewHolder, position - index);
|
||||
} else if (viewHolder instanceof FooterViewHolder) {
|
||||
initFooterViewHolder((FooterViewHolder) viewHolder, position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
|
||||
int index = 0;
|
||||
if (mInitOffset != 0) {
|
||||
index++;
|
||||
}
|
||||
|
||||
if (position == getItemCount() - 1 || (position == 0 && mInitOffset != 0)) {
|
||||
return ItemViewType.LOADING;
|
||||
}
|
||||
if (TextUtils.isEmpty(mSubjectList.get(position - index).getId())) {
|
||||
return 100;
|
||||
} else {
|
||||
return ItemViewType.GAME_TEST;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mSubjectList.size() < 1) {
|
||||
return 0;
|
||||
}
|
||||
if (mInitOffset != 0) {
|
||||
return mSubjectList.size() + 2;
|
||||
}
|
||||
return mSubjectList.size() + 1;
|
||||
}
|
||||
|
||||
private void initGameTestViewHolder(final GameTestViewHolder holder, int position) {
|
||||
|
||||
holder.gameOrder.setVisibility(View.GONE);
|
||||
|
||||
final GameEntity gameEntity = mSubjectList.get(position);
|
||||
|
||||
KaiFuUtils.setKaiFuTimeHint(holder.kaifuTop, holder.kaifuBottom, mSubjectList, position);
|
||||
|
||||
if (gameEntity.getKaifuTimeHint() != null) {
|
||||
if (gameEntity.isShowTop()) {
|
||||
holder.kaifuTop.setVisibility(View.VISIBLE);
|
||||
holder.kaifuBottom.setVisibility(View.GONE);
|
||||
KaiFuUtils.initKaiFuTimeHintView(holder.kaifuTop, gameEntity.getKaifuTimeHint());
|
||||
} else {
|
||||
holder.kaifuBottom.setVisibility(View.VISIBLE);
|
||||
holder.kaifuTop.setVisibility(View.GONE);
|
||||
KaiFuUtils.initKaiFuTimeHintView(holder.kaifuBottom, gameEntity.getKaifuTimeHint());
|
||||
}
|
||||
} else {
|
||||
holder.kaifuBottom.setVisibility(View.GONE);
|
||||
holder.kaifuTop.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
ImageUtils.Companion.display(holder.gameThumb, gameEntity.getIcon());
|
||||
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()));
|
||||
}
|
||||
|
||||
KaiFuUtils.setKaiFuTime(holder.gameTestType, gameEntity.getServerEntity().getTime());
|
||||
String type = gameEntity.getServerEntity().getType();
|
||||
if ("不删档内测".equals(type) || "删档内测".equals(type)) {
|
||||
KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType());
|
||||
} else if ("公测".equals(type)) {
|
||||
String note = gameEntity.getServerEntity().getNote();
|
||||
if (TextUtils.isEmpty(note)) {
|
||||
KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType());
|
||||
} else {
|
||||
KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType() + ":" + note);
|
||||
}
|
||||
} else {
|
||||
KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getNote());
|
||||
}
|
||||
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Map<String, Object> kv = new HashMap<>();
|
||||
kv.put("名字", gameEntity.getName());
|
||||
kv.put("位置", String.valueOf(holder.getPosition() + 1));
|
||||
DataUtils.onEvent(mContext, "点击", "开服表", kv);
|
||||
|
||||
DataCollectionUtils.uploadClick(mContext, "列表", "开服表", gameEntity.getName());
|
||||
|
||||
GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString("主页-游戏", "+("
|
||||
, "开服表", "[", String.valueOf(holder.getPosition()), "])"));
|
||||
}
|
||||
});
|
||||
|
||||
DownloadItemUtils.setOnClickListener(mContext,
|
||||
holder.gameDownloadBtn, gameEntity, position,
|
||||
KaiFuAdapter.this, StringUtils.buildString("主页游戏", "+(", "开服表", "[", String.valueOf(holder.getPosition()), "])")
|
||||
, "开服表 :" + gameEntity.getName());
|
||||
|
||||
DownloadItemUtils.updateItem(mContext, gameEntity, holder, true);
|
||||
}
|
||||
|
||||
private void initFooterViewHolder(FooterViewHolder viewHolder, final int position) {
|
||||
viewHolder.initItemPadding();
|
||||
if (mIsNetworkError) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText("加载失败,点击重试");
|
||||
viewHolder.itemView.setClickable(true);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mIsNetworkError = false;
|
||||
notifyDataSetChanged();
|
||||
if (position == getItemCount() - 1) {
|
||||
initListBottom(mKaifuIndex + mLoadCountBottom);
|
||||
} else {
|
||||
int offset = mKaifuIndex - mLoadCountTop;
|
||||
int limit = 20;
|
||||
if (offset < 0) {
|
||||
limit = limit + offset;
|
||||
offset = 0;
|
||||
}
|
||||
initListTop(offset, limit);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if ((mIsRemoveBottom && position == getItemCount() - 1)
|
||||
|| (mIsRemoveTop && position == 0)) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText("加载完毕");
|
||||
viewHolder.itemView.setClickable(false);
|
||||
viewHolder.lineLeft.setVisibility(View.VISIBLE);
|
||||
viewHolder.lineRight.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
viewHolder.loading.setVisibility(View.VISIBLE);
|
||||
viewHolder.hint.setText(R.string.loading);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
}
|
||||
}
|
||||
|
||||
public List<GameEntity> getSubjectList() {
|
||||
return mSubjectList;
|
||||
}
|
||||
|
||||
public ArrayMap<String, ArrayList<Integer>> getLocationMap() {
|
||||
return mLocationMap;
|
||||
}
|
||||
|
||||
public boolean isLoadedBottom() {
|
||||
return mIsLoadedBottom;
|
||||
}
|
||||
|
||||
public boolean isLoadedTop() {
|
||||
return mIsLoadedTop;
|
||||
}
|
||||
|
||||
public int loadCountTop() {
|
||||
return mLoadCountTop;
|
||||
}
|
||||
|
||||
public int loadCountBottom() {
|
||||
return mLoadCountBottom;
|
||||
}
|
||||
|
||||
public int getLoadCountTop() {
|
||||
return mLoadCountTop;
|
||||
}
|
||||
|
||||
public interface OnScrollToKaiFuIndexListener {
|
||||
void onScroll(int scrollPosition);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package com.gh.gamecenter.eventbus;
|
||||
|
||||
/**
|
||||
* Created by khy on 20/08/17.
|
||||
*/
|
||||
|
||||
public class EBKaiFuReset {
|
||||
|
||||
private String control;
|
||||
private String gameId;
|
||||
|
||||
public EBKaiFuReset(String control, String gameId) {
|
||||
this.control = control;
|
||||
this.gameId = gameId;
|
||||
}
|
||||
|
||||
public String getControl() {
|
||||
return control;
|
||||
}
|
||||
|
||||
public void setControl(String control) {
|
||||
this.control = control;
|
||||
}
|
||||
|
||||
public String getGameId() {
|
||||
return gameId;
|
||||
}
|
||||
|
||||
public void setGameId(String gameId) {
|
||||
this.gameId = gameId;
|
||||
}
|
||||
}
|
||||
@ -239,11 +239,6 @@ public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnR
|
||||
final ApkEntity normalApkEntity = apkEntities.get(0);
|
||||
|
||||
if (normalApkEntity.getPackageName().equals(busFour.getPackageName())) {
|
||||
// if ("卸载".equals(busFour.getType())
|
||||
// && DownloadManager.getInstance(getContext()).getDownloadEntityByUrl(
|
||||
// normalApkEntity.getUrl()) != null) {
|
||||
// adapter.notifyItemChanged(1); // TODO 有任务正在下载中,就算删除依然保留插件化??但是刷新好像也没什么用 @苏哥
|
||||
// } else {
|
||||
// 安装完成 插件化区域消失
|
||||
list.remove(i);
|
||||
if (list.isEmpty()) {
|
||||
|
||||
115
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java
Normal file
115
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java
Normal file
@ -0,0 +1,115 @@
|
||||
package com.gh.gamecenter.kaifu;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.View;
|
||||
import android.widget.CheckedTextView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.gh.base.adapter.FragmentAdapter;
|
||||
import com.gh.base.fragment.BaseFragment;
|
||||
import com.gh.gamecenter.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
|
||||
/**
|
||||
* Created by khy on 20/08/17.
|
||||
*/
|
||||
|
||||
public class KaiFuFragment extends BaseFragment {
|
||||
|
||||
@BindView(R.id.kaifu_tabbar_today)
|
||||
CheckedTextView mKaifuTabbarToday;
|
||||
@BindView(R.id.kaifu_tabbar_tomorrow)
|
||||
CheckedTextView mKaifuTabbarTomorrow;
|
||||
@BindView(R.id.kaifu_tabbar_future)
|
||||
CheckedTextView mKaifuTabbarFuture;
|
||||
@BindView(R.id.kaifu_tabbar)
|
||||
LinearLayout mKaifuTabbar;
|
||||
@BindView(R.id.kaifu_content_vp)
|
||||
ViewPager mKaifuContentVp;
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.fragment_kaifu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
List<Fragment> fragments = new ArrayList<>();
|
||||
for (int i = 0; i < 3; i++) {
|
||||
KaiFuVpFragment kaiFuVpFragment = new KaiFuVpFragment();
|
||||
if (getArguments() != null) {
|
||||
kaiFuVpFragment.setArguments(getArguments());
|
||||
}
|
||||
fragments.add(kaiFuVpFragment);
|
||||
}
|
||||
FragmentAdapter fragmentAdapter = new FragmentAdapter(getChildFragmentManager(), fragments);
|
||||
|
||||
setTabbarPosition(0);
|
||||
mKaifuContentVp.setAdapter(fragmentAdapter);
|
||||
mKaifuContentVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
setTabbarPosition(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@OnClick({R.id.kaifu_tabbar_today, R.id.kaifu_tabbar_tomorrow, R.id.kaifu_tabbar_future})
|
||||
public void onViewClicked(View view) {
|
||||
switch (view.getId()) {
|
||||
case R.id.kaifu_tabbar_today:
|
||||
setTabbarPosition(0);
|
||||
mKaifuContentVp.setCurrentItem(0);
|
||||
break;
|
||||
case R.id.kaifu_tabbar_tomorrow:
|
||||
setTabbarPosition(1);
|
||||
mKaifuContentVp.setCurrentItem(1);
|
||||
break;
|
||||
case R.id.kaifu_tabbar_future:
|
||||
setTabbarPosition(2);
|
||||
mKaifuContentVp.setCurrentItem(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void setTabbarPosition(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
mKaifuTabbarToday.setChecked(true);
|
||||
mKaifuTabbarFuture.setChecked(false);
|
||||
mKaifuTabbarTomorrow.setChecked(false);
|
||||
break;
|
||||
case 1:
|
||||
mKaifuTabbarToday.setChecked(false);
|
||||
mKaifuTabbarFuture.setChecked(false);
|
||||
mKaifuTabbarTomorrow.setChecked(true);
|
||||
break;
|
||||
case 2:
|
||||
mKaifuTabbarToday.setChecked(false);
|
||||
mKaifuTabbarFuture.setChecked(true);
|
||||
mKaifuTabbarTomorrow.setChecked(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.gh.gamecenter.kaifu;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.BaseRecyclerViewHolder;
|
||||
import com.gh.gamecenter.R;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
||||
/**
|
||||
* Created by khy on 18/08/17.
|
||||
*/
|
||||
|
||||
public class KaiFuTimeViewHolder extends BaseRecyclerViewHolder {
|
||||
|
||||
@BindView(R.id.kaifu_item_time_tv)
|
||||
TextView time;
|
||||
|
||||
public KaiFuTimeViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
}
|
||||
384
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java
Normal file
384
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java
Normal file
@ -0,0 +1,384 @@
|
||||
package com.gh.gamecenter.kaifu;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.base.OnRequestCallBackListener;
|
||||
import com.gh.common.util.ApkActiveUtils;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.DownloadItemUtils;
|
||||
import com.gh.common.util.KaiFuUtils;
|
||||
import com.gh.common.util.StringUtils;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.GameDetailActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
||||
import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder;
|
||||
import com.gh.gamecenter.entity.ApkEntity;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.entity.KaiFuServerEntity;
|
||||
import com.gh.gamecenter.eventbus.EBKaiFuReset;
|
||||
import com.gh.gamecenter.manager.GameManager;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
import com.lightgame.adapter.BaseRecyclerAdapter;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import retrofit2.HttpException;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import static com.gh.gamecenter.KaiFuActivity.ALL_GAME_KAIFU;
|
||||
import static com.gh.gamecenter.KaiFuActivity.SINGLE_GAME_KAIFU;
|
||||
|
||||
|
||||
/**
|
||||
* Created by khy on 18/08/17.
|
||||
*/
|
||||
|
||||
public class KaiFuVpAdapter extends BaseRecyclerAdapter {
|
||||
|
||||
private OnRequestCallBackListener mOnCallBackListener;
|
||||
|
||||
private List<GameEntity> mEntityList;
|
||||
private ArrayMap<String, ArrayList<Integer>> mLocationMap;
|
||||
|
||||
private int mDataCount;
|
||||
private String mGameId;
|
||||
|
||||
private boolean mIsRemove;
|
||||
private boolean mIsNetworkError;
|
||||
private boolean mIsLoaded;
|
||||
|
||||
public KaiFuVpAdapter(Context context, OnRequestCallBackListener onCallBackListener, String gameId) {
|
||||
super(context);
|
||||
|
||||
mGameId = gameId;
|
||||
mOnCallBackListener = onCallBackListener;
|
||||
mLocationMap = new ArrayMap<>();
|
||||
mEntityList = new ArrayList<>();
|
||||
addList(0);
|
||||
}
|
||||
|
||||
public void addList(int offset) {
|
||||
mIsLoaded = false;
|
||||
RetrofitManager.getApi()
|
||||
.getKaiFuData(mGameId, offset, 20)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<List<GameEntity>>(){
|
||||
@Override
|
||||
public void onResponse(List<GameEntity> response) {
|
||||
super.onResponse(response);
|
||||
mDataCount += response.size();
|
||||
|
||||
if (mEntityList.size() == 0) { // TODO 获取开服表当前整点时间位置
|
||||
|
||||
}
|
||||
|
||||
if (response.size() < 20) mIsRemove = true;
|
||||
|
||||
GameManager manager = new GameManager(mContext);
|
||||
for (int i = 0; i < response.size(); i++) {
|
||||
// 初始化游戏状态
|
||||
response.get(i).setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(response.get(i).getName()));
|
||||
manager.addOrUpdate(response.get(i).getApk(), response.get(i).getId(), response.get(i).getName());
|
||||
ApkActiveUtils.filterHideApk(response.get(i)); // 过滤隐藏apk
|
||||
// 设置时间断点
|
||||
if (i == 0) {
|
||||
if (mEntityList.size() == 0) {
|
||||
GameEntity kaiFuTimeEntity = new GameEntity();
|
||||
kaiFuTimeEntity.setKaifuTimeHint(response.get(i).getServerEntity().getTime());
|
||||
response.add(i, kaiFuTimeEntity);
|
||||
i++;
|
||||
continue;
|
||||
} else {
|
||||
GameEntity gameEntity = mEntityList.get(mEntityList.size() - 1);
|
||||
long time = gameEntity.getServerEntity().getTime();
|
||||
long nextTime = response.get(i).getServerEntity().getTime();
|
||||
if (time != nextTime) {
|
||||
GameEntity kaiFuTimeEntity = new GameEntity();
|
||||
kaiFuTimeEntity.setKaifuTimeHint(nextTime);
|
||||
response.add(i, kaiFuTimeEntity);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i < response.size() - 1) {
|
||||
KaiFuServerEntity serverEntity = response.get(i).getServerEntity();
|
||||
KaiFuServerEntity nextServerEntity = response.get(i + 1).getServerEntity();
|
||||
if (serverEntity == null || nextServerEntity == null) continue;
|
||||
|
||||
long time = serverEntity.getTime();
|
||||
long nextTime = nextServerEntity.getTime();
|
||||
|
||||
if (time != nextTime) {
|
||||
GameEntity kaiFuTimeEntity = new GameEntity();
|
||||
kaiFuTimeEntity.setKaifuTimeHint(nextTime);
|
||||
response.add(i + 1,kaiFuTimeEntity);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
mEntityList.addAll(response);
|
||||
notifyItemRangeInserted(mEntityList.size() - response.size(), response.size());
|
||||
|
||||
initLocationMap();
|
||||
|
||||
if (mEntityList.size() == 0) {
|
||||
mOnCallBackListener.loadEmpty();
|
||||
} else {
|
||||
mOnCallBackListener.loadDone();
|
||||
}
|
||||
|
||||
mIsLoaded = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
|
||||
mIsLoaded = true;
|
||||
if (mEntityList.size() == 0) {
|
||||
mOnCallBackListener.loadError();
|
||||
} else {
|
||||
mIsNetworkError = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initLocationMap() {
|
||||
ArrayList<Integer> list;
|
||||
GameEntity gameEntity;
|
||||
for (int i = 0, size = mEntityList.size(); i < size; i++) {
|
||||
gameEntity = mEntityList.get(i);
|
||||
if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) {
|
||||
for (ApkEntity apkEntity : gameEntity.getApk()) {
|
||||
list = mLocationMap.get(apkEntity.getPackageName());
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
mLocationMap.put(apkEntity.getPackageName(), list);
|
||||
}
|
||||
list.add(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
|
||||
if (mEntityList.size() == position) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
GameEntity gameEntity = mEntityList.get(position);
|
||||
if (gameEntity.getKaifuTimeHint() != null && gameEntity.getKaifuTimeHint() != 0) {
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == 0) {
|
||||
return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false));
|
||||
} else if (viewType == 1) {
|
||||
return new KaiFuTimeViewHolder(mLayoutInflater.inflate(R.layout.kaifu_item_time, parent, false));
|
||||
} else {
|
||||
return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
|
||||
if (holder instanceof GameTestViewHolder) {
|
||||
GameEntity gameEntity = mEntityList.get(position);
|
||||
GameTestViewHolder viewHolder = (GameTestViewHolder) holder;
|
||||
initGameTestViewHolder(gameEntity, viewHolder);
|
||||
} else if (holder instanceof KaiFuTimeViewHolder){
|
||||
GameEntity gameEntity = mEntityList.get(position);
|
||||
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH: mm", Locale.CHINA);
|
||||
((KaiFuTimeViewHolder) holder).time.setText(dateFm.format(gameEntity.getKaifuTimeHint() * 1000));
|
||||
} else if (holder instanceof FooterViewHolder) {
|
||||
FooterViewHolder viewHolder = (FooterViewHolder) holder;
|
||||
initFooterViewHolder(viewHolder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mEntityList.size() == 0) {
|
||||
return 0;
|
||||
}
|
||||
return mEntityList.size() + 1;
|
||||
}
|
||||
|
||||
private void initGameTestViewHolder(final GameEntity gameEntity, GameTestViewHolder viewHolder) {
|
||||
viewHolder.gameName.setText(gameEntity.getName());
|
||||
viewHolder.gameThumb.setImageURI(gameEntity.getIcon());
|
||||
|
||||
String type = gameEntity.getServerEntity().getType();
|
||||
if ("不删档内测".equals(type) || "删档内测".equals(type)) {
|
||||
KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType());
|
||||
} else if ("公测".equals(type)) {
|
||||
String note = gameEntity.getServerEntity().getNote();
|
||||
if (TextUtils.isEmpty(note)) {
|
||||
KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType());
|
||||
} else {
|
||||
KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType() + ":" + note);
|
||||
}
|
||||
} else {
|
||||
KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getNote());
|
||||
}
|
||||
|
||||
if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) {
|
||||
viewHolder.gameDes.setText(gameEntity.getBrief());
|
||||
} else {
|
||||
viewHolder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief()));
|
||||
}
|
||||
|
||||
KaiFuUtils.setKaiFuTime(viewHolder.gameTestType, gameEntity.getServerEntity().getTime());
|
||||
|
||||
DownloadItemUtils.setOnClickListener(mContext,
|
||||
viewHolder.gameDownloadBtn, gameEntity, viewHolder.getAdapterPosition(), KaiFuVpAdapter.this,
|
||||
StringUtils.buildString("首页-推荐入口", "+(", "开服表", "[", String.valueOf(viewHolder.getAdapterPosition() + 1), "])"),
|
||||
StringUtils.buildString("开服表", ":", gameEntity.getName()));
|
||||
|
||||
DownloadItemUtils.updateItem(mContext, gameEntity, viewHolder, true);
|
||||
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
showSkiptDialog(gameEntity);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showSkiptDialog(final GameEntity gameEntity) {
|
||||
|
||||
final Dialog dialog = new Dialog(mContext);
|
||||
|
||||
LinearLayout container = new LinearLayout(mContext);
|
||||
container.setOrientation(LinearLayout.VERTICAL);
|
||||
container.setBackgroundColor(Color.WHITE);
|
||||
container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
|
||||
|
||||
final List<String> dialogType = new ArrayList<>();
|
||||
|
||||
if (TextUtils.isEmpty(mGameId)) {
|
||||
dialogType.add("只看这个游戏");
|
||||
} else {
|
||||
dialogType.add("返回所有游戏");
|
||||
}
|
||||
dialogType.add("进入游戏详情");
|
||||
|
||||
for (String s : dialogType) {
|
||||
final TextView skipTv = new TextView(mContext);
|
||||
skipTv.setText(s);
|
||||
skipTv.setTextSize(17);
|
||||
skipTv.setTextColor(ContextCompat.getColor(mContext, R.color.title));
|
||||
skipTv.setBackgroundResource(R.drawable.textview_white_style);
|
||||
int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
|
||||
skipTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9) / 10,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
skipTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
|
||||
0, DisplayUtils.dip2px(mContext, 12));
|
||||
container.addView(skipTv);
|
||||
|
||||
skipTv.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dialog.cancel();
|
||||
switch (skipTv.getText().toString()) {
|
||||
case "只看这个游戏":
|
||||
EventBus.getDefault().post(new EBKaiFuReset(SINGLE_GAME_KAIFU, gameEntity.getId()));
|
||||
break;
|
||||
case "进入游戏详情":
|
||||
GameDetailActivity.startGameDetailActivity(mContext, gameEntity, "");
|
||||
break;
|
||||
case "返回所有游戏":
|
||||
EventBus.getDefault().post(new EBKaiFuReset(ALL_GAME_KAIFU, gameEntity.getId()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
dialog.setContentView(container);
|
||||
dialog.show();
|
||||
|
||||
}
|
||||
|
||||
private void initFooterViewHolder(FooterViewHolder viewHolder) {
|
||||
if (mIsNetworkError) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText("加载失败,点击重试");
|
||||
viewHolder.itemView.setClickable(true);
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mIsNetworkError = false;
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
addList(mDataCount);
|
||||
}
|
||||
});
|
||||
} else if (mIsRemove) {
|
||||
viewHolder.loading.setVisibility(View.GONE);
|
||||
viewHolder.hint.setText("加载完毕");
|
||||
viewHolder.itemView.setClickable(false);
|
||||
viewHolder.lineLeft.setVisibility(View.VISIBLE);
|
||||
viewHolder.lineRight.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
viewHolder.loading.setVisibility(View.VISIBLE);
|
||||
viewHolder.hint.setText(R.string.loading);
|
||||
viewHolder.itemView.setClickable(false);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLoaded() {
|
||||
return mIsLoaded;
|
||||
}
|
||||
|
||||
public boolean isRemove() {
|
||||
return mIsRemove;
|
||||
}
|
||||
|
||||
public int getDataListCount() {
|
||||
return mDataCount;
|
||||
}
|
||||
|
||||
public List<GameEntity> getDataList() {
|
||||
return mEntityList;
|
||||
}
|
||||
|
||||
public ArrayMap<String, ArrayList<Integer>> getLocationMap() {
|
||||
return mLocationMap;
|
||||
}
|
||||
}
|
||||
224
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java
Normal file
224
app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java
Normal file
@ -0,0 +1,224 @@
|
||||
package com.gh.gamecenter.kaifu;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
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 android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
|
||||
import com.gh.base.fragment.BaseFragment;
|
||||
import com.gh.common.util.DisplayUtils;
|
||||
import com.gh.common.util.DownloadItemUtils;
|
||||
import com.gh.download.DownloadManager;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.entity.GameEntity;
|
||||
import com.gh.gamecenter.entity.KaiFuServerEntity;
|
||||
import com.gh.gamecenter.eventbus.EBDownloadStatus;
|
||||
import com.lightgame.download.DataWatcher;
|
||||
import com.lightgame.download.DownloadEntity;
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
|
||||
/**
|
||||
* Created by khy on 18/08/17.
|
||||
*/
|
||||
|
||||
public class KaiFuVpFragment extends BaseFragment {
|
||||
|
||||
@BindView(R.id.kaifu_rv)
|
||||
RecyclerView mRecyclerView;
|
||||
@BindView(R.id.kaifu_item_time_tv)
|
||||
TextView mKaifuItemTimeTv;
|
||||
@BindView(R.id.kaifu_item_time)
|
||||
LinearLayout mKaiFuTimeLl;
|
||||
@BindView(R.id.kaifu_pb_loading)
|
||||
ProgressBarCircularIndeterminate mLoading;
|
||||
@BindView(R.id.reuse_no_connection)
|
||||
LinearLayout mNoConn;
|
||||
@BindView(R.id.reuse_none_data)
|
||||
LinearLayout mNoneData;
|
||||
|
||||
private KaiFuVpAdapter mAdapter;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
private RelativeLayout.LayoutParams mLlparams;
|
||||
|
||||
private String mGameId;
|
||||
|
||||
private DataWatcher dataWatcher = new DataWatcher() {
|
||||
@Override
|
||||
public void onDataChanged(DownloadEntity downloadEntity) {
|
||||
ArrayList<Integer> locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName());
|
||||
if (locationList != null) {
|
||||
GameEntity gameEntity;
|
||||
for (int location : locationList) {
|
||||
gameEntity = mAdapter.getDataList().get(location);
|
||||
if (gameEntity != null) {
|
||||
DownloadItemUtils.processDate(getContext(), gameEntity, downloadEntity,
|
||||
mAdapter, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.fragment_kaifu_vp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Bundle arguments = getArguments();
|
||||
if (arguments != null) {
|
||||
mGameId = arguments.getString("gameId", "");
|
||||
} else {
|
||||
mGameId = "";
|
||||
}
|
||||
|
||||
|
||||
mLlparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
DisplayUtils.dip2px(getContext(), 40));
|
||||
|
||||
((DefaultItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
|
||||
mLayoutManager = new LinearLayoutManager(getContext());
|
||||
mRecyclerView.setLayoutManager(mLayoutManager);
|
||||
mAdapter = new KaiFuVpAdapter(getContext(), this, mGameId);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
|
||||
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (mLayoutManager.findLastVisibleItemPosition() == mAdapter.getItemCount() - 1
|
||||
&& newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isRemove() && mAdapter.isLoaded()) {
|
||||
mAdapter.addList(mAdapter.getDataListCount());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
int position = mLayoutManager.findFirstVisibleItemPosition();
|
||||
List<GameEntity> dataList = mAdapter.getDataList();
|
||||
GameEntity gameEntity = dataList.get(position + 1);
|
||||
Long kaifuTimeHint = gameEntity.getKaifuTimeHint();
|
||||
|
||||
// 悬挂的文案
|
||||
GameEntity timeGameEntity = dataList.get(position);
|
||||
Long timeHint = timeGameEntity.getKaifuTimeHint();
|
||||
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH: mm", Locale.CHINA);
|
||||
if (timeHint == null || timeHint == 0) {
|
||||
KaiFuServerEntity serverEntity = timeGameEntity.getServerEntity();
|
||||
if (serverEntity != null) {
|
||||
mKaifuItemTimeTv.setText(dateFm.format(serverEntity.getTime() * 1000));
|
||||
}
|
||||
} else {
|
||||
mKaifuItemTimeTv.setText(dateFm.format(timeHint * 1000));
|
||||
}
|
||||
|
||||
// 悬挂界面移动
|
||||
if (kaifuTimeHint != null && kaifuTimeHint != 0) {
|
||||
int buttom = mLayoutManager.findViewByPosition(position).getBottom();
|
||||
if (buttom <= mKaiFuTimeLl.getHeight()) {
|
||||
mLlparams.topMargin = buttom - mKaiFuTimeLl.getHeight();
|
||||
mKaiFuTimeLl.setLayoutParams(mLlparams);
|
||||
} else {
|
||||
mLlparams.topMargin = 0;
|
||||
mKaiFuTimeLl.setLayoutParams(mLlparams);
|
||||
}
|
||||
} else {
|
||||
mLlparams.topMargin = 0;
|
||||
mKaiFuTimeLl.setLayoutParams(mLlparams);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mAdapter.notifyDataSetChanged();
|
||||
DownloadManager.getInstance(getContext()).addObserver(dataWatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
DownloadManager.getInstance(getContext()).removeObserver(dataWatcher);
|
||||
}
|
||||
|
||||
@OnClick(R.id.reuse_no_connection)
|
||||
public void onClick() {
|
||||
mLoading.setVisibility(View.VISIBLE);
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
mAdapter = new KaiFuVpAdapter(getContext(), this, mGameId);
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
// 下载被删除事件
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(EBDownloadStatus status) {
|
||||
if ("delete".equals(status.getStatus())) {
|
||||
DownloadManager.getInstance(getContext()).removePlatform(status.getName(), status.getPlatform());
|
||||
|
||||
ArrayList<Integer> locationList = mAdapter.getLocationMap().get(status.getPackageName());
|
||||
if (locationList != null) {
|
||||
GameEntity gameEntity;
|
||||
for (int location : locationList) {
|
||||
gameEntity = mAdapter.getDataList().get(location);
|
||||
if (gameEntity != null && gameEntity.getEntryMap() != null) {
|
||||
gameEntity.getEntryMap().remove(status.getPlatform());
|
||||
}
|
||||
mAdapter.notifyItemChanged(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadDone() {
|
||||
super.loadDone();
|
||||
mKaiFuTimeLl.setVisibility(View.VISIBLE);
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadError() {
|
||||
super.loadError();
|
||||
toast("加载失败,请检查网络状态");
|
||||
mNoConn.setVisibility(View.VISIBLE);
|
||||
mNoneData.setVisibility(View.GONE);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadEmpty() {
|
||||
super.loadEmpty();
|
||||
mNoConn.setVisibility(View.GONE);
|
||||
mNoneData.setVisibility(View.VISIBLE);
|
||||
mLoading.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
@ -189,7 +189,7 @@ public class SubjectTileFragment extends BaseFragment implements SubjectTypeAdap
|
||||
switch (view.getId()) {
|
||||
case R.id.subject_tabbar_hot_tv:
|
||||
mTabbarHotTv.setTextColor(Color.WHITE);
|
||||
mTabbarHotTv.setBackgroundResource(R.drawable.gamedetail_tag_select_bg);
|
||||
mTabbarHotTv.setBackgroundResource(R.drawable.tabbar_left_bg);
|
||||
mTabbarNewTv.setTextColor(Color.BLACK);
|
||||
mTabbarNewTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
mListOrder = "";
|
||||
@ -199,7 +199,7 @@ public class SubjectTileFragment extends BaseFragment implements SubjectTypeAdap
|
||||
mTabbarHotTv.setTextColor(Color.BLACK);
|
||||
mTabbarHotTv.setBackgroundDrawable(new ColorDrawable(0));
|
||||
mTabbarNewTv.setTextColor(Color.WHITE);
|
||||
mTabbarNewTv.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg);
|
||||
mTabbarNewTv.setBackgroundResource(R.drawable.tabbar_right_bg);
|
||||
mListOrder = "latest";
|
||||
loadData();
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user