From 8daefb2e4227d12068bcf061431020097b5d8d2b Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Thu, 29 Mar 2018 17:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=B8=AD=E5=BF=83=E6=94=B9?= =?UTF-8?q?=E9=80=A0=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=EF=BC=88=E8=BF=98?= =?UTF-8?q?=E5=B7=AE=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{util => databind}/BindingAdapters.java | 37 +- .../com/gh/common/util/EntranceUtils.java | 1 + .../com/gh/gamecenter/MessageActivity.java | 4 +- .../com/gh/gamecenter/NewsDetailActivity.java | 1 + .../gamecenter/ask/AnswerDetailFragment.java | 10 +- .../AnswerCommentConversationFragment.java | 2 +- .../com/gh/gamecenter/entity/MessageEntity.kt | 19 +- .../gamecenter/entity/MessageUnreadEntity.kt | 30 +- .../fragment/MainWrapperFragment.java | 3 +- .../gh/gamecenter/message/KeFuFragment.java | 189 ++++------ .../message/KeFuFragmentAdapter.java | 301 ++------------- .../gh/gamecenter/message/KeFuViewHolder.java | 5 + .../message/MessageCenterFragment.java | 157 -------- .../gamecenter/message/MessageFragment.java | 109 +++--- .../message/MessageNormalAdapter.java | 2 +- .../message/MessageNormalFragment.java | 149 ++++++-- .../message/MessageUnreadRepository.java | 79 ++++ .../message/MessageUnreadViewModel.java | 102 ++++++ .../gamecenter/message/NewMessageAdapter.java | 23 +- .../message/NewMessageFragment.java | 133 ++++++- .../message/NewMessageItemViewHolder.java | 92 ++++- .../message/NewMessageTopViewHolder.java | 24 +- .../gamecenter/personal/PersonalFragment.java | 61 ++-- .../retrofit/service/ApiService.java | 9 +- app/src/main/res/layout/message_item.xml | 10 +- app/src/main/res/layout/message_item_top.xml | 343 +++++++++--------- app/src/main/res/layout/message_kefu_item.xml | 2 +- 27 files changed, 1009 insertions(+), 888 deletions(-) rename app/src/main/java/com/gh/common/{util => databind}/BindingAdapters.java (81%) delete mode 100644 app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java create mode 100644 app/src/main/java/com/gh/gamecenter/message/MessageUnreadRepository.java create mode 100644 app/src/main/java/com/gh/gamecenter/message/MessageUnreadViewModel.java diff --git a/app/src/main/java/com/gh/common/util/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java similarity index 81% rename from app/src/main/java/com/gh/common/util/BindingAdapters.java rename to app/src/main/java/com/gh/common/databind/BindingAdapters.java index 1490d286eb..a2bca3d444 100644 --- a/app/src/main/java/com/gh/common/util/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -1,4 +1,4 @@ -package com.gh.common.util; +package com.gh.common.databind; import android.databinding.BindingAdapter; import android.support.v4.content.ContextCompat; @@ -7,6 +7,8 @@ import android.view.View; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.NewsUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.GameEntity; @@ -30,6 +32,39 @@ public class BindingAdapters { } } + @BindingAdapter("messageCommand") + public static void setMessageCommand(TextView view, String command) { + switch (command) { + case "answer": + view.setText("回答了我的问题"); + break; + case "reply": + view.setText("回复了我"); + break; + case "follow_question": + view.setText("回答了我关注的问题"); + break; + case "reply_comment_answer": + view.setText("回复了我"); + break; + case "answer_comment": + view.setText("评论了我"); + break; + case "answer_vote": + view.setText("赞同了我的回答"); + break; + case "comment_vote": + view.setText("赞了我"); + break; + case "answer_comment_vote": + view.setText("赞了我"); + break; + case "invited": + view.setText("邀请我回答"); + break; + } + } + @BindingAdapter("serverTypePadding") public static void setServerTypePadding(TextView view, String serverType) { int paddRight = 0; diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index f41751527b..5b02b61ebf 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -68,6 +68,7 @@ public class EntranceUtils { public static final String KEY_INVITE_SEARCH_KEY = "inviteSearchKey"; public static final String KEY_MESSAGE_TYPE = "messageType"; public static final String KEY_QUESTIONS_SEARCH_KEY = "questionsSearchKey"; + public static final String KEY_SHOW_ANSWER_COMMENT = "showAnswerComment"; public static void jumpActivity(Context context, Bundle bundle) { diff --git a/app/src/main/java/com/gh/gamecenter/MessageActivity.java b/app/src/main/java/com/gh/gamecenter/MessageActivity.java index 4dd195897a..b15f94f475 100644 --- a/app/src/main/java/com/gh/gamecenter/MessageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MessageActivity.java @@ -5,7 +5,7 @@ import android.content.Intent; import android.os.Bundle; import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.message.MessageCenterFragment; +import com.gh.gamecenter.message.NewMessageFragment; /** * Created by khy on 21/07/17. @@ -19,7 +19,7 @@ public class MessageActivity extends NormalActivity { // .setFragment(MessageCenterFragment.class).build(); Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - return getIntent(context, MessageCenterFragment.class, bundle); + return getIntent(context, NewMessageFragment.class, bundle); } } diff --git a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java index 2f5db0331a..e51462971b 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java @@ -267,6 +267,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener, mDetailRv.setAdapter(adapter); newsId = getIntent().getStringExtra(EntranceUtils.KEY_NEWSID); + Utils.log("==========IDIDID::" + newsId); mIsCollectionNews = getIntent().getBooleanExtra(KEY_COLLECTIONNEWS, false); if (newsId == null) { diff --git a/app/src/main/java/com/gh/gamecenter/ask/AnswerDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AnswerDetailFragment.java index 8693ca19a5..288f2334eb 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AnswerDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AnswerDetailFragment.java @@ -96,6 +96,8 @@ public class AnswerDetailFragment extends NormalFragment { ImageView mAnswerStatusIv; @BindView(R.id.answer_detail_comment_count_tv) TextView mAnswerCommentCountTv; + @BindView(R.id.answer_detail_comment_count_container) + View mAnswerDetailCommentContainer; private static final int ANSWER_STATUS_UNKNOWN = 0; private static final int ANSWERED_MY_ANSWER = 1; @@ -119,6 +121,8 @@ public class AnswerDetailFragment extends NormalFragment { private int mAnswerStatus = ANSWER_STATUS_UNKNOWN; + private boolean mIsShowCommentManager; + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -128,7 +132,9 @@ public class AnswerDetailFragment extends NormalFragment { initObserver(); if (getArguments() != null) { - mAnswerId = getArguments().getString(EntranceUtils.KEY_ANSWER_ID); + Bundle arguments = getArguments(); + mAnswerId = arguments.getString(EntranceUtils.KEY_ANSWER_ID); + mIsShowCommentManager = arguments.getBoolean(EntranceUtils.KEY_SHOW_ANSWER_COMMENT, false); mViewModel.getAnswerDetail(mAnswerId, mEntrance); } @@ -139,6 +145,8 @@ public class AnswerDetailFragment extends NormalFragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { mRichEditor.addJavascriptInterface(new JsInterface(), "imagelistener"); + if (mIsShowCommentManager) + mBaseHandler.postDelayed(() -> mAnswerDetailCommentContainer.performClick(), 500); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentConversationFragment.java b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentConversationFragment.java index 0fcb5aa328..04b28a307e 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentConversationFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentConversationFragment.java @@ -14,7 +14,7 @@ import com.gh.gamecenter.ask.AnswerCommentFragment; import com.gh.gamecenter.entity.CommentEntity; import butterknife.BindView; - +// 评论详情-查看对话 public class AnswerCommentConversationFragment extends AnswerCommentFragment { @BindView(R.id.answer_comment_content_container) diff --git a/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt index ec3528217a..e50b0c5e95 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/MessageEntity.kt @@ -1,6 +1,5 @@ package com.gh.gamecenter.entity -import com.gh.gamecenter.ask.entity.Questions import com.google.gson.annotations.SerializedName /** @@ -14,9 +13,9 @@ class MessageEntity { var comment: Comment = Comment() - var dialogue : Dialogue = Dialogue() + var dialogue: Dialogue = Dialogue() - var question: Questions = Questions() + var question: Question = Question() var answer: Answer = Answer() @@ -31,6 +30,8 @@ class MessageEntity { var id: String? = null var title: String? = null + + var thumb: String? = null } class Answer { @@ -38,8 +39,20 @@ class MessageEntity { var id: String? = null var content: String? = null + + var images: List = ArrayList() } + class Question { + @SerializedName("_id") + var id: String? = null + + var title: String? = null + + var images: List = ArrayList() + } + + class Dialogue { var from: From = From() 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 e38b4a589c..88d825cb2b 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.kt @@ -8,9 +8,31 @@ import com.google.gson.annotations.SerializedName */ class MessageUnreadEntity { - @SerializedName("message") - var comment: Int = 0 + var invited: Int = 0 - @SerializedName("service") - var kefu: Int = 0 + @SerializedName("answer_vote") + var answerVote: Int = 0 + + @SerializedName("comment_vote") + var commentVote: Int = 0 + + @SerializedName("answer_comment_vote") + var answerCommentVote: Int = 0 + + var service: Int = 0 + + var total: Int = 0 + + var answer: Int = 0 + + var reply: Int = 0 + + @SerializedName("follow_question") + var followQuestion: Int = 0 + + @SerializedName("reply_answer_comment") + var replyAnswerComment: Int = 0 + + @SerializedName("answer_comment") + var answerComment: Int = 0 } diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java index 6209991935..57aca793a7 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -18,7 +18,6 @@ import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.eventbus.EBUISwitch; import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.message.MessageCenterFragment; import com.gh.gamecenter.personal.PersonalFragment; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -157,7 +156,7 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable { // 控制 我的光环消息未读红点 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBReuse reuse) { - if (MessageCenterFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { // 消息阅读完成 + if (PersonalFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { // 消息阅读完成 if (mMessageHintIv != null) { mMessageHintIv.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java index 8a375bf07c..6951bc7956 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java @@ -1,57 +1,37 @@ package com.gh.gamecenter.message; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; 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.text.TextUtils; import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.common.view.VerticalItemDecoration; +import com.gh.common.util.EntranceUtils; +import com.gh.common.util.QQUtils; +import com.gh.gamecenter.GameDetailActivity; +import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.normal.NormalFragment; +import com.gh.gamecenter.SubjectActivity; +import com.gh.gamecenter.WebActivity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.NormalListViewModel; +import com.gh.gamecenter.entity.MessageKeFuEntity; +import com.gh.gamecenter.retrofit.RetrofitManager; +import com.halo.assistant.HaloApp; -import butterknife.BindView; -import butterknife.OnClick; +import java.util.List; + +import rx.Observable; /** * Created by khy on 2017/4/5. * 消息-客服 */ -public class KeFuFragment extends NormalFragment 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; - +public class KeFuFragment extends ListFragment { private KeFuFragmentAdapter mAdapter; - - Runnable runnable = new Runnable() { - @Override - public void run() { - mAdapter = new KeFuFragmentAdapter(getContext(), KeFuFragment.this); - mRecyclerView.setAdapter(mAdapter); - } - }; - - @Override - protected int getLayoutId() { - return R.layout.fragment_comment_list; - } + private MessageUnreadViewModel mUnreadViewModel; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { @@ -62,79 +42,70 @@ public class KeFuFragment extends NormalFragment implements SwipeRefreshLayout.O @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mUnreadViewModel = ViewModelProviders.of(this, new MessageUnreadViewModel.Factory(HaloApp.getInstance().getApplication())) + .get(MessageUnreadViewModel.class); + } - mNoneDataTv.setText(R.string.message_kefu_empty_hint); + @Override + public void onLoadDone() { + super.onLoadDone(); + mUnreadViewModel.markRead(MessageUnreadViewModel.ReadType.SERVICE); + } - mRefresh.setColorSchemeResources(R.color.theme); - mRefresh.setOnRefreshListener(this); + @Override + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getContext()).getApi().getMessageKeFuData(offset); + } - mAdapter = new KeFuFragmentAdapter(getContext(), this); - layoutManager = new LinearLayoutManager(getContext()); - mRecyclerView.setLayoutManager(layoutManager); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); - mRecyclerView.setAdapter(mAdapter); + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new KeFuFragmentAdapter(getContext(), this) : 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); - } + @Override + public void onListClick(View view, int position, Object data) { + if (view.getId() == R.id.message_kefu_skip) { + MessageKeFuEntity keFuEntity = (MessageKeFuEntity) data; + if (keFuEntity.getLink() == null || keFuEntity.getLink().getType() == null) { + toast("数据请求失败"); + return; } - }); - - } - - @Override - public void loadDone() { - super.loadDone(); - mRefresh.setRefreshing(false); - mLoadingPb.setVisibility(View.GONE); - mRecyclerView.setVisibility(View.VISIBLE); - mNoneData.setVisibility(View.GONE); - } - - @Override - public void loadError() { - super.loadError(); - mRefresh.setRefreshing(false); - mNoConnection.setVisibility(View.VISIBLE); - mRecyclerView.setVisibility(View.GONE); - mNoneData.setVisibility(View.GONE); - mLoadingPb.setVisibility(View.GONE); - } - - @Override - public void loadEmpty() { - super.loadEmpty(); - mRefresh.setRefreshing(false); - mNoneData.setVisibility(View.VISIBLE); - mNoConnection.setVisibility(View.GONE); - 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() == 1) { -// if (mLoadingPb.getVisibility() == View.VISIBLE) { -// mAdapter.loadData(0); -// } -// } -// } - - @Override - public void onRefresh() { - postDelayedRunnable(runnable, 1000); + switch (keFuEntity.getLink().getType()) { + case "游戏": + if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { + GameDetailActivity.startGameDetailActivity(getContext(), keFuEntity.getLink().getId(), ""); + } + break; + case "QQ号": + if (!TextUtils.isEmpty(keFuEntity.getLink().getQq())) { + QQUtils.startQQSession(getContext(), keFuEntity.getLink().getQq()); + } + break; + case "web": + if (!TextUtils.isEmpty(keFuEntity.getLink().getUrl())) { + startActivity(WebActivity.getIntentByUrl(getContext(), keFuEntity.getLink().getUrl())); + } + break; + case "QQ群": + if (!TextUtils.isEmpty(keFuEntity.getLink().getKey())) { + QQUtils.joinQQGroup(getContext(), keFuEntity.getLink().getKey()); + } + break; + case "新闻": + if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { + Intent intent2 = new Intent(getContext(), NewsDetailActivity.class); + intent2.putExtra(EntranceUtils.KEY_ENTRANCE, "(消息-公告)"); + intent2.putExtra(EntranceUtils.KEY_NEWSID, keFuEntity.getLink().getId()); + startActivity(intent2); + } + break; + case "专题": + if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { + SubjectActivity.startSubjectActivity(getContext(), keFuEntity.getLink().getId() + , null, false, "(消息-客服)"); + } + break; + } + } } } diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java index c1bd8d9240..2018234d7a 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java @@ -1,181 +1,54 @@ package com.gh.gamecenter.message; import android.content.Context; -import android.content.Intent; import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.Html; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; -import com.gh.base.OnRequestCallBackListener; +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.CommentUtils; -import com.gh.common.util.EntranceUtils; import com.gh.common.util.ImageUtils; -import com.gh.common.util.QQUtils; -import com.gh.gamecenter.GameDetailActivity; -import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.SubjectActivity; -import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.entity.MessageKeFuEntity; -import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.google.gson.Gson; -import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; - -import org.greenrobot.eventbus.EventBus; -import org.json.JSONArray; - -import java.util.ArrayList; -import java.util.List; - -import okhttp3.MediaType; -import okhttp3.RequestBody; -import okhttp3.ResponseBody; -import retrofit2.HttpException; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; - -import static com.gh.gamecenter.message.MessageCenterFragment.EB_KEFUMARKREADCOUNT; /** * Created by khy on 2017/4/10. * 消息-客服适配器 */ -public class KeFuFragmentAdapter extends BaseRecyclerAdapter { +public class KeFuFragmentAdapter extends ListAdapter { + private OnListClickListener mClickListener; - private OnRequestCallBackListener mCallBackListener; - - private List mKeFuList; - - private List mReceiveIds; - - private int mCurMarkCount; - - private boolean isRemove; - private boolean isNetworkError; - private boolean isLoaded; - - public KeFuFragmentAdapter(Context context, OnRequestCallBackListener listener) { + public KeFuFragmentAdapter(Context context, OnListClickListener listener) { super(context); - this.mCallBackListener = listener; - - mReceiveIds = new ArrayList<>(); - mKeFuList = new ArrayList<>(); - - mCurMarkCount = 0; - loadData(0); - } - - public void loadData(final int offset) { - isLoaded = false; - RetrofitManager.getInstance(mContext).getApi() - .getMessageKeFuData(offset, 20) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - super.onResponse(response); - if (response.size() > 0) { - for (MessageKeFuEntity keFuEntity : response) { - if (!keFuEntity.isReceive()) { - mReceiveIds.add(keFuEntity.getId()); - } - } - - if (response.size() < 20) { - isRemove = true; - } - - if (offset == 0) { - mCallBackListener.loadDone(); - } - - mKeFuList.addAll(response); -// if (!fragment.isHidden() && !fragment.isEverPause()) { -// notifyItemRangeInserted(mKeFuList.size() - response.size(), response.size()); -// } else { - notifyDataSetChanged(); -// } - - if (mReceiveIds.size() > 0) { - postDataReceive(); - } - - } else { - isRemove = true; - if (mKeFuList.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); - } - } - }); - } - - - private void postDataReceive() { - - String ids = new Gson().toJson(mReceiveIds); - final RequestBody body = RequestBody.create(MediaType.parse("application/json"), ids); - - RetrofitManager.getInstance(mContext).getApi() - .postKeFuDataReceive(body) - .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) - .subscribe(new Response() { - @Override - public void onResponse(ResponseBody response) { - super.onResponse(response); - mReceiveIds.clear(); - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - } - }); + mClickListener = listener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0) { + if (viewType == ItemViewType.ITEM_FOOTER) { View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view); } else { View view = mLayoutInflater.inflate(R.layout.message_kefu_item, parent, false); - return new KeFuViewHolder(view); + return new KeFuViewHolder(view, mClickListener); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof KeFuViewHolder) { - MessageKeFuEntity keFuEntity = mKeFuList.get(position); + MessageKeFuEntity keFuEntity = mEntityList.get(position); KeFuViewHolder viewHolder = (KeFuViewHolder) holder; - initKeFuViewHolder(viewHolder, keFuEntity, position); + initKeFuViewHolder(viewHolder, keFuEntity); } else if (holder instanceof FooterViewHolder) { - FooterViewHolder viewHolder = (FooterViewHolder) holder; - initFooterViewHolder(viewHolder); + ((FooterViewHolder) holder).initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); + ((FooterViewHolder) holder).initItemPadding(); } } @@ -183,49 +56,18 @@ public class KeFuFragmentAdapter extends BaseRecyclerAdapter { @Override public int getItemViewType(int position) { if (position == getItemCount() - 1) { - return 0; + return ItemViewType.ITEM_FOOTER; } else { - return 1; + return ItemViewType.ITEM_BODY; } } @Override public int getItemCount() { - if (mKeFuList.size() == 0) { - return 0; - } - - return mKeFuList.size() + 1; + return mEntityList == null ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } - private void initFooterViewHolder(FooterViewHolder viewHolder) { - viewHolder.initItemPadding(); - if (isNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_failed_retry); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 1); - loadData(mKeFuList.size()); - } - }); - } 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 initKeFuViewHolder(KeFuViewHolder viewHolder, final MessageKeFuEntity keFuEntity, final int position) { + private void initKeFuViewHolder(KeFuViewHolder viewHolder, final MessageKeFuEntity keFuEntity) { viewHolder.content.setText(Html.fromHtml(keFuEntity.getMessage())); if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) { @@ -235,11 +77,11 @@ public class KeFuFragmentAdapter extends BaseRecyclerAdapter { viewHolder.suggestion.setVisibility(View.GONE); } - if (keFuEntity.isRead()) { - viewHolder.readHint.setVisibility(View.GONE); - } else { - viewHolder.readHint.setVisibility(View.VISIBLE); - } +// if (keFuEntity.isRead()) { +// viewHolder.readHint.setVisibility(View.GONE); +// } else { +// viewHolder.readHint.setVisibility(View.VISIBLE); +// } if (keFuEntity.getLink() != null && !TextUtils.isEmpty(keFuEntity.getLink().getDocument())) { viewHolder.skip.setText(keFuEntity.getLink().getDocument()); @@ -271,105 +113,6 @@ public class KeFuFragmentAdapter extends BaseRecyclerAdapter { } else { viewHolder.suggestion.setVisibility(View.GONE); } - - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (keFuEntity.getLink() != null) { - onReadControl(keFuEntity, position); - } - } - }); - - viewHolder.skip.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (keFuEntity.getLink() == null || keFuEntity.getLink().getType() == null) { - Utils.toast(mContext, "数据请求失败"); - return; - } - switch (keFuEntity.getLink().getType()) { - case "游戏": - if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { - GameDetailActivity.startGameDetailActivity(mContext, keFuEntity.getLink().getId(), ""); - } - break; - case "QQ号": - if (!TextUtils.isEmpty(keFuEntity.getLink().getQq())) { - QQUtils.startQQSession(mContext, keFuEntity.getLink().getQq()); - } - break; - case "web": - if (!TextUtils.isEmpty(keFuEntity.getLink().getUrl())) { - mContext.startActivity(WebActivity.getIntentByUrl(mContext, keFuEntity.getLink().getUrl())); - } - break; - case "QQ群": - if (!TextUtils.isEmpty(keFuEntity.getLink().getKey())) { - QQUtils.joinQQGroup(mContext, keFuEntity.getLink().getKey()); - } - break; - case "新闻": - if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { - Intent intent2 = new Intent(mContext, NewsDetailActivity.class); - intent2.putExtra(EntranceUtils.KEY_ENTRANCE, "(消息-公告)"); - intent2.putExtra(EntranceUtils.KEY_NEWSID, keFuEntity.getLink().getId()); - mContext.startActivity(intent2); - } - break; - case "专题": - if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) { - SubjectActivity.startSubjectActivity(mContext, keFuEntity.getLink().getId() - , null, false, "(消息-客服)"); - } - break; - } - onReadControl(keFuEntity, position); - } - }); } - private void onReadControl(MessageKeFuEntity keFuEntity, int position) { - if (!keFuEntity.isRead()) { - mCurMarkCount++; - - keFuEntity.setRead(true); - notifyItemChanged(position); - JSONArray array = new JSONArray(); - array.put(keFuEntity.getId()); - RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString()); - postMarkRead(body); - } - - EventBus.getDefault().post(new EBUISwitch(EB_KEFUMARKREADCOUNT, mCurMarkCount)); - } - - private void postMarkRead(final RequestBody body) { - RetrofitManager.getInstance(mContext) - .getApi() - .postMarkKeFuRead(body) - .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); - } - }); - - } - - public boolean isLoaded() { - return isLoaded; - } - - public boolean isRemove() { - return isRemove; - } } diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java index 631e2c9a63..e8bdb333ff 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java @@ -5,6 +5,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; import butterknife.BindView; @@ -33,4 +34,8 @@ public class KeFuViewHolder extends BaseRecyclerViewHolder { super(itemView); } + public KeFuViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); + skip.setOnClickListener(this); + } } diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java deleted file mode 100644 index 38161a1014..0000000000 --- a/app/src/main/java/com/gh/gamecenter/message/MessageCenterFragment.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.gh.gamecenter.message; - -import android.content.Context; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import com.gh.base.fragment.BaseFragment_TabLayout; -import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.entity.MessageUnreadEntity; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.List; - -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; - -/** - * Created by khy on 2017/4/5. - * 首页-消息 - */ -public class MessageCenterFragment extends BaseFragment_TabLayout { - - private TextView mCommentHint; - private View mKeFuHint; - - public static final int INDEX_MESSAGE = 0; - public static final int INDEX_KEFU = 1; - - public static final String MESSAGE_READ_OVER = "messageReadOver"; - public static final String EB_MESSAGEFRAGMENT_TAG = "MessageFragment"; - public static final String EB_KEFUMARKREADCOUNT = "kefuMarkReadCount"; - public static final String EB_COMMENTMARKREAD = "commentMarkRead"; - - private int mKeFuUnreadCount; - - public static MessageCenterFragment newInstance() { - final Bundle args = new Bundle(1); - args.putInt(PAGE_INDEX, INDEX_MESSAGE); - final MessageCenterFragment fragment = new MessageCenterFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - protected void initTabTitleList(List tabTitleList) { - tabTitleList.add(getString(R.string.messagecenter_message)); - tabTitleList.add(getString(R.string.message_kefu)); - } - - @Override - protected View provideTabView(int position, String tabTitle) { - View view = LayoutInflater.from(getContext()).inflate(R.layout.tab_item_message_number, null); - ((TextView) view.findViewById(R.id.tab_message_title)).setText(tabTitle); - if (position == INDEX_MESSAGE) { - mKeFuHint = view.findViewById(R.id.tab_message_number); - } else if (position == INDEX_KEFU) { - mCommentHint = view.findViewById(R.id.tab_message_number); - } - return super.provideTabView(position, tabTitle); - } - - @Override - protected void initFragmentList(List fragments) { - String entrance = null; - if (getArguments() != null) entrance = getArguments().getString(EntranceUtils.KEY_ENTRANCE); - fragments.add(MessageFragment.getInstance(entrance)); - fragments.add(new KeFuFragment()); - } - - @Override - protected void initView(View view) { - super.initView(view); - - initMessageUnread(getContext()); - - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setNavigationTitle(getString(R.string.title_message_center)); - } - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - view.postDelayed(new Runnable() { - @Override - public void run() { - EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mCheckedIndex)); - } - }, 100); - } - - private void initMessageUnread(final Context context) { - RetrofitManager.getInstance(context).getApi() - .getMessageUnread() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(MessageUnreadEntity response) { - super.onResponse(response); - if (response.getComment() > 0) { - mCommentHint.setVisibility(View.VISIBLE); - mCommentHint.setText(String.valueOf(response.getComment())); - mBaseHandler.postDelayed(() -> { - EventBus.getDefault().post(new EBUISwitch(EB_COMMENTMARKREAD, 0)); //去除未读提示 - }, 1000); - - } - - if (response.getKefu() > 0) { - mKeFuUnreadCount = response.getKefu(); - if (mKeFuUnreadCount != 0) { - mKeFuHint.setVisibility(View.VISIBLE); - } - } - } - }); - } - - // 隐藏未读提示 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUISwitch reuse) { - if (EB_KEFUMARKREADCOUNT.equals(reuse.getFrom()) && reuse.getPosition() >= mKeFuUnreadCount) { - mKeFuHint.setVisibility(View.GONE); - if (mKeFuHint.getVisibility() == View.GONE && mCommentHint.getVisibility() == View.GONE) { - EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); - } - } else if (EB_COMMENTMARKREAD.equals(reuse.getFrom())) { - mCommentHint.setVisibility(View.GONE); - if (mKeFuHint.getVisibility() == View.GONE && mCommentHint.getVisibility() == View.GONE) { - EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); - } - } - } - - @Override - public void onPageSelected(int position) { - super.onPageSelected(position); - EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, position)); - } -} diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java index 26b42966aa..d8f541763d 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -1,19 +1,10 @@ package com.gh.gamecenter.message; -import android.content.Intent; import android.os.Bundle; import android.view.View; -import com.gh.common.util.AskLogUtils; import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.CommentDetailActivity; -import com.gh.gamecenter.MessageDetailActivity; -import com.gh.gamecenter.NewsDetailActivity; -import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.ask.AnswerDetailFragment; -import com.gh.gamecenter.ask.entity.Questions; -import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadType; @@ -61,56 +52,56 @@ public class MessageFragment extends ListFragment) data).get(position); - Bundle bundle; - switch (entity.getType()) { - case "comment_vote": - if (view.getId() == R.id.message_item_title || view.getId() == R.id.message_item) { - Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息"); - startActivity(intent); - } - break; - case "reply": - if (view.getId() == R.id.message_item_title) { - Intent intent = MessageDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), -1, false, "消息中心-消息"); - startActivity(intent); - } else if (view.getId() == R.id.message_item) { - Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId()); - startActivity(intent); - } - break; - case "invited": - if (view.getId() == R.id.message_item_title || view.getId() == R.id.message_item) { - String tracers = mEntrance + "+(消息)"; - Questions question = entity.getQuestion(); - bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); - NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); - - AskLogUtils.uploadQuestions(getContext(), tracers, question); - } - break; - case "answer": - case "answer_vote": - case "follow_question": - String tracers = mEntrance + "+(消息)"; - if (view.getId() == R.id.message_item_title) { - Questions question = entity.getQuestion(); - bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); - NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); - - AskLogUtils.uploadQuestions(getContext(), tracers, question); - } else if (view.getId() == R.id.message_item) { - bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); - NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); - } - break; - } +// MessageEntity entity = ((List) data).get(position); +// Bundle bundle; +// switch (entity.getType()) { +// case "comment_vote": +// if (view.getId() == R.id.message_item_title || view.getId() == R.id.message_item) { +// Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息"); +// startActivity(intent); +// } +// break; +// case "reply": +// if (view.getId() == R.id.message_item_title) { +// Intent intent = MessageDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), -1, false, "消息中心-消息"); +// startActivity(intent); +// } else if (view.getId() == R.id.message_item) { +// Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId()); +// startActivity(intent); +// } +// break; +// case "invited": +// if (view.getId() == R.id.message_item_title || view.getId() == R.id.message_item) { +// String tracers = mEntrance + "+(消息)"; +// MessageEntity.Question question = entity.getQuestion(); +// bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); +// NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); +// +// AskLogUtils.uploadQuestions(getContext(), tracers, question); +// } +// break; +// case "answer": +// case "answer_vote": +// case "follow_question": +// String tracers = mEntrance + "+(消息)"; +// if (view.getId() == R.id.message_item_title) { +// MessageEntity.Question question = entity.getQuestion(); +// bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); +// NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); +// +// AskLogUtils.uploadQuestions(getContext(), tracers, question); +// } else if (view.getId() == R.id.message_item) { +// bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); +// bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); +// NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); +// } +// break; +// } } } diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageNormalAdapter.java b/app/src/main/java/com/gh/gamecenter/message/MessageNormalAdapter.java index 1c93787771..d6fa0902f6 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageNormalAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageNormalAdapter.java @@ -48,7 +48,7 @@ public class MessageNormalAdapter extends ListAdapter { switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: NewMessageItemViewHolder viewHolder = (NewMessageItemViewHolder) holder; - viewHolder.mBinding.setMessageEntity(mEntityList.get(position)); + viewHolder.setMessageItem(mEntityList.get(position)); break; case ItemViewType.ITEM_FOOTER: ((FooterViewHolder) holder).initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java index 5cc1c86d98..984d27641d 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java @@ -1,15 +1,26 @@ package com.gh.gamecenter.message; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.View; +import com.gh.common.util.AskLogUtils; import com.gh.common.util.EntranceUtils; +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.AnswerDetailFragment; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.entity.MessageEntity; import com.gh.gamecenter.retrofit.RetrofitManager; +import com.halo.assistant.HaloApp; import java.util.List; @@ -20,31 +31,18 @@ import rx.Observable; */ public class MessageNormalFragment extends ListFragment { - - public enum MessageType { - - VOTE("VOTE"), - INVITE("INVITE"); - - private String mType; - - MessageType(String type) { - mType = type; - } - - public String getType() { - return mType; - } - } - + public final static String MESSAGE_TYPE_VOTE = "vote"; + public final static String MESSAGE_TYPE_INVITE = "invite"; private MessageNormalAdapter mAdapter; - private MessageType mMessageType; + private MessageUnreadViewModel mUnreadViewModel; - public static Bundle getMessageBundle(MessageType messageType) { + private String mMessageType; + + public static Bundle getMessageBundle(String messageType) { Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_MESSAGE_TYPE, messageType.getType()); + bundle.putString(EntranceUtils.KEY_MESSAGE_TYPE, messageType); return bundle; } @@ -52,25 +50,37 @@ public class MessageNormalFragment extends ListFragment> provideDataObservable(int offset) { -// mMessageType - return RetrofitManager.getInstance(getContext()).getApi().getMessageData(offset); + return RetrofitManager.getInstance(getContext()).getApi().getMessage(mMessageType, offset); } @Override @@ -80,7 +90,96 @@ public class MessageNormalFragment extends ListFragment mMediatorLiveData = new MediatorLiveData<>(); + + private MessageUnreadEntity mCacheUnreadData; + + private boolean isLoading; + + public static MessageUnreadRepository getInstance(ApiService api) { + if (mInstance == null) { + synchronized (MessageUnreadRepository.class) { + if (mInstance == null) { + mInstance = new MessageUnreadRepository(api); + } + } + } + return mInstance; + } + + public MessageUnreadRepository(ApiService api) { + this.api = api; + loadMessageUnreadData(); + } + + void loadMessageUnreadData() { + + if (isLoading && UserManager.getInstance().getToken() == null) return; + isLoading = true; + api + .getMessageUnread(BuildConfig.API_HOST + "messages:unread_count") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(MessageUnreadEntity response) { + isLoading = false; + mCacheUnreadData = response; + mMediatorLiveData.postValue(response); + } + + @Override + public void onFailure(HttpException e) { + isLoading = false; + } + }); + } + + MediatorLiveData getLiveData() { + if (mCacheUnreadData == null) loadMessageUnreadData(); + return mMediatorLiveData; + } + + MessageUnreadEntity getCacheUnreadData() { + if (mCacheUnreadData == null) loadMessageUnreadData(); + return mCacheUnreadData; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageUnreadViewModel.java b/app/src/main/java/com/gh/gamecenter/message/MessageUnreadViewModel.java new file mode 100644 index 0000000000..fb3694becf --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/message/MessageUnreadViewModel.java @@ -0,0 +1,102 @@ +package com.gh.gamecenter.message; + +import android.app.Application; +import android.arch.lifecycle.AndroidViewModel; +import android.arch.lifecycle.MediatorLiveData; +import android.arch.lifecycle.ViewModel; +import android.arch.lifecycle.ViewModelProvider; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.entity.MessageUnreadEntity; +import com.gh.gamecenter.retrofit.RetrofitManager; + +/** + * Created by khy on 29/03/18. + */ + +public class MessageUnreadViewModel extends AndroidViewModel { + public enum ReadType { + DEFAULT, + VOTE, + INVITE, + SERVICE + } + + MessageUnreadRepository mRepository; + MediatorLiveData liveData; + + public MessageUnreadViewModel(@NonNull Application application, MessageUnreadRepository repository) { + super(application); + mRepository = repository; + liveData = mRepository.getLiveData(); + } + + public MediatorLiveData getLiveData() { + return liveData; + } + + public void retry() { + mRepository.loadMessageUnreadData(); + } + + public void markRead(ReadType readType) { + MessageUnreadEntity cacheUnreadData = mRepository.getCacheUnreadData(); + if (cacheUnreadData == null) return; + boolean isChange = false; + switch (readType) { + case SERVICE: + if (cacheUnreadData.getService() != 0) { + cacheUnreadData.setService(0); + isChange = true; + } + break; + case VOTE: + if (cacheUnreadData.getAnswerVote() + cacheUnreadData.getAnswerCommentVote() + cacheUnreadData.getCommentVote() != 0) { + cacheUnreadData.setAnswerVote(0); + cacheUnreadData.setCommentVote(0); + cacheUnreadData.setAnswerCommentVote(0); + isChange = true; + } + break; + case INVITE: + if (cacheUnreadData.getInvited() != 0) { + cacheUnreadData.setInvited(0); + isChange = true; + } + break; + case DEFAULT: + if (cacheUnreadData.getAnswer() + cacheUnreadData.getAnswerComment() + cacheUnreadData.getReply() + + cacheUnreadData.getFollowQuestion() + cacheUnreadData.getReplyAnswerComment() != 0) { + cacheUnreadData.setAnswer(0); + cacheUnreadData.setAnswerComment(0); + cacheUnreadData.setReply(0); + cacheUnreadData.setFollowQuestion(0); + cacheUnreadData.setReplyAnswerComment(0); + isChange = true; + } + break; + } + + if (isChange) { + liveData.postValue(cacheUnreadData); + } + } + + public static class Factory extends ViewModelProvider.NewInstanceFactory { + @NonNull + private final Application mApplication; + + private final MessageUnreadRepository mRepository; + + public Factory(@NonNull Application application) { + mApplication = application; + mRepository = MessageUnreadRepository.getInstance(RetrofitManager.getInstance(application).getApi()); + } + + @Override + public T create(Class modelClass) { + //noinspection unchecked + return (T) new MessageUnreadViewModel(mApplication, mRepository); + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/message/NewMessageAdapter.java b/app/src/main/java/com/gh/gamecenter/message/NewMessageAdapter.java index fae54218ac..a570863b9e 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NewMessageAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/message/NewMessageAdapter.java @@ -12,7 +12,9 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.databinding.MessageItemBinding; +import com.gh.gamecenter.databinding.MessageItemTopBinding; import com.gh.gamecenter.entity.MessageEntity; +import com.gh.gamecenter.entity.MessageUnreadEntity; import java.util.ArrayList; import java.util.List; @@ -25,6 +27,7 @@ public class NewMessageAdapter extends ListAdapter { private OnListClickListener mClickListener; + private MessageUnreadEntity mUnreadEntity; public NewMessageAdapter(Context context, OnListClickListener clickListener) { super(context); @@ -42,15 +45,19 @@ public class NewMessageAdapter extends ListAdapter { } } + void setMessageUnreadData(MessageUnreadEntity unreadEntity) { + mUnreadEntity = unreadEntity; + notifyItemChanged(0); + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; switch (viewType) { case ItemViewType.ITEM_TOP: - view = mLayoutInflater.inflate(R.layout.message_item_top, parent, false); - return new NewMessageTopViewHolder(view, mClickListener); + MessageItemTopBinding topBinding = DataBindingUtil.inflate(mLayoutInflater, R.layout.message_item_top, parent, false); + return new NewMessageTopViewHolder(topBinding, mClickListener); case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); + View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view, null, mClickListener); case ItemViewType.ITEM_BODY: MessageItemBinding binding = DataBindingUtil.inflate(mLayoutInflater, R.layout.message_item, parent, false); @@ -64,9 +71,13 @@ public class NewMessageAdapter extends ListAdapter { @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { + case ItemViewType.ITEM_TOP: + NewMessageTopViewHolder topViewHolder = (NewMessageTopViewHolder) holder; + topViewHolder.mBinding.setUnreadEntity(mUnreadEntity); + break; case ItemViewType.ITEM_BODY: NewMessageItemViewHolder viewHolder = (NewMessageItemViewHolder) holder; - viewHolder.mBinding.setMessageEntity(mEntityList.get(position - FOOTER_ITEM_COUNT)); + viewHolder.setMessageItem(mEntityList.get(position - TOP_ITEM_COUNT)); break; case ItemViewType.ITEM_FOOTER: ((FooterViewHolder) holder).initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); @@ -88,6 +99,6 @@ public class NewMessageAdapter extends ListAdapter { @Override public int getItemCount() { - return mEntityList == null ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; + return mEntityList == null ? TOP_ITEM_COUNT : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; } } diff --git a/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java index 14ece174bc..fb0123230b 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java @@ -1,16 +1,25 @@ package com.gh.gamecenter.message; +import android.arch.lifecycle.ViewModelProviders; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.View; +import com.gh.common.util.AskLogUtils; +import com.gh.common.util.EntranceUtils; +import com.gh.gamecenter.CommentDetailActivity; +import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.ask.AnswerDetailFragment; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.entity.MessageEntity; import com.gh.gamecenter.retrofit.RetrofitManager; +import com.halo.assistant.HaloApp; import java.util.List; @@ -24,6 +33,8 @@ public class NewMessageFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMessageData(offset); + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mUnreadViewModel = ViewModelProviders.of(this, new MessageUnreadViewModel.Factory(HaloApp.getInstance().getApplication())) + .get(MessageUnreadViewModel.class); + mUnreadViewModel.getLiveData().observe(this + , messageUnread -> provideListAdapter().setMessageUnreadData(messageUnread)); } @Override - protected ListAdapter provideListAdapter() { + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getContext()).getApi().getMessage("default", offset); + } + + @Override + protected NewMessageAdapter provideListAdapter() { return mAdapter == null ? mAdapter = new NewMessageAdapter(getContext(), this) : mAdapter; } @Override public void onListClick(View view, int position, Object data) { - switch (view.getId()) { case R.id.message_vote: NormalActivity.startFragment(getContext(), MessageNormalFragment.class - , MessageNormalFragment.getMessageBundle(MessageNormalFragment.MessageType.VOTE)); - break; + , MessageNormalFragment.getMessageBundle(MessageNormalFragment.MESSAGE_TYPE_VOTE)); + return; case R.id.message_invite: NormalActivity.startFragment(getContext(), MessageNormalFragment.class - , MessageNormalFragment.getMessageBundle(MessageNormalFragment.MessageType.INVITE)); - break; + , MessageNormalFragment.getMessageBundle(MessageNormalFragment.MESSAGE_TYPE_INVITE)); + return; case R.id.message_service: NormalActivity.startFragment(getContext(), KeFuFragment.class); + return; + case R.id.message_item: break; + case R.id.message_original: + break; + } + + MessageEntity entity = (MessageEntity) data; + Bundle bundle; + String tracers = mEntrance + "+(消息)"; + switch (entity.getType()) { + case "comment_vote": + if (view.getId() == R.id.message_original) { + Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息"); + startActivity(intent); + } else if (view.getId() == R.id.message_item) { + Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId()); + startActivity(intent); + } + break; + case "reply": + if (view.getId() == R.id.message_original) { + Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息"); + startActivity(intent); + } else if (view.getId() == R.id.message_item) { + Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId()); + startActivity(intent); + } + break; + case "invited": + if (view.getId() == R.id.message_original || view.getId() == R.id.message_item) { + MessageEntity.Question question = entity.getQuestion(); + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); + + Questions questions = new Questions(); + questions.setId(question.getId()); + questions.setTitle(question.getTitle()); + AskLogUtils.uploadQuestions(getContext(), tracers, questions); + } + break; + case "answer": + case "follow_question": + if (view.getId() == R.id.message_original) { + MessageEntity.Question question = entity.getQuestion(); + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, question.getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), QuestionsDetailFragment.class, bundle); + + Questions questions = new Questions(); + questions.setId(question.getId()); + questions.setTitle(question.getTitle()); + AskLogUtils.uploadQuestions(getContext(), tracers, questions); + } else if (view.getId() == R.id.message_item) { + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); + } + break; + case "answer_vote": + if (view.getId() == R.id.message_original || view.getId() == R.id.message_item) { + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); + } + case "reply_answer_comment": + case "answer_comment": + if (view.getId() == R.id.message_original) { + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); + } else if (view.getId() == R.id.message_item) { + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); + bundle.putBoolean(EntranceUtils.KEY_SHOW_ANSWER_COMMENT, true); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); // 打开评论管理 + } + break; + case "answer_comment_vote": + if (view.getId() == R.id.message_original) { + bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); + } else if (view.getId() == R.id.message_item) { + Intent intent = CommentDetailActivity.getAnswerCommentIntent(getContext(), entity.getComment().getId()); + startActivity(intent); + } + break; + } } diff --git a/app/src/main/java/com/gh/gamecenter/message/NewMessageItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/NewMessageItemViewHolder.java index 80539aa80b..0a2db9dac2 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NewMessageItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/message/NewMessageItemViewHolder.java @@ -1,18 +1,108 @@ package com.gh.gamecenter.message; +import android.view.View; + import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; +import com.gh.common.util.NewsUtils; import com.gh.gamecenter.databinding.MessageItemBinding; +import com.gh.gamecenter.entity.MessageEntity; + +import java.util.List; /** * Created by khy on 23/03/18. */ -public class NewMessageItemViewHolder extends BaseRecyclerViewHolder { +public class NewMessageItemViewHolder extends BaseRecyclerViewHolder { MessageItemBinding mBinding; public NewMessageItemViewHolder(MessageItemBinding binding, OnListClickListener listClickListener) { super(binding.getRoot(), listClickListener); mBinding = binding; + mBinding.messageOriginal.setOnClickListener(this); + mBinding.messageItem.setOnClickListener(this); + } + + public void setMessageItem(MessageEntity messageEntity) { + setClickData(messageEntity); + mBinding.setMessageEntity(messageEntity); + mBinding.messageTime.setText(NewsUtils.getFormattedTime(messageEntity.getTime())); + List images; + switch (messageEntity.getType()) { + case "answer": + mBinding.messageCommand.setText("回答了我的问题"); + mBinding.messageContent.setVisibility(View.VISIBLE); + mBinding.messageContent.setText(messageEntity.getAnswer().getContent()); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images != null && images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "reply": + mBinding.messageCommand.setText("回复了我"); + mBinding.messageContent.setVisibility(View.VISIBLE); + mBinding.messageContent.setText(messageEntity.getComment().getContent()); + mBinding.messageOriginalTitle.setText(messageEntity.getArticle().getTitle()); + mBinding.messageOriginalIcon.setImageURI(messageEntity.getArticle().getThumb()); + break; + case "follow_question": + mBinding.messageCommand.setText("回答了我关注的问题"); + mBinding.messageContent.setVisibility(View.VISIBLE); + mBinding.messageContent.setText(messageEntity.getAnswer().getContent()); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "reply_answer_comment": + mBinding.messageCommand.setText("回复了我"); + mBinding.messageContent.setVisibility(View.VISIBLE); + mBinding.messageContent.setText(messageEntity.getDialogue().getTo().getContent()); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "answer_comment": + mBinding.messageCommand.setText("评论了我"); + mBinding.messageContent.setVisibility(View.VISIBLE); + mBinding.messageContent.setText(messageEntity.getComment().getContent()); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "answer_vote": + mBinding.messageCommand.setText("赞同了我的回答"); + mBinding.messageContent.setVisibility(View.GONE); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "comment_vote": + mBinding.messageCommand.setText("赞了我"); + mBinding.messageContent.setVisibility(View.GONE); + mBinding.messageOriginalTitle.setText(messageEntity.getArticle().getTitle()); + mBinding.messageOriginalIcon.setImageURI(messageEntity.getArticle().getThumb()); + break; + case "answer_comment_vote": + mBinding.messageCommand.setText("赞了我"); + mBinding.messageContent.setVisibility(View.GONE); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getAnswer().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + case "invited": + mBinding.messageCommand.setText("邀请我回答"); + mBinding.messageContent.setVisibility(View.GONE); + mBinding.messageOriginalTitle.setText(messageEntity.getQuestion().getTitle()); + images = messageEntity.getQuestion().getImages(); + if (images.size() > 0) + mBinding.messageOriginalIcon.setImageURI(images.get(0)); + break; + } } } diff --git a/app/src/main/java/com/gh/gamecenter/message/NewMessageTopViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/NewMessageTopViewHolder.java index 9e83e2fc27..7713188424 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NewMessageTopViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/message/NewMessageTopViewHolder.java @@ -1,29 +1,21 @@ package com.gh.gamecenter.message; -import android.view.View; - import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; -import com.gh.gamecenter.R; - -import butterknife.BindView; +import com.gh.gamecenter.databinding.MessageItemTopBinding; /** * Created by khy on 24/03/18. */ public class NewMessageTopViewHolder extends BaseRecyclerViewHolder { - @BindView(R.id.message_vote) - View mMessageVote; - @BindView(R.id.message_invite) - View mMessageInvite; - @BindView(R.id.message_service) - View mMessageService; + MessageItemTopBinding mBinding; - public NewMessageTopViewHolder(View itemView, OnListClickListener listClickListener) { - super(itemView, listClickListener); - mMessageInvite.setOnClickListener(this); - mMessageService.setOnClickListener(this); - mMessageVote.setOnClickListener(this); + public NewMessageTopViewHolder(MessageItemTopBinding binding, OnListClickListener listClickListener) { + super(binding.getRoot(), listClickListener); + mBinding = binding; + mBinding.messageInvite.setOnClickListener(this); + mBinding.messageService.setOnClickListener(this); + mBinding.messageVote.setOnClickListener(this); } } 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 c9ef56f34b..dc7ea35bca 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -3,7 +3,6 @@ package com.gh.gamecenter.personal; import android.arch.lifecycle.Lifecycle; import android.arch.lifecycle.Observer; import android.arch.lifecycle.ViewModelProviders; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -26,6 +25,7 @@ import com.gh.gamecenter.CollectionActivity; import com.gh.gamecenter.DataUtils; import com.gh.gamecenter.InstallActivity; import com.gh.gamecenter.LoginActivity; +import com.gh.gamecenter.MessageActivity; import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SettingActivity; @@ -36,7 +36,6 @@ import com.gh.gamecenter.UserInfoActivity; import com.gh.gamecenter.ask.myask.MyAskWrapperFragment; import com.gh.gamecenter.entity.AppEntity; import com.gh.gamecenter.entity.LoginTokenEntity; -import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.entity.UserInfoEntity; import com.gh.gamecenter.eventbus.EBConcernChanged; import com.gh.gamecenter.eventbus.EBNetworkState; @@ -45,7 +44,7 @@ import com.gh.gamecenter.login.ApiResponse; import com.gh.gamecenter.login.LoginTag; import com.gh.gamecenter.login.UserViewModel; import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.message.NewMessageFragment; +import com.gh.gamecenter.message.MessageUnreadViewModel; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.halo.assistant.HaloApp; @@ -59,12 +58,9 @@ import org.json.JSONObject; import butterknife.BindView; import butterknife.OnClick; -import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; -import static com.gh.gamecenter.message.MessageCenterFragment.MESSAGE_READ_OVER; - /** * @author 温冠超 * 294299195@qq.com @@ -118,6 +114,8 @@ public class PersonalFragment extends BaseFragment implements Observer { + if (messageUnread != null && messageUnread.getTotal() > 0) { + mLoginMessageHint.setVisibility(View.VISIBLE); + EventBus.getDefault().post(new EBReuse(MESSAGE_UNREAD_TAG)); + } else { + mLoginMessageHint.setVisibility(View.GONE); + EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); + } + }); + } @@ -208,8 +222,7 @@ public class PersonalFragment extends BaseFragment implements Observer() { - @Override - public void onResponse(MessageUnreadEntity response) { - super.onResponse(response); - if (response.getKefu() > 0) { - mLoginMessageHint.setVisibility(View.VISIBLE); - } - - if (response.getComment() > 0) { - mLoginMessageHint.setVisibility(View.VISIBLE); - } - - if (mLoginMessageHint.getVisibility() == View.VISIBLE) { - EventBus.getDefault().post(new EBReuse(MESSAGE_UNREAD_TAG)); - } - } - - @Override - public void onFailure(HttpException e) { - - } - }); - } private void changeLoginState(boolean isLogin) { if (isLogin) { @@ -364,7 +347,7 @@ public class PersonalFragment extends BaseFragment implements Observer> getMessageKeFuData(@Query("offset") int offset, @Query("limit") int limit); + Observable> getMessageKeFuData(@Query("offset") int offset); /** * 获取消息未读数据 */ - @GET("messages:unread_count") - Observable getMessageUnread(); // todo GET /messages:unread_count 和 GET /private_messages:unread_count + @GET + Observable getMessageUnread(@Url String url); /** * 确认接收客服消息 @@ -672,6 +672,9 @@ public interface ApiService { // @POST("message/user/comment/confirm/read") // Observable postMarkCommentRead(); + @GET("messages") + Observable> getMessage(@Query("view") String type, @Query("offset") int offset); + /****** 问答(社区相关) *******/ diff --git a/app/src/main/res/layout/message_item.xml b/app/src/main/res/layout/message_item.xml index 2f426d70ec..4c7603ebfb 100644 --- a/app/src/main/res/layout/message_item.xml +++ b/app/src/main/res/layout/message_item.xml @@ -1,5 +1,4 @@ - @@ -11,6 +10,7 @@ @@ -90,7 +88,8 @@ android:layout_marginLeft = "10dp" android:layout_marginRight = "10dp" android:layout_toRightOf = "@id/message_original_icon" - android:text = "@{messageEntity.userEntity.icon}" + android:ellipsize = "end" + android:maxLines = "3" android:textColor = "@color/title" android:textSize = "11sp" /> @@ -102,7 +101,6 @@ android:layout_height = "wrap_content" android:layout_marginLeft = "15dp" android:layout_marginTop = "12dp" - android:text = "@{messageEntity.type}" android:textColor = "@color/black" android:textSize = "11sp" app:layout_constraintLeft_toRightOf = "@id/message_user_icon" diff --git a/app/src/main/res/layout/message_item_top.xml b/app/src/main/res/layout/message_item_top.xml index 0241806afb..fbd7421be8 100644 --- a/app/src/main/res/layout/message_item_top.xml +++ b/app/src/main/res/layout/message_item_top.xml @@ -1,180 +1,197 @@ - + - + - - - - - + + - - + - + - + - + - + - - + + - + - + - + - + - - - \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/message_kefu_item.xml b/app/src/main/res/layout/message_kefu_item.xml index 6d80c1dd00..d98f53a513 100644 --- a/app/src/main/res/layout/message_kefu_item.xml +++ b/app/src/main/res/layout/message_kefu_item.xml @@ -46,7 +46,7 @@ android:layout_height = "10dp" android:layout_alignParentRight = "true" android:background = "@drawable/oval_message_hint_bg" - android:visibility = "visible" /> + android:visibility = "gone" />