private void updateUnreadCounter() { if (mConnection == null || mRecyclerView == null) return; ChannelNotificationManager mgr = mConnection.getNotificationManager().getChannelManager(mChannelName, true); int unread = mgr.getUnreadMessageCount(); MessageId unreadMsg = mgr.getFirstUnreadMessage(); if (unreadMsg == null && unread > 0) { unread = 0; mgr.clearUnreadMessages(); } if (unread > 0) { int index = mAdapter.findMessageWithId(unreadMsg); View v = mRecyclerView.getLayoutManager().findViewByPosition(index); if (v != null && mRecyclerView.getLayoutManager().isViewPartiallyVisible(v, true, true)) { unread = 0; mgr.clearUnreadMessages(); } mAdapter.setNewMessagesStart(unreadMsg); } mUnreadCtr.setVisibility(View.GONE); if (unread > 0) { if (mUnreadCheckFor == null || !mUnreadCheckFor.equals(unreadMsg)) { mUnreadCheckFor = unreadMsg; mUnreadCheckedFirst = -1; mUnreadCheckedLast = -1; } mUnreadCtr.setVisibility(View.VISIBLE); mUnreadText.setText(getResources().getQuantityString(R.plurals.unread_message_counter, unread, unread)); } }
@Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { recyclerView.removeOnLayoutChangeListener(this); final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); View viewAtPosition = layoutManager.findViewByPosition(MainActivity.currentPosition); // Scroll to position if the view for the current position is null (not currently part of // layout manager children), or it's not completely visible. if (viewAtPosition == null || layoutManager .isViewPartiallyVisible(viewAtPosition, false, true)) { recyclerView.post(() -> layoutManager.scrollToPosition(MainActivity.currentPosition)); } } });