Dynamically determine height of bottom bar.

This prevents the last message from being obscured when a label in the
bar spans more than one line.
This commit is contained in:
Rashad Sookram 2022-01-13 11:08:47 -05:00 committed by Cody Henthorne
parent c55b0357f1
commit cd4320c0ef
2 changed files with 38 additions and 9 deletions

View file

@ -182,6 +182,7 @@ import java.util.Set;
import java.util.concurrent.ExecutionException;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
@SuppressLint("StaticFieldLeak")
public class ConversationFragment extends LoggingFragment implements MultiselectForwardFragment.Callback {
@ -762,7 +763,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
List<ActionItem> items = new ArrayList<>();
if (menuState.shouldShowReplyAction()) {
items.add(new ActionItem(R.drawable.ic_reply_24_tinted, getResources().getString(R.string.conversation_context__menu_reply_to_message), () -> {
items.add(new ActionItem(R.drawable.ic_reply_24_tinted, getResources().getString(R.string.conversation_selection__menu_reply), () -> {
maybeShowSwipeToReplyTooltip();
handleReplyMessage(getSelectedConversationMessage());
actionMode.finish();
@ -770,32 +771,32 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
}
if (menuState.shouldShowForwardAction()) {
items.add(new ActionItem(R.drawable.ic_forward_24_tinted, getResources().getString(R.string.conversation_context__menu_forward_message), () -> handleForwardMessageParts(selectedParts)));
items.add(new ActionItem(R.drawable.ic_forward_24_tinted, getResources().getString(R.string.conversation_selection__menu_forward), () -> handleForwardMessageParts(selectedParts)));
}
if (menuState.shouldShowSaveAttachmentAction()) {
items.add(new ActionItem(R.drawable.ic_save_24, getResources().getString(R.string.conversation_context_image__save_attachment), () -> {
items.add(new ActionItem(R.drawable.ic_save_24, getResources().getString(R.string.conversation_selection__menu_save), () -> {
handleSaveAttachment((MediaMmsMessageRecord) getSelectedConversationMessage().getMessageRecord());
actionMode.finish();
}));
}
if (menuState.shouldShowCopyAction()) {
items.add(new ActionItem(R.drawable.ic_copy_24_tinted, getResources().getString(R.string.conversation_context__menu_copy_text), () -> {
items.add(new ActionItem(R.drawable.ic_copy_24_tinted, getResources().getString(R.string.conversation_selection__menu_copy), () -> {
handleCopyMessage(selectedParts);
actionMode.finish();
}));
}
if (menuState.shouldShowDetailsAction()) {
items.add(new ActionItem(R.drawable.ic_info_tinted_24, getResources().getString(R.string.conversation_context__menu_message_details), () -> {
items.add(new ActionItem(R.drawable.ic_info_tinted_24, getResources().getString(R.string.conversation_selection__menu_message_details), () -> {
handleDisplayDetails(getSelectedConversationMessage());
actionMode.finish();
}));
}
if (menuState.shouldShowDeleteAction()) {
items.add(new ActionItem(R.drawable.ic_delete_tinted_24, getResources().getString(R.string.conversation_context__menu_delete_message), () -> {
items.add(new ActionItem(R.drawable.ic_delete_tinted_24, getResources().getString(R.string.conversation_selection__menu_delete), () -> {
handleDeleteMessages(selectedParts);
actionMode.finish();
}));
@ -810,18 +811,32 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
return;
}
int scrollOffset = (int) DimensionUnit.DP.toPixels(34);
int additionalScrollOffset = (int) DimensionUnit.DP.toPixels(54);
if (isVisible) {
ViewUtil.animateIn(bottomActionBar, bottomActionBar.getEnterAnimation());
listener.onBottomActionBarVisibilityChanged(View.VISIBLE);
list.setPadding(list.getPaddingLeft(), list.getPaddingTop(), list.getPaddingRight(), (int) DimensionUnit.DP.toPixels(88));
list.scrollBy(0, -scrollOffset);
ViewKt.doOnPreDraw(bottomActionBar, new Function1<View, Unit>() {
@Override public Unit invoke(View view) {
if (view.getHeight() == 0 && view.getVisibility() == View.VISIBLE) {
ViewKt.doOnPreDraw(bottomActionBar, this);
return Unit.INSTANCE;
}
int bottomPadding = view.getHeight() + (int) DimensionUnit.DP.toPixels(18);
list.setPadding(list.getPaddingLeft(), list.getPaddingTop(), list.getPaddingRight(), bottomPadding);
list.scrollBy(0, -(bottomPadding - additionalScrollOffset));
return Unit.INSTANCE;
}
});
} else {
ViewUtil.animateOut(bottomActionBar, bottomActionBar.getExitAnimation())
.addListener(new ListenableFuture.Listener<Boolean>() {
@Override public void onSuccess(Boolean result) {
int scrollOffset = list.getPaddingBottom() - additionalScrollOffset;
listener.onBottomActionBarVisibilityChanged(View.GONE);
list.setPadding(list.getPaddingLeft(), list.getPaddingTop(), list.getPaddingRight(), getResources().getDimensionPixelSize(R.dimen.conversation_bottom_padding));

View file

@ -2805,6 +2805,20 @@
<!-- conversation_expiring_off -->
<string name="conversation_expiring_off__disappearing_messages">Disappearing messages</string>
<!-- conversation_selection -->
<!-- Button to view detailed information for a message -->
<string name="conversation_selection__menu_message_details">Info</string>
<!-- Button to copy a message\'s text to the clipboard -->
<string name="conversation_selection__menu_copy">Copy</string>
<!-- Button to delete a message -->
<string name="conversation_selection__menu_delete">Delete</string>
<!-- Button to forward a message to another person or group chat -->
<string name="conversation_selection__menu_forward">Forward</string>
<!-- Button to reply to a message -->
<string name="conversation_selection__menu_reply">Reply</string>
<!-- Button to save a message attachment (image, file etc.) -->
<string name="conversation_selection__menu_save">Save</string>
<!-- conversation_expiring_on -->
<!-- conversation_insecure -->