Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * A simple {@link Fragment} subclass.
- */
- public class MessageFragment extends ItemAbs implements IMessageView, ISocketConnectionListener, View.OnClickListener, IMessageRead, View.OnLayoutChangeListener, RecyclerView.OnItemTouchListener {
- @BindView(R.id.rv_messages)
- RecyclerView rvMessages;
- @BindView(R.id.et_message_fragment)
- EditText etMessageTextToChat;
- @BindView(R.id.iv_message_fragment)
- ImageView ivSendMessageToChat;
- @BindView(R.id.iv_attach_message_fragment)
- ImageView ivAttachToChat;
- @BindView(R.id.pb_load_messages)
- ProgressBar pbLoadMessages;
- private boolean needCancelNotification = true;
- private boolean isNeedUpTo = true;
- private EndlessRecyclerViewScrollListener scrollListener;
- MessagePresenter presenter;
- MessageChatAdapter messageChatAdapter;
- LinearLayoutManager manager;
- private int lastVisibleListPosition = 0;
- private boolean messageFromCache = false;
- private int offsetCount;
- public static MessageFragment newInstance(String itemCategory){
- MessageFragment f = new MessageFragment();
- Bundle bundle = new Bundle();
- bundle.putString("ItemCategory", itemCategory);
- f.setArguments(bundle);
- return f;
- }
- public static MessageFragment newInstance(String itemCategory, String chatID, int unreadCount){
- MessageFragment f = new MessageFragment();
- Bundle bundle = new Bundle();
- bundle.putString("ItemCategory", itemCategory);
- bundle.putString("ChatID", chatID);
- bundle.putInt("unreadCount", unreadCount);
- f.setArguments(bundle);
- return f;
- }
- public static MessageFragment newInstance(String itemCategory, String chatID){
- MessageFragment f = new MessageFragment();
- Bundle bundle = new Bundle();
- bundle.putString("ItemCategory", itemCategory);
- bundle.putString("ChatID", chatID);
- f.setArguments(bundle);
- return f;
- }
- @Override
- protected int getResourceID() {
- return R.layout.fragment_message;
- }
- @Override
- protected void onCreateView(View view) {
- ivSendMessageToChat.setOnClickListener(this);
- ivAttachToChat.setOnClickListener(this);
- rvMessages.addOnItemTouchListener(this);
- ((OnChangeViewPosition)getActivity()).onChangeToolbarSetting(getCategory(), true);
- if (!messageFromCache) {
- manager = new LinearLayoutManager(getActivity());
- manager.setStackFromEnd(true);
- manager.setReverseLayout(true);
- manager.scrollToPositionWithOffset(1, 0);
- rvMessages.setLayoutManager(manager);
- rvMessages.addOnLayoutChangeListener(this);
- scrollListener = new EndlessRecyclerViewScrollListener(manager) {
- @Override
- public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
- Log.d("TAG", "onLoadMore: page= " + page + " totalItemCount= " + totalItemsCount);
- int offset = 30 * page;
- int limit = 30;
- presenter.loadMore(offset, limit);
- }
- };
- rvMessages.addOnScrollListener(scrollListener);
- messageChatAdapter = new MessageChatAdapter(getActivity(), this);
- rvMessages.setAdapter(messageChatAdapter);
- cancelNotificationByChatId(getIDbyChatID());
- presenter = new MessagePresenter(this);
- presenter.loadMore(0, 30);
- }
- }
- private int getIDbyChatID() {
- if (getChatID() != null) {
- String idd = getChatID().substring(2);
- Long l = LongUtils.parseUnsignedLong(idd, 16);
- return (l).intValue();
- }
- else return 0;
- }
- public String getCategory()
- {
- return getArguments().getString("ItemCategory", null);
- }
- public String getChatID()
- {
- return getArguments().getString("ChatID", null);
- }
- @Override
- public void showProgressBar() {
- pbLoadMessages.setVisibility(View.VISIBLE);
- }
- @Override
- public void stopProgress() {
- if (pbLoadMessages.getVisibility() == View.VISIBLE)
- pbLoadMessages.setVisibility(View.INVISIBLE);
- }
- @Override
- public void onDestroy() {
- Log.d("TAG", "MF onDestroyView: ");
- super.onDestroy();
- }
- public int getUnreadCount()
- {
- return getArguments().getInt("unreadCount", 0);
- }
- @Override
- public void onClick(View view) {
- if (view == ivSendMessageToChat) {
- Log.d("TAG", "Clickk");
- if (!etMessageTextToChat.getText().toString().isEmpty()) {
- presenter.sendMessage(getChatID(), etMessageTextToChat.getText().toString());
- etMessageTextToChat.setText("");
- }
- }
- if (view == ivAttachToChat)
- {
- Log.d("TAG", "onClick: ivAttachToChat" );
- }
- }
- @Override
- public void onMessageRead(String messageID) {
- presenter.sendMessageRead(messageID, getChatID());
- }
- //поднимать ссобщение в чате до последнего
- @Override
- public void onMessageCountChange() {
- Log.d("TAG", "addOrUpdateMessage: add 2 " + messageChatAdapter.getItemCount() );
- cancelNotificationByChatId(getIDbyChatID());
- // rvMessages.getLayoutManager().scrollToPosition(0);
- rvMessages.scrollToPosition(0);
- }
- @Override
- public void cancelFocus() {
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- if (etMessageTextToChat.isFocused()) {
- etMessageTextToChat.clearFocus();
- InputMethodManager imm = (InputMethodManager) getActivity()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(etMessageTextToChat.getWindowToken(), 0);
- }
- }
- });
- }
- @Override
- public void setImagePreviewPosition(int adapterPosition) {
- Log.d("TAG", "XXX onStop: adapterPosition " + adapterPosition);
- lastVisibleListPosition = adapterPosition;
- }
- @Override
- public void snowChat(final ArrayList<MessageModel> model, String token, int upToMessage) {
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- messageChatAdapter.setToken(token);
- messageChatAdapter.update(model, getUnreadCount());
- stopProgress();
- //LinearLayoutManager mlayoutManager = (LinearLayoutManager) rvMessages.getLayoutManager();
- //mlayoutManager.scrollToPositionWithOffset(messageChatAdapter.getItemCount(), 0);
- rvMessages.scrollToPosition(messageChatAdapter.getItemCount());
- if (isNeedUpTo) {
- Log.d("TAG", "XXX onStop: upTo X");
- rvMessages.scrollToPosition(upToMessage);
- isNeedUpTo = false;
- }
- if (messageFromCache) {
- Log.d("TAG", "XXX onStop: mesFromC " + lastVisibleListPosition);
- // rvMessages.getLayoutManager().scrollToPosition(lastVisibleListPosition);
- rvMessages.scrollToPosition(lastVisibleListPosition);
- messageFromCache = false;
- }
- Log.d("TAG", "onResume: " + messageChatAdapter.getItemCount() );
- }
- });
- }
- @Override
- public void onDestroyView() {
- Log.d("TAG", "MF onDestroyView: ");
- super.onDestroyView();
- }
- @Override
- public void showMessage(MessageModel messageModel) {
- new Handler(Looper.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- Log.d("TAG", "XXX F showMessage" + messageModel.getMessageText());
- messageChatAdapter.addOrUpdateMessage(messageModel);
- cancelNotificationByChatId(getIDbyChatID());
- }
- });
- }
- ///////////////////////////////////////////////////////////
- //вхдящие типа mark_read, chat_messages, send_message_by_chat
- @Override
- public void onMessageReceived(String text) {
- Log.d("TAG", "BAG onMessageReceived: " + text);
- presenter.getMessage(text);
- }
- @Override
- public void onConnect() {
- }
- @Override
- public void onResume() {
- super.onResume();
- needCancelNotification = true;
- messageChatAdapter.notifyDataSetChanged();
- /*if (messageFromCache) {
- Log.d("TAG", "onResume: offsetCount " + offsetCount);
- presenter.getMesssagesFromCache(getChatID(), offsetCount*30 );
- //presenter.getUpdateData(getChatID(), "");
- }*/
- }
- @Override
- public void onConnectError(String text) {
- new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show());
- }
- @Override
- public void onPause() {
- super.onPause();
- Log.d("TAG", "MF onPause: ");
- }
- @Override
- public void onStop() {
- needCancelNotification = false;
- messageFromCache = true;
- offsetCount = (int) messageChatAdapter.getItemCount() / 30;
- super.onStop();
- }
- //eсли клавиатура появляется в чате, чтобы поднять последнее сообщение в чате над клавитурой
- @Override
- public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom){
- Log.d("TAG", "onLayoutChange: " + left +" " + top + " " + right + " " + bottom);
- if ( bottom < oldBottom) {
- rvMessages.postDelayed(new Runnable() {
- @Override
- public void run() {
- rvMessages.scrollToPosition(0);
- etMessageTextToChat.requestFocus();
- }
- }, 50);
- }
- }
- //убирать клавиатуру и фокус с эдит текста
- @Override
- public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
- //Log.d("TAG", "onInterceptTouchEvent: ");
- cancelFocus();
- return false;
- }
- //non use
- @Override
- public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
- Log.d("TAG", "onRequestDisallowInterceptTouchEvent: ");
- }
- //non use
- @Override
- public void onTouchEvent(RecyclerView rv, MotionEvent e) {
- Log.d("TAG", "onTouchEvent2: ");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement