Use new APIs from SDK to handle meeting update/cancel
This commit is contained in:
parent
261dc9791a
commit
bb288f03cc
10 changed files with 58 additions and 12 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue