@@ -1246,7 +1246,7 @@ public void displayMessages (ArrayList<TGMessage> items, int mode, int scrollPos
1246
1246
case MessagesLoader .MODE_MORE_BOTTOM : {
1247
1247
int firstIndex = manager .findFirstVisibleItemPosition ();
1248
1248
View view = manager .findViewByPosition (firstIndex );
1249
- int currentOffset = view == null ? 0 : manager . getHeight () - view . getBottom ( );
1249
+ int currentOffset = view == null ? 0 : calculateOffsetInPixels ( view );
1250
1250
adapter .addMessages (items , false );
1251
1251
manager .scrollToPositionWithOffset (firstIndex + items .size (), currentOffset );
1252
1252
break ;
@@ -1376,12 +1376,12 @@ private void requestSponsoredMessage () {
1376
1376
RunnableData <TGMessage > action = (lastMessage ) -> {
1377
1377
if (lastMessage == null ) return ;
1378
1378
controller .sponsoredMessageLoaded = true ;
1379
- boolean isFirstItemVisible = manager .findFirstCompletelyVisibleItemPosition () == 0 ;
1380
1379
// TODO multi-ad support
1380
+ int firstIndex = manager .findFirstVisibleItemPosition ();
1381
+ View view = manager .findViewByPosition (firstIndex );
1382
+ int currentOffset = view == null ? 0 : calculateOffsetInPixels (view ) + (firstIndex == 0 ? Screen .dp (48f ) : 0 );
1381
1383
adapter .addMessage (TGMessage .valueOf (this , loader .getChatId (), sponsoredMessages .messages [0 ]), false , false );
1382
- if (isFirstItemVisible && !isScrolling && !controller .canWriteMessages ()) {
1383
- manager .scrollToPositionWithOffset (1 , Screen .dp (48f ));
1384
- }
1384
+ manager .scrollToPositionWithOffset (firstIndex + 1 , currentOffset );
1385
1385
};
1386
1386
1387
1387
TGMessage bottomMessage = findBottomMessage ();
@@ -1637,7 +1637,7 @@ private void updateNewMessage (TGMessage message) {
1637
1637
int scrollOffsetInPixels = 0 ;
1638
1638
View view = manager .findViewByPosition (0 );
1639
1639
if (view != null && view .getParent () != null ) {
1640
- scrollOffsetInPixels = (( View ) view . getParent ()). getBottom () - view . getBottom ( );
1640
+ scrollOffsetInPixels = calculateOffsetInPixels ( view );
1641
1641
}
1642
1642
1643
1643
boolean bottomFullyVisible = manager .findFirstCompletelyVisibleItemPosition () == 0 ;
@@ -1660,6 +1660,11 @@ private void updateNewMessage (TGMessage message) {
1660
1660
}
1661
1661
}
1662
1662
1663
+ private int calculateOffsetInPixels (View view ) {
1664
+ View parentView = (View ) view .getParent ();
1665
+ return parentView .getMeasuredHeight () - parentView .getPaddingBottom () - view .getBottom ();
1666
+ }
1667
+
1663
1668
@ Override
1664
1669
public void onMessageSendAcknowledged (final long chatId , final long messageId ) {
1665
1670
tdlib .ui ().post (() -> {
@@ -2260,7 +2265,7 @@ private void saveScrollPosition () {
2260
2265
}
2261
2266
View view = manager .findViewByPosition (i );
2262
2267
if (view != null && view .getParent () != null ) {
2263
- scrollOffsetInPixels = (( View ) view . getParent ()). getBottom () - view . getBottom ( );
2268
+ scrollOffsetInPixels = calculateOffsetInPixels ( view );
2264
2269
}
2265
2270
if (readFully && scrollOffsetInPixels == 0 ) {
2266
2271
scrollMessageId = scrollMessageChatId = 0 ;
@@ -2293,14 +2298,16 @@ private void saveScrollPosition () {
2293
2298
final int accountId = tdlib .id ();
2294
2299
final long chatId = loader .getChatId ();
2295
2300
final long messageThreadId = loader .getMessageThreadId ();
2301
+ Settings .SavedMessageId savedMessageId = new Settings .SavedMessageId (
2302
+ new MessageId (scrollMessageChatId , scrollMessageId , scrollMessageOtherIds ),
2303
+ scrollOffsetInPixels ,
2304
+ returnToMessageIds ,
2305
+ readFully , topEndMessageId
2306
+ );
2296
2307
Settings .instance ().setScrollMessageId (accountId ,
2297
2308
chatId , messageThreadId ,
2298
- new Settings .SavedMessageId (
2299
- new MessageId (scrollMessageChatId , scrollMessageId , scrollMessageOtherIds ),
2300
- scrollOffsetInPixels ,
2301
- returnToMessageIds ,
2302
- readFully , topEndMessageId
2303
- ));
2309
+ savedMessageId
2310
+ );
2304
2311
2305
2312
if (pinnedMessages != null && chatId == scrollMessageChatId ) {
2306
2313
pinnedMessages .ensureMessageAvailability (scrollMessageId );
@@ -2756,7 +2763,7 @@ private void scrollToMessage (int index, TGMessage scrollMessage, int highlightM
2756
2763
2757
2764
public boolean isAtVeryBottom () {
2758
2765
View view = findBottomView ();
2759
- return view != null && view .getBottom () == ((View ) view .getParent ()).getMeasuredHeight ();
2766
+ return view != null && view .getBottom () == ((View ) view .getParent ()).getMeasuredHeight () - (( View ) view . getParent ()). getPaddingBottom () ;
2760
2767
}
2761
2768
2762
2769
/*public boolean canApplyRecyclerOffsets () {
0 commit comments