improve emoji pickers

This commit is contained in:
adbenitez 2024-12-16 15:27:13 +01:00
parent d9db4b818a
commit a1e47865c5
6 changed files with 55 additions and 11 deletions

View file

@ -42,6 +42,7 @@ import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -50,6 +51,7 @@ import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener; import android.view.View.OnKeyListener;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.FrameLayout;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@ -177,7 +179,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private AttachmentTypeSelector attachmentTypeSelector; private AttachmentTypeSelector attachmentTypeSelector;
private AttachmentManager attachmentManager; private AttachmentManager attachmentManager;
private AudioRecorder audioRecorder; private AudioRecorder audioRecorder;
private Stub<MediaKeyboard> emojiDrawerStub; private FrameLayout emojiPickerContainer;
private MediaKeyboard emojiPicker;
protected HidingLinearLayout quickAttachmentToggle; protected HidingLinearLayout quickAttachmentToggle;
private QuickAttachmentDrawer quickAttachmentDrawer; private QuickAttachmentDrawer quickAttachmentDrawer;
private InputPanel inputPanel; private InputPanel inputPanel;
@ -321,10 +324,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
composeText.setTransport(sendButton.getSelectedTransport()); composeText.setTransport(sendButton.getSelectedTransport());
quickAttachmentDrawer.onConfigurationChanged(); quickAttachmentDrawer.onConfigurationChanged();
if (emojiDrawerStub.resolved() && container.getCurrentInput() == emojiDrawerStub.get()) { if (emojiPicker != null && container.getCurrentInput() == emojiPicker) {
container.hideAttachedInput(true); container.hideAttachedInput(true);
} }
reloadEmojiPicker();
initializeBackground(); initializeBackground();
} }
@ -812,7 +816,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendButton = ViewUtil.findById(this, R.id.send_button); sendButton = ViewUtil.findById(this, R.id.send_button);
attachButton = ViewUtil.findById(this, R.id.attach_button); attachButton = ViewUtil.findById(this, R.id.attach_button);
composeText = ViewUtil.findById(this, R.id.embedded_text_editor); composeText = ViewUtil.findById(this, R.id.embedded_text_editor);
emojiDrawerStub = ViewUtil.findStubById(this, R.id.emoji_drawer_stub); emojiPickerContainer = ViewUtil.findById(this, R.id.emoji_picker_container);
composePanel = ViewUtil.findById(this, R.id.bottom_panel); composePanel = ViewUtil.findById(this, R.id.bottom_panel);
container = ViewUtil.findById(this, R.id.layout_container); container = ViewUtil.findById(this, R.id.layout_container);
quickAttachmentDrawer = ViewUtil.findById(this, R.id.quick_attachment_drawer); quickAttachmentDrawer = ViewUtil.findById(this, R.id.quick_attachment_drawer);
@ -1277,16 +1281,23 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}); });
} }
private void reloadEmojiPicker() {
emojiPickerContainer.removeAllViews();
emojiPicker = (MediaKeyboard) LayoutInflater.from(this).inflate(R.layout.conversation_activity_emojidrawer_stub, emojiPickerContainer, false);
emojiPickerContainer.addView(emojiPicker);
inputPanel.setMediaKeyboard(emojiPicker);
}
@Override @Override
public void onEmojiToggle() { public void onEmojiToggle() {
if (!emojiDrawerStub.resolved()) { if (emojiPicker == null) {
inputPanel.setMediaKeyboard(emojiDrawerStub.get()); reloadEmojiPicker();
} }
if (container.getCurrentInput() == emojiDrawerStub.get()) { if (container.getCurrentInput() == emojiPicker) {
container.showSoftkey(composeText); container.showSoftkey(composeText);
} else { } else {
container.show(composeText, emojiDrawerStub.get()); container.show(composeText, emojiPicker);
} }
} }

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<org.thoughtcrime.securesms.components.emoji.MediaKeyboard
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/emoji_drawer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<androidx.emoji2.emojipicker.EmojiPickerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/emoji_picker"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?emoji_drawer_background"
app:emojiGridColumns="12"/>
</org.thoughtcrime.securesms.components.emoji.MediaKeyboard>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.emoji2.emojipicker.EmojiPickerView
android:id="@+id/emoji_picker"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:emojiGridColumns="10"/>
</RelativeLayout>

View file

@ -57,12 +57,11 @@
<include layout="@layout/conversation_input_panel"/> <include layout="@layout/conversation_input_panel"/>
<ViewStub <FrameLayout
android:id="@+id/emoji_drawer_stub" android:id="@+id/emoji_picker_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inflatedId="@+id/emoji_drawer" />
android:layout="@layout/conversation_activity_emojidrawer_stub" />
</LinearLayout> </LinearLayout>
</org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer> </org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- WARNING: on modifications also update the layout-land folder. -->
<org.thoughtcrime.securesms.components.emoji.MediaKeyboard <org.thoughtcrime.securesms.components.emoji.MediaKeyboard
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/emoji_drawer" android:id="@+id/emoji_drawer"

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- WARNING: on modifications also update the layout-land folder. -->
<RelativeLayout <RelativeLayout
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"