diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
index 996c9fdeaa..c0bfe002ff 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
@@ -17,6 +17,7 @@ import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.Interpolator;
import android.view.animation.TranslateAnimation;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
@@ -105,11 +106,13 @@ public class InputPanel extends ConstraintLayout
private View editMessageCancel;
private ImageView editMessageThumbnail;
private View editMessageTitle;
+ private FrameLayout composeTextContainer;
private MicrophoneRecorderView microphoneRecorderView;
private SlideToCancel slideToCancel;
private RecordTime recordTime;
private ValueAnimator quoteAnimator;
+ private ValueAnimator editMessageAnimator;
private VoiceNoteDraftView voiceNoteDraftView;
private @Nullable Listener listener;
@@ -148,6 +151,7 @@ public class InputPanel extends ConstraintLayout
this.linkPreview = findViewById(R.id.link_preview);
this.mediaKeyboard = findViewById(R.id.emoji_toggle);
this.composeText = findViewById(R.id.embedded_text_editor);
+ this.composeTextContainer = findViewById(R.id.embedded_text_editor_container);
this.quickCameraToggle = findViewById(R.id.quick_camera_toggle);
this.quickAudioToggle = findViewById(R.id.quick_audio_toggle);
this.buttonToggle = findViewById(R.id.button_toggle);
@@ -405,6 +409,7 @@ public class InputPanel extends ConstraintLayout
}
public void enterEditMessageMode(@NonNull RequestManager requestManager, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft) {
+ int originalHeight = composeTextContainer.getMeasuredHeight();
SpannableString textToEdit = conversationMessageToEdit.getDisplayBody(getContext());
if (!fromDraft) {
MessageStyler.convertSpoilersToComposeMode(textToEdit);
@@ -419,7 +424,28 @@ public class InputPanel extends ConstraintLayout
}
this.messageToEdit = conversationMessageToEdit.getMessageRecord();
updateEditModeThumbnail(requestManager);
- updateEditModeUi();
+
+ int maxWidth = composeContainer.getWidth();
+ if (composeContainer.getLayoutParams() instanceof MarginLayoutParams) {
+ MarginLayoutParams layoutParams = (MarginLayoutParams) composeContainer.getLayoutParams();
+ maxWidth -= layoutParams.leftMargin + layoutParams.rightMargin;
+ }
+ composeTextContainer.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST), MeasureSpec.UNSPECIFIED);
+ int finalHeight = (inEditMessageMode()) ? composeTextContainer.getMeasuredHeight() : composeTextContainer.getMeasuredHeight() + editMessageTitle.getMeasuredHeight();
+
+ if (editMessageAnimator != null) {
+ editMessageAnimator.cancel();
+ }
+ editMessageAnimator = createHeightAnimator(composeTextContainer, originalHeight, finalHeight, new AnimationCompleteListener() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ ViewGroup.LayoutParams params = composeTextContainer.getLayoutParams();
+ params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+ composeTextContainer.setLayoutParams(params);
+ updateEditModeUi();
+ }
+ });
+ editMessageAnimator.start();
}
private void updateEditModeThumbnail(@NonNull RequestManager requestManager) {
@@ -443,6 +469,7 @@ public class InputPanel extends ConstraintLayout
}
public void exitEditMessageMode() {
+ int originalHeight = composeTextContainer.getMeasuredHeight();
if (messageToEdit != null) {
composeText.setText("");
messageToEdit = null;
@@ -450,6 +477,21 @@ public class InputPanel extends ConstraintLayout
clearQuote();
}
updateEditModeUi();
+
+ composeTextContainer.measure(0, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+
+ if (editMessageAnimator != null) {
+ editMessageAnimator.cancel();
+ }
+ editMessageAnimator = createHeightAnimator(composeTextContainer, originalHeight, composeTextContainer.getMeasuredHeight(), new AnimationCompleteListener() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ ViewGroup.LayoutParams params = composeTextContainer.getLayoutParams();
+ params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+ composeTextContainer.setLayoutParams(params);
+ }
+ });
+ editMessageAnimator.start();
}
private void updateEditModeUi() {
diff --git a/app/src/main/res/layout/conversation_input_panel.xml b/app/src/main/res/layout/conversation_input_panel.xml
index 788b97a307..bf85f3ffa9 100644
--- a/app/src/main/res/layout/conversation_input_panel.xml
+++ b/app/src/main/res/layout/conversation_input_panel.xml
@@ -137,24 +137,32 @@
app:layout_constraintVertical_bias="1.0"
app:tint="@color/signal_colorOnSurfaceVariant" />
-
+ android:visibility="visible"
+ app:layout_constraintTop_toBottomOf="@id/compose_bubble_top_elements">
-
-
+
+
+
+
+
+