diff --git a/app/src/main/java/com/gh/common/util/CommentUtils.java b/app/src/main/java/com/gh/common/util/CommentUtils.java index 9302d0d18d..2b9f8f73d4 100644 --- a/app/src/main/java/com/gh/common/util/CommentUtils.java +++ b/app/src/main/java/com/gh/common/util/CommentUtils.java @@ -3,6 +3,7 @@ package com.gh.common.util; import android.app.Dialog; import android.content.Context; import android.graphics.Color; +import android.net.Uri; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.view.View; @@ -15,10 +16,13 @@ import com.gh.gamecenter.CommentDetailActivity; import com.gh.gamecenter.MessageDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.OnCommentCallBackListener; +import com.gh.gamecenter.adapter.viewholder.CommentViewHolder; import com.gh.gamecenter.db.CommentDao; import com.gh.gamecenter.db.VoteDao; import com.gh.gamecenter.db.info.VoteInfo; import com.gh.gamecenter.entity.CommentEntity; +import com.gh.gamecenter.entity.UserDataEntity; +import com.gh.gamecenter.entity.UserInfoEntity; import com.lightgame.utils.Utils; import org.json.JSONException; @@ -208,7 +212,7 @@ public class CommentUtils { reportTypeDialog.show(); } - public static void initVote(final Context context, final CommentEntity commentEntity, final VoteDao voteDao, + public static void postVote(final Context context, final CommentEntity commentEntity, final VoteDao voteDao, final TextView commentLikeCountTv, final ImageView commentLikeIv, final OnVoteListener listener) { CheckLoginUtils.checkLogin(context, new CheckLoginUtils.OnLoggenInListener() { @Override @@ -267,6 +271,39 @@ public class CommentUtils { }); } + + // 设置评论item 用户相关的view(点赞/头像/用户名) + public static void setCommentUserView(Context mContext, CommentViewHolder holder, CommentEntity entity) { + UserDataEntity userDataEntity = entity.getUserData(); + holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.hint)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); + + if (entity.getVote() == 0) { + holder.commentLikeCountTv.setVisibility(View.GONE); + } else { // 检查是否已点赞 + if (userDataEntity != null && userDataEntity.isCommentVoted()) { + holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_select); + } + holder.commentLikeCountTv.setVisibility(View.VISIBLE); + holder.commentLikeCountTv.setText(String.valueOf(entity.getVote())); + } + + //检查是否是自身评论 + UserInfoEntity userInfo = LoginUtils.getUserInfo(mContext); + if (userDataEntity != null && userDataEntity.isCommentOwn() && userInfo != null) { + holder.commentUserNameTv.setText(userInfo.getName()); + ImageUtils.Companion.display(holder.commentUserIconDv, userInfo.getIcon()); + } else { + holder.commentUserNameTv.setText(entity.getUser().getName()); + if (TextUtils.isEmpty(entity.getUser().getIcon())) { + holder.commentUserIconDv.setImageURI(Uri.parse("res:///" + R.drawable.user_default_icon_comment)); + } else { + ImageUtils.Companion.display(holder.commentUserIconDv, entity.getUser().getIcon()); + } + } + } + public interface OnVoteListener { void onVote(); } diff --git a/app/src/main/java/com/gh/common/util/ImageUtils.kt b/app/src/main/java/com/gh/common/util/ImageUtils.kt index 1c285301bd..852ca5ae91 100644 --- a/app/src/main/java/com/gh/common/util/ImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/ImageUtils.kt @@ -100,7 +100,7 @@ class ImageUtils { val anotherSingle = ImageUtils() } - fun display(simpleDraweeView: SimpleDraweeView, url: String) { + fun display(simpleDraweeView: SimpleDraweeView, url: String?) { // if (url.startsWith("http://image.ghzs666.com") && url.endsWith(".jpg")) { // url = url + "?x-oss-process=image/format,webp"; // } diff --git a/app/src/main/java/com/gh/common/util/LibaoUtils.java b/app/src/main/java/com/gh/common/util/LibaoUtils.java index 2b9d6794d0..4054db28a9 100644 --- a/app/src/main/java/com/gh/common/util/LibaoUtils.java +++ b/app/src/main/java/com/gh/common/util/LibaoUtils.java @@ -73,7 +73,7 @@ public class LibaoUtils { //初始化存号箱 获取存号箱所有礼包 public static void getCunHaoXiang(final Context context) { RetrofitManager.getInstance(context).getApi() - .getCunHaoXiang() + .getCunHaoXiang(0) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java index 4211659837..6a4c99e98b 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java @@ -112,6 +112,7 @@ public class GameDetailActivity extends BaseActivity { private String mGameId; private GameEntity mGameEntity; private DownloadEntity mDownloadEntity; + private GameDetailEntity mGameDetailEntity; private String downloadAddWord; private String downloadOffText; private String name; // 页面位置 @@ -308,7 +309,7 @@ public class GameDetailActivity extends BaseActivity { mLoading.setVisibility(View.GONE); mAppBarLayout.setVisibility(View.VISIBLE); - if (mConcernManager.isConcern(mGameEntity.getId())) { + if (mGameDetailEntity.getUserData() != null && mGameDetailEntity.getUserData().isGameConcerned()) { mGameConcern.setText("取消关注"); mGameConcern.setBackgroundResource(R.drawable.border_red_bg); mGameConcern.setTextColor(Color.parseColor("#ff4147")); @@ -371,6 +372,8 @@ public class GameDetailActivity extends BaseActivity { @Override public void onResponse(GameDetailEntity response) { + mGameDetailEntity = response; + // 过滤过期公告 if (response.getNotice() != null && response.getNotice().size() > 0) { long l = System.currentTimeMillis(); diff --git a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java index ef45f5e9fd..0bd656f28d 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java @@ -38,6 +38,7 @@ import com.gh.download.DownloadManager; import com.gh.gamecenter.adapter.viewholder.DetailViewHolder; import com.gh.gamecenter.db.CollectionDao; import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.NewsDetailEntity; import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.eventbus.EBConcernChanged; import com.gh.gamecenter.eventbus.EBDownloadStatus; @@ -278,8 +279,6 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener, if (mIsCollectionNews) { getNewsDigest(mNewsEntity.getId()); } - - initCollection(); } } else { getNewsDigest(newsId); @@ -341,19 +340,6 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener, }); } - private void initCollection() { - if (mNewsEntity != null) { - boolean exist = mCollectionDao.isExist(mNewsEntity.getId()); - mNewsCollection.setVisibility(View.VISIBLE); - if (exist) { - mNewsCollection.setImageResource(R.drawable.detail_collection_select); - } else { - mNewsCollection.setImageResource(R.drawable.detail_collection_unselect); - } - } - } - - @Override protected void onDestroy() { super.onDestroy(); @@ -413,8 +399,14 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener, } @Override - public void loadDone() { - + public void loadDone() { // 通知更新收藏按钮 + mNewsCollection.setVisibility(View.VISIBLE); + NewsDetailEntity newsDetailEntity = adapter.getNewsDetailEntity(); + if (newsDetailEntity.getUserData() != null && newsDetailEntity.getUserData().isArticleFavorite()) { + mNewsCollection.setImageResource(R.drawable.detail_collection_select); + } else { + mNewsCollection.setImageResource(R.drawable.detail_collection_unselect); + } } @Override @@ -472,8 +464,6 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener, adapter.getNewsDetail(); mNewsShare.setVisibility(View.VISIBLE); - - initCollection(); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/WebActivity.java b/app/src/main/java/com/gh/gamecenter/WebActivity.java index 5c18fd5548..b1a41d1b23 100644 --- a/app/src/main/java/com/gh/gamecenter/WebActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WebActivity.java @@ -230,9 +230,8 @@ public class WebActivity extends BaseActivity { private void initCollection() { if (mToolBoxEntity != null) { - boolean exist = mCollectionDao.isExist(mToolBoxEntity.getId()); mCollectionIv.setVisibility(View.VISIBLE); - if (exist) { + if (mToolBoxEntity.getUserData() != null && mToolBoxEntity.getUserData().isToolkitFavorite()) { mCollectionIv.setImageResource(R.drawable.detail_collection_select); } else { mCollectionIv.setImageResource(R.drawable.detail_collection_unselect); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java index 8b3be30a3f..e8e0e26594 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java @@ -2,9 +2,7 @@ package com.gh.gamecenter.adapter; import android.content.Context; import android.content.SharedPreferences; -import android.net.Uri; import android.preference.PreferenceManager; -import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.View; @@ -12,7 +10,6 @@ import android.view.ViewGroup; import com.gh.common.constant.ItemViewType; import com.gh.common.util.CommentUtils; -import com.gh.common.util.ImageUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.CommentViewHolder; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; @@ -137,36 +134,10 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter { private void initCommentViewHolder(final CommentViewHolder holder, int position) { final CommentEntity commentEntity = mCommentList.get(position); - holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.hint)); - holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); - holder.commentLine.setVisibility(View.GONE); holder.commentLineBottom.setVisibility(View.VISIBLE); - if (commentEntity.getVote() == 0) { - holder.commentLikeCountTv.setVisibility(View.GONE); - } else { // 检查是否已点赞 - if (mVoteDao.isVote(commentEntity.getId()) && commentEntity.getVote() >= 1) { - holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); - holder.commentLikeIv.setImageResource(R.drawable.ic_like_select); - } - holder.commentLikeCountTv.setVisibility(View.VISIBLE); - holder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); - } - - //检查是否是自身评论 - if (mUserName != null && mUserIcon != null && !mUserIcon.isEmpty() && - !mUserIcon.isEmpty() && mCommentDao.isMyComment(commentEntity.getId())) { - holder.commentUserNameTv.setText(mSharedPreferences.getString("user_name", null)); - ImageUtils.Companion.display(holder.commentUserIconDv, mSharedPreferences.getString("user_icon", null)); - } else { - holder.commentUserNameTv.setText(commentEntity.getUser().getName()); - if (commentEntity.getUser().getIcon().isEmpty()) { - holder.commentUserIconDv.setImageURI(Uri.parse("res:///" + R.drawable.user_default_icon_comment)); - } else { - ImageUtils.Companion.display(holder.commentUserIconDv, commentEntity.getUser().getIcon()); - } - } + CommentUtils.setCommentUserView(mContext, holder, commentEntity); CommentUtils.setCommentTime(holder.commentTimeTv, commentEntity.getTime()); if (commentEntity.getParent() != null) { @@ -178,7 +149,7 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter { holder.commentLikeIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - CommentUtils.initVote(mContext, commentEntity, mVoteDao, holder.commentLikeCountTv, holder.commentLikeIv, null); + CommentUtils.postVote(mContext, commentEntity, mVoteDao, holder.commentLikeCountTv, holder.commentLikeIv, null); } }); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java index f8afad8a7f..d64e3036e8 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java @@ -2,9 +2,7 @@ package com.gh.gamecenter.adapter; import android.content.Intent; import android.content.SharedPreferences; -import android.net.Uri; import android.preference.PreferenceManager; -import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.Html; @@ -395,36 +393,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { holder.commentContentTv.setText(commentEntity.getContent()); } - - holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.hint)); - holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); - - if (commentEntity.getVote() == 0) { - holder.commentLikeCountTv.setVisibility(View.GONE); - } else { // 检查是否已点赞 - if (mVoteDao.isVote(commentEntity.getId()) && commentEntity.getVote() >= 1) { - holder.commentLikeCountTv.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); - holder.commentLikeIv.setImageResource(R.drawable.ic_like_select); - } - holder.commentLikeCountTv.setVisibility(View.VISIBLE); - holder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); - } - - //检查是否是自身评论 - if (userName != null && userIcon != null && !userIcon.isEmpty() && - !userIcon.isEmpty() && mCommentDao.isMyComment(commentEntity.getId())) { - holder.commentUserNameTv.setText(sp.getString("user_name", null)); -// holder.commentUserIconDv.setImageURI(sp.getString("user_icon", null)); - ImageUtils.Companion.display(holder.commentUserIconDv, sp.getString("user_icon", null)); - } else { - holder.commentUserNameTv.setText(commentEntity.getUser().getName()); - if (commentEntity.getUser().getIcon().isEmpty()) { - holder.commentUserIconDv.setImageURI(Uri.parse("res:///" + R.drawable.user_default_icon_comment)); - } else { -// holder.commentUserIconDv.setImageURI(commentEntity.getUser().getIcon()); - ImageUtils.Companion.display(holder.commentUserIconDv, commentEntity.getUser().getIcon()); - } - } + CommentUtils.setCommentUserView(mContext, holder, commentEntity); CommentUtils.setCommentTime(holder.commentTimeTv, commentEntity.getTime()); @@ -434,7 +403,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { holder.commentLikeIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - CommentUtils.initVote(mContext, finalCommentEntity, mVoteDao, holder.commentLikeCountTv, + CommentUtils.postVote(mContext, finalCommentEntity, mVoteDao, holder.commentLikeCountTv, holder.commentLikeIv, new CommentUtils.OnVoteListener() { @Override public void onVote() { diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java index 70fc0ab636..968d0be4bc 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java @@ -415,10 +415,6 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { return isNetworkError; } - public void setNetworkError(boolean networkError) { - isNetworkError = networkError; - } - public boolean isOver() { return isOver; } diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java index 71af321214..395ce72684 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java @@ -32,6 +32,8 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O ProgressBarCircularIndeterminate mLoadingLayout; @BindView(R.id.reuse_none_data) LinearLayout mEmptyLayout; + @BindView(R.id.reuse_no_connection) + LinearLayout mNoData; private LinearLayoutManager mLayoutManager; private Libao3FragmentAdapter adapter; @@ -41,7 +43,6 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O public void run() { adapter = new Libao3FragmentAdapter(getActivity(), Libao3Fragment.this, mEntrance); mRecyclerView.setAdapter(adapter); - mRefreshLayout.setRefreshing(false); } }; @@ -65,6 +66,18 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O mRecyclerView.setAdapter(adapter); mLoadingLayout.setVisibility(View.GONE); + + mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE + && mLayoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { + if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) { + adapter.loadData(adapter.getItemCount() - 1); + } + } + } + }); } @Override @@ -72,6 +85,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O mRefreshLayout.setRefreshing(false); mLoadingLayout.setVisibility(View.GONE); mEmptyLayout.setVisibility(View.GONE); + mNoData.setVisibility(View.GONE); } @Override @@ -79,6 +93,16 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O mRefreshLayout.setRefreshing(false); mLoadingLayout.setVisibility(View.GONE); mEmptyLayout.setVisibility(View.VISIBLE); + mNoData.setVisibility(View.GONE); + } + + @Override + public void loadError() { + super.loadError(); + mRefreshLayout.setRefreshing(false); + mLoadingLayout.setVisibility(View.GONE); + mEmptyLayout.setVisibility(View.GONE); + mNoData.setVisibility(View.VISIBLE); } @Override @@ -90,7 +114,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBReuse changed) { if ("libaoChanged".equals(changed.getType())) { - adapter.initData(); + adapter.loadData(0); } } } diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java index 9796023b98..3c7d76ff66 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java @@ -1,73 +1,68 @@ package com.gh.gamecenter.libao; import android.content.Context; +import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.gh.base.OnRequestCallBackListener; -import com.lightgame.adapter.BaseRecyclerAdapter; import com.gh.common.util.DialogUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.LibaoUtils; import com.gh.common.util.PlatformUtils; import com.gh.common.util.StringUtils; -import com.lightgame.utils.Utils; import com.gh.gamecenter.LibaoDetailActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.LibaoNormalViewHolder; -import com.gh.gamecenter.db.LibaoDao; -import com.gh.gamecenter.db.info.LibaoInfo; import com.gh.gamecenter.entity.LibaoEntity; +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.List; import retrofit2.HttpException; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; /** * Created by khy on 2016/12/12. */ -class Libao3FragmentAdapter extends BaseRecyclerAdapter { +class Libao3FragmentAdapter extends BaseRecyclerAdapter { private OnRequestCallBackListener mCallBackListener; private List mLibaoList; - private List mLibaoInfos; - - private LibaoDao mLibaoDao; private String mEntrance; + private boolean isLoading; + private boolean isOver; + private boolean isNetworkError; + Libao3FragmentAdapter(Context context, OnRequestCallBackListener listener, String entrance) { super(context); mCallBackListener = listener; - mEntrance = entrance; - mLibaoList = new ArrayList<>(); - - initData(); + loadData(0); // TODO } void initData() { - mLibaoList.clear(); - mLibaoDao = new LibaoDao(mContext); - mLibaoInfos = mLibaoDao.getAll(); - - if (mLibaoInfos == null) { - mCallBackListener.loadEmpty(); - return; - } - for (int i = mLibaoInfos.size() - 1; i >= 0; i--) { // 数据转换 - LibaoInfo libaoInfo = mLibaoInfos.get(i); - if (!libaoInfo.isActive()) { - continue; - } - mLibaoList.add(LibaoEntity.Companion.createLibaoEntity(libaoInfo)); - } +// for (int i = 0; i < mLibaoList.size(); i++) { // TODO 过滤用户删除的礼包 +// LibaoEntity libaoEntity = mLibaoList.get(i); +// if (!libaoEntity.isActive()) { +// mLibaoList.remove(i); +// i--; +// } +// } if (mLibaoList.size() == 0) { mCallBackListener.loadEmpty(); @@ -77,123 +72,213 @@ class Libao3FragmentAdapter extends BaseRecyclerAdapter { notifyDataSetChanged(); } + void loadData(int offset) { + RetrofitManager.getInstance(mContext) + .getApi().getCunHaoXiang(offset) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>(){ + @Override + public void onResponse(List response) { + super.onResponse(response); + mLibaoList.addAll(response); + mCallBackListener.loadDone(); + isLoading = false; + if (response.size() < 20) { + isOver = true; + } + + if (mLibaoList.size() == 0) { + mCallBackListener.loadEmpty(); + } else { + mCallBackListener.loadDone(); + } + initData(); + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + if (mLibaoList.isEmpty()) { + mCallBackListener.loadError(); + } else { + isNetworkError = true; + notifyItemChanged(getItemCount() - 1); + } + } + }); + } + @Override - public LibaoNormalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = mLayoutInflater.inflate(R.layout.libao_item, parent, false); + public int getItemViewType(int position) { + if (position == getItemCount() - 1) { + return 0; + } + return 1; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + if (viewType == 0) { + view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); + } + view = mLayoutInflater.inflate(R.layout.libao_item, parent, false); return new LibaoNormalViewHolder(view); } @Override - public void onBindViewHolder(LibaoNormalViewHolder holder, int position) { + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { - final LibaoEntity libaoEntity = mLibaoList.get(position); - holder.libaoName.setText(libaoEntity.getName()); + if (viewHolder instanceof LibaoNormalViewHolder) { + LibaoNormalViewHolder holder = (LibaoNormalViewHolder) viewHolder; + final LibaoEntity libaoEntity = mLibaoList.get(position); + holder.libaoName.setText(libaoEntity.getName()); - ImageUtils.Companion.display(holder.libaoGameIcon, libaoEntity.getIcon()); + ImageUtils.Companion.display(holder.libaoGameIcon, libaoEntity.getIcon()); - if (TextUtils.isEmpty(libaoEntity.getPlatform())) { - holder.libaoGameName.setText(libaoEntity.getGame().getName()); - } else { - holder.libaoGameName.setText(libaoEntity.getGame().getName() + " - " + PlatformUtils.getInstance(mContext) - .getPlatformName(libaoEntity.getPlatform())); - } - - if (libaoEntity.getCode() != null) { - Spanned content; - if ("ling".equals(libaoEntity.getStatus()) || "linged".equals(libaoEntity.getStatus())) { - libaoEntity.setStatus("linged"); - content = Html.fromHtml(StringUtils.buildString("已领取:", "", libaoEntity.getCode(), "")); + if (TextUtils.isEmpty(libaoEntity.getPlatform())) { + holder.libaoGameName.setText(libaoEntity.getGame().getName()); } else { - libaoEntity.setStatus("taoed"); - content = Html.fromHtml(StringUtils.buildString("已淘号:", "", libaoEntity.getCode(), "")); + holder.libaoGameName.setText(libaoEntity.getGame().getName() + " - " + PlatformUtils.getInstance(mContext) + .getPlatformName(libaoEntity.getPlatform())); } - holder.libaoDes.setText(content); - holder.libaoBtnStatus.setOnClickListener(new View.OnClickListener() { + if (libaoEntity.getCode() != null) { + Spanned content; + if ("ling".equals(libaoEntity.getStatus()) || "linged".equals(libaoEntity.getStatus())) { + libaoEntity.setStatus("linged"); + content = Html.fromHtml(StringUtils.buildString("已领取:", "", libaoEntity.getCode(), "")); + } else { + libaoEntity.setStatus("taoed"); + content = Html.fromHtml(StringUtils.buildString("已淘号:", "", libaoEntity.getCode(), "")); + } + holder.libaoDes.setText(content); + + holder.libaoBtnStatus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LibaoUtils.copyLink(libaoEntity.getCode(), mContext); + if (!TextUtils.isEmpty(libaoEntity.getPackageName()) && LibaoUtils.isAppInstalled(mContext + , libaoEntity.getPackageName())) { + Spanned msg; + if ("ling".equals(libaoEntity.getStatus()) || "linged".equals(libaoEntity.getStatus())) { + msg = Html.fromHtml(StringUtils.buildString("礼包码:", "", + libaoEntity.getCode(), "", " 复制成功", "
请尽快进入游戏兑换")); + } else { + msg = Html.fromHtml(StringUtils.buildString("礼包码:", "", libaoEntity.getCode(), + "", " 复制成功", "
淘号礼包不保证可用,请尽快进入游戏尝试兑换")); + } + LibaoUtils.lunningAppDialog(mContext, msg, libaoEntity); + } + + } + }); + } + + holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LibaoUtils.copyLink(libaoEntity.getCode(), mContext); - if (!TextUtils.isEmpty(libaoEntity.getPackageName()) && LibaoUtils.isAppInstalled(mContext - , libaoEntity.getPackageName())) { - Spanned msg; - if ("ling".equals(libaoEntity.getStatus()) || "linged".equals(libaoEntity.getStatus())) { - msg = Html.fromHtml(StringUtils.buildString("礼包码:", "", - libaoEntity.getCode(), "", " 复制成功", "
请尽快进入游戏兑换")); - } else { - msg = Html.fromHtml(StringUtils.buildString("礼包码:", "", libaoEntity.getCode(), - "", " 复制成功", "
淘号礼包不保证可用,请尽快进入游戏尝试兑换")); - } - LibaoUtils.lunningAppDialog(mContext, msg, libaoEntity); - } - + mContext.startActivity(LibaoDetailActivity.getIntent(mContext, libaoEntity, mEntrance + "+(礼包中心:存号箱)")); } }); - } - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mContext.startActivity(LibaoDetailActivity.getIntent(mContext, libaoEntity, mEntrance + "+(礼包中心:存号箱)")); - } - }); - - holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - DialogUtils.showWarningDialog(mContext, "删除礼包", Html.fromHtml(StringUtils.buildString("礼包码删除之后", - "不可恢复", ",请确定您已经兑换过该礼包")) - , "取消", "确定删除" - , new DialogUtils.ConfirmListener() { - @Override - public void onConfirm() { - LibaoUtils.deleteLibaoCode(mContext, libaoEntity.getCode(), true, new LibaoUtils.PostLibaoListener() { - @Override - public void postSucced(Object response) { - Utils.toast(mContext, "删除成功"); - for (LibaoInfo mLibaoInfo : mLibaoInfos) { - if (libaoEntity.getId().equals(mLibaoInfo.getLibaoId())) { - mLibaoInfo.setActive(false); - mLibaoDao.update(mLibaoInfo); - initData(); - break; - } - } - } - - @Override - public void postFailed(Throwable error) { - - if (error instanceof HttpException) { - HttpException exception = (HttpException) error; - if (exception.code() == 400) { - Utils.toast(mContext, "删除成功code-null"); - for (LibaoInfo mLibaoInfo : mLibaoInfos) { - if (libaoEntity.getId().equals(mLibaoInfo.getLibaoId())) { - mLibaoInfo.setActive(false); - mLibaoDao.update(mLibaoInfo); - initData(); - break; - } + holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + DialogUtils.showWarningDialog(mContext, "删除礼包", Html.fromHtml(StringUtils.buildString("礼包码删除之后", + "不可恢复", ",请确定您已经兑换过该礼包")) + , "取消", "确定删除" + , new DialogUtils.ConfirmListener() { + @Override + public void onConfirm() { + LibaoUtils.deleteLibaoCode(mContext, libaoEntity.getCode(), true, new LibaoUtils.PostLibaoListener() { + @Override + public void postSucced(Object response) { + Utils.toast(mContext, "删除成功"); + for (LibaoEntity entity : mLibaoList) { + if (libaoEntity.getId().equals(entity.getLibaoId())) { + entity.setActive(false); + initData(); + break; } - } else { - Utils.toast(mContext, "删除失败,请检查网络状态"); } } - } - }); - } - }, null); - return false; - } - }); + @Override + public void postFailed(Throwable error) { - holder.libaoBtnStatus.setText("复制"); - holder.libaoBtnStatus.setBackgroundResource(R.drawable.textview_blue_style); + if (error instanceof HttpException) { + HttpException exception = (HttpException) error; + if (exception.code() == 400) { + Utils.toast(mContext, "删除成功code-null"); + for (LibaoEntity entity : mLibaoList) { + if (libaoEntity.getId().equals(entity.getLibaoId())) { + entity.setActive(false); + initData(); + break; + } + } + } else { + Utils.toast(mContext, "删除失败,请检查网络状态"); + } + } + } + }); + + } + }, null); + return false; + } + }); + + holder.libaoBtnStatus.setText("复制"); + holder.libaoBtnStatus.setBackgroundResource(R.drawable.textview_blue_style); + } else if (viewHolder instanceof FooterViewHolder) { + initFooterViewHolder((FooterViewHolder) viewHolder); + } + } + + private void initFooterViewHolder(FooterViewHolder holder) { + holder.initItemPadding(); + if (isNetworkError) { + holder.loading.setVisibility(View.GONE); + holder.hint.setText("加载失败,点击重试"); + holder.itemView.setClickable(true); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isNetworkError = false; + notifyItemChanged(getItemCount() - 1); + } + }); + } else if (isOver) { + holder.loading.setVisibility(View.GONE); + holder.hint.setText("加载完毕"); + holder.itemView.setClickable(false); + } else { + holder.loading.setVisibility(View.VISIBLE); + holder.hint.setText(R.string.loading); + holder.itemView.setClickable(false); + } } @Override public int getItemCount() { - return mLibaoList.size(); + if (mLibaoList.size() == 0) return 0; + return mLibaoList.size() + 1; + } + + public boolean isNetworkError() { + return isNetworkError; + } + + public boolean isOver() { + return isOver; + } + + public boolean isLoading() { + return isLoading; } } diff --git a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java index 6ccc73ca60..5d5b41ff66 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -17,12 +17,10 @@ import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; -import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.OnRequestCallBackListener; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.CommentUtils; @@ -44,6 +42,7 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.ViewImageActivity; import com.gh.gamecenter.WebActivity; +import com.gh.gamecenter.adapter.viewholder.CommentViewHolder; import com.gh.gamecenter.adapter.viewholder.GameDetailTopViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsDetailCommentListViewHolder; import com.gh.gamecenter.db.VoteDao; @@ -121,6 +120,8 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { mNewsDetailEntity.setTitle(mTitle); // mNewsDetailEntity.setContent(replaceImageUrl(mNewsDetailEntity.getContent())); + mListener.loadDone(); // 通知更新收藏按钮 + notifyDataSetChanged(); } @@ -340,7 +341,7 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { } } } - if (mConcernManager.isConcern(mGameEntity.getId())) { + if (mNewsDetailEntity.getUserData() != null && mNewsDetailEntity.getUserData().isGameConcerned()) { viewHolder.gamedetailConcern.setText("取消关注"); viewHolder.gamedetailConcern.setBackgroundResource(R.drawable.border_red_bg); viewHolder.gamedetailConcern.setTextColor(Color.parseColor("#ff4147")); @@ -491,24 +492,15 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { for (final CommentEntity commentEntity : mCommentEntityList) { View contentView = mLayoutInflater.inflate(R.layout.comment_item, null); + final CommentViewHolder viewHolder = new CommentViewHolder(contentView); - final TextView likeCount = (TextView) contentView.findViewById(R.id.comment_like_count); - TextView content = (TextView) contentView.findViewById(R.id.comment_content); - TextView time = (TextView) contentView.findViewById(R.id.comment_time); - TextView userName = (TextView) contentView.findViewById(R.id.comment_user_name); - SimpleDraweeView userIcon = (SimpleDraweeView) contentView.findViewById(R.id.comment_user_icon); - final ImageView like = (ImageView) contentView.findViewById(R.id.comment_like); - - likeCount.setText(String.valueOf(commentEntity.getVote())); - userName.setText(commentEntity.getUser().getName()); -// userIcon.setImageURI(commentEntity.getUser().getIcon()); - ImageUtils.Companion.display(userIcon, commentEntity.getUser().getIcon()); + viewHolder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); holder.list.addView(contentView); if (commentEntity.getParent() != null) { - content.setText("回复" + commentEntity.getParent().getUser().getName() + ": " + commentEntity.getContent()); + viewHolder.commentContentTv.setText("回复" + commentEntity.getParent().getUser().getName() + ": " + commentEntity.getContent()); } else { - content.setText(commentEntity.getContent()); + viewHolder.commentContentTv.setText(commentEntity.getContent()); } @@ -521,42 +513,33 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { int hour = (int) (min / (60 * 60)); if (hour == 0) { if (min < 60) { - time.setText("刚刚"); + viewHolder.commentTimeTv.setText("刚刚"); } else { - time.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); + viewHolder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); } } else { - time.setText(String.format(Locale.getDefault(), "%d小时前", hour)); + viewHolder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d小时前", hour)); } } else if (day >= today - 86400 * 1000 && day < today) { format.applyPattern("HH:mm"); - time.setText("昨天 "); + viewHolder.commentTimeTv.setText("昨天 "); } else { format.applyPattern("yyyy-MM-dd"); - time.setText(format.format(day)); + viewHolder.commentTimeTv.setText(format.format(day)); } } catch (ParseException e) { e.printStackTrace(); format.applyPattern("yyyy-MM-dd"); - time.setText(format.format(commentEntity.getTime() * 1000)); - } - - if (commentEntity.getVote() == 0) { - likeCount.setVisibility(View.GONE); - } else { // 检查是否已点赞 - if (mVoteDao.isVote(commentEntity.getId()) && commentEntity.getVote() >= 1) { - likeCount.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); - like.setImageResource(R.drawable.ic_like_select); - } - likeCount.setVisibility(View.VISIBLE); - likeCount.setText(String.valueOf(commentEntity.getVote())); + viewHolder.commentTimeTv.setText(format.format(commentEntity.getTime() * 1000)); } - like.setOnClickListener(new View.OnClickListener() { + CommentUtils.setCommentUserView(mContext, viewHolder, commentEntity); + + viewHolder.commentLikeIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - CommentUtils.initVote(mContext, commentEntity, mVoteDao, likeCount, like, null); + CommentUtils.postVote(mContext, commentEntity, mVoteDao, viewHolder.commentLikeCountTv, viewHolder.commentLikeIv, null); } }); contentView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index f18ca32055..c81af11125 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -602,7 +602,7 @@ public interface ApiService { * 获取礼包存号箱数据 */ @GET("libao/cunhaoxiang") - Observable> getCunHaoXiang(); + Observable> getCunHaoXiang(@Query("offset") int offset); /** * 领取礼包 diff --git a/app/src/main/res/layout/fragment_libao3.xml b/app/src/main/res/layout/fragment_libao3.xml index 17d2159053..ff060bfd33 100644 --- a/app/src/main/res/layout/fragment_libao3.xml +++ b/app/src/main/res/layout/fragment_libao3.xml @@ -21,6 +21,8 @@ android:layout_centerInParent = "true" android:background = "@color/theme" /> + + \ No newline at end of file