diff --git a/app/src/main/java/com/gh/common/util/NewsUtils.java b/app/src/main/java/com/gh/common/util/NewsUtils.java index c680397b5b..0ca5d84176 100644 --- a/app/src/main/java/com/gh/common/util/NewsUtils.java +++ b/app/src/main/java/com/gh/common/util/NewsUtils.java @@ -138,4 +138,36 @@ public class NewsUtils { } } + + public static void setNewsDetailTime(TextView textView, long time) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + try { + long today = format.parse(format.format(new Date())).getTime(); + long day = time * 1000; + if (day >= today && day < today + 86400 * 1000) { + long min = new Date().getTime() / 1000 - day / 1000; + int hour = (int) (min / (60 * 60)); + if (hour == 0) { + if (min < 60) { + textView.setText("刚刚"); + } else { + textView.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); + } + } else { + textView.setText(String.format(Locale.getDefault(), "%d小时前", hour)); + } + } else if (day >= today - 86400 * 1000 && day < today) { + format.applyPattern("HH:mm"); + textView.setText("昨天 "); + } else { + format.applyPattern("yyyy-MM-dd"); + textView.setText(format.format(day)); + } + } catch (ParseException e) { + e.printStackTrace(); + format.applyPattern("yyyy-MM-dd"); + textView.setText(format.format(time * 1000)); + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java index fbfa3b32c6..8e6b63ea5e 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java @@ -71,13 +71,13 @@ public class AskAnswerDetailFragment extends NormalFragment { private AnswerEntity mAnswerEntity; private AnswerDetailEntity mDetailEntity; - public static AskAnswerDetailFragment getInstance(AnswerEntity entity) { - AskAnswerDetailFragment fragment = new AskAnswerDetailFragment(); - Bundle args = new Bundle(); - args.putParcelable(AnswerEntity.TAG, entity); - fragment.setArguments(args); - return fragment; - } +// public static AskAnswerDetailFragment getInstance(AnswerEntity entity) { +// AskAnswerDetailFragment fragment = new AskAnswerDetailFragment(); +// Bundle args = new Bundle(); +// args.putParcelable(AnswerEntity.TAG, entity); +// fragment.setArguments(args); +// return fragment; +// } @Override protected int getLayoutId() { diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java index 27aea55793..fde1ef77fa 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java @@ -136,6 +136,7 @@ public class AskQuestionsNewFragment extends BaseFragment { Bundle args = new Bundle(); args.putString(ASK_QUESTIONS_TYPE, tag.getName()); questionsBodyFragment.setArguments(args); // todo 选择社区后 回调-无法更新数据 有可能复用缓存 + mCacheFragmentsMap.put(tag.getName(), questionsBodyFragment); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java index 65a77242d0..9c60e78866 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java @@ -147,6 +147,8 @@ public class AnswerEditFragment extends NormalFragment { if (!TextUtils.isEmpty(mAnswerId)) { mEditContent.setHtml(mAnswerContent); + } else { + getUserAnswerDrafts(); } } @@ -287,6 +289,32 @@ public class AnswerEditFragment extends NormalFragment { }); } + private void getUserAnswerDrafts() { + RetrofitManager.getInstance(getContext()).getApi() + .getUserAnswerDrafts(mQuestionsId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(ResponseBody response) { + super.onResponse(response); + try { + JSONObject object = new JSONObject(response.string()); + String drafts = object.getString("content"); + if (!TextUtils.isEmpty(drafts)) + mEditContent.setHtml(drafts); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + } + }); + } + @OnClick({R.id.answer_edit_img_icon}) public void onClick(View view) { if (view.getId() == R.id.answer_edit_img_icon) { diff --git a/app/src/main/java/com/gh/gamecenter/entity/MessageCommentEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/MessageCommentEntity.kt deleted file mode 100644 index c81824bf25..0000000000 --- a/app/src/main/java/com/gh/gamecenter/entity/MessageCommentEntity.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.gh.gamecenter.entity - -import com.google.gson.annotations.SerializedName - -/** - * Created by khy on 2017/4/18. - */ -class MessageCommentEntity { - - @SerializedName("_id") - var id: String? = null - - var time: Long = 0 - - var num: Int = 0 - - @SerializedName("article_id") - var articleId: String? = null - - var type: String? = null - - var content: String? = null - - @SerializedName("parent_content") - var parentContent: String? = null - - @SerializedName("user") - var userEntity: UserEntity? = null -} diff --git a/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt new file mode 100644 index 0000000000..61e50f20b3 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt @@ -0,0 +1,54 @@ +package com.gh.gamecenter.entity + +import com.google.gson.annotations.SerializedName + +/** + * Created by khy on 2017/4/18. + */ +class MessageEntity { + + var time: Long = 0 + + var article: Article = Article() + + var comment: Comment = Comment() + + var question: Question = Question() + + var answer: Answer = Answer() + + var type: String = "" + + @SerializedName("user") + var userEntity: UserEntity = UserEntity() + + + class Article { + @SerializedName("_id") + var id: String? = null + + var title: String? = null + } + + class Question { + @SerializedName("_id") + var id: String? = null + + var title: String? = null + } + + class Answer { + @SerializedName("_id") + var id: String? = null + + var content: String? = null + } + + class Comment { + @SerializedName("_id") + var id: String? = null + + var content: String? = null + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt index 3488673e93..200dee2865 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt @@ -11,8 +11,5 @@ class MessageUnreadEntity { var comment: Int = 0 @SerializedName("service") - var kefuList: List? = null - - @SerializedName("notice") - var noticeList: List? = null + var kefu: Int = 0 } diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java deleted file mode 100644 index 4b977808ee..0000000000 --- a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.gh.gamecenter.message; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.MotionEvent; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.fragment.BaseFragment; -import com.gh.common.view.VerticalItemDecoration; -import com.gh.gamecenter.R; -import com.gh.gamecenter.eventbus.EBUISwitch; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import butterknife.BindView; -import butterknife.OnClick; - -import static com.gh.gamecenter.message.MessageCenterFragment.EB_COMMENTMARKREAD; - -/** - * Created by khy on 2017/4/5. - * 消息-评论 - */ -public class CommentFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { - - @BindView(R.id.recyclerview) - RecyclerView mRecyclerview; - @BindView(R.id.refresh) - SwipeRefreshLayout mRefresh; - @BindView(R.id.loading_pb) - ProgressBarCircularIndeterminate mLoadingPb; - @BindView(R.id.reuse_no_connection) - LinearLayout mNoConnection; - @BindView(R.id.reuse_none_data) - LinearLayout mNoneData; - @BindView(R.id.reuse_tv_none_data) - TextView mNoneDataTv; - - private LinearLayoutManager layoutManager; - - private CommentFragmentAdapter mAdapter; - - Runnable runnable = new Runnable() { - @Override - public void run() { - mAdapter = new CommentFragmentAdapter(CommentFragment.this); - mRecyclerview.setAdapter(mAdapter); - mAdapter.loadData(0); - } - }; - - @Override - protected int getLayoutId() { - return R.layout.fragment_comment_list; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mNoneDataTv.setText(R.string.message_comment_empty_hint); - - mRefresh.setColorSchemeResources(R.color.theme); - mRefresh.setOnRefreshListener(this); - - mAdapter = new CommentFragmentAdapter(this); - layoutManager = new LinearLayoutManager(getContext()); - mRecyclerview.setLayoutManager(layoutManager); - mRecyclerview.addItemDecoration(new VerticalItemDecoration(getContext(), 1, true)); - mRecyclerview.setAdapter(mAdapter); - - mRecyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.isLoaded() && !mAdapter.isRemove() - && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { - mAdapter.loadData(mAdapter.getItemCount() - 1); - } - } - }); - - mRecyclerview.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - EventBus.getDefault().post(new EBUISwitch(EB_COMMENTMARKREAD, 0)); - } - return false; - } - }); - - } - - @Override - public void loadDone() { - super.loadDone(); - mRefresh.setRefreshing(false); - mLoadingPb.setVisibility(View.GONE); - mNoneData.setVisibility(View.GONE); - mRecyclerview.setVisibility(View.VISIBLE); - } - - @Override - public void loadError() { - super.loadError(); - mRefresh.setRefreshing(false); - mNoConnection.setVisibility(View.VISIBLE); - mRecyclerview.setVisibility(View.GONE); - mNoneData.setVisibility(View.GONE); - } - - @Override - public void loadEmpty() { - super.loadEmpty(); - mRefresh.setRefreshing(false); - mNoneData.setVisibility(View.VISIBLE); - mLoadingPb.setVisibility(View.GONE); - } - - @OnClick(R.id.reuse_no_connection) - public void reconnection() { // 重新连接 - mRecyclerview.setVisibility(View.VISIBLE); - mLoadingPb.setVisibility(View.VISIBLE); - mNoConnection.setVisibility(View.GONE); - postDelayedRunnable(runnable, 1000); - } - - // Fragment界面切换事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUISwitch swith) { - if (MessageCenterFragment.EB_MESSAGEFRAGMENT_TAG.equals(swith.getFrom()) && swith.getPosition() == 0) { - if (mLoadingPb.getVisibility() == View.VISIBLE) { - mAdapter.loadData(0); - } - } - } - - @Override - public void onRefresh() { - postDelayedRunnable(runnable, 1000); - } -} diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java deleted file mode 100644 index 2fbb4eb504..0000000000 --- a/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.gh.gamecenter.message; - -import android.content.Intent; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; -import android.view.View; -import android.view.ViewGroup; - -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.util.CommentUtils; -import com.gh.common.util.EntranceUtils; -import com.gh.common.util.ImageUtils; -import com.gh.gamecenter.CommentDetailActivity; -import com.gh.gamecenter.MessageDetailActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.entity.MessageCommentEntity; -import com.gh.gamecenter.entity.UserEntity; -import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; - -import org.greenrobot.eventbus.EventBus; - -import java.util.ArrayList; -import java.util.List; - -import retrofit2.HttpException; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; - -import static com.gh.gamecenter.message.MessageCenterFragment.EB_COMMENTMARKREAD; - -/** - * Created by khy on 2017/4/10. - * 消息-评论适配器 - */ -public class CommentFragmentAdapter extends BaseRecyclerAdapter { - - private OnRequestCallBackListener mCallBackListener; - - private CommentFragment fragment; - - private List mCommentList; - - private boolean isRemove; - private boolean isNetworkError; - private boolean isLoaded; - - public CommentFragmentAdapter(CommentFragment fragment) { - super(fragment.getContext()); - this.mCallBackListener = fragment; - this.fragment = fragment; - - mCommentList = new ArrayList<>(); - - } - - public void loadData(final int offset) { - isLoaded = false; - RetrofitManager.getInstance(mContext).getApi() - .getMessageCommentData(offset, 20) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - super.onResponse(response); - if (response.size() > 0) { - - if (response.size() < 20) { - isRemove = true; - } - - if (offset == 0) { - mCallBackListener.loadDone(); - } - - mCommentList.addAll(response); - if (!fragment.isHidden() && !fragment.isEverPause()) { - notifyItemRangeInserted(mCommentList.size() - response.size(), response.size()); - } else { - notifyDataSetChanged(); - } - - } else { - isRemove = true; - if (mCommentList.size() == 0) { - mCallBackListener.loadEmpty(); - } - } - - isLoaded = true; - } - - @Override - public void onFailure(HttpException e) { - isLoaded = true; - if (offset == 0) { - mCallBackListener.loadError(); - } else { - isNetworkError = true; - notifyItemChanged(getItemCount() - 1); - } - } - }); - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0) { - View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view); - } else if (viewType == 1) { - View view = mLayoutInflater.inflate(R.layout.message_comment_item_normal, parent, false); - return new CommentNormalViewHolder(view); - } else { - View view = mLayoutInflater.inflate(R.layout.message_comment_item_vote, parent, false); - return new CommentVoteViewHolder(view); - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof CommentNormalViewHolder) { - MessageCommentEntity commentEntity = mCommentList.get(position); - CommentNormalViewHolder viewHolder = (CommentNormalViewHolder) holder; - initCommentViewHolder(viewHolder, commentEntity); - } else if (holder instanceof CommentVoteViewHolder) { - MessageCommentEntity commentEntity = mCommentList.get(position); - CommentVoteViewHolder viewHolder = (CommentVoteViewHolder) holder; - initVoteViewHolder(viewHolder, commentEntity); - } else if (holder instanceof FooterViewHolder) { - FooterViewHolder viewHolder = (FooterViewHolder) holder; - initFooterViewHolder(viewHolder); - } - - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) { - return 0; - } else if ("reply".equals(mCommentList.get(position).getType())) { - return 1; - } else { - return 2; - } - } - - @Override - public int getItemCount() { - if (mCommentList.size() == 0) { - return 0; - } - - return mCommentList.size() + 1; - } - - private void initFooterViewHolder(FooterViewHolder viewHolder) { - if (isNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_failed_tap_to_retry); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyDataSetChanged(); - loadData(getItemCount() - 1); - } - }); - } else if (isRemove) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_complete); - 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); - } - } - - private void initCommentViewHolder(CommentNormalViewHolder viewHolder, final MessageCommentEntity commentEntity) { - UserEntity userEntity = commentEntity.getUserEntity(); - if (userEntity != null) { - viewHolder.userName.setText(userEntity.getName()); - ImageUtils.Companion.display(viewHolder.userIcon, userEntity.getIcon()); - } - - viewHolder.requestControl.setText(R.string.message_comment_reply); - viewHolder.commentContent.setText(commentEntity.getParentContent()); - viewHolder.commentAnswer.setText(commentEntity.getContent()); - CommentUtils.setCommentTime(viewHolder.commentTime, commentEntity.getTime()); - - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(mContext, CommentDetailActivity.class); - intent.putExtra(EntranceUtils.KEY_COMMENTID, commentEntity.getId()); - mContext.startActivity(intent); - EventBus.getDefault().post(new EBUISwitch(EB_COMMENTMARKREAD, 0)); - } - }); - - } - - private void initVoteViewHolder(CommentVoteViewHolder viewHolder, final MessageCommentEntity commentEntity) { - viewHolder.commentContent.setText(commentEntity.getContent()); - viewHolder.likeCountTv.setText(mContext.getString(R.string.message_comment_vote_count, commentEntity.getNum())); - ImageUtils.Companion.display(viewHolder.userIcon, R.drawable.message_vote_icon); - CommentUtils.setCommentTime(viewHolder.commentTime, commentEntity.getTime()); - - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = MessageDetailActivity.getIntentById(mContext, commentEntity.getArticleId(), null, null, "收藏-评论"); - mContext.startActivity(intent); - EventBus.getDefault().post(new EBUISwitch(EB_COMMENTMARKREAD, 0)); - } - }); - } - - public boolean isLoaded() { - return isLoaded; - } - - public boolean isRemove() { - return isRemove; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java index 2a67fc7291..49c42abc57 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java @@ -27,7 +27,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; import butterknife.BindView; -import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -92,7 +91,7 @@ public class MessageCenterFragment extends BaseFragment_ViewPager_Checkable { @Override protected void initFragmentList(List fragments) { - fragments.add(new CommentFragment()); + fragments.add(new MessageFragment()); fragments.add(new KeFuFragment()); } @@ -142,8 +141,8 @@ public class MessageCenterFragment extends BaseFragment_ViewPager_Checkable { mMessageCommentHint.setText(String.valueOf(response.getComment())); } - if (response.getKefuList() != null && response.getKefuList().size() > 0) { - mKeFuUnreadCount = response.getKefuList().size(); + if (response.getKefu() > 0) { + mKeFuUnreadCount = response.getKefu(); if (mKeFuUnreadCount != 0) { mMessageKefuHint.setVisibility(View.VISIBLE); } @@ -166,30 +165,30 @@ public class MessageCenterFragment extends BaseFragment_ViewPager_Checkable { } } else if (EB_COMMENTMARKREAD.equals(reuse.getFrom()) && mMessageCommentHint.getVisibility() == View.VISIBLE) { mMessageCommentHint.setVisibility(View.GONE); - postMarkCommentRead(getContext()); +// postMarkCommentRead(getContext()); if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) { EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); } } } - private void postMarkCommentRead(final Context context) { - RetrofitManager.getInstance(context).getApi() - .postMarkCommentRead() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(ResponseBody response) { - super.onResponse(response); - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - } - }); - } +// private void postMarkCommentRead(final Context context) { +// RetrofitManager.getInstance(context).getApi() +// .postMarkCommentRead() +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Response() { +// @Override +// public void onResponse(ResponseBody response) { +// super.onResponse(response); +// } +// +// @Override +// public void onFailure(HttpException e) { +// super.onFailure(e); +// } +// }); +// } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java new file mode 100644 index 0000000000..1518662095 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -0,0 +1,87 @@ +package com.gh.gamecenter.message; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import com.gh.gamecenter.AskQuestionsDetailActivity; +import com.gh.gamecenter.CommentDetailActivity; +import com.gh.gamecenter.NewsDetailActivity; +import com.gh.gamecenter.NormalActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.AskAnswerDetailFragment; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadStatus; +import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.entity.MessageEntity; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 2017/4/5. + * 消息-评论 + */ + +public class MessageFragment extends ListFragment { + + MessageFragmentAdapter mAdapter; + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new MessageFragmentAdapter(getContext(), this) : mAdapter; + } + + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getMessageData(getListOffset()); + } + + @Override + public void onListClick(View view, int position, Object data) { + if (view.getId() == R.id.footerview_item) { + if (mAdapter.isNetworkError()) { + mAdapter.loadChange(LoadStatus.RETRY); + mListViewModel.load(LoadType.RETRY); + } + } else { + MessageEntity entity = ((List) data).get(position); + switch (entity.getType()) { + case "comment_vote": + case "comment": + if (view.getId() == R.id.message_item_title) { + Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息"); + startActivity(intent); + } else if (view.getId() == R.id.message_item_content) { + Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getComment().getId()); + startActivity(intent); + } + break; + case "invited": + case "answer": + case "answer_vote": + case "follow_question": + if (view.getId() == R.id.message_item_title) { + Intent intent = AskQuestionsDetailActivity.getIntent(getContext(), entity.getQuestion().getId()); + startActivity(intent); + } else if (view.getId() == R.id.message_item_content) { + AnswerEntity answerEntity = new AnswerEntity(); + answerEntity.setId(entity.getAnswer().getId()); + Questions questions = new Questions(); + questions.setTitle(entity.getQuestion().getTitle()); + answerEntity.setQuestions(questions); + Bundle bundle = new Bundle(); + bundle.putParcelable(AnswerEntity.TAG, answerEntity); + NormalActivity.startFragment(getContext(), AskAnswerDetailFragment.class, bundle); + } + break; + } + } + + } +} diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragmentAdapter.java new file mode 100644 index 0000000000..ae2155cc1c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragmentAdapter.java @@ -0,0 +1,107 @@ +package com.gh.gamecenter.message; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; +import com.gh.gamecenter.entity.MessageEntity; +import com.gh.gamecenter.eventbus.EBUISwitch; + +import org.greenrobot.eventbus.EventBus; + +import java.util.List; + +import static com.gh.gamecenter.message.MessageCenterFragment.EB_COMMENTMARKREAD; + +/** + * Created by khy on 2017/4/10. + * 消息-评论适配器 + */ +public class MessageFragmentAdapter extends ListAdapter { + + private OnListClickListener mClickListener; + + + private List mEntityList; + + public MessageFragmentAdapter(Context context, OnListClickListener clickListener) { + super(context); + + mClickListener = clickListener; + } + + @Override + protected void provideListData(List listData) { + if (mEntityList == null) { + EventBus.getDefault().post(new EBUISwitch(EB_COMMENTMARKREAD, 0)); //去除未读提示 + } + mEntityList = (List) listData; + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); + } + + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case ItemViewType.ITEM_FOOTER: + view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view, null, mClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.message_item_answer, parent, false); + return new MessageItemVieHolder(view, mEntityList, mClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + + switch (getItemViewType(position)) { + case ItemViewType.ITEM_BODY: + ((MessageItemVieHolder) holder).initMessageItemVieHolder(mEntityList.get(position)); + break; + case ItemViewType.ITEM_FOOTER: + ((FooterViewHolder) holder).initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); + break; + } + } + + @Override + public int getItemViewType(int position) { + if (position == getItemCount() - 1) { + return ItemViewType.ITEM_FOOTER; + } else { + return ItemViewType.ITEM_BODY; + } + } + + @Override + public int getItemCount() { + return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java b/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java new file mode 100644 index 0000000000..0ffedcb700 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java @@ -0,0 +1,99 @@ +package com.gh.gamecenter.message; + +import android.text.Html; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.NewsUtils; +import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.MessageEntity; + +import butterknife.BindView; + +/** + * Created by khy on 28/12/17. + */ + +public class MessageItemVieHolder extends BaseRecyclerViewHolder { + @BindView(R.id.message_item_user_icon) + SimpleDraweeView mUserIcon; + @BindView(R.id.message_item_user_name) + TextView mUserName; + @BindView(R.id.message_item_user_status) + TextView mUserStatus; + @BindView(R.id.message_item_vote) + ImageView mVoteIcon; + @BindView(R.id.message_item_title) + TextView mTitle; + @BindView(R.id.message_item_content) + TextView mContent; + @BindView(R.id.message_item_time) + TextView mTime; + + MessageItemVieHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + mContent.setOnClickListener(this); + mTitle.setOnClickListener(this); + } + + void initMessageItemVieHolder(MessageEntity entity) { + String title = null; + String content = ""; + switch (entity.getType()) { + case "comment_vote": + title = itemView.getContext().getString(R.string.message_article_title, entity.getArticle().getTitle()); + content = itemView.getContext().getString(R.string.message_comment_content, entity.getComment().getContent()); + mUserStatus.setVisibility(View.GONE); + mVoteIcon.setVisibility(View.VISIBLE); + break; + case "comment": + mUserStatus.setText(R.string.reply_comment); + title = itemView.getContext().getString(R.string.message_article_title, entity.getArticle().getTitle()); + content = itemView.getContext().getString(R.string.message_comment_content, entity.getComment().getContent()); + break; + case "invited": + title = itemView.getContext().getString(R.string.message_questions_title, entity.getQuestion().getTitle()); + content = null; + mUserStatus.setText(R.string.invite_answer); + break; + case "answer": + title = itemView.getContext().getString(R.string.message_questions_title, entity.getQuestion().getTitle()); + content = itemView.getContext().getString(R.string.message_answer_content, + entity.getUserEntity().getName(), + entity.getAnswer().getContent()); + mUserStatus.setText(R.string.answer_myquestions); + break; + case "answer_vote": + title = itemView.getContext().getString(R.string.message_questions_title, entity.getQuestion().getTitle()); + content = itemView.getContext().getString(R.string.message_myanswer_content, entity.getAnswer().getContent()); + mUserStatus.setText(R.string.vote_myanswer); + break; + case "follow_question": + title = entity.getQuestion().getTitle(); + content = itemView.getContext().getString(R.string.message_answer_content, + entity.getUserEntity().getName(), + entity.getAnswer().getContent()); + break; + default: + + break; + } + + ImageUtils.Companion.display(mUserIcon, entity.getUserEntity().getIcon()); + mUserName.setText(entity.getUserEntity().getName()); + mTitle.setText(title); + NewsUtils.setNewsDetailTime(mTime, entity.getTime()); + + if (content == null) { + mContent.setVisibility(View.GONE); + } else { + mContent.setText(Html.fromHtml(content)); + mContent.setVisibility(View.VISIBLE); + } + } +} 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 b5d56efe84..4e825c779e 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -57,13 +57,9 @@ import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.adapter.BaseRecyclerAdapter; import com.lightgame.utils.Utils; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; import retrofit2.HttpException; @@ -518,34 +514,7 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { } - SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); - try { - long today = format.parse(format.format(new Date())).getTime(); - long day = commentEntity.getTime() * 1000; - if (day >= today && day < today + 86400 * 1000) { - long min = new Date().getTime() / 1000 - day / 1000; - int hour = (int) (min / (60 * 60)); - if (hour == 0) { - if (min < 60) { - viewHolder.commentTimeTv.setText("刚刚"); - } else { - viewHolder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); - } - } else { - viewHolder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d小时前", hour)); - } - } else if (day >= today - 86400 * 1000 && day < today) { - format.applyPattern("HH:mm"); - viewHolder.commentTimeTv.setText("昨天 "); - } else { - format.applyPattern("yyyy-MM-dd"); - viewHolder.commentTimeTv.setText(format.format(day)); - } - } catch (ParseException e) { - e.printStackTrace(); - format.applyPattern("yyyy-MM-dd"); - viewHolder.commentTimeTv.setText(format.format(commentEntity.getTime() * 1000)); - } + NewsUtils.setNewsDetailTime(viewHolder.commentTimeTv, commentEntity.getTime()); CommentUtils.setCommentUserView(mContext, viewHolder, commentEntity); diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index a2fa2950b6..94f2b5c151 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -265,13 +265,11 @@ public class PersonalFragment extends BaseFragment implements Observer 0) { - if (response.getKefuList() != null && response.getKefuList().size() > 0) { - mLoginMessgeHint.setVisibility(View.VISIBLE); - } + if (response.getKefu() > 0) { + mLoginMessgeHint.setVisibility(View.VISIBLE); } - if (response != null && response.getComment() > 0) { + if (response.getComment() > 0) { mLoginMessgeHint.setVisibility(View.VISIBLE); } 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 e73d68ac0b..18e8635610 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 @@ -19,7 +19,7 @@ import com.gh.gamecenter.entity.GameUpdateEntity; import com.gh.gamecenter.entity.LibaoDetailEntity; import com.gh.gamecenter.entity.LibaoEntity; import com.gh.gamecenter.entity.LibaoStatusEntity; -import com.gh.gamecenter.entity.MessageCommentEntity; +import com.gh.gamecenter.entity.MessageEntity; import com.gh.gamecenter.entity.MessageKeFuEntity; import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.entity.NewsDetailEntity; @@ -650,13 +650,13 @@ public interface ApiService { /** * 获取消息-客服数据 */ - @GET("message/private") + @GET("messages/private") Observable> getMessageKeFuData(@Query("offset") int offset, @Query("limit") int limit); /** * 获取消息未读数据 */ - @GET("message/sync") + @GET("messages/number:unread") Observable getMessageUnread(); /** @@ -676,15 +676,15 @@ public interface ApiService { /** * 获取消息-评论数据 */ - @GET("message/user/comment") - Observable> getMessageCommentData(@Query("offset") int offset, @Query("limit") int limit); + @GET("messages") + Observable> getMessageData(@Query("offset") int offset); - /** - * 提交已读评论消息 - */ - @Headers({"Content-Type: application/json", "Accept: application/json"}) - @POST("message/user/comment/confirm/read") - Observable postMarkCommentRead(); +// /** +// * 提交已读评论消息 +// */ +// @Headers({"Content-Type: application/json", "Accept: application/json"}) +// @POST("message/user/comment/confirm/read") +// Observable postMarkCommentRead(); /****** 问答(社区相关) *******/ @@ -774,7 +774,7 @@ public interface ApiService { Observable postQuestionAnswer(@Body RequestBody body, @Path("question_id") String questionsId); /** - * 对社区问题进行回答 + * 对社区问题进行回答:修改 */ @PATCH("answers/{answer_id}") Observable patchQuestionAnswer(@Body RequestBody body, @Path("answer_id") String answerId); @@ -852,6 +852,12 @@ public interface ApiService { Observable deleteConcernQuestions(@Path("question_id") String questionsId); + /** + * 保存单个用户答案的草稿 + */ + @GET("questions/{question_id}/answer_drafts") + Observable getUserAnswerDrafts(@Path("question_id") String questionsId); + /** * 保存用户答案的草稿 */ diff --git a/app/src/main/res/layout/message_item_answer.xml b/app/src/main/res/layout/message_item_answer.xml new file mode 100644 index 0000000000..cfd0c7f77d --- /dev/null +++ b/app/src/main/res/layout/message_item_answer.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0a251c345b..69a9b1ff26 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -488,4 +488,14 @@ 发布 撰写答案 + %1$s:%2$s]]> + 我的答案:%1$s + 问题:%1$s + 文章:%1$s + 我的评论:%1$s + 赞同了我的回答 + 回答了我的问题 + 邀请我回答 + 回复评论 +