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;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.OnBackPressListener;
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.MessageListAdapter;
import chat.rocket.android.layouthelper.chatroom.PairedMessage;
......@@ -70,6 +71,17 @@ public class RoomFragment extends AbstractChatRoomFragment
private LoadMoreScrollListener scrollListener;
private RealmObjectObserver<LoadMessageProcedure> procedureObserver;
private MessageFormManager messageFormManager;
private LinearLayoutManager layoutManager;
private boolean userScrolledToEnd = true;
private ExtRealmModelListAdapter.UpdateListener updateListener =
count -> {
if (userScrolledToEnd) {
scrollToEnd();
} else {
// showNewMessagesAtEndIndicator();
}
};
public RoomFragment() {
}
......@@ -142,10 +154,10 @@ public class RoomFragment extends AbstractChatRoomFragment
listView.setAdapter(adapter);
adapter.setOnItemClickListener(this);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(),
layoutManager = new LinearLayoutManager(getContext(),
LinearLayoutManager.VERTICAL, true);
listView.setLayoutManager(layoutManager);
adapter.setLayoutManager(layoutManager);
adapter.setUpdateListener(updateListener);
scrollListener = new LoadMoreScrollListener(layoutManager, 40) {
@Override
......@@ -154,6 +166,13 @@ public class RoomFragment extends AbstractChatRoomFragment
}
};
listView.addOnScrollListener(scrollListener);
listView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
setUserScrolledToEnd(newState);
}
});
setupSideMenu();
setupMessageComposer();
......@@ -373,4 +392,18 @@ public class RoomFragment extends AbstractChatRoomFragment
protected void onExtraActionSelected(MessageExtraActionBehavior action) {
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,
protected static final int VIEW_TYPE_HEADER = -1;
protected static final int VIEW_TYPE_FOOTER = -2;
private RecyclerView.LayoutManager layoutManager;
private UpdateListener updateListener;
protected ExtRealmModelListAdapter(Context context) {
super(context);
......@@ -41,16 +41,16 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
notifyItemChanged(position + 1);
}
public void setLayoutManager(RecyclerView.LayoutManager layoutManager) {
this.layoutManager = layoutManager;
public void setUpdateListener(UpdateListener updateListener) {
this.updateListener = updateListener;
}
protected ListUpdateCallback listUpdateCallback = new ListUpdateCallback() {
@Override
public void onInserted(int position, int count) {
notifyItemRangeInserted(position + 1, count);
if (layoutManager != null) {
layoutManager.scrollToPosition(0);
if (updateListener != null) {
updateListener.onInserted(count);
}
}
......@@ -121,4 +121,10 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
public ListUpdateCallback getListUpdateCallback() {
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