Commit 24809ec5 authored by Tiago Cunha's avatar Tiago Cunha

Won't disrupt message reading

parent 575a7ef2
...@@ -28,6 +28,7 @@ import chat.rocket.android.helper.LoadMoreScrollListener; ...@@ -28,6 +28,7 @@ import chat.rocket.android.helper.LoadMoreScrollListener;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.OnBackPressListener; import chat.rocket.android.helper.OnBackPressListener;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.ExtRealmModelListAdapter;
import chat.rocket.android.layouthelper.chatroom.MessageFormManager; import chat.rocket.android.layouthelper.chatroom.MessageFormManager;
import chat.rocket.android.layouthelper.chatroom.MessageListAdapter; import chat.rocket.android.layouthelper.chatroom.MessageListAdapter;
import chat.rocket.android.layouthelper.chatroom.PairedMessage; import chat.rocket.android.layouthelper.chatroom.PairedMessage;
...@@ -70,6 +71,17 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -70,6 +71,17 @@ public class RoomFragment extends AbstractChatRoomFragment
private LoadMoreScrollListener scrollListener; private LoadMoreScrollListener scrollListener;
private RealmObjectObserver<LoadMessageProcedure> procedureObserver; private RealmObjectObserver<LoadMessageProcedure> procedureObserver;
private MessageFormManager messageFormManager; private MessageFormManager messageFormManager;
private LinearLayoutManager layoutManager;
private boolean userScrolledToEnd = true;
private ExtRealmModelListAdapter.UpdateListener updateListener =
count -> {
if (userScrolledToEnd) {
scrollToEnd();
} else {
// showNewMessagesAtEndIndicator();
}
};
public RoomFragment() { public RoomFragment() {
} }
...@@ -142,10 +154,10 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -142,10 +154,10 @@ public class RoomFragment extends AbstractChatRoomFragment
listView.setAdapter(adapter); listView.setAdapter(adapter);
adapter.setOnItemClickListener(this); adapter.setOnItemClickListener(this);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), layoutManager = new LinearLayoutManager(getContext(),
LinearLayoutManager.VERTICAL, true); LinearLayoutManager.VERTICAL, true);
listView.setLayoutManager(layoutManager); listView.setLayoutManager(layoutManager);
adapter.setLayoutManager(layoutManager); adapter.setUpdateListener(updateListener);
scrollListener = new LoadMoreScrollListener(layoutManager, 40) { scrollListener = new LoadMoreScrollListener(layoutManager, 40) {
@Override @Override
...@@ -154,6 +166,13 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -154,6 +166,13 @@ public class RoomFragment extends AbstractChatRoomFragment
} }
}; };
listView.addOnScrollListener(scrollListener); listView.addOnScrollListener(scrollListener);
listView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
setUserScrolledToEnd(newState);
}
});
setupSideMenu(); setupSideMenu();
setupMessageComposer(); setupMessageComposer();
...@@ -373,4 +392,18 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -373,4 +392,18 @@ public class RoomFragment extends AbstractChatRoomFragment
protected void onExtraActionSelected(MessageExtraActionBehavior action) { protected void onExtraActionSelected(MessageExtraActionBehavior action) {
action.handleItemSelectedOnFragment(RoomFragment.this); action.handleItemSelectedOnFragment(RoomFragment.this);
} }
private void setUserScrolledToEnd(int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING
|| newState == RecyclerView.SCROLL_STATE_IDLE) {
userScrolledToEnd = layoutManager.findFirstCompletelyVisibleItemPosition() == 1;
}
}
private void scrollToEnd() {
if (layoutManager == null) {
return;
}
layoutManager.scrollToPosition(0);
}
} }
...@@ -18,7 +18,7 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM, ...@@ -18,7 +18,7 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
protected static final int VIEW_TYPE_HEADER = -1; protected static final int VIEW_TYPE_HEADER = -1;
protected static final int VIEW_TYPE_FOOTER = -2; protected static final int VIEW_TYPE_FOOTER = -2;
private RecyclerView.LayoutManager layoutManager; private UpdateListener updateListener;
protected ExtRealmModelListAdapter(Context context) { protected ExtRealmModelListAdapter(Context context) {
super(context); super(context);
...@@ -41,16 +41,16 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM, ...@@ -41,16 +41,16 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
notifyItemChanged(position + 1); notifyItemChanged(position + 1);
} }
public void setLayoutManager(RecyclerView.LayoutManager layoutManager) { public void setUpdateListener(UpdateListener updateListener) {
this.layoutManager = layoutManager; this.updateListener = updateListener;
} }
protected ListUpdateCallback listUpdateCallback = new ListUpdateCallback() { protected ListUpdateCallback listUpdateCallback = new ListUpdateCallback() {
@Override @Override
public void onInserted(int position, int count) { public void onInserted(int position, int count) {
notifyItemRangeInserted(position + 1, count); notifyItemRangeInserted(position + 1, count);
if (layoutManager != null) { if (updateListener != null) {
layoutManager.scrollToPosition(0); updateListener.onInserted(count);
} }
} }
...@@ -121,4 +121,10 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM, ...@@ -121,4 +121,10 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
public ListUpdateCallback getListUpdateCallback() { public ListUpdateCallback getListUpdateCallback() {
return listUpdateCallback; return listUpdateCallback;
} }
// We'll be using the insert event only as of now
// Let's add more events when/if needed
public interface UpdateListener {
void onInserted(int count);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment