Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.98 KB | None | 0 0
  1.  
  2. /**
  3. * A simple {@link Fragment} subclass.
  4. */
  5. public class MessageFragment extends ItemAbs implements IMessageView, ISocketConnectionListener, View.OnClickListener, IMessageRead, View.OnLayoutChangeListener, RecyclerView.OnItemTouchListener {
  6. @BindView(R.id.rv_messages)
  7. RecyclerView rvMessages;
  8. @BindView(R.id.et_message_fragment)
  9. EditText etMessageTextToChat;
  10. @BindView(R.id.iv_message_fragment)
  11. ImageView ivSendMessageToChat;
  12. @BindView(R.id.iv_attach_message_fragment)
  13. ImageView ivAttachToChat;
  14. @BindView(R.id.pb_load_messages)
  15. ProgressBar pbLoadMessages;
  16.  
  17. private boolean needCancelNotification = true;
  18. private boolean isNeedUpTo = true;
  19. private EndlessRecyclerViewScrollListener scrollListener;
  20. MessagePresenter presenter;
  21. MessageChatAdapter messageChatAdapter;
  22. LinearLayoutManager manager;
  23. private int lastVisibleListPosition = 0;
  24. private boolean messageFromCache = false;
  25. private int offsetCount;
  26.  
  27.  
  28.  
  29. public static MessageFragment newInstance(String itemCategory){
  30. MessageFragment f = new MessageFragment();
  31. Bundle bundle = new Bundle();
  32. bundle.putString("ItemCategory", itemCategory);
  33. f.setArguments(bundle);
  34.  
  35. return f;
  36. }
  37.  
  38. public static MessageFragment newInstance(String itemCategory, String chatID, int unreadCount){
  39. MessageFragment f = new MessageFragment();
  40. Bundle bundle = new Bundle();
  41. bundle.putString("ItemCategory", itemCategory);
  42. bundle.putString("ChatID", chatID);
  43. bundle.putInt("unreadCount", unreadCount);
  44. f.setArguments(bundle);
  45.  
  46. return f;
  47. }
  48.  
  49. public static MessageFragment newInstance(String itemCategory, String chatID){
  50. MessageFragment f = new MessageFragment();
  51. Bundle bundle = new Bundle();
  52. bundle.putString("ItemCategory", itemCategory);
  53. bundle.putString("ChatID", chatID);
  54. f.setArguments(bundle);
  55.  
  56. return f;
  57. }
  58.  
  59. @Override
  60. protected int getResourceID() {
  61. return R.layout.fragment_message;
  62. }
  63.  
  64. @Override
  65. protected void onCreateView(View view) {
  66.  
  67.  
  68.  
  69. ivSendMessageToChat.setOnClickListener(this);
  70. ivAttachToChat.setOnClickListener(this);
  71. rvMessages.addOnItemTouchListener(this);
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. ((OnChangeViewPosition)getActivity()).onChangeToolbarSetting(getCategory(), true);
  79.  
  80. if (!messageFromCache) {
  81. manager = new LinearLayoutManager(getActivity());
  82. manager.setStackFromEnd(true);
  83. manager.setReverseLayout(true);
  84. manager.scrollToPositionWithOffset(1, 0);
  85. rvMessages.setLayoutManager(manager);
  86. rvMessages.addOnLayoutChangeListener(this);
  87.  
  88. scrollListener = new EndlessRecyclerViewScrollListener(manager) {
  89. @Override
  90. public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
  91. Log.d("TAG", "onLoadMore: page= " + page + " totalItemCount= " + totalItemsCount);
  92. int offset = 30 * page;
  93. int limit = 30;
  94. presenter.loadMore(offset, limit);
  95. }
  96. };
  97.  
  98. rvMessages.addOnScrollListener(scrollListener);
  99. messageChatAdapter = new MessageChatAdapter(getActivity(), this);
  100. rvMessages.setAdapter(messageChatAdapter);
  101. cancelNotificationByChatId(getIDbyChatID());
  102. presenter = new MessagePresenter(this);
  103. presenter.loadMore(0, 30);
  104. }
  105. }
  106.  
  107.  
  108.  
  109.  
  110. private int getIDbyChatID() {
  111. if (getChatID() != null) {
  112. String idd = getChatID().substring(2);
  113. Long l = LongUtils.parseUnsignedLong(idd, 16);
  114. return (l).intValue();
  115. }
  116. else return 0;
  117. }
  118.  
  119. public String getCategory()
  120. {
  121. return getArguments().getString("ItemCategory", null);
  122. }
  123.  
  124. public String getChatID()
  125. {
  126. return getArguments().getString("ChatID", null);
  127. }
  128.  
  129. @Override
  130. public void showProgressBar() {
  131. pbLoadMessages.setVisibility(View.VISIBLE);
  132. }
  133.  
  134. @Override
  135. public void stopProgress() {
  136. if (pbLoadMessages.getVisibility() == View.VISIBLE)
  137. pbLoadMessages.setVisibility(View.INVISIBLE);
  138. }
  139.  
  140.  
  141. @Override
  142. public void onDestroy() {
  143. Log.d("TAG", "MF onDestroyView: ");
  144. super.onDestroy();
  145. }
  146.  
  147. public int getUnreadCount()
  148. {
  149. return getArguments().getInt("unreadCount", 0);
  150. }
  151.  
  152.  
  153.  
  154.  
  155. @Override
  156. public void onClick(View view) {
  157. if (view == ivSendMessageToChat) {
  158. Log.d("TAG", "Clickk");
  159.  
  160. if (!etMessageTextToChat.getText().toString().isEmpty()) {
  161. presenter.sendMessage(getChatID(), etMessageTextToChat.getText().toString());
  162. etMessageTextToChat.setText("");
  163. }
  164. }
  165. if (view == ivAttachToChat)
  166. {
  167. Log.d("TAG", "onClick: ivAttachToChat" );
  168. }
  169. }
  170.  
  171.  
  172. @Override
  173. public void onMessageRead(String messageID) {
  174. presenter.sendMessageRead(messageID, getChatID());
  175. }
  176.  
  177. //поднимать ссобщение в чате до последнего
  178. @Override
  179. public void onMessageCountChange() {
  180. Log.d("TAG", "addOrUpdateMessage: add 2 " + messageChatAdapter.getItemCount() );
  181.  
  182. cancelNotificationByChatId(getIDbyChatID());
  183. // rvMessages.getLayoutManager().scrollToPosition(0);
  184. rvMessages.scrollToPosition(0);
  185. }
  186.  
  187. @Override
  188. public void cancelFocus() {
  189. new Handler(Looper.getMainLooper()).post(new Runnable() {
  190. @Override
  191. public void run() {
  192. if (etMessageTextToChat.isFocused()) {
  193. etMessageTextToChat.clearFocus();
  194. InputMethodManager imm = (InputMethodManager) getActivity()
  195. .getSystemService(Context.INPUT_METHOD_SERVICE);
  196. imm.hideSoftInputFromWindow(etMessageTextToChat.getWindowToken(), 0);
  197.  
  198. }
  199.  
  200. }
  201. });
  202. }
  203.  
  204. @Override
  205. public void setImagePreviewPosition(int adapterPosition) {
  206. Log.d("TAG", "XXX onStop: adapterPosition " + adapterPosition);
  207. lastVisibleListPosition = adapterPosition;
  208. }
  209.  
  210. @Override
  211. public void snowChat(final ArrayList<MessageModel> model, String token, int upToMessage) {
  212. new Handler(Looper.getMainLooper()).post(new Runnable() {
  213.  
  214.  
  215. @Override
  216. public void run() {
  217.  
  218. messageChatAdapter.setToken(token);
  219. messageChatAdapter.update(model, getUnreadCount());
  220. stopProgress();
  221.  
  222.  
  223. //LinearLayoutManager mlayoutManager = (LinearLayoutManager) rvMessages.getLayoutManager();
  224. //mlayoutManager.scrollToPositionWithOffset(messageChatAdapter.getItemCount(), 0);
  225. rvMessages.scrollToPosition(messageChatAdapter.getItemCount());
  226. if (isNeedUpTo) {
  227. Log.d("TAG", "XXX onStop: upTo X");
  228. rvMessages.scrollToPosition(upToMessage);
  229. isNeedUpTo = false;
  230. }
  231. if (messageFromCache) {
  232. Log.d("TAG", "XXX onStop: mesFromC " + lastVisibleListPosition);
  233. // rvMessages.getLayoutManager().scrollToPosition(lastVisibleListPosition);
  234. rvMessages.scrollToPosition(lastVisibleListPosition);
  235. messageFromCache = false;
  236. }
  237. Log.d("TAG", "onResume: " + messageChatAdapter.getItemCount() );
  238.  
  239. }
  240. });
  241.  
  242. }
  243.  
  244. @Override
  245. public void onDestroyView() {
  246. Log.d("TAG", "MF onDestroyView: ");
  247. super.onDestroyView();
  248.  
  249. }
  250.  
  251. @Override
  252. public void showMessage(MessageModel messageModel) {
  253. new Handler(Looper.getMainLooper()).post(new Runnable() {
  254. @Override
  255. public void run() {
  256. Log.d("TAG", "XXX F showMessage" + messageModel.getMessageText());
  257.  
  258. messageChatAdapter.addOrUpdateMessage(messageModel);
  259. cancelNotificationByChatId(getIDbyChatID());
  260.  
  261.  
  262. }
  263. });
  264. }
  265. ///////////////////////////////////////////////////////////
  266. //вхдящие типа mark_read, chat_messages, send_message_by_chat
  267.  
  268. @Override
  269. public void onMessageReceived(String text) {
  270. Log.d("TAG", "BAG onMessageReceived: " + text);
  271. presenter.getMessage(text);
  272. }
  273.  
  274. @Override
  275. public void onConnect() {
  276. }
  277.  
  278.  
  279. @Override
  280. public void onResume() {
  281. super.onResume();
  282. needCancelNotification = true;
  283.  
  284. messageChatAdapter.notifyDataSetChanged();
  285. /*if (messageFromCache) {
  286. Log.d("TAG", "onResume: offsetCount " + offsetCount);
  287. presenter.getMesssagesFromCache(getChatID(), offsetCount*30 );
  288.  
  289. //presenter.getUpdateData(getChatID(), "");
  290. }*/
  291. }
  292.  
  293. @Override
  294. public void onConnectError(String text) {
  295. new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show());
  296.  
  297. }
  298.  
  299. @Override
  300. public void onPause() {
  301. super.onPause();
  302. Log.d("TAG", "MF onPause: ");
  303. }
  304.  
  305. @Override
  306. public void onStop() {
  307. needCancelNotification = false;
  308. messageFromCache = true;
  309. offsetCount = (int) messageChatAdapter.getItemCount() / 30;
  310.  
  311. super.onStop();
  312.  
  313.  
  314. }
  315.  
  316.  
  317. //eсли клавиатура появляется в чате, чтобы поднять последнее сообщение в чате над клавитурой
  318. @Override
  319. public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom){
  320. Log.d("TAG", "onLayoutChange: " + left +" " + top + " " + right + " " + bottom);
  321. if ( bottom < oldBottom) {
  322. rvMessages.postDelayed(new Runnable() {
  323. @Override
  324. public void run() {
  325. rvMessages.scrollToPosition(0);
  326. etMessageTextToChat.requestFocus();
  327.  
  328. }
  329. }, 50);
  330. }
  331. }
  332.  
  333. //убирать клавиатуру и фокус с эдит текста
  334. @Override
  335. public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
  336. //Log.d("TAG", "onInterceptTouchEvent: ");
  337. cancelFocus();
  338. return false;
  339. }
  340.  
  341.  
  342.  
  343.  
  344.  
  345. //non use
  346. @Override
  347. public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
  348. Log.d("TAG", "onRequestDisallowInterceptTouchEvent: ");
  349. }
  350. //non use
  351. @Override
  352. public void onTouchEvent(RecyclerView rv, MotionEvent e) {
  353.  
  354. Log.d("TAG", "onTouchEvent2: ");
  355. }
  356. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement