Use new APIs from SDK to handle meeting update/cancel

This commit is contained in:
Sylvain Berfini 2022-08-25 17:23:48 +02:00
parent 261dc9791a
commit bb288f03cc
10 changed files with 58 additions and 12 deletions

View file

@ -59,6 +59,8 @@ class ChatMessageContentData(
val isGenericFile = MutableLiveData<Boolean>() val isGenericFile = MutableLiveData<Boolean>()
val isVoiceRecording = MutableLiveData<Boolean>() val isVoiceRecording = MutableLiveData<Boolean>()
val isConferenceSchedule = MutableLiveData<Boolean>() val isConferenceSchedule = MutableLiveData<Boolean>()
val isConferenceUpdated = MutableLiveData<Boolean>()
val isConferenceCancelled = MutableLiveData<Boolean>()
val fileName = MutableLiveData<String>() val fileName = MutableLiveData<String>()
val filePath = MutableLiveData<String>() val filePath = MutableLiveData<String>()
@ -233,6 +235,8 @@ class ChatMessageContentData(
isPdf.value = false isPdf.value = false
isVoiceRecording.value = false isVoiceRecording.value = false
isConferenceSchedule.value = false isConferenceSchedule.value = false
isConferenceUpdated.value = false
isConferenceCancelled.value = false
if (content.isFile || (content.isFileTransfer && chatMessage.isOutgoing)) { if (content.isFile || (content.isFileTransfer && chatMessage.isOutgoing)) {
val path = if (isFileEncrypted) { val path = if (isFileEncrypted) {
@ -308,6 +312,10 @@ class ChatMessageContentData(
conferenceSubject.value = conferenceInfo.subject conferenceSubject.value = conferenceInfo.subject
conferenceDescription.value = conferenceInfo.description conferenceDescription.value = conferenceInfo.description
val state = conferenceInfo.state
isConferenceUpdated.value = state == ConferenceInfoState.Updated
isConferenceCancelled.value = state == ConferenceInfoState.Cancelled
conferenceDate.value = TimestampUtils.dateToString(conferenceInfo.dateTime) conferenceDate.value = TimestampUtils.dateToString(conferenceInfo.dateTime)
conferenceTime.value = TimestampUtils.timeToString(conferenceInfo.dateTime) conferenceTime.value = TimestampUtils.timeToString(conferenceInfo.dateTime)

View file

@ -42,10 +42,6 @@ class ConferenceSchedulingSummaryFragment : GenericFragment<ConferenceScheduling
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setCreateConferenceClickListener {
viewModel.createConference()
}
viewModel.conferenceCreationCompletedEvent.observe( viewModel.conferenceCreationCompletedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {

View file

@ -38,6 +38,7 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
val description = MutableLiveData<String>() val description = MutableLiveData<String>()
val scheduleForLater = MutableLiveData<Boolean>() val scheduleForLater = MutableLiveData<Boolean>()
val isUpdate = MutableLiveData<Boolean>()
val formattedDate = MutableLiveData<String>() val formattedDate = MutableLiveData<String>()
val formattedTime = MutableLiveData<String>() val formattedTime = MutableLiveData<String>()
@ -156,6 +157,8 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
subject.value = "" subject.value = ""
scheduleForLater.value = false scheduleForLater.value = false
isUpdate.value = false
isEncrypted.value = false isEncrypted.value = false
sendInviteViaChat.value = true sendInviteViaChat.value = true
sendInviteViaEmail.value = false sendInviteViaEmail.value = false
@ -195,9 +198,11 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
fun populateFromConferenceInfo(conferenceInfo: ConferenceInfo) { fun populateFromConferenceInfo(conferenceInfo: ConferenceInfo) {
confInfo = conferenceInfo confInfo = conferenceInfo
address.value = conferenceInfo.uri address.value = conferenceInfo.uri
subject.value = conferenceInfo.subject subject.value = conferenceInfo.subject
description.value = conferenceInfo.description description.value = conferenceInfo.description
isUpdate.value = true
val dateTime = conferenceInfo.dateTime val dateTime = conferenceInfo.dateTime
val calendar = Calendar.getInstance() val calendar = Calendar.getInstance()
@ -262,7 +267,11 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
val localAccount = core.defaultAccount val localAccount = core.defaultAccount
val localAddress = localAccount?.params?.identityAddress val localAddress = localAccount?.params?.identityAddress
val conferenceInfo = confInfo ?: Factory.instance().createConferenceInfo() val conferenceInfo = if (isUpdate.value == true) {
confInfo?.clone() ?: Factory.instance().createConferenceInfo()
} else {
Factory.instance().createConferenceInfo()
}
conferenceInfo.organizer = localAddress conferenceInfo.organizer = localAddress
conferenceInfo.subject = subject.value conferenceInfo.subject = subject.value
conferenceInfo.description = description.value conferenceInfo.description = description.value
@ -273,6 +282,7 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
val duration = duration.value?.value ?: 0 val duration = duration.value?.value ?: 0
conferenceInfo.duration = duration conferenceInfo.duration = duration
} }
confInfo = conferenceInfo confInfo = conferenceInfo
conferenceScheduler.account = localAccount conferenceScheduler.account = localAccount
// Will trigger the conference creation/update automatically // Will trigger the conference creation/update automatically

View file

@ -98,7 +98,7 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
val core = coreContext.core val core = coreContext.core
val linphoneMime = loader.context.getString(R.string.linphone_address_mime_type) val linphoneMime = loader.context.getString(R.string.linphone_address_mime_type)
var preferNormalizedPhoneNumber = corePreferences.preferNormalizedPhoneNumbersFromAddressBook val preferNormalizedPhoneNumber = corePreferences.preferNormalizedPhoneNumbersFromAddressBook
if (core.globalState == GlobalState.Shutdown || core.globalState == GlobalState.Off) { if (core.globalState == GlobalState.Shutdown || core.globalState == GlobalState.Off) {
Log.w("[Contacts Loader] Core is being stopped or already destroyed, abort") Log.w("[Contacts Loader] Core is being stopped or already destroyed, abort")

View file

@ -29,7 +29,22 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/conference_invite_title_font" style="@style/conference_invite_title_font"
android:text="@string/conference_invite_title"/> android:text="@string/conference_invite_title"
android:visibility="@{data.isConferenceUpdated || data.isConferenceCancelled ? View.GONE : View.VISIBLE}"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/conference_update_title_font"
android:text="@string/conference_update_title"
android:visibility="@{data.isConferenceUpdated ? View.VISIBLE : View.GONE, default=gone}"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/conference_cancel_title_font"
android:text="@string/conference_cancel_title"
android:visibility="@{data.isConferenceCancelled ? View.VISIBLE : View.GONE, default=gone}"/>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="createConferenceClickListener"
type="android.view.View.OnClickListener" />
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel" /> type="org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel" />
@ -300,7 +297,7 @@
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
<TextView <TextView
android:onClick="@{createConferenceClickListener}" android:onClick="@{() -> viewModel.createConference()}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingLeft="20dp" android:paddingLeft="20dp"
@ -311,7 +308,7 @@
android:layout_marginBottom="10dp" android:layout_marginBottom="10dp"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/shape_rect_orange_button" android:background="@drawable/shape_rect_orange_button"
android:text="@{viewModel.scheduleForLater ? @string/conference_schedule_start : @string/conference_group_call_create, default=@string/conference_group_call_create}" android:text="@{viewModel.scheduleForLater ? (viewModel.isUpdate ? @string/conference_schedule_start : @string/conference_schedule_start) : @string/conference_group_call_create, default=@string/conference_group_call_create}"
style="@style/big_orange_button_font"/> style="@style/big_orange_button_font"/>
</LinearLayout> </LinearLayout>

View file

@ -744,4 +744,7 @@
<string name="call_stats_zrtp_hash_algo">Algorithme de hachage :</string> <string name="call_stats_zrtp_hash_algo">Algorithme de hachage :</string>
<string name="call_stats_zrtp_auth_tag_algo">Algorithme d\'authentification :</string> <string name="call_stats_zrtp_auth_tag_algo">Algorithme d\'authentification :</string>
<string name="call_stats_zrtp_sas_algo">Algorithme SAS :</string> <string name="call_stats_zrtp_sas_algo">Algorithme SAS :</string>
<string name="conference_schedule_edit">Modifier la réunion</string>
<string name="conference_update_title">La réunion a été modifiée : </string>
<string name="conference_cancel_title">La réunion a été annulée : </string>
</resources> </resources>

View file

@ -36,6 +36,8 @@
<color name="voip_dark_color5">#353B3F</color> <!-- Scheduled conference background dark mode --> <color name="voip_dark_color5">#353B3F</color> <!-- Scheduled conference background dark mode -->
<color name="voip_text_dark_color">#6E8596</color> <!-- Text color above voip_dark_color5 --> <color name="voip_text_dark_color">#6E8596</color> <!-- Text color above voip_dark_color5 -->
<color name="voip_conf_address_text_color">#A2A2A2</color> <color name="voip_conf_address_text_color">#A2A2A2</color>
<color name="voip_conference_updated_color">#EFAE00</color>
<color name="voip_conference_cancelled_color">#FF0000</color>
<color name="form_field_gray_background">#F7F7F7</color> <color name="form_field_gray_background">#F7F7F7</color>

View file

@ -261,6 +261,7 @@
<string name="conference_schedule_summary">Meeting info</string> <string name="conference_schedule_summary">Meeting info</string>
<string name="conference_group_call_summary">Group call info</string> <string name="conference_group_call_summary">Group call info</string>
<string name="conference_schedule_start">Schedule meeting</string> <string name="conference_schedule_start">Schedule meeting</string>
<string name="conference_schedule_edit">Edit meeting</string>
<string name="conference_group_call_create">Start group call</string> <string name="conference_group_call_create">Start group call</string>
<string name="conference_schedule_address_copied_to_clipboard">Meeting address copied into clipboard</string> <string name="conference_schedule_address_copied_to_clipboard">Meeting address copied into clipboard</string>
<string name="conference_schedule_info_not_sent_to_participant">Failed to send meeting info to a participant</string> <string name="conference_schedule_info_not_sent_to_participant">Failed to send meeting info to a participant</string>
@ -269,6 +270,8 @@
<string name="conference_default_title">Remote group call</string> <string name="conference_default_title">Remote group call</string>
<string name="conference_local_title">Local group call</string> <string name="conference_local_title">Local group call</string>
<string name="conference_invite_title">Meeting invite:</string> <string name="conference_invite_title">Meeting invite:</string>
<string name="conference_update_title">Meeting has been updated:</string>
<string name="conference_cancel_title">Meeting has been cancelled:</string>
<string name="conference_description_title">Description</string> <string name="conference_description_title">Description</string>
<string name="conference_invite_join">Join</string> <string name="conference_invite_join">Join</string>
<string name="conference_invite_participants_count" tools:ignore="PluralsCandidate">%d participants</string> <string name="conference_invite_participants_count" tools:ignore="PluralsCandidate">%d participants</string>

View file

@ -145,6 +145,18 @@
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>
</style> </style>
<style name="conference_update_title_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/voip_conference_updated_color</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">16sp</item>
</style>
<style name="conference_cancel_title_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/voip_conference_cancelled_color</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">16sp</item>
</style>
<style name="conference_invite_subject_font" parent="@android:style/TextAppearance.Medium"> <style name="conference_invite_subject_font" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">?attr/voipTextColor2</item> <item name="android:textColor">?attr/voipTextColor2</item>
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>