PageRenderTime 921ms CodeModel.GetById 68ms RepoModel.GetById 11ms app.codeStats 0ms

/dateLoveInternational/src/main/java/com/datelove/online/International/fragment/MessageFragment.java

https://bitbucket.org/juzhiwiscom/datelove
Java | 449 lines | 309 code | 48 blank | 92 comment | 38 complexity | 9df857a3c20527e01b73c9abb2656ba1 MD5 | raw file
  1. package com.datelove.online.International.fragment;
  2. import android.content.Intent;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.support.v4.widget.SwipeRefreshLayout;
  7. import android.support.v7.widget.LinearLayoutManager;
  8. import android.text.TextUtils;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.view.animation.Animation;
  13. import android.view.animation.AnimationUtils;
  14. import android.widget.FrameLayout;
  15. import android.widget.ImageView;
  16. import android.widget.RelativeLayout;
  17. import android.widget.TextView;
  18. import com.alibaba.fastjson.JSON;
  19. import com.datelove.online.International.R;
  20. import com.datelove.online.International.activity.MutualLikeActivity;
  21. import com.datelove.online.International.adapter.MessageAdapter;
  22. import com.datelove.online.International.base.BaseTitleFragment;
  23. import com.datelove.online.International.bean.ChatInfo;
  24. import com.datelove.online.International.constant.IUrlConstant;
  25. import com.datelove.online.International.event.MessageChangedEvent;
  26. import com.datelove.online.International.event.UpdateMessageCountEvent;
  27. import com.datelove.online.International.utils.Utils;
  28. import com.datelove.online.International.xml.PlatformInfoXml;
  29. import com.datelove.online.International.xml.UserInfoXml;
  30. import com.library.utils.SharedPreferenceUtil;
  31. import com.library.widgets.RefreshRecyclerView;
  32. import com.zhy.http.okhttp.OkHttpUtils;
  33. import com.zhy.http.okhttp.callback.Callback;
  34. import org.greenrobot.eventbus.EventBus;
  35. import org.greenrobot.eventbus.Subscribe;
  36. import butterknife.BindView;
  37. import butterknife.ButterKnife;
  38. import okhttp3.Call;
  39. import okhttp3.Response;
  40. /**
  41. * 信箱
  42. */
  43. public class MessageFragment extends BaseTitleFragment {
  44. @BindView(R.id.message_recyclerview)
  45. RefreshRecyclerView mRefreshRecyclerView;
  46. @BindView(R.id.tv_loading)
  47. TextView tvLoading;
  48. @BindView(R.id.fl_loading)
  49. FrameLayout flLoading;
  50. @BindView(R.id.iv_loading_heart)
  51. ImageView ivLoadingHeart;
  52. @BindView(R.id.rl_match)
  53. RelativeLayout rlMatch;
  54. private MessageAdapter mMessageAdapter;
  55. private int pageNum = 1;
  56. private final String pageSize = "30";
  57. private int mTotalUnreadMsgCnt;
  58. private int i = 0;
  59. private Handler handler = new Handler();
  60. private Runnable runnable = new Runnable() {
  61. public void run() {
  62. this.update();
  63. // handler.postDelayed(this, 1000*10);// 间隔1秒
  64. }
  65. void update() {
  66. //刷新msg的内容
  67. loadMessageList();
  68. }
  69. };
  70. private boolean isMember = false;
  71. private boolean pageNumIs1;
  72. /**
  73. * 停止刷新
  74. **/
  75. public void stopRefish() {
  76. handler.removeCallbacks(runnable); //停止刷新
  77. }
  78. /**
  79. * 一进入此界面开始首次刷新
  80. **/
  81. public void startFirstRefish() {
  82. handler.postDelayed(runnable, 100); //开始刷新
  83. }
  84. /**
  85. * 开始刷新
  86. **/
  87. public void startRefish() {
  88. handler.postDelayed(runnable, 1000 * 10); //开始刷新
  89. }
  90. @Override
  91. protected int getLayoutResId() {
  92. return R.layout.fragment_message;
  93. }
  94. @Override
  95. protected void initViewsAndVariables() {
  96. setTitle(getString(R.string.tab_mail));
  97. // 设置下拉刷新样式
  98. mRefreshRecyclerView.setColorSchemeResources(R.color.lucency_color);
  99. mRefreshRecyclerView.setProgressBackgroundColorSchemeColor(Color.alpha(0));
  100. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
  101. linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  102. mRefreshRecyclerView.setLayoutManager(linearLayoutManager);
  103. // 设置加载动画
  104. mRefreshRecyclerView.setLoadingView(Utils.getLoadingView(getActivity()));
  105. mMessageAdapter = new MessageAdapter(getActivity(), R.layout.item_fragment_message);
  106. mRefreshRecyclerView.setAdapter(mMessageAdapter);
  107. loadMessageList();
  108. }
  109. @Override
  110. protected void addListeners() {
  111. // 下拉刷新
  112. mRefreshRecyclerView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  113. @Override
  114. public void onRefresh() {
  115. i++;
  116. if (i == 1) {
  117. flLoading.setVisibility(View.INVISIBLE);
  118. Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_show_loading);
  119. ivLoadingHeart.startAnimation(hyperspaceJumpAnimation);
  120. } else {
  121. flLoading.setVisibility(View.VISIBLE);
  122. tvLoading.setVisibility(View.VISIBLE);
  123. Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_show_loading);
  124. ivLoadingHeart.startAnimation(hyperspaceJumpAnimation);
  125. }
  126. refreshChatMsg();
  127. }
  128. });
  129. // 上拉加载更多
  130. mRefreshRecyclerView.setOnLoadingMoreListener(new RefreshRecyclerView.OnLoadingMoreListener() {
  131. @Override
  132. public void onLoadMore() {
  133. flLoading.setVisibility(View.VISIBLE);
  134. tvLoading.setVisibility(View.VISIBLE);
  135. Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_show_loading);
  136. ivLoadingHeart.startAnimation(hyperspaceJumpAnimation);
  137. pageNum++;
  138. loadMessageList();
  139. }
  140. }, getActivity(), true);
  141. // 跳转到互相喜欢的界面(和最近访客共用一个类)
  142. rlMatch.setOnClickListener(new View.OnClickListener() {
  143. @Override
  144. public void onClick(View view) {
  145. Intent intent = new Intent(getActivity(), MutualLikeActivity.class);
  146. startActivity(intent);
  147. }
  148. });
  149. ///**对触摸事件的监听,根据手指动作判断要不要进行自动刷新**/
  150. // mRefreshRecyclerView.setIsTouchListener(new RefreshRecyclerView.StopRefishListener() {
  151. // @Override
  152. // public void isTouch(boolean istouch) {
  153. // if(istouch){
  154. // stopRefish();
  155. // }else {
  156. // startRefish();
  157. // }
  158. // }
  159. // });
  160. // mMessageAdapter.setOnItemClickListener(new CommonRecyclerViewAdapter.OnItemClickListener() {
  161. // @Override
  162. // public void onItemClick(View view, int position, RecyclerViewHolder viewHolder) {
  163. // Chat chat = mMessageAdapter.getItemByPosition(position);
  164. // if (chat != null) {
  165. // ChatMsg chatMsg = chat.getChat();
  166. // if (chatMsg != null) {
  167. // int unreadMsgCnt = chatMsg.getUnreadCount();
  168. // if (unreadMsgCnt > 0) {// 标记未读消息为已读
  169. //// chatMsg.setUnreadCount(0);
  170. // chat.setChat(chatMsg);
  171. // mMessageAdapter.updateItem(position, chat);
  172. // // 更新总的未读消息数
  173. //// mTotalUnreadMsgCnt = mTotalUnreadMsgCnt - unreadMsgCnt;
  174. // EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  175. // }
  176. // }
  177. // UserBase userBase = chat.getUserBaseEnglish();
  178. // if (userBase != null) {
  179. // Image image = userBase.getImage();
  180. // String imgUrl = "";
  181. // if (image != null) {
  182. // imgUrl = image.getThumbnailUrl();
  183. // }
  184. //// Intent intent = new Intent(getActivity(), InterceptDialogActivity.class);
  185. //// getActivity().startActivity(intent);
  186. //
  187. //
  188. // ChatActivity.toChatActivity(getActivity(), userBase.getId(), userBase.getNickName(), imgUrl);
  189. // }
  190. // }
  191. // }
  192. // });
  193. }
  194. private void refreshChatMsg() {
  195. pageNum = 1;
  196. loadMessageList();
  197. }
  198. /**
  199. * 加载聊天消息列表
  200. */
  201. private void loadMessageList() {
  202. // 防止多次请求,pageNum=1时还没请求就变成了其他数字
  203. if (pageNum == 1) {
  204. OkHttpUtils.post()
  205. .url(IUrlConstant.URL_GET_ALL_CHAT_LIST)
  206. .addHeader("token", PlatformInfoXml.getToken())
  207. .addParams("platformInfo", PlatformInfoXml.getPlatformJsonString())
  208. .addParams("pageNum", String.valueOf(1))
  209. .addParams("pageSize", pageSize)
  210. .build()
  211. .execute(new Callback<ChatInfo>() {
  212. @Override
  213. public ChatInfo parseNetworkResponse(Response response, int id) throws Exception {
  214. String resultJson = response.body().string();
  215. if (!TextUtils.isEmpty(resultJson)) {
  216. return JSON.parseObject(resultJson, ChatInfo.class);
  217. }
  218. return null;
  219. }
  220. @Override
  221. public void onError(Call call, Exception e, int id) {
  222. stopRefresh(3);
  223. new Handler().postDelayed(new Runnable() {
  224. @Override
  225. public void run() {
  226. flLoading.setVisibility(View.GONE);
  227. tvLoading.setVisibility(View.GONE);
  228. }
  229. }, 1000);
  230. }
  231. @Override
  232. public void onResponse(final ChatInfo response, int id) {
  233. if (response != null) {
  234. // mTotalUnreadMsgCnt = response.getTotalUnread();
  235. //非会员显示的未读消息数量
  236. mTotalUnreadMsgCnt = response.getTotalUnread24H();
  237. String showWriteMsgIntercept = response.getShowWriteMsgIntercept();
  238. if (!TextUtils.isEmpty(showWriteMsgIntercept) && showWriteMsgIntercept.equals("2")) {
  239. /**设置信息照片等不拦截**/
  240. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", false);
  241. //会员显示的未读消息数量
  242. mTotalUnreadMsgCnt = response.getTotalUnread();
  243. } else {
  244. if (UserInfoXml.isMale()) {
  245. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", true);
  246. // String totalUnread24H = response.getTotalUnread24H();
  247. } else {
  248. // 女用户显示的未读消息数量
  249. mTotalUnreadMsgCnt = response.getTotalUnread();
  250. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", false);
  251. }
  252. }
  253. EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  254. // 延时0.5秒显示
  255. new Handler().postDelayed(new Runnable() {
  256. @Override
  257. public void run() {
  258. if (mMessageAdapter != null) {
  259. mMessageAdapter.setServerSystemTime(response.getSystemTime());
  260. mMessageAdapter.replaceAll(response.getListChat());
  261. }
  262. }
  263. }, 500);
  264. }
  265. stopRefresh(1);
  266. new Handler().postDelayed(new Runnable() {
  267. @Override
  268. public void run() {
  269. if (flLoading == null || flLoading.getVisibility() == View.GONE) {
  270. } else {
  271. flLoading.setVisibility(View.GONE);
  272. tvLoading.setVisibility(View.GONE);
  273. }
  274. }
  275. }, 1000);
  276. }
  277. });
  278. } else {
  279. OkHttpUtils.post()
  280. .url(IUrlConstant.URL_GET_ALL_CHAT_LIST)
  281. .addHeader("token", PlatformInfoXml.getToken())
  282. .addParams("platformInfo", PlatformInfoXml.getPlatformJsonString())
  283. .addParams("pageNum", String.valueOf(pageNum))
  284. .addParams("pageSize", pageSize)
  285. .build()
  286. .execute(new Callback<ChatInfo>() {
  287. @Override
  288. public ChatInfo parseNetworkResponse(Response response, int id) throws Exception {
  289. String resultJson = response.body().string();
  290. if (!TextUtils.isEmpty(resultJson)) {
  291. return JSON.parseObject(resultJson, ChatInfo.class);
  292. }
  293. return null;
  294. }
  295. @Override
  296. public void onError(Call call, Exception e, int id) {
  297. stopRefresh(3);
  298. new Handler().postDelayed(new Runnable() {
  299. @Override
  300. public void run() {
  301. flLoading.setVisibility(View.GONE);
  302. tvLoading.setVisibility(View.GONE);
  303. }
  304. }, 1000);
  305. }
  306. @Override
  307. public void onResponse(final ChatInfo response, int id) {
  308. if (response != null) {
  309. // mTotalUnreadMsgCnt = response.getTotalUnread();
  310. //非会员显示的未读消息数量
  311. mTotalUnreadMsgCnt = response.getTotalUnread24H();
  312. String showWriteMsgIntercept = response.getShowWriteMsgIntercept();
  313. if (!TextUtils.isEmpty(showWriteMsgIntercept) && showWriteMsgIntercept.equals("2")) {
  314. /**设置信息照片等不拦截**/
  315. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", false);
  316. //会员显示的未读消息数量
  317. mTotalUnreadMsgCnt = response.getTotalUnread();
  318. } else {
  319. if (UserInfoXml.isMale()) {
  320. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", true);
  321. // String totalUnread24H = response.getTotalUnread24H();
  322. } else {
  323. // 女用户显示的未读消息数量
  324. mTotalUnreadMsgCnt = response.getTotalUnread();
  325. SharedPreferenceUtil.setBooleanValue(Utils.getContext(), "INTERCEPT_DIALOG", "DIALOG", false);
  326. }
  327. }
  328. EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  329. // 延时0.5秒显示
  330. new Handler().postDelayed(new Runnable() {
  331. @Override
  332. public void run() {
  333. if (mMessageAdapter != null) {
  334. mMessageAdapter.setServerSystemTime(response.getSystemTime());
  335. // if (pageNum == 1 || pageNumIs1) {
  336. // pageNumIs1=false;
  337. // mMessageAdapter.replaceAll(response.getListChat());
  338. // } else {
  339. mMessageAdapter.appendToList(response.getListChat());
  340. // }
  341. // int totalUnRead=0;
  342. // for(int i=0;i<response.getListChat().size();i++){
  343. // totalUnRead=totalUnRead+response.getListChat().get(i).getChat().getUnreadCount();
  344. // }
  345. // EventBus.getDefault().post(new UpdateMessageCountEvent(totalUnRead));
  346. }
  347. }
  348. }, 500);
  349. }
  350. stopRefresh(1);
  351. new Handler().postDelayed(new Runnable() {
  352. @Override
  353. public void run() {
  354. if (flLoading == null || flLoading.getVisibility() == View.GONE) {
  355. } else {
  356. flLoading.setVisibility(View.GONE);
  357. tvLoading.setVisibility(View.GONE);
  358. }
  359. }
  360. }, 1000);
  361. }
  362. });
  363. }
  364. }
  365. private void stopRefresh(int secs) {
  366. if (mRefreshRecyclerView != null) {
  367. mRefreshRecyclerView.refreshCompleted(secs);
  368. mRefreshRecyclerView.loadMoreCompleted(secs);
  369. }
  370. }
  371. @Override
  372. protected void doRegister() {
  373. super.doRegister();
  374. EventBus.getDefault().register(this);
  375. }
  376. @Override
  377. protected void unregister() {
  378. super.unregister();
  379. EventBus.getDefault().unregister(this);
  380. }
  381. @Override
  382. public void onPause() {
  383. super.onPause();
  384. }
  385. @Subscribe
  386. public void onEvent(MessageChangedEvent event) {
  387. refreshChatMsg();
  388. }
  389. @Override
  390. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  391. // TODO: inflate a fragment view
  392. View rootView = super.onCreateView(inflater, container, savedInstanceState);
  393. unbinder = ButterKnife.bind(this, rootView);
  394. return rootView;
  395. }
  396. @Override
  397. public void onDestroyView() {
  398. super.onDestroyView();
  399. unbinder.unbind();
  400. }
  401. }