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

View file

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

View file

@ -40,6 +40,8 @@ import androidx.core.view.doOnLayout
import androidx.databinding.BindingAdapter import androidx.databinding.BindingAdapter
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.emoji2.emojipicker.EmojiPickerView
import androidx.emoji2.emojipicker.EmojiViewItem
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.findViewTreeLifecycleOwner
import coil.load import coil.load
@ -411,3 +413,14 @@ fun validateOnInput(editText: EditText, onValidate: () -> (Unit)) {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} 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 <variable
name="deleteClickListener" name="deleteClickListener"
type="View.OnClickListener" /> type="View.OnClickListener" />
<variable
name="pickEmojiClickListener"
type="View.OnClickListener" />
<variable <variable
name="model" name="model"
type="org.linphone.ui.main.chat.model.ChatMessageModel" /> type="org.linphone.ui.main.chat.model.ChatMessageModel" />
@ -47,9 +50,10 @@
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:text="@string/emoji_thumbs_up" android:text="@string/emoji_thumbs_up"
android:textSize="37sp" android:textSize="30sp"
app:layout_constraintHorizontal_chainStyle="spread_inside" app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintTop_toTopOf="@id/emojis_background" app:layout_constraintTop_toTopOf="@id/emojis_background"
app:layout_constraintBottom_toBottomOf="@id/emojis_background"
app:layout_constraintStart_toStartOf="@id/emojis_background" app:layout_constraintStart_toStartOf="@id/emojis_background"
app:layout_constraintEnd_toStartOf="@id/love"/> app:layout_constraintEnd_toStartOf="@id/love"/>
@ -61,7 +65,7 @@
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:text="@string/emoji_love" android:text="@string/emoji_love"
android:textSize="37sp" android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up" app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/thumbs_up" app:layout_constraintStart_toEndOf="@id/thumbs_up"
app:layout_constraintEnd_toStartOf="@id/laughing"/> app:layout_constraintEnd_toStartOf="@id/laughing"/>
@ -74,7 +78,7 @@
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:text="@string/emoji_laughing" android:text="@string/emoji_laughing"
android:textSize="37sp" android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up" app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/love" app:layout_constraintStart_toEndOf="@id/love"
app:layout_constraintEnd_toStartOf="@id/surprised"/> app:layout_constraintEnd_toStartOf="@id/surprised"/>
@ -87,10 +91,10 @@
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:text="@string/emoji_surprised" android:text="@string/emoji_surprised"
android:textSize="37sp" android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up" app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/laughing" app:layout_constraintStart_toEndOf="@id/laughing"
app:layout_constraintEnd_toStartOf="@id/laughing"/> app:layout_constraintEnd_toStartOf="@id/tear"/>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tear" android:id="@+id/tear"
@ -100,22 +104,23 @@
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:text="@string/emoji_tear" android:text="@string/emoji_tear"
android:textSize="37sp" android:textSize="30sp"
app:layout_constraintTop_toTopOf="@id/thumbs_up" app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintStart_toEndOf="@id/surprised" app:layout_constraintStart_toEndOf="@id/surprised"
app:layout_constraintEnd_toStartOf="@id/plus"/> app:layout_constraintEnd_toStartOf="@id/plus"/>
<ImageView <ImageView
android:id="@+id/plus" android:id="@+id/plus"
android:layout_width="32dp" android:onClick="@{pickEmojiClickListener}"
android:layout_height="32dp" android:layout_width="30dp"
android:layout_height="0dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:src="@drawable/plus_circle" android:src="@drawable/plus_circle"
app:layout_constraintStart_toEndOf="@id/tear" app:layout_constraintStart_toEndOf="@id/tear"
app:layout_constraintEnd_toEndOf="@id/emojis_background" app:layout_constraintEnd_toEndOf="@id/emojis_background"
app:layout_constraintTop_toTopOf="@id/emojis_background" app:layout_constraintTop_toTopOf="@id/thumbs_up"
app:layout_constraintBottom_toBottomOf="@id/emojis_background" /> app:layout_constraintBottom_toBottomOf="@id/thumbs_up" />
<include <include
android:id="@+id/bubble" android:id="@+id/bubble"
@ -197,6 +202,16 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="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> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>