Added option to schedule meeting from group chat room

This commit is contained in:
Sylvain Berfini 2022-09-06 10:53:07 +02:00
parent 9d9c58e7f7
commit 0f485ed66d
9 changed files with 69 additions and 4 deletions

View file

@ -409,6 +409,14 @@ internal fun DetailChatRoomFragment.navigateToDialer(args: Bundle?) {
) )
} }
internal fun DetailChatRoomFragment.navigateToConferenceScheduling() {
findMasterNavController().navigate(
R.id.action_global_conferenceSchedulingFragment,
null,
popupTo()
)
}
internal fun ChatRoomCreationFragment.navigateToGroupInfo() { internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
findNavController().navigate( findNavController().navigate(

View file

@ -871,6 +871,15 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
navigateToEphemeralInfo() navigateToEphemeralInfo()
} }
private fun scheduleMeeting(chatRoom: ChatRoom) {
val participants = arrayListOf<Address>()
for (participant in chatRoom.participants) {
participants.add(participant.address)
}
sharedViewModel.participantsListForNextScheduledMeeting.value = Event(participants)
navigateToConferenceScheduling()
}
private fun showForwardConfirmationDialog(chatMessage: ChatMessage) { private fun showForwardConfirmationDialog(chatMessage: ChatMessage) {
val viewModel = DialogViewModel(getString(R.string.chat_message_forward_confirmation_dialog)) val viewModel = DialogViewModel(getString(R.string.chat_message_forward_confirmation_dialog))
viewModel.iconResource = R.drawable.forward_message_default viewModel.iconResource = R.drawable.forward_message_default
@ -901,7 +910,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
) )
val itemSize = AppUtils.getDimension(R.dimen.chat_room_popup_item_height).toInt() val itemSize = AppUtils.getDimension(R.dimen.chat_room_popup_item_height).toInt()
var totalSize = itemSize * 7 var totalSize = itemSize * 8
val notificationsTurnedOff = viewModel.areNotificationsMuted() val notificationsTurnedOff = viewModel.areNotificationsMuted()
if (notificationsTurnedOff) { if (notificationsTurnedOff) {
@ -918,6 +927,9 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} else { } else {
popupView.goToContactHidden = true popupView.goToContactHidden = true
} }
popupView.meetingHidden = true
totalSize -= itemSize
} else { } else {
popupView.addToContactsHidden = true popupView.addToContactsHidden = true
popupView.goToContactHidden = true popupView.goToContactHidden = true
@ -985,6 +997,10 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
showEphemeralMessages() showEphemeralMessages()
popupWindow.dismiss() popupWindow.dismiss()
} }
popupView.setMeetingListener {
scheduleMeeting(chatRoom)
popupWindow.dismiss()
}
popupView.setEditionModeListener { popupView.setEditionModeListener {
enterEditionMode() enterEditionMode()
popupWindow.dismiss() popupWindow.dismiss()

View file

@ -49,7 +49,16 @@ class ConferenceSchedulingFragment : GenericFragment<ConferenceSchedulingFragmen
binding.viewModel = viewModel binding.viewModel = viewModel
sharedViewModel.conferenceInfoToEdit.observe( sharedViewModel.participantsListForNextScheduledMeeting.observe(
viewLifecycleOwner
) {
it.consume { participants ->
Log.i("[Conference Scheduling] Found participants (${participants.size}) to pre-populate for meeting schedule")
viewModel.prePopulateParticipantsList(participants, true)
}
}
sharedViewModel.addressOfConferenceInfoToEdit.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
it.consume { address -> it.consume { address ->

View file

@ -127,7 +127,7 @@ class ScheduledConferencesFragment : MasterFragment<ConferencesScheduledFragment
viewLifecycleOwner viewLifecycleOwner
) { ) {
it.consume { address -> it.consume { address ->
sharedViewModel.conferenceInfoToEdit.value = Event(address) sharedViewModel.addressOfConferenceInfoToEdit.value = Event(address)
navigateToConferenceScheduling() navigateToConferenceScheduling()
} }
} }

View file

@ -196,6 +196,11 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
super.onCleared() super.onCleared()
} }
fun prePopulateParticipantsList(participants: ArrayList<Address>, isSchedule: Boolean) {
selectedAddresses.value = participants
scheduleForLater.value = isSchedule
}
fun populateFromConferenceInfo(conferenceInfo: ConferenceInfo) { fun populateFromConferenceInfo(conferenceInfo: ConferenceInfo) {
confInfo = conferenceInfo confInfo = conferenceInfo

View file

@ -101,10 +101,14 @@ class SharedMainViewModel : ViewModel() {
/* Conference */ /* Conference */
val conferenceInfoToEdit: MutableLiveData<Event<String>> by lazy { val addressOfConferenceInfoToEdit: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>() MutableLiveData<Event<String>>()
} }
val participantsListForNextScheduledMeeting: MutableLiveData<Event<ArrayList<Address>>> by lazy {
MutableLiveData<Event<ArrayList<Address>>>()
}
/* Dialer */ /* Dialer */
var dialerUri: String = "" var dialerUri: String = ""

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/menu_meeting_schedule"
android:tint="?attr/drawableTintColor"/>
</item>
</selector>

View file

@ -13,6 +13,9 @@
<variable <variable
name="ephemeralListener" name="ephemeralListener"
type="View.OnClickListener" /> type="View.OnClickListener" />
<variable
name="meetingListener"
type="View.OnClickListener" />
<variable <variable
name="editionModeListener" name="editionModeListener"
type="View.OnClickListener" /> type="View.OnClickListener" />
@ -31,6 +34,9 @@
<variable <variable
name="ephemeralHidden" name="ephemeralHidden"
type="Boolean" /> type="Boolean" />
<variable
name="meetingHidden"
type="Boolean" />
<variable <variable
name="muteHidden" name="muteHidden"
type="Boolean" /> type="Boolean" />
@ -107,6 +113,16 @@
android:text="@string/chat_message_context_menu_ephemeral_messages" android:text="@string/chat_message_context_menu_ephemeral_messages"
app:drawableRightCompat="@drawable/chat_room_menu_ephemeral" /> app:drawableRightCompat="@drawable/chat_room_menu_ephemeral" />
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/chat_room_popup_item_height"
android:visibility="@{meetingHidden ? View.GONE : View.VISIBLE}"
android:background="@drawable/menu_background"
android:onClick="@{meetingListener}"
style="@style/popup_item_font"
android:text="@string/conference_schedule_title"
app:drawableRightCompat="@drawable/chat_room_menu_meeting" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/chat_room_popup_item_height" android:layout_height="@dimen/chat_room_popup_item_height"