Fix initial scroll position if there's not enough vertical space to hide search bar.
This commit is contained in:
parent
c23215604d
commit
95dba15db8
2 changed files with 46 additions and 15 deletions
|
@ -21,6 +21,8 @@ import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.Vari
|
||||||
import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView;
|
import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView;
|
||||||
import org.thoughtcrime.securesms.util.MappingModelList;
|
import org.thoughtcrime.securesms.util.MappingModelList;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class EmojiPageView extends FrameLayout implements VariationSelectorListener {
|
public class EmojiPageView extends FrameLayout implements VariationSelectorListener {
|
||||||
private static final String TAG = Log.tag(EmojiPageView.class);
|
private static final String TAG = Log.tag(EmojiPageView.class);
|
||||||
|
|
||||||
|
@ -96,7 +98,29 @@ public class EmojiPageView extends FrameLayout implements VariationSelectorListe
|
||||||
|
|
||||||
EmojiPageViewGridAdapter adapter = adapterFactory.create();
|
EmojiPageViewGridAdapter adapter = adapterFactory.create();
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
adapter.submitList(getMappingModelList(), () -> layoutManager.scrollToPosition(1));
|
adapter.submitList(getMappingModelList(), () -> {
|
||||||
|
layoutManager.scrollToPosition(1);
|
||||||
|
recyclerView.post(() -> {
|
||||||
|
if (!searchEnabled || recyclerView.getAdapter() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyboardPageSearchView searchView = (KeyboardPageSearchView) layoutManager.findViewByPosition(0);
|
||||||
|
if (searchView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int allowedScrollDistance = recyclerView.computeVerticalScrollRange() - recyclerView.computeVerticalScrollExtent();
|
||||||
|
if (allowedScrollDistance < searchView.getMeasuredHeight()) {
|
||||||
|
View lastView = Objects.requireNonNull(layoutManager.findViewByPosition(recyclerView.getAdapter().getItemCount() - 1));
|
||||||
|
int scrollDelta = searchView.getMeasuredHeight() - allowedScrollDistance;
|
||||||
|
int distanceFromBottom = Math.max(0, recyclerView.getMeasuredHeight() - lastView.getBottom());
|
||||||
|
lastView.setPadding(lastView.getPaddingLeft(), lastView.getPaddingTop(), lastView.getPaddingRight(), lastView.getPaddingBottom() + scrollDelta + distanceFromBottom);
|
||||||
|
|
||||||
|
recyclerView.post(() -> layoutManager.scrollToPosition(1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull MappingModelList getMappingModelList() {
|
private @NonNull MappingModelList getMappingModelList() {
|
||||||
|
|
|
@ -1,38 +1,45 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="2dp"
|
android:background="?selectableItemBackground"
|
||||||
android:background="?selectableItemBackground">
|
android:padding="2dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/emoji_image"
|
android:id="@+id/emoji_image"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center"
|
android:adjustViewBounds="true"
|
||||||
|
android:paddingStart="6dp"
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="6dp"
|
||||||
android:paddingEnd="6dp"
|
android:paddingEnd="6dp"
|
||||||
android:paddingStart="6dp"
|
android:scaleType="fitCenter"
|
||||||
android:adjustViewBounds="true"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:scaleType="fitCenter" />
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:src="@drawable/ic_emoji_smiley_24" />
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.AsciiEmojiView
|
<org.thoughtcrime.securesms.components.emoji.AsciiEmojiView
|
||||||
android:id="@+id/emoji_text"
|
android:id="@+id/emoji_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="6dp"
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="6dp"
|
||||||
android:paddingEnd="6dp"
|
android:paddingEnd="6dp"
|
||||||
android:paddingStart="6dp"
|
android:visibility="gone"
|
||||||
android:visibility="gone"/>
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/emoji_variation_hint"
|
android:id="@+id/emoji_variation_hint"
|
||||||
android:layout_width="7dp"
|
android:layout_width="7dp"
|
||||||
android:layout_height="7dp"
|
android:layout_height="7dp"
|
||||||
android:layout_gravity="bottom|right|end"
|
android:tint="@color/core_grey_25"
|
||||||
app:srcCompat="@drawable/triangle_bottom_right_corner"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
android:tint="@color/core_grey_25"/>
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:srcCompat="@drawable/triangle_bottom_right_corner" />
|
||||||
|
|
||||||
</FrameLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Add table
Reference in a new issue