Signed-off-by: Mario Danic <mario@lovelyhq.com>

# Conflicts:
#	app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java
This commit is contained in:
Mario Danic 2019-02-22 15:00:15 +01:00
parent f5e7ad6a33
commit 5ea99c8201

View File

@ -153,6 +153,9 @@ public class ConversationsListController extends BaseController implements Searc
private boolean adapterWasNull = true; private boolean adapterWasNull = true;
private String lastClickedConversationToken;
private int scrollTo = 0;
public ConversationsListController() { public ConversationsListController() {
super(); super();
setHasOptionsMenu(true); setHasOptionsMenu(true);
@ -173,7 +176,7 @@ public class ConversationsListController extends BaseController implements Searc
} }
if (adapter == null) { if (adapter == null) {
adapter = new FlexibleAdapter<>(callItems, getActivity(), false); adapter = new FlexibleAdapter<>(callItems, getActivity(), true);
} else { } else {
progressBarView.setVisibility(View.GONE); progressBarView.setVisibility(View.GONE);
} }
@ -319,16 +322,25 @@ public class ConversationsListController extends BaseController implements Searc
} }
} }
Conversation conversation;
AbstractFlexibleItem itemToScrollTo = null;
for (int i = 0; i < roomsOverall.getOcs().getData().size(); i++) { for (int i = 0; i < roomsOverall.getOcs().getData().size(); i++) {
conversation = roomsOverall.getOcs().getData().get(i);
if (shouldUseLastMessageLayout) { if (shouldUseLastMessageLayout) {
callItems.add(new ConversationItem(roomsOverall.getOcs().getData().get(i), ConversationItem conversationItem = new ConversationItem(conversation, currentUser);
currentUser)); if (!TextUtils.isEmpty(lastClickedConversationToken) && lastClickedConversationToken.equals(conversation.getToken())) {
itemToScrollTo = conversationItem;
}
callItems.add(conversationItem);
} else { } else {
callItems.add(new CallItem(roomsOverall.getOcs().getData().get(i), currentUser)); CallItem callItem = new CallItem(conversation, currentUser);
if (!TextUtils.isEmpty(lastClickedConversationToken) && lastClickedConversationToken.equals(conversation.getToken())) {
itemToScrollTo = callItem;
}
callItems.add(callItem);
} }
} }
if (currentUser.hasSpreedCapabilityWithName("last-room-activity")) { if (currentUser.hasSpreedCapabilityWithName("last-room-activity")) {
Collections.sort(callItems, (o1, o2) -> { Collections.sort(callItems, (o1, o2) -> {
Conversation conversation1 = ((ConversationItem) o1).getModel(); Conversation conversation1 = ((ConversationItem) o1).getModel();
@ -343,9 +355,13 @@ public class ConversationsListController extends BaseController implements Searc
Long.compare(((CallItem) t1).getModel().getLastPing(), Long.compare(((CallItem) t1).getModel().getLastPing(),
((CallItem) callItem).getModel().getLastPing())); ((CallItem) callItem).getModel().getLastPing()));
} }
if (itemToScrollTo == null || callItems.indexOf(itemToScrollTo) == -1) {
scrollTo = 0;
} else {
scrollTo = callItems.indexOf(itemToScrollTo);
}
adapter.updateDataSet(callItems, true); adapter.updateDataSet(callItems, true);
recyclerView.smoothScrollToPosition(0);
if (searchItem != null) { if (searchItem != null) {
searchItem.setVisible(callItems.size() > 0); searchItem.setVisible(callItems.size() > 0);
@ -423,6 +439,29 @@ public class ConversationsListController extends BaseController implements Searc
fastScroller.addOnScrollStateChangeListener(this); fastScroller.addOnScrollStateChangeListener(this);
adapter.setFastScroller(fastScroller); adapter.setFastScroller(fastScroller);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
super.onChanged();
recyclerView.smoothScrollToPosition(scrollTo);
lastClickedConversationToken = "";
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
super.onItemRangeChanged(positionStart, itemCount);
recyclerView.smoothScrollToPosition(scrollTo);
lastClickedConversationToken = "";
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) {
super.onItemRangeChanged(positionStart, itemCount, payload);
recyclerView.smoothScrollToPosition(scrollTo);
lastClickedConversationToken = "";
}
});
fastScroller.setBubbleTextCreator(position -> { fastScroller.setBubbleTextCreator(position -> {
String displayName; String displayName;
if (shouldUseLastMessageLayout) { if (shouldUseLastMessageLayout) {
@ -580,6 +619,8 @@ public class ConversationsListController extends BaseController implements Searc
conversation = ((CallItem) clickedItem).getModel(); conversation = ((CallItem) clickedItem).getModel();
} }
lastClickedConversationToken = conversation.getToken();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, currentUser); bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, currentUser);
bundle.putString(BundleKeys.KEY_ROOM_TOKEN, conversation.getToken()); bundle.putString(BundleKeys.KEY_ROOM_TOKEN, conversation.getToken());