From 625edfe33a6e355c6f84e2d50a173389dac8c213 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 20 Feb 2024 17:50:31 +0100 Subject: [PATCH] Various UI fixes --- .../linphone/ui/call/model/ConferenceModel.kt | 20 +++++++++++++++++++ .../ui/call/viewmodel/CurrentCallViewModel.kt | 2 +- .../chat/fragment/ConversationFragment.kt | 16 ++++++++++----- .../main/res/color/in_call_label_color.xml | 7 +++++++ .../call_active_conference_fragment.xml | 2 +- .../call_conference_actions_bottom_sheet.xml | 1 + .../layout/call_conference_layout_menu.xml | 7 ++++--- .../res/layout/chat_conversation_fragment.xml | 14 +++++++++++++ .../res/layout/history_contact_popup_menu.xml | 9 ++++----- 9 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/color/in_call_label_color.xml diff --git a/app/src/main/java/org/linphone/ui/call/model/ConferenceModel.kt b/app/src/main/java/org/linphone/ui/call/model/ConferenceModel.kt index c578ed946..ce37a1b2f 100644 --- a/app/src/main/java/org/linphone/ui/call/model/ConferenceModel.kt +++ b/app/src/main/java/org/linphone/ui/call/model/ConferenceModel.kt @@ -30,6 +30,7 @@ import org.linphone.core.ConferenceListenerStub import org.linphone.core.MediaDirection import org.linphone.core.Participant import org.linphone.core.ParticipantDevice +import org.linphone.core.StreamType import org.linphone.core.tools.Log import org.linphone.utils.AppUtils import org.linphone.utils.Event @@ -59,6 +60,8 @@ class ConferenceModel { val conferenceLayout = MutableLiveData() + val isMeParticipantSendingVideo = MutableLiveData() + val showLayoutMenuEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -82,6 +85,18 @@ class ConferenceModel { removeParticipant(participant) } + override fun onParticipantDeviceMediaCapabilityChanged( + conference: Conference, + device: ParticipantDevice + ) { + if (conference.isMe(device.address)) { + val direction = device.getStreamCapability(StreamType.Video) + isMeParticipantSendingVideo.postValue( + direction == MediaDirection.SendRecv || direction == MediaDirection.SendOnly + ) + } + } + @WorkerThread override fun onActiveSpeakerParticipantDevice( conference: Conference, @@ -337,6 +352,11 @@ class ConferenceModel { activeSpeaker.postValue(model) activeSpeakerParticipantDeviceFound = true } + + val direction = device.getStreamCapability(StreamType.Video) + isMeParticipantSendingVideo.postValue( + direction == MediaDirection.SendRecv || direction == MediaDirection.SendOnly + ) } if (!activeSpeakerParticipantDeviceFound) { diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index 8801b4a33..89b242915 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -811,7 +811,7 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() { canBePaused.postValue(canCallBePaused()) val address = call.remoteAddress - displayedAddress.postValue(address.asStringUriOnly()) + displayedAddress.postValue(LinphoneUtils.getAddressAsCleanStringUriOnly(address)) val conferenceInfo = coreContext.core.findConferenceInformationFromUri(address) val model = if (conferenceInfo != null) { diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 200c3f186..cee7e41cc 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -383,11 +383,6 @@ class ConversationFragment : SlidingPaneChildFragment() { } else { sendMessageViewModel.configureChatRoom(viewModel.chatRoom) - if (viewModel.isEndToEndEncrypted.value == true) { - binding.eventsList.addItemDecoration(headerItemDecoration) - binding.eventsList.addOnItemTouchListener(listItemTouchListener) - } - // Wait for chat room to be ready before trying to forward a message in it sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner) { event -> event.consume { toForward -> @@ -416,6 +411,13 @@ class ConversationFragment : SlidingPaneChildFragment() { } } + viewModel.isEndToEndEncrypted.observe(viewLifecycleOwner) { encrypted -> + if (encrypted) { + binding.eventsList.addItemDecoration(headerItemDecoration) + binding.eventsList.addOnItemTouchListener(listItemTouchListener) + } + } + binding.messageBottomSheet.bottomSheetList.setHasFixedSize(true) val bottomSheetLayoutManager = LinearLayoutManager(requireContext()) binding.messageBottomSheet.bottomSheetList.layoutManager = bottomSheetLayoutManager @@ -511,6 +513,10 @@ class ConversationFragment : SlidingPaneChildFragment() { scrollToFirstUnreadMessageOrBottom() } + binding.setEndToEndEncryptedEventClickListener { + showEndToEndEncryptionDetailsBottomSheet() + } + sendMessageViewModel.emojiToAddEvent.observe(viewLifecycleOwner) { it.consume { emoji -> binding.sendArea.messageToSend.addCharacterAtPosition(emoji) diff --git a/app/src/main/res/color/in_call_label_color.xml b/app/src/main/res/color/in_call_label_color.xml new file mode 100644 index 000000000..2d77faa20 --- /dev/null +++ b/app/src/main/res/color/in_call_label_color.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/layout/call_active_conference_fragment.xml b/app/src/main/res/layout/call_active_conference_fragment.xml index 389f5c8cc..0af11db79 100644 --- a/app/src/main/res/layout/call_active_conference_fragment.xml +++ b/app/src/main/res/layout/call_active_conference_fragment.xml @@ -127,7 +127,7 @@ android:layout_marginStart="5dp" android:layout_marginEnd="5dp" android:src="@drawable/camera_rotate" - android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode && viewModel.isVideoEnabled && viewModel.showSwitchCamera && conferenceViewModel.participantDevices.size() > 1 ? View.VISIBLE : View.GONE}" + android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode && viewModel.showSwitchCamera && conferenceViewModel.participantDevices.size() > 1 && conferenceViewModel.isMeParticipantSendingVideo ? View.VISIBLE : View.GONE}" app:tint="@color/white" app:layout_constraintTop_toTopOf="@id/conference_subject" app:layout_constraintBottom_toBottomOf="@id/conference_subject" diff --git a/app/src/main/res/layout/call_conference_actions_bottom_sheet.xml b/app/src/main/res/layout/call_conference_actions_bottom_sheet.xml index 2bea62806..82e189877 100644 --- a/app/src/main/res/layout/call_conference_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/call_conference_actions_bottom_sheet.xml @@ -23,6 +23,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/call_all_actions_menu_height" android:background="@drawable/shape_call_bottom_sheet_background" + android:visibility="@{viewModel.fullScreenMode || viewModel.pipMode ? View.INVISIBLE : View.VISIBLE}" app:behavior_hideable="false" app:behavior_peekHeight="@dimen/call_main_actions_menu_height" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> diff --git a/app/src/main/res/layout/call_conference_layout_menu.xml b/app/src/main/res/layout/call_conference_layout_menu.xml index 232c2318b..ab8907fa4 100644 --- a/app/src/main/res/layout/call_conference_layout_menu.xml +++ b/app/src/main/res/layout/call_conference_layout_menu.xml @@ -32,14 +32,15 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:text="@string/conference_layout_grid" - android:textColor="@color/white" + android:textColor="@color/in_call_label_color" android:gravity="center_vertical" android:layout_marginBottom="1dp" android:drawableEnd="@drawable/squares_four" - android:drawableTint="@color/white" + android:drawableTint="@color/in_call_label_color" + android:enabled="@{viewModel.participantDevices.size() < 7, default=false}" android:checked="@{viewModel.conferenceLayout == 0}" app:useMaterialThemeColors="false" - app:buttonTint="@color/white"/> + app:buttonTint="@color/in_call_label_color"/> + @@ -248,6 +251,17 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/composing"/> + +