mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Added missing toasts
This commit is contained in:
parent
b3ef701661
commit
465201010d
34 changed files with 329 additions and 73 deletions
|
|
@ -131,6 +131,15 @@ class LandingFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
val dialPlan = PhoneNumberUtils.getDeviceDialPlan(requireContext())
|
||||
if (dialPlan != null) {
|
||||
|
|
|
|||
|
|
@ -113,6 +113,15 @@ class LoginFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
val dialPlan = PhoneNumberUtils.getDeviceDialPlan(requireContext())
|
||||
if (dialPlan != null) {
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@ open class AccountLoginViewModel @UiThread constructor() : ViewModel() {
|
|||
MutableLiveData<Event<String>>()
|
||||
}
|
||||
|
||||
val showRedToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
private lateinit var newlyCreatedAuthInfo: AuthInfo
|
||||
private lateinit var newlyCreatedAccount: Account
|
||||
|
||||
|
|
@ -152,7 +156,9 @@ open class AccountLoginViewModel @UiThread constructor() : ViewModel() {
|
|||
val identityAddress = Factory.instance().createAddress(identity)
|
||||
if (identityAddress == null) {
|
||||
Log.e("$TAG Can't parse [$identity] as Address!")
|
||||
// TODO: show error
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.assistant_login_cant_parse_address_toast)
|
||||
)
|
||||
return@postOnCoreThread
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +167,9 @@ open class AccountLoginViewModel @UiThread constructor() : ViewModel() {
|
|||
Log.e(
|
||||
"$TAG Address [${identityAddress.asStringUriOnly()}] doesn't contains an username!"
|
||||
)
|
||||
// TODO: show error
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.assistant_login_address_without_username_toast)
|
||||
)
|
||||
return@postOnCoreThread
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -73,14 +73,14 @@ class ConferenceLayoutMenuDialogFragment(
|
|||
if (conferenceModel.participantDevices.value.orEmpty().size < 7) {
|
||||
conferenceModel.changeLayout(ConferenceViewModel.GRID_LAYOUT)
|
||||
dismiss()
|
||||
} else {
|
||||
// TODO: notify user
|
||||
}
|
||||
}
|
||||
|
||||
view.setActiveSpeakerClickListener {
|
||||
conferenceModel.changeLayout(ConferenceViewModel.ACTIVE_SPEAKER_LAYOUT)
|
||||
dismiss()
|
||||
}
|
||||
|
||||
view.setAudioOnlyClickListener {
|
||||
conferenceModel.changeLayout(ConferenceViewModel.AUDIO_ONLY_LAYOUT)
|
||||
dismiss()
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.linphone.R
|
|||
import org.linphone.core.Participant
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.CallConferenceParticipantsListFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.call.adapter.ConferenceParticipantsListAdapter
|
||||
import org.linphone.ui.call.fragment.GenericCallFragment
|
||||
import org.linphone.ui.call.viewmodel.CurrentCallViewModel
|
||||
|
|
@ -113,6 +114,15 @@ class ConferenceParticipantsListFragment : GenericCallFragment() {
|
|||
showKickParticipantDialog(displayName, participant)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.conferenceModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showKickParticipantDialog(displayName: String, participant: Participant) {
|
||||
|
|
@ -132,7 +142,9 @@ class ConferenceParticipantsListFragment : GenericCallFragment() {
|
|||
model.confirmEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
viewModel.conferenceModel.kickParticipant(participant)
|
||||
// TODO: notify participant was kicked out
|
||||
val message = getString(R.string.conference_participant_was_kicked_out_toast)
|
||||
val icon = R.drawable.check
|
||||
(requireActivity() as GenericActivity).showGreenToast(message, icon)
|
||||
dialog.dismiss()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,6 +80,10 @@ class ConferenceViewModel {
|
|||
MutableLiveData<Event<Pair<String, Participant>>>()
|
||||
}
|
||||
|
||||
val showRedToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
private lateinit var conference: Conference
|
||||
|
||||
private val conferenceListener = object : ConferenceListenerStub() {
|
||||
|
|
@ -305,7 +309,9 @@ class ConferenceViewModel {
|
|||
Log.e(
|
||||
"$TAG Failed to parse SIP URI [$uri] into address, can't add it to the conference!"
|
||||
)
|
||||
// TODO: notify user
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.conference_failed_to_add_participant_invalid_address_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
val addressesArray = arrayOfNulls<Address>(addresses.size)
|
||||
|
|
@ -691,7 +697,9 @@ class ConferenceViewModel {
|
|||
"$TAG Too many participant devices for grid layout, switching to active speaker layout"
|
||||
)
|
||||
setNewLayout(ACTIVE_SPEAKER_LAYOUT)
|
||||
// TODO: notify user
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.conference_too_many_participants_for_mosaic_layout_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ class ActiveCallFragment : GenericCallFragment() {
|
|||
callViewModel.chatRoomCreationErrorEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { error ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
error,
|
||||
getString(error),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -173,8 +173,8 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
MutableLiveData<Event<Pair<String, String>>>()
|
||||
}
|
||||
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<String>> by lazy {
|
||||
MutableLiveData<Event<String>>()
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
// Conference
|
||||
|
|
@ -347,7 +347,9 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
Log.e("$TAG Conversation [$id] creation has failed!")
|
||||
chatRoom.removeListener(this)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_creation_error_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -851,7 +853,9 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
|
|||
"$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!"
|
||||
)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_creation_error_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ class StartConversationFragment : GenericAddressPickerFragment() {
|
|||
it.consume { error ->
|
||||
Log.i("$TAG Conversation creation error, showing red toast")
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
error,
|
||||
getString(error),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
|
|
@ -151,7 +151,9 @@ class StartConversationFragment : GenericAddressPickerFragment() {
|
|||
dialog.currentFocus?.hideKeyboard()
|
||||
dialog.dismiss()
|
||||
} else {
|
||||
// TODO: show error
|
||||
val message = getString(R.string.conversation_invalid_empty_subject_toast)
|
||||
val icon = R.drawable.warning_circle
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -203,12 +203,18 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi
|
|||
coreContext.startVideoCall(conferenceAddress)
|
||||
} else {
|
||||
Log.e("$TAG Conference info URI is null!")
|
||||
// TODO: notify error to user
|
||||
val message = AppUtils.getString(
|
||||
R.string.conference_failed_to_create_group_call_toast
|
||||
)
|
||||
showRedToastEvent.postValue(Event(Pair(message, R.drawable.warning_circle)))
|
||||
}
|
||||
} else if (state == ConferenceScheduler.State.Error) {
|
||||
conferenceScheduler.removeListener(this)
|
||||
Log.e("$TAG Failed to create group call!")
|
||||
// TODO: notify error to user
|
||||
val message = AppUtils.getString(
|
||||
R.string.conference_failed_to_create_group_call_toast
|
||||
)
|
||||
showRedToastEvent.postValue(Event(Pair(message, R.drawable.warning_circle)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -295,12 +295,18 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo
|
|||
coreContext.startVideoCall(conferenceAddress)
|
||||
} else {
|
||||
Log.e("$TAG Conference info URI is null!")
|
||||
// TODO: notify error to user
|
||||
val message = AppUtils.getString(
|
||||
R.string.conference_failed_to_create_group_call_toast
|
||||
)
|
||||
showRedToastEvent.postValue(Event(Pair(message, R.drawable.warning_circle)))
|
||||
}
|
||||
} else if (state == ConferenceScheduler.State.Error) {
|
||||
conferenceScheduler.removeListener(this)
|
||||
Log.e("$TAG Failed to create group call!")
|
||||
// TODO: notify error to user
|
||||
val message = AppUtils.getString(
|
||||
R.string.conference_failed_to_create_group_call_toast
|
||||
)
|
||||
showRedToastEvent.postValue(Event(Pair(message, R.drawable.warning_circle)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM
|
|||
|
||||
val operationInProgress = MutableLiveData<Boolean>()
|
||||
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<String>> by lazy {
|
||||
MutableLiveData<Event<String>>()
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
val chatRoomCreatedEvent: MutableLiveData<Event<Pair<String, String>>> by lazy {
|
||||
|
|
@ -81,7 +81,9 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM
|
|||
Log.e("$TAG Conversation [$id] creation has failed!")
|
||||
chatRoom.removeListener(this)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_failed_to_create_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -165,7 +167,9 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM
|
|||
} else {
|
||||
Log.e("$TAG Failed to create group conversation [$groupChatRoomSubject]!")
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_failed_to_create_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -212,7 +216,9 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM
|
|||
"$TAG Account is in secure mode, can't chat with SIP address of different domain [${remote.asStringUriOnly()}]"
|
||||
)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_invalid_participant_due_to_security_mode_toast)
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -258,7 +264,9 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM
|
|||
} else {
|
||||
Log.e("$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!")
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_failed_to_create_toast)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
Log.w(
|
||||
|
|
|
|||
|
|
@ -224,7 +224,11 @@ class ContactFragment : SlidingPaneChildFragment() {
|
|||
Log.w(
|
||||
"$TAG Contact [${viewModel.contact.value?.name?.value}] has been deleted"
|
||||
)
|
||||
// TODO: show green toast
|
||||
|
||||
val message = getString(R.string.contact_deleted_toast)
|
||||
val icon = R.drawable.check
|
||||
(requireActivity() as GenericActivity).showGreenToast(message, icon)
|
||||
|
||||
goBack()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ import org.linphone.R
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.ContactsListFilterPopupMenuBinding
|
||||
import org.linphone.databinding.ContactsListFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.contacts.adapter.ContactsListAdapter
|
||||
import org.linphone.ui.main.contacts.model.ContactAvatarModel
|
||||
import org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel
|
||||
|
|
@ -149,6 +150,15 @@ class ContactsListFragment : AbstractMainFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
listViewModel.showGreenToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.check
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
binding.setOnNewContactClicked {
|
||||
sharedViewModel.showNewContactEvent.value = Event(true)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,6 +182,15 @@ class EditContactFragment : SlidingPaneChildFragment() {
|
|||
removeCell(model)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
|
|
|||
|
|
@ -180,6 +180,15 @@ class NewContactFragment : GenericFragment() {
|
|||
removeCell(model)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import androidx.lifecycle.ViewModel
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.R
|
||||
import org.linphone.contacts.ContactLoader.Companion.LINPHONE_ADDRESS_BOOK_FRIEND_LIST
|
||||
import org.linphone.core.Friend
|
||||
import org.linphone.core.FriendList.Status
|
||||
|
|
@ -74,6 +75,10 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val removeNewNumberOrAddressFieldEvent = MutableLiveData<Event<NewOrEditNumberOrAddressModel>>()
|
||||
|
||||
val showRedToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun findFriendByRefKey(refKey: String?) {
|
||||
reset()
|
||||
|
|
@ -137,7 +142,9 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
|
|||
val organization = company.value.orEmpty().trim()
|
||||
if (fn.isEmpty() && ln.isEmpty() && organization.isEmpty()) {
|
||||
Log.e("$TAG At least a mandatory field wasn't filled, aborting save")
|
||||
// TODO: notify user
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.contact_editor_mandatory_field_not_filled_toast)
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,8 +94,8 @@ class ContactViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val operationInProgress = MutableLiveData<Boolean>()
|
||||
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<String>> by lazy {
|
||||
MutableLiveData<Event<String>>()
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
val showLongPressMenuForNumberOrAddressEvent: MutableLiveData<Event<ContactNumberOrAddressModel>> by lazy {
|
||||
|
|
@ -209,7 +209,9 @@ class ContactViewModel @UiThread constructor() : ViewModel() {
|
|||
Log.e("$TAG Conversation [$id] creation has failed!")
|
||||
chatRoom.removeListener(this)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_creation_error_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -626,7 +628,9 @@ class ContactViewModel @UiThread constructor() : ViewModel() {
|
|||
"$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!"
|
||||
)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_creation_error_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import java.util.Locale
|
|||
import kotlinx.coroutines.launch
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
import org.linphone.contacts.ContactsManager.ContactsListener
|
||||
import org.linphone.core.Friend
|
||||
import org.linphone.core.MagicSearch
|
||||
|
|
@ -63,6 +64,10 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
|||
MutableLiveData<Event<Pair<String, File>>>()
|
||||
}
|
||||
|
||||
val showGreenToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
private var previousFilter = "NotSet"
|
||||
private var domainFilter = ""
|
||||
|
||||
|
|
@ -218,7 +223,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
|||
coreContext.contactsManager.contactRemoved(contactModel.friend)
|
||||
contactModel.friend.remove()
|
||||
coreContext.contactsManager.notifyContactsListChanged()
|
||||
// TODO: show green toast
|
||||
showGreenToastEvent.postValue(Event(R.string.contact_deleted_toast))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -142,7 +142,10 @@ class MediaListViewerFragment : GenericFragment() {
|
|||
|
||||
val position = if (index == -1) {
|
||||
Log.e("$TAG File [$path] not found, using latest one available instead!")
|
||||
// TODO: show error toast
|
||||
val message = getString(R.string.conversation_media_not_found_toast)
|
||||
val icon = R.drawable.warning_circle
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
|
||||
count - 1
|
||||
} else {
|
||||
index
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.linphone.core.Address
|
|||
import org.linphone.core.Friend
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.StartCallFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.fragment.GenericAddressPickerFragment
|
||||
import org.linphone.ui.main.fragment.GroupSetOrEditSubjectDialogModel
|
||||
import org.linphone.ui.main.history.viewmodel.StartCallViewModel
|
||||
|
|
@ -141,6 +142,15 @@ class StartCallFragment : GenericAddressPickerFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
binding.root.setKeyboardInsetListener { keyboardVisible ->
|
||||
if (keyboardVisible) {
|
||||
viewModel.isNumpadVisible.value = false
|
||||
|
|
@ -186,7 +196,9 @@ class StartCallFragment : GenericAddressPickerFragment() {
|
|||
dialog.currentFocus?.hideKeyboard()
|
||||
dialog.dismiss()
|
||||
} else {
|
||||
// TODO: show error
|
||||
val message = getString(R.string.conversation_invalid_empty_subject_toast)
|
||||
val icon = R.drawable.warning_circle
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,8 +59,8 @@ class HistoryViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val callLogFoundEvent = MutableLiveData<Event<Boolean>>()
|
||||
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<String>> by lazy {
|
||||
MutableLiveData<Event<String>>()
|
||||
val chatRoomCreationErrorEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
val goToConversationEvent: MutableLiveData<Event<Pair<String, String>>> by lazy {
|
||||
|
|
@ -100,7 +100,9 @@ class HistoryViewModel @UiThread constructor() : ViewModel() {
|
|||
Log.e("$TAG Conversation [$id] creation has failed!")
|
||||
chatRoom.removeListener(this)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_failed_to_create_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -268,7 +270,9 @@ class HistoryViewModel @UiThread constructor() : ViewModel() {
|
|||
"$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!"
|
||||
)
|
||||
operationInProgress.postValue(false)
|
||||
chatRoomCreationErrorEvent.postValue(Event("Error!")) // TODO: use translated string
|
||||
chatRoomCreationErrorEvent.postValue(
|
||||
Event(R.string.conversation_failed_to_create_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import kotlinx.coroutines.delay
|
|||
import kotlinx.coroutines.launch
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
import org.linphone.core.ConferenceScheduler
|
||||
import org.linphone.core.ConferenceSchedulerListenerStub
|
||||
import org.linphone.core.Factory
|
||||
|
|
@ -69,6 +70,10 @@ class StartCallViewModel @UiThread constructor() : AddressSelectionViewModel() {
|
|||
MutableLiveData<Event<Boolean>>()
|
||||
}
|
||||
|
||||
val showRedToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
private val conferenceSchedulerListener = object : ConferenceSchedulerListenerStub() {
|
||||
override fun onStateChanged(
|
||||
conferenceScheduler: ConferenceScheduler,
|
||||
|
|
@ -86,13 +91,17 @@ class StartCallViewModel @UiThread constructor() : AddressSelectionViewModel() {
|
|||
coreContext.startVideoCall(conferenceAddress)
|
||||
} else {
|
||||
Log.e("$TAG Conference info URI is null!")
|
||||
// TODO: notify error to user
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.conference_failed_to_create_group_call_toast)
|
||||
)
|
||||
}
|
||||
operationInProgress.postValue(false)
|
||||
} else if (state == ConferenceScheduler.State.Error) {
|
||||
conferenceScheduler.removeListener(this)
|
||||
Log.e("$TAG Failed to create group call!")
|
||||
// TODO: notify error to user
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.conference_failed_to_create_group_call_toast)
|
||||
)
|
||||
operationInProgress.postValue(false)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -185,6 +185,15 @@ class EditMeetingFragment : SlidingPaneChildFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
sharedViewModel.listOfSelectedSipUrisEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { list ->
|
||||
Log.i(
|
||||
|
|
|
|||
|
|
@ -186,6 +186,15 @@ class ScheduleMeetingFragment : GenericFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { message ->
|
||||
(requireActivity() as GenericActivity).showRedToast(
|
||||
getString(message),
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
sharedViewModel.listOfSelectedSipUrisEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { list ->
|
||||
Log.i(
|
||||
|
|
|
|||
|
|
@ -75,10 +75,16 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val operationInProgress = MutableLiveData<Boolean>()
|
||||
|
||||
val conferenceCreatedEvent = MutableLiveData<Event<Boolean>>()
|
||||
|
||||
val hideBroadcast = MutableLiveData<Boolean>()
|
||||
|
||||
val conferenceCreatedEvent: MutableLiveData<Event<Boolean>> by lazy {
|
||||
MutableLiveData<Event<Boolean>>()
|
||||
}
|
||||
|
||||
val showRedToastEvent: MutableLiveData<Event<Int>> by lazy {
|
||||
MutableLiveData<Event<Int>>()
|
||||
}
|
||||
|
||||
private var startTimestamp = 0L
|
||||
private var endTimestamp = 0L
|
||||
|
||||
|
|
@ -102,7 +108,7 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
|
|||
when (state) {
|
||||
ConferenceScheduler.State.Error -> {
|
||||
operationInProgress.postValue(false)
|
||||
// TODO: show error toast
|
||||
showRedToastEvent.postValue(Event(R.string.meeting_failed_to_schedule_toast))
|
||||
}
|
||||
ConferenceScheduler.State.Ready -> {
|
||||
val conferenceAddress = conferenceScheduler.info?.uri
|
||||
|
|
@ -146,14 +152,18 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
|
|||
}
|
||||
participants.value.orEmpty().size -> {
|
||||
Log.e("$TAG No invitation sent!")
|
||||
// TODO: show error toast
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.meeting_failed_to_send_invites_toast)
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
Log.w("$TAG [$failedCount] invitations couldn't have been sent for:")
|
||||
for (failed in failedInvitations.orEmpty()) {
|
||||
Log.w(failed.asStringUriOnly())
|
||||
}
|
||||
// TODO: show error toast
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.meeting_failed_to_send_part_of_invites_toast)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -343,7 +353,9 @@ class ScheduleMeetingViewModel @UiThread constructor() : ViewModel() {
|
|||
Log.e(
|
||||
"$TAG Either no subject was set or no participant was selected, can't schedule meeting."
|
||||
)
|
||||
// TODO: show red toast
|
||||
showRedToastEvent.postValue(
|
||||
Event(R.string.meeting_schedule_mandatory_field_not_filled_toast)
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import kotlinx.coroutines.launch
|
|||
import org.linphone.R
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.AccountProfileFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.fragment.GenericFragment
|
||||
import org.linphone.ui.main.history.model.ConfirmationDialogModel
|
||||
import org.linphone.ui.main.settings.viewmodel.AccountProfileViewModel
|
||||
|
|
@ -198,7 +199,9 @@ class AccountProfileFragment : GenericFragment() {
|
|||
Log.e(
|
||||
"$TAG Failed to find an account matching this identity address [$identity]"
|
||||
)
|
||||
// TODO: show error
|
||||
val message = getString(R.string.account_failed_to_find_identity_toast)
|
||||
val icon = R.drawable.warning_circle
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
goBack()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import org.linphone.R
|
|||
import org.linphone.core.TransportType
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.AccountSettingsFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.fragment.GenericFragment
|
||||
import org.linphone.ui.main.settings.viewmodel.AccountSettingsViewModel
|
||||
import org.linphone.utils.Event
|
||||
|
|
@ -122,7 +123,9 @@ class AccountSettingsFragment : GenericFragment() {
|
|||
Log.e(
|
||||
"$TAG Failed to find an account matching this identity address [$identity]"
|
||||
)
|
||||
// TODO: show error
|
||||
val message = getString(R.string.account_failed_to_find_identity_toast)
|
||||
val icon = R.drawable.warning_circle
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
goBack()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,18 +73,19 @@ class CardDavAddressBookConfigurationFragment : GenericFragment() {
|
|||
goBack()
|
||||
}
|
||||
|
||||
viewModel.cardDavOperationSuccessfulEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
Log.i("$TAG CardDAV friend list operation was successful, going back")
|
||||
// TODO: show green toast
|
||||
viewModel.showGreenToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { pair ->
|
||||
val message = getString(pair.first)
|
||||
val icon = pair.second
|
||||
(requireActivity() as GenericActivity).showGreenToast(message, icon)
|
||||
goBack()
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.showErrorToastEvent.observe(viewLifecycleOwner) {
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { pair ->
|
||||
val icon = pair.first
|
||||
val message = pair.second
|
||||
val message = getString(pair.first)
|
||||
val icon = pair.second
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,10 +80,10 @@ class LdapServerConfigurationFragment : GenericFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
viewModel.showErrorToastEvent.observe(viewLifecycleOwner) {
|
||||
viewModel.showRedToastEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { pair ->
|
||||
val icon = pair.first
|
||||
val message = pair.second
|
||||
val message = getString(pair.first)
|
||||
val icon = pair.second
|
||||
(requireActivity() as GenericActivity).showRedToast(message, icon)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,12 +52,12 @@ class CardDavViewModel : ViewModel() {
|
|||
|
||||
val syncInProgress = MutableLiveData<Boolean>()
|
||||
|
||||
val cardDavOperationSuccessfulEvent: MutableLiveData<Event<Boolean>> by lazy {
|
||||
MutableLiveData<Event<Boolean>>()
|
||||
val showGreenToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
|
||||
MutableLiveData<Event<Pair<Int, Int>>>()
|
||||
}
|
||||
|
||||
val showErrorToastEvent: MutableLiveData<Event<Pair<Int, String>>> by lazy {
|
||||
MutableLiveData<Event<Pair<Int, String>>>()
|
||||
val showRedToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
|
||||
MutableLiveData<Event<Pair<Int, Int>>>()
|
||||
}
|
||||
|
||||
private lateinit var friendList: FriendList
|
||||
|
|
@ -75,12 +75,25 @@ class CardDavViewModel : ViewModel() {
|
|||
when (status) {
|
||||
FriendList.SyncStatus.Successful -> {
|
||||
syncInProgress.postValue(false)
|
||||
cardDavOperationSuccessfulEvent.postValue(Event(true))
|
||||
showGreenToastEvent.postValue(
|
||||
Event(
|
||||
Pair(
|
||||
R.string.settings_contacts_carddav_sync_successful_toast,
|
||||
R.drawable.check
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
FriendList.SyncStatus.Failure -> {
|
||||
syncInProgress.postValue(false)
|
||||
val icon = R.drawable.warning_circle
|
||||
showErrorToastEvent.postValue(Event(Pair(icon, message.orEmpty())))
|
||||
showRedToastEvent.postValue(
|
||||
Event(
|
||||
Pair(
|
||||
R.string.settings_contacts_carddav_sync_error_toast,
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
)
|
||||
)
|
||||
if (isEdit.value == false) {
|
||||
Log.e("$TAG Synchronization failed, removing Friend list from Core")
|
||||
friendList.removeListener(this)
|
||||
|
|
@ -132,7 +145,14 @@ class CardDavViewModel : ViewModel() {
|
|||
val name = friendList.displayName
|
||||
core.removeFriendList(friendList)
|
||||
Log.i("$TAG Removed friends list with display name [$name]")
|
||||
cardDavOperationSuccessfulEvent.postValue(Event(true))
|
||||
showGreenToastEvent.postValue(
|
||||
Event(
|
||||
Pair(
|
||||
R.string.settings_contacts_carddav_deleted_toast,
|
||||
R.drawable.trash_simple
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -147,9 +167,13 @@ class CardDavViewModel : ViewModel() {
|
|||
val name = displayName.value.orEmpty().trim()
|
||||
val server = serverUrl.value.orEmpty().trim()
|
||||
if (name.isEmpty() || server.isEmpty()) {
|
||||
// TODO: improve toast
|
||||
showErrorToastEvent.postValue(
|
||||
Event(Pair(R.drawable.warning_circle, "Name or Server is empty!"))
|
||||
showRedToastEvent.postValue(
|
||||
Event(
|
||||
Pair(
|
||||
R.string.settings_contacts_carddav_mandatory_field_not_filled_toast,
|
||||
R.drawable.warning_circle
|
||||
)
|
||||
)
|
||||
)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,8 +67,8 @@ class LdapViewModel : ViewModel() {
|
|||
MutableLiveData<Event<Boolean>>()
|
||||
}
|
||||
|
||||
val showErrorToastEvent: MutableLiveData<Event<Pair<Int, String>>> by lazy {
|
||||
MutableLiveData<Event<Pair<Int, String>>>()
|
||||
val showRedToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
|
||||
MutableLiveData<Event<Pair<Int, Int>>>()
|
||||
}
|
||||
|
||||
private lateinit var ldapToEdit: Ldap
|
||||
|
|
@ -171,9 +171,10 @@ class LdapViewModel : ViewModel() {
|
|||
ldapServerOperationSuccessfulEvent.postValue(Event(true))
|
||||
} catch (e: Exception) {
|
||||
Log.e("$TAG Exception while creating LDAP: $e")
|
||||
// TODO: improve toast
|
||||
showErrorToastEvent.postValue(
|
||||
Event(Pair(R.drawable.warning_circle, e.toString()))
|
||||
showRedToastEvent.postValue(
|
||||
Event(
|
||||
Pair(R.string.settings_contacts_ldap_error_toast, R.drawable.warning_circle)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@
|
|||
<string name="assistant_scan_qr_code">Scanner un QR code</string>
|
||||
<string name="assistant_login_third_party_sip_account">J\'ai un compte SIP tiers</string>
|
||||
<string name="assistant_login_using_single_sign_on">Single sign on</string>
|
||||
<string name="assistant_login_cant_parse_address_toast">L\'adresse SIP est invalide !</string>
|
||||
<string name="assistant_login_address_without_username_toast">L\'adresse SIP ne contient pas de nom d\'utilisateur !</string>
|
||||
<string name="assistant_no_account_yet">Pas encore de compte ?</string>
|
||||
<string name="assistant_account_register">Créer un compte</string>
|
||||
<string name="assistant_account_creation_sms_confirmation_explanation">On vous a envoyé un code de vérification par SMS au numéro %1$s.\n\nMerci de le saisir ci-dessous :</string>
|
||||
|
|
@ -235,6 +237,10 @@
|
|||
<string name="settings_contacts_carddav_username_title">Nom d\'utilisateur</string>
|
||||
<string name="settings_contacts_carddav_password_title">Mot de passe</string>
|
||||
<string name="settings_contacts_carddav_realm_title">Domaine d\'authentification</string>
|
||||
<string name="settings_contacts_carddav_sync_successful_toast">Synchronization réussie</string>
|
||||
<string name="settings_contacts_carddav_sync_error_toast">Erreur de synchronization !</string>
|
||||
<string name="settings_contacts_carddav_deleted_toast">Compte CardDAV supprimé</string>
|
||||
<string name="settings_contacts_carddav_mandatory_field_not_filled_toast">Au moins un champ obligatoire n\'est pas rempli</string>
|
||||
<string name="settings_contacts_ldap_server_url_title">URL du serveur</string>
|
||||
<string name="settings_contacts_ldap_bind_dn_title">Bind DN</string>
|
||||
<string name="settings_contacts_ldap_password_title">Mot de passe</string>
|
||||
|
|
@ -248,6 +254,7 @@
|
|||
<string name="settings_contacts_ldap_name_attributes_title">Attributs de nom</string>
|
||||
<string name="settings_contacts_ldap_sip_attributes_title">Attributs SIP</string>
|
||||
<string name="settings_contacts_ldap_sip_domain_title">Domaine SIP</string>
|
||||
<string name="settings_contacts_ldap_error_toast">Une erreur s\'est produite, la configuration LDAP n\'a pas été sauvegardée !</string>
|
||||
<string name="settings_meetings_title">Réunions</string>
|
||||
<string name="settings_meetings_default_layout_title">Disposition par défaut</string>
|
||||
<string name="settings_meetings_layout_active_speaker_label">Intervenant actif</string>
|
||||
|
|
@ -314,6 +321,7 @@
|
|||
<string name="account_settings_dialog_invalid_password_title">Autentification requise</string>
|
||||
<string name="account_settings_dialog_invalid_password_message">La connexion a échoué pour le compte \n%s.\n\nVous pouvez renseigner votre mot de passe à nouveau ou bien vérifier les options de configuration de votre compte.</string>
|
||||
<string name="account_settings_dialog_invalid_password_hint">Mot de passe</string>
|
||||
<string name="account_failed_to_find_identity_toast">Le compte selectionné est introuvable !</string>
|
||||
|
||||
<string name="history_title">Historique d\'appel</string>
|
||||
<string name="history_call_start_title">Nouvel appel</string>
|
||||
|
|
@ -351,6 +359,7 @@
|
|||
<string name="contact_editor_error_saving_contact_toast">Erreur lors de la création du contact</string>
|
||||
<string name="contact_editor_dialog_abort_confirmation_title">Ne pas sauvegarder vos changements</string>
|
||||
<string name="contact_editor_dialog_abort_confirmation_message">Toutes vos modifications seront perdues.</string>
|
||||
<string name="contact_editor_mandatory_field_not_filled_toast">Au moins un champ obligatoire n\'est pas rempli</string>
|
||||
|
||||
<string name="contact_details_numbers_and_addresses_title">Numéros de téléphone et adresses SIP</string>
|
||||
<string name="contact_details_company_name">Entreprise :</string>
|
||||
|
|
@ -365,6 +374,7 @@
|
|||
<string name="contact_details_share">Partager</string>
|
||||
<string name="contact_details_delete">Supprimer</string>
|
||||
<string name="contact_sms_invite_content">Salut, rejoins moi sur &appName; ! Tu peux le télécharger gratuitement sur %s</string>
|
||||
<string name="contact_deleted_toast">Le contact a été supprimé</string>
|
||||
|
||||
<string name="contact_dialog_increase_trust_level_title">Augmenter le niveau de confiance</string>
|
||||
<string name="contact_dialog_increase_trust_level_message">Vous êtes sur le point de passer un appel vers l\'appareil $2%s\ de $1%s.\Voulez-vous démarrer l\'appel ?</string>
|
||||
|
|
@ -407,6 +417,7 @@
|
|||
<string name="conversation_ephemeral_messages_duration_one_week">1 semaine</string>
|
||||
<string name="new_conversation_title">Créer une conversation</string>
|
||||
<string name="new_group_conversation_title">Créer un groupe</string>
|
||||
<string name="conversation_invalid_empty_subject_toast">Veuillez choisir un sujet pour la conversation</string>
|
||||
<string name="new_conversation_search_bar_filter_hint">Chercher un contact</string>
|
||||
<string name="new_conversation_create_group">Créer une conversation de groupe</string>
|
||||
<string name="new_conversation_no_contact">Aucun contact ni suggestion pour le moment…</string>
|
||||
|
|
@ -416,6 +427,7 @@
|
|||
<item quantity="one">%s est en train d\'écrire…</item>
|
||||
<item quantity="other">%s sont en train d\'écrire…</item>
|
||||
</plurals>
|
||||
<string name="conversation_creation_error_toast">Échec de la création de la conversation !</string>
|
||||
<string name="conversation_add_participants_title">Ajouter des membres</string>
|
||||
<string name="conversation_reply_to_message_title">En réponse à :</string>
|
||||
<string name="conversation_menu_search_in_messages">Chercher</string>
|
||||
|
|
@ -442,6 +454,9 @@
|
|||
<string name="conversation_dialog_open_file_label">Ouvrir le fichier</string>
|
||||
<string name="conversation_dialog_export_file_label">Sauvegarder le fichier</string>
|
||||
<string name="conversation_message_deleted_toast">Le message a été supprimé</string>
|
||||
<string name="conversation_failed_to_create_toast">Échec de la création de la conversation !</string>
|
||||
<string name="conversation_invalid_participant_due_to_security_mode_toast">Pour des raisons de sécurité, la création d\'une conversation avec un participant d\'un domaine tiers est désactivé.</string>
|
||||
<string name="conversation_media_not_found_toast">Le média selectionné est introuvable !</string>
|
||||
|
||||
<string name="conversation_info_participants_list_title">Membres du groupe</string>
|
||||
<string name="conversation_info_add_participants_label">Ajouter des membres</string>
|
||||
|
|
@ -511,6 +526,10 @@
|
|||
<string name="meeting_info_created_toast">La réunion a été créée</string>
|
||||
<string name="meeting_info_updated_toast">La réunion a été mise à jour</string>
|
||||
<string name="meeting_info_cancelled_toast">La réunion a été annulée</string>
|
||||
<string name="meeting_failed_to_schedule_toast">Échec de la création de la réunion !</string>
|
||||
<string name="meeting_schedule_mandatory_field_not_filled_toast">Au moins un champ obligatoire n\'a pas été rempli</string>
|
||||
<string name="meeting_failed_to_send_invites_toast">Échec de l\'envoi des invitations à la réunion !</string>
|
||||
<string name="meeting_failed_to_send_part_of_invites_toast">Échec de l\'envoi des invitations à la réunion pour certains des participants !</string>
|
||||
|
||||
<string name="meeting_waiting_room_join">Rejoindre</string>
|
||||
<string name="meeting_waiting_room_cancel">Annuler</string>
|
||||
|
|
@ -586,19 +605,23 @@
|
|||
<string name="conference_call_empty">En attente d\'autres participants…</string>
|
||||
<string name="conference_action_screen_sharing">Partage d\'écran</string>
|
||||
<string name="conference_action_show_participants">Participants</string>
|
||||
<string name="conference_failed_to_create_group_call_toast">L\'appel de groupe n\'a pas pu être créé!</string>
|
||||
<plurals name="conference_participants_list_title" tools:ignore="MissingQuantity">
|
||||
<item quantity="one">%s participant</item>
|
||||
<item quantity="other">%s participants</item>
|
||||
</plurals>
|
||||
<string name="conference_confirm_removing_participant_dialog_title">Retirer %s de la conférence ?</string>
|
||||
<string name="conference_confirm_removing_participant_dialog_message">Voulez-vous vraiment retirer ce participant de la conférence ?</string>
|
||||
<string name="conference_participant_was_kicked_out_toast">Le participant a été exclu de la conférence</string>
|
||||
<string name="conference_participant_joining_text">En train de rejoindre…</string>
|
||||
<string name="conference_participant_paused_text">En pause</string>
|
||||
<string name="conference_active_speaker_is_screen_sharing">partage son écran</string>
|
||||
<string name="conference_failed_to_add_participant_invalid_address_toast">L\'adresse SIP est invalide, elle ne peut être ajoutée à la conférence</string>
|
||||
|
||||
<string name="conference_layout_grid">Mosaïque</string>
|
||||
<string name="conference_layout_active_speaker">Intervenant actif</string>
|
||||
<string name="conference_layout_audio_only">Audio uniquement</string>
|
||||
<string name="conference_too_many_participants_for_mosaic_layout_toast">Trop de participants pour l\'affichage mosaïque</string>
|
||||
|
||||
<string name="conference_remotely_hosted_title">Appel de groupe distant</string>
|
||||
<string name="conference_locally_hosted_title">Appel de groupe local</string>
|
||||
|
|
|
|||
|
|
@ -159,6 +159,8 @@
|
|||
<string name="assistant_scan_qr_code">Scan QR code</string>
|
||||
<string name="assistant_login_third_party_sip_account">Use a third party SIP account</string>
|
||||
<string name="assistant_login_using_single_sign_on">Single sign on</string>
|
||||
<string name="assistant_login_cant_parse_address_toast">SIP address is invalid!</string>
|
||||
<string name="assistant_login_address_without_username_toast">SIP address doesn\'t contains a username!</string>
|
||||
<string name="assistant_no_account_yet">No account yet?</string>
|
||||
<string name="assistant_account_register">Register</string>
|
||||
<string name="assistant_account_creation_sms_confirmation_explanation">We have sent a verification code on your phone number %1$s.\n\nPlease enter the verification code below:</string>
|
||||
|
|
@ -270,6 +272,10 @@
|
|||
<string name="settings_contacts_carddav_username_title">Username</string>
|
||||
<string name="settings_contacts_carddav_password_title">Password</string>
|
||||
<string name="settings_contacts_carddav_realm_title">Auth realm</string>
|
||||
<string name="settings_contacts_carddav_sync_successful_toast">Synchronization was successful</string>
|
||||
<string name="settings_contacts_carddav_sync_error_toast">Synchronization error!</string>
|
||||
<string name="settings_contacts_carddav_deleted_toast">CardDAV account removed</string>
|
||||
<string name="settings_contacts_carddav_mandatory_field_not_filled_toast">At least one mandatory field wasn\'t filled</string>
|
||||
<string name="settings_contacts_ldap_server_url_title">Server URL</string>
|
||||
<string name="settings_contacts_ldap_bind_dn_title">Bind DN</string>
|
||||
<string name="settings_contacts_ldap_password_title">Password</string>
|
||||
|
|
@ -283,6 +289,7 @@
|
|||
<string name="settings_contacts_ldap_name_attributes_title">Name attributes</string>
|
||||
<string name="settings_contacts_ldap_sip_attributes_title">SIP attributes</string>
|
||||
<string name="settings_contacts_ldap_sip_domain_title">SIP domain</string>
|
||||
<string name="settings_contacts_ldap_error_toast">A error occurred, LDAP server not saved!</string>
|
||||
<string name="settings_meetings_title">Meetings</string>
|
||||
<string name="settings_meetings_default_layout_title">Default layout</string>
|
||||
<string name="settings_meetings_layout_active_speaker_label">Active speaker</string>
|
||||
|
|
@ -349,6 +356,7 @@
|
|||
<string name="account_settings_dialog_invalid_password_title">Authentication needed</string>
|
||||
<string name="account_settings_dialog_invalid_password_message">Connection failed because authentication is missing or invalid for account \n%s.\n\nYou can provide password again, or check your account configuration in the settings.</string>
|
||||
<string name="account_settings_dialog_invalid_password_hint">New password</string>
|
||||
<string name="account_failed_to_find_identity_toast">Failed to find matching account!</string>
|
||||
|
||||
<!-- Call history -->
|
||||
<string name="history_title">Call history</string>
|
||||
|
|
@ -387,6 +395,7 @@
|
|||
<string name="contact_editor_error_saving_contact_toast">Failed to create contact!</string>
|
||||
<string name="contact_editor_dialog_abort_confirmation_title">Don\'t save changes?</string>
|
||||
<string name="contact_editor_dialog_abort_confirmation_message">All changes will be lost</string>
|
||||
<string name="contact_editor_mandatory_field_not_filled_toast">At least one mandatory field wasn\'t filled</string>
|
||||
|
||||
<string name="contact_details_numbers_and_addresses_title">Phone numbers & SIP addresses</string>
|
||||
<string name="contact_details_company_name">Company:</string>
|
||||
|
|
@ -401,6 +410,7 @@
|
|||
<string name="contact_details_share">Share</string>
|
||||
<string name="contact_details_delete">Delete</string>
|
||||
<string name="contact_sms_invite_content">Hello, join me on &appName;! You can download it for free at %s</string>
|
||||
<string name="contact_deleted_toast">Contact has been removed</string>
|
||||
|
||||
<string name="contact_dialog_increase_trust_level_title">Increase trust level</string>
|
||||
<string name="contact_dialog_increase_trust_level_message">You\'re about to make a call to $1%s\'s device $2%s.\nDo you want to make the call?</string>
|
||||
|
|
@ -443,6 +453,7 @@
|
|||
<string name="conversation_ephemeral_messages_duration_one_week">1 week</string>
|
||||
<string name="new_conversation_title">New conversation</string>
|
||||
<string name="new_group_conversation_title">New group conversation</string>
|
||||
<string name="conversation_invalid_empty_subject_toast">Please enter a name for the conversation</string>
|
||||
<string name="new_conversation_search_bar_filter_hint">Search contact</string>
|
||||
<string name="new_conversation_create_group">Create a group conversation</string>
|
||||
<string name="new_conversation_no_contact">No contact and no suggestion for the moment…</string>
|
||||
|
|
@ -452,6 +463,7 @@
|
|||
<item quantity="one">%s is composing…</item>
|
||||
<item quantity="other">%s are composing…</item>
|
||||
</plurals>
|
||||
<string name="conversation_creation_error_toast">Failed to create conversation!</string>
|
||||
<string name="conversation_add_participants_title">Add participants</string>
|
||||
<string name="conversation_reply_to_message_title">Replying to:</string>
|
||||
<string name="conversation_menu_search_in_messages">Search</string>
|
||||
|
|
@ -478,6 +490,9 @@
|
|||
<string name="conversation_dialog_open_file_label">Open file</string>
|
||||
<string name="conversation_dialog_export_file_label">Export file</string>
|
||||
<string name="conversation_message_deleted_toast">Message has been deleted</string>
|
||||
<string name="conversation_failed_to_create_toast">Failed to create conversation!</string>
|
||||
<string name="conversation_invalid_participant_due_to_security_mode_toast">Can\'t create conversation with a participant not on the same domain due to security restrictions!</string>
|
||||
<string name="conversation_media_not_found_toast">Selected media wasn\'t found</string>
|
||||
|
||||
<string name="conversation_info_participants_list_title">Group members</string>
|
||||
<string name="conversation_info_add_participants_label">Add participants</string>
|
||||
|
|
@ -547,6 +562,10 @@
|
|||
<string name="meeting_info_created_toast">Meeting has been created</string>
|
||||
<string name="meeting_info_updated_toast">Meeting has been updated</string>
|
||||
<string name="meeting_info_cancelled_toast">Meeting has been cancelled</string>
|
||||
<string name="meeting_failed_to_schedule_toast">Failed to schedule meeting!</string>
|
||||
<string name="meeting_schedule_mandatory_field_not_filled_toast">A least a mandatory field wasn\'t filled</string>
|
||||
<string name="meeting_failed_to_send_invites_toast">Failed to send all invites to meeting!</string>
|
||||
<string name="meeting_failed_to_send_part_of_invites_toast">Failed to send invites to some participants of the meeting!</string>
|
||||
|
||||
<string name="meeting_waiting_room_join">Join</string>
|
||||
<string name="meeting_waiting_room_cancel">Cancel</string>
|
||||
|
|
@ -622,19 +641,23 @@
|
|||
<string name="conference_call_empty">Waiting for other participants…</string>
|
||||
<string name="conference_action_screen_sharing">Screen share</string>
|
||||
<string name="conference_action_show_participants">Participants</string>
|
||||
<string name="conference_failed_to_create_group_call_toast">Failed to create a group call!</string>
|
||||
<plurals name="conference_participants_list_title">
|
||||
<item quantity="one">%s participant</item>
|
||||
<item quantity="other">%s participants</item>
|
||||
</plurals>
|
||||
<string name="conference_confirm_removing_participant_dialog_title">Remove %s from conference?</string>
|
||||
<string name="conference_confirm_removing_participant_dialog_message">Are you sure you want to remove this participant from the conference?</string>
|
||||
<string name="conference_participant_was_kicked_out_toast">Participant was kicked out of conference</string>
|
||||
<string name="conference_participant_joining_text">Joining…</string>
|
||||
<string name="conference_participant_paused_text">Paused</string>
|
||||
<string name="conference_active_speaker_is_screen_sharing">is sharing it\'s screen</string>
|
||||
<string name="conference_failed_to_add_participant_invalid_address_toast">Invalid SIP address, can\'t be added to conference</string>
|
||||
|
||||
<string name="conference_layout_grid">Mosaic</string>
|
||||
<string name="conference_layout_active_speaker">Speaker</string>
|
||||
<string name="conference_layout_audio_only">Audio only</string>
|
||||
<string name="conference_too_many_participants_for_mosaic_layout_toast">Too many participants for mosaic layout</string>
|
||||
|
||||
<string name="conference_remotely_hosted_title">Remote group call</string>
|
||||
<string name="conference_locally_hosted_title">Local group call</string>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue