mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-24 00:37:47 +00:00
Fixed issue where we'd incorrectly show input shadow.
We might have also scrolled with typing indicators when we shouldn't of. All came down to #isAtBottom() being calculated incorrectly.
This commit is contained in:
parent
13ffba1c99
commit
25e82ff5e4
@ -292,7 +292,7 @@ public class ConversationFragment extends Fragment
|
||||
}
|
||||
|
||||
if (recipients.size() > 0) {
|
||||
if (adapter.getHeaderView() == null && getListLayoutManager().findFirstCompletelyVisibleItemPosition() == 0) {
|
||||
if (adapter.getHeaderView() == null && isAtBottom()) {
|
||||
list.setVerticalScrollBarEnabled(false);
|
||||
list.post(() -> getListLayoutManager().smoothScrollToPosition(requireContext(), 0, 250));
|
||||
list.postDelayed(() -> list.setVerticalScrollBarEnabled(true), 300);
|
||||
@ -405,7 +405,7 @@ public class ConversationFragment extends Fragment
|
||||
}
|
||||
|
||||
public void scrollToBottom() {
|
||||
if (((LinearLayoutManager) list.getLayoutManager()).findFirstVisibleItemPosition() < SCROLL_ANIMATION_THRESHOLD) {
|
||||
if (getListLayoutManager().findFirstVisibleItemPosition() < SCROLL_ANIMATION_THRESHOLD) {
|
||||
list.smoothScrollToPosition(0);
|
||||
} else {
|
||||
list.scrollToPosition(0);
|
||||
@ -644,13 +644,13 @@ public class ConversationFragment extends Fragment
|
||||
}
|
||||
firstLoad = false;
|
||||
} else if (previousOffset > 0) {
|
||||
int scrollPosition = previousOffset + ((LinearLayoutManager) list.getLayoutManager()).findFirstVisibleItemPosition();
|
||||
int scrollPosition = previousOffset + getListLayoutManager().findFirstVisibleItemPosition();
|
||||
scrollPosition = Math.min(scrollPosition, count - 1);
|
||||
|
||||
View firstView = list.getLayoutManager().getChildAt(scrollPosition);
|
||||
int pixelOffset = (firstView == null) ? 0 : (firstView.getBottom() - list.getPaddingBottom());
|
||||
|
||||
((LinearLayoutManager) list.getLayoutManager()).scrollToPositionWithOffset(scrollPosition, pixelOffset);
|
||||
getListLayoutManager().scrollToPositionWithOffset(scrollPosition, pixelOffset);
|
||||
previousOffset = 0;
|
||||
}
|
||||
|
||||
@ -711,10 +711,23 @@ public class ConversationFragment extends Fragment
|
||||
|
||||
private void scrollToLastSeenPosition(final int lastSeenPosition) {
|
||||
if (lastSeenPosition > 0) {
|
||||
list.post(() -> ((LinearLayoutManager)list.getLayoutManager()).scrollToPositionWithOffset(lastSeenPosition, list.getHeight()));
|
||||
list.post(() -> getListLayoutManager().scrollToPositionWithOffset(lastSeenPosition, list.getHeight()));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAtBottom() {
|
||||
if (list.getChildCount() == 0) return true;
|
||||
|
||||
int firstVisiblePosition = getListLayoutManager().findFirstVisibleItemPosition();
|
||||
|
||||
if (getListAdapter().getHeaderView() == typingView) {
|
||||
RecyclerView.ViewHolder item1 = list.findViewHolderForAdapterPosition(1);
|
||||
return firstVisiblePosition <= 1 && item1 != null && item1.itemView.getBottom() <= list.getHeight();
|
||||
}
|
||||
|
||||
return firstVisiblePosition == 0 && list.getChildAt(0).getBottom() <= list.getHeight();
|
||||
}
|
||||
|
||||
public interface ConversationFragmentListener {
|
||||
void setThreadId(long threadId);
|
||||
void handleReplyMessage(MessageRecord messageRecord);
|
||||
@ -774,23 +787,12 @@ public class ConversationFragment extends Fragment
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAtBottom() {
|
||||
if (list.getChildCount() == 0) return true;
|
||||
|
||||
int firstCompletelyVisiblePosition = ((LinearLayoutManager) list.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
|
||||
|
||||
if (getListAdapter().getHeaderView() == typingView) {
|
||||
return firstCompletelyVisiblePosition <= 1;
|
||||
}
|
||||
return firstCompletelyVisiblePosition == 0;
|
||||
}
|
||||
|
||||
private boolean isAtZoomScrollHeight() {
|
||||
return ((LinearLayoutManager) list.getLayoutManager()).findFirstCompletelyVisibleItemPosition() > 4;
|
||||
return getListLayoutManager().findFirstCompletelyVisibleItemPosition() > 4;
|
||||
}
|
||||
|
||||
private int getHeaderPositionId() {
|
||||
return ((LinearLayoutManager)list.getLayoutManager()).findLastVisibleItemPosition();
|
||||
return getListLayoutManager().findLastVisibleItemPosition();
|
||||
}
|
||||
|
||||
private void bindScrollHeader(HeaderViewHolder headerViewHolder, int positionId) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user