Send custom reaction using emoji picker

This commit is contained in:
Sylvain Berfini 2023-10-12 17:14:41 +02:00
parent daacb3ca98
commit db5ea158c3
4 changed files with 42 additions and 12 deletions

View file

@ -24,7 +24,6 @@ import android.app.Application
import androidx.annotation.MainThread
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import coil.decode.SvgDecoder
import coil.decode.VideoFrameDecoder
@ -38,7 +37,6 @@ import org.linphone.core.CorePreferences
import org.linphone.core.Factory
import org.linphone.core.LogCollectionState
import org.linphone.core.LogLevel
import org.linphone.mediastream.Version
@MainThread
class LinphoneApplication : Application(), ImageLoaderFactory {

View file

@ -207,6 +207,10 @@ class ConversationFragment : GenericFragment() {
dialog.dismiss()
}
layout.setPickEmojiClickListener {
layout.emojiPicker.visibility = View.VISIBLE
}
layout.model = chatMessageModel
chatMessageModel.dismissLongPressMenuEvent.observe(viewLifecycleOwner) {
dialog.dismiss()

View file

@ -40,6 +40,8 @@ import androidx.core.view.doOnLayout
import androidx.databinding.BindingAdapter
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.emoji2.emojipicker.EmojiPickerView
import androidx.emoji2.emojipicker.EmojiViewItem
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.findViewTreeLifecycleOwner
import coil.load
@ -411,3 +413,14 @@ fun validateOnInput(editText: EditText, onValidate: () -> (Unit)) {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
}
@BindingAdapter("emojiPickedListener")
fun EmojiPickerView.setEmojiPickedListener(listener: EmojiPickedListener) {
setOnEmojiPickedListener { emoji ->
listener.onEmojiPicked(emoji)
}
}
interface EmojiPickedListener {
fun onEmojiPicked(item: EmojiViewItem)
}

View file

@ -10,6 +10,9 @@
<variable
name="deleteClickListener"
type="View.OnClickListener" />
<variable
name="pickEmojiClickListener"
type="View.OnClickListener" />
<variable
name="model"
type="org.linphone.ui.main.chat.model.ChatMessageModel" />
@ -47,9 +50,10 @@
android:layout_marginStart="16dp"
android:layout_marginEnd="10dp"
android:text="@string/emoji_thumbs_up"
android:textSize="37sp"
android:textSize="30sp"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintTop_toTopOf="@id/emojis_background"
app:layout_constraintBottom_toBottomOf="@id/emojis_background"
app:layout_constraintStart_toStartOf="@id/emojis_background"
app:layout_constraintEnd_toStartOf="@id/love"/>
@ -61,7 +65,7 @@
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/emoji_love"
android:textSize="37sp"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/thumbs_up"
app:layout_constraintEnd_toStartOf="@id/laughing"/>
@ -74,7 +78,7 @@
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/emoji_laughing"
android:textSize="37sp"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/love"
app:layout_constraintEnd_toStartOf="@id/surprised"/>
@ -87,10 +91,10 @@
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/emoji_surprised"
android:textSize="37sp"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/laughing"
app:layout_constraintEnd_toStartOf="@id/laughing"/>
app:layout_constraintEnd_toStartOf="@id/tear"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tear"
@ -100,22 +104,23 @@
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="@string/emoji_tear"
android:textSize="37sp"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/surprised"
app:layout_constraintEnd_toStartOf="@id/plus"/>
<ImageView
android:id="@+id/plus"
android:layout_width="32dp"
android:layout_height="32dp"
android:onClick="@{pickEmojiClickListener}"
android:layout_width="30dp"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="16dp"
android:src="@drawable/plus_circle"
app:layout_constraintStart_toEndOf="@id/tear"
app:layout_constraintEnd_toEndOf="@id/emojis_background"
app:layout_constraintTop_toTopOf="@id/emojis_background"
app:layout_constraintBottom_toBottomOf="@id/emojis_background" />
app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintBottom_toBottomOf="@id/thumbs_up" />
<include
android:id="@+id/bubble"
@ -197,6 +202,16 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.emoji2.emojipicker.EmojiPickerView
android:id="@+id/emoji_picker"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/gray_100"
android:visibility="gone"
app:emojiPickedListener="@{(emoji) -> model.sendReaction(emoji.emoji)}"
app:layout_constraintTop_toTopOf="@id/reply"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>