diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt
index 0e7e46618..1c45e9513 100644
--- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt
+++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt
@@ -106,6 +106,7 @@ class ContactsManager @UiThread constructor(context: Context) {
try {
listeners.add(listener)
} catch (cme: ConcurrentModificationException) {
+ Log.e("$TAG Can't add listener: $cme")
}
}
}
@@ -118,6 +119,7 @@ class ContactsManager @UiThread constructor(context: Context) {
try {
listeners.remove(listener)
} catch (cme: ConcurrentModificationException) {
+ Log.e("$TAG Can't remove listener: $cme")
}
}
}
@@ -157,16 +159,30 @@ class ContactsManager @UiThread constructor(context: Context) {
clonedAddress.clean()
val sipUri = clonedAddress.asStringUriOnly()
- Log.d("$TAG Looking for friend with address [$sipUri]")
+ Log.d("$TAG Looking for friend with SIP URI [$sipUri]")
val username = clonedAddress.username
val found = coreContext.core.findFriend(clonedAddress)
- return found ?: if (!username.isNullOrEmpty() && username.startsWith("+")) {
+ return if (found != null) {
+ Log.i("$TAG Friend [${found.name}] was found using SIP URI [$sipUri]")
+ found
+ } else if (!username.isNullOrEmpty() && username.startsWith("+")) {
Log.i("$TAG Looking for friend with phone number [$username]")
- val foundUsingPhoneNumber = coreContext.core.findFriendByPhoneNumber(
- username
- )
- foundUsingPhoneNumber ?: findNativeContact(sipUri, true, username)
+ val foundUsingPhoneNumber = coreContext.core.findFriendByPhoneNumber(username)
+ if (foundUsingPhoneNumber != null) {
+ Log.i(
+ "$TAG Friend [${foundUsingPhoneNumber.name}] was found using phone number [$username]"
+ )
+ foundUsingPhoneNumber
+ } else {
+ Log.i(
+ "$TAG Friend wasn't found using phone number [$username], looking in native address book directly"
+ )
+ findNativeContact(sipUri, true, username)
+ }
} else {
+ Log.i(
+ "$TAG Friend wasn't found using SIP URI [$sipUri] and username [$username] isn't a phone number, looking in native address book directly"
+ )
findNativeContact(sipUri, false)
}
}
diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
index c40fd5c86..a37cedb42 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
@@ -42,6 +42,7 @@ import org.linphone.ui.main.chat.model.ParticipantModel
import org.linphone.ui.main.chat.viewmodel.ConversationInfoViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.DialogUtils
+import org.linphone.utils.Event
@UiThread
class ConversationInfoFragment : GenericFragment() {
@@ -212,6 +213,9 @@ class ConversationInfoFragment : GenericFragment() {
val address = participantModel.sipUri
val isAdmin = participantModel.isParticipantAdmin
popupView.isParticipantAdmin = isAdmin
+ popupView.isMeAdmin = participantModel.isMyselfAdmin
+ val friendRefKey = participantModel.avatarModel.friend.refKey
+ popupView.isParticipantContact = !friendRefKey.isNullOrEmpty()
popupView.setRemoveParticipantClickListener {
Log.w("$TAG Trying to remove participant [$address]")
@@ -231,6 +235,26 @@ class ConversationInfoFragment : GenericFragment() {
popupWindow.dismiss()
}
+ popupView.setSeeContactProfileClickListener {
+ Log.w("$TAG Trying to display participant [$address] contact page")
+ if (!friendRefKey.isNullOrEmpty()) {
+ sharedViewModel.navigateToContactsEvent.value = Event(true)
+ sharedViewModel.showContactEvent.value = Event(friendRefKey)
+ } else {
+ Log.e("$TAG Can't go to contact page, friend ref key is null or empty!")
+ // TODO: show toast
+ }
+ popupWindow.dismiss()
+ }
+
+ popupView.setAddToContactsClickListener {
+ Log.w("$TAG Trying to add participant [${participantModel.sipUri}] to contacts")
+ sharedViewModel.sipAddressToAddToNewContact = participantModel.sipUri
+ sharedViewModel.navigateToContactsEvent.value = Event(true)
+ sharedViewModel.showNewContactEvent.value = Event(true)
+ popupWindow.dismiss()
+ }
+
// Elevation is for showing a shadow around the popup
popupWindow.elevation = 20f
popupWindow.showAsDropDown(view, 0, 0, Gravity.BOTTOM)
diff --git a/app/src/main/res/layout/chat_participant_admin_popup_menu.xml b/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
index 7e2c92958..fd73c9fb7 100644
--- a/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
+++ b/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
@@ -9,15 +9,27 @@
+
+
+
+
+
+
+
+
@@ -73,7 +141,7 @@
android:layout_marginEnd="20dp"
android:layout_marginTop="16dp"
android:background="@color/gray_main2_400"
- android:visibility="gone"
+ android:visibility="@{isMeAdmin ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/unset_admin"
@@ -83,21 +151,35 @@
style="@style/default_text_style"
android:id="@+id/remove_participant"
android:onClick="@{removeParticipantClickListener}"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
- android:layout_marginBottom="16dp"
- android:paddingEnd="20dp"
- android:paddingStart="20dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:text="@string/conversation_info_admin_menu_remove_participant"
android:textSize="14sp"
android:textColor="@color/red_danger_500"
+ android:maxLines="1"
+ android:ellipsize="end"
+ android:visibility="@{isMeAdmin ? View.VISIBLE : View.GONE}"
android:drawableStart="@drawable/trash_simple"
android:drawablePadding="5dp"
app:drawableTint="@color/red_danger_500"
+ app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/separator"
- app:layout_constraintBottom_toBottomOf="parent"/>
+ app:layout_constraintBottom_toTopOf="@id/bottom_anchor"/>
+
+
diff --git a/app/src/main/res/layout/chat_participant_list_cell.xml b/app/src/main/res/layout/chat_participant_list_cell.xml
index 3437a2e47..4a5bd4385 100644
--- a/app/src/main/res/layout/chat_participant_list_cell.xml
+++ b/app/src/main/res/layout/chat_participant_list_cell.xml
@@ -16,7 +16,7 @@
android:onClick="@{() -> model.onClicked()}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/primary_cell_background"
+ android:background="@color/white"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
@@ -87,7 +87,6 @@
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:src="@drawable/dots_three_vertical"
- android:visibility="@{model.isMyselfAdmin ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/name"
app:layout_constraintTop_toTopOf="parent"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 03afe2024..784d14fc1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -370,6 +370,8 @@
Remove from the group
Give admin rights
Remove admin rights
+ See contact profile
+ Add to contacts
You have joined the group
You have left the group