Code cleanup

This commit is contained in:
Sylvain Berfini 2026-02-05 17:03:00 +01:00
parent afab8c491d
commit 5e8f848574
72 changed files with 236 additions and 257 deletions

View file

@ -63,8 +63,6 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
const val NATIVE_ADDRESS_BOOK_FRIEND_LIST = "Native address-book"
const val LINPHONE_ADDRESS_BOOK_FRIEND_LIST = "Linphone address-book"
private const val MIN_INTERVAL_TO_WAIT_BEFORE_REFRESH = 300000L // 5 minutes
}
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
@ -102,7 +100,7 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
// WARNING: this doesn't prevent to be called again in onLoadFinished,
// it will only have for effect that the notified cursor will be the same as before
// instead of a new one with updated content!
// loader.setUpdateThrottle(MIN_INTERVAL_TO_WAIT_BEFORE_REFRESH)
// loader.setUpdateThrottle(300000L)
return loader
}

View file

@ -96,40 +96,40 @@ class CoreContext
var isConnectedToAndroidAuto: Boolean = false
val bearerAuthenticationRequestedEvent: MutableLiveData<Event<Pair<String, String?>>> by lazy {
MutableLiveData<Event<Pair<String, String?>>>()
MutableLiveData()
}
val digestAuthenticationRequestedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val clearAuthenticationRequestDialogEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val refreshMicrophoneMuteStateEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showGreenToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
MutableLiveData<Event<Pair<Int, Int>>>()
MutableLiveData()
}
val showRedToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
MutableLiveData<Event<Pair<Int, Int>>>()
MutableLiveData()
}
val showFormattedRedToastEvent: MutableLiveData<Event<Pair<String, Int>>> by lazy {
MutableLiveData<Event<Pair<String, Int>>>()
MutableLiveData()
}
val provisioningAppliedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var filesToExportToNativeMediaGallery = arrayListOf<String>()
val filesToExportToNativeMediaGalleryEvent: MutableLiveData<Event<List<String>>> by lazy {
MutableLiveData<Event<List<String>>>()
MutableLiveData()
}
private var keepAliveServiceStarted = false

View file

@ -28,20 +28,20 @@ import org.linphone.utils.Event
open class GenericViewModel : ViewModel() {
// Message res id, icon
val showGreenToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
MutableLiveData<Event<Pair<Int, Int>>>()
MutableLiveData()
}
val showFormattedGreenToastEvent: MutableLiveData<Event<Pair<String, Int>>> by lazy {
MutableLiveData<Event<Pair<String, Int>>>()
MutableLiveData()
}
// Message res id, icon
val showRedToastEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
MutableLiveData<Event<Pair<Int, Int>>>()
MutableLiveData()
}
val showFormattedRedToastEvent: MutableLiveData<Event<Pair<String, Int>>> by lazy {
MutableLiveData<Event<Pair<String, Int>>>()
MutableLiveData()
}
fun showGreenToast(@StringRes message: Int, @DrawableRes icon: Int) {

View file

@ -105,7 +105,7 @@ class AccountCreationViewModel
val accountCreatedEvent = MutableLiveData<Event<Boolean>>()
val accountRecoveryTokenReceivedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private var waitingForFlexiApiPushToken = false

View file

@ -68,15 +68,15 @@ open class AccountLoginViewModel
val registrationInProgress = MutableLiveData<Boolean>()
val accountLoggedInEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val accountLoginErrorEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val skipLandingToThirdPartySipAccountEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
var conditionsAndPrivacyPolicyAccepted = false

View file

@ -76,15 +76,15 @@ class ThirdPartySipAccountLoginViewModel
val registrationInProgress = MutableLiveData<Boolean>()
val accountLoggedInEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val accountLoginErrorEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val defaultTransportIndexEvent: MutableLiveData<Event<Int>> by lazy {
MutableLiveData<Event<Int>>()
MutableLiveData()
}
val availableTransports = arrayListOf<String>()

View file

@ -38,11 +38,11 @@ class CallsListAdapter :
var selectedAdapterPosition = -1
val callClickedEvent: MutableLiveData<Event<CallModel>> by lazy {
MutableLiveData<Event<CallModel>>()
MutableLiveData()
}
val callLongClickedEvent: MutableLiveData<Event<CallModel>> by lazy {
MutableLiveData<Event<CallModel>>()
MutableLiveData()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

View file

@ -83,19 +83,19 @@ class ConferenceViewModel
val fullScreenMode = MutableLiveData<Boolean>()
val firstParticipantOtherThanOurselvesJoinedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showLayoutMenuEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val removeParticipantEvent: MutableLiveData<Event<Pair<String, Participant>>> by lazy {
MutableLiveData<Event<Pair<String, Participant>>>()
MutableLiveData()
}
val goToConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private lateinit var conference: Conference

View file

@ -64,7 +64,7 @@ class CallsViewModel
val callsTopBarStatus = MutableLiveData<String>()
val goToCallsListEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private val coreListener = object : CoreListenerStub() {

View file

@ -151,7 +151,7 @@ class CurrentCallViewModel
}
val incomingCallTitle: MutableLiveData<String> by lazy {
MutableLiveData<String>()
MutableLiveData()
}
val qualityValue = MutableLiveData<Float>()
@ -163,23 +163,23 @@ class CurrentCallViewModel
var terminatedByUser = false
val isRemoteRecordingEvent: MutableLiveData<Event<Pair<Boolean, String>>> by lazy {
MutableLiveData<Event<Pair<Boolean, String>>>()
MutableLiveData()
}
val goToEndedCallEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val finishActivityEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val requestRecordAudioPermission: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val requestCameraPermission: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val proximitySensorEnabled = MutableLiveData<Boolean>()
@ -188,21 +188,21 @@ class CurrentCallViewModel
val callDuration = MutableLiveData<Int>()
val showAudioDevicesListEvent: MutableLiveData<Event<ArrayList<AudioDeviceModel>>> by lazy {
MutableLiveData<Event<ArrayList<AudioDeviceModel>>>()
MutableLiveData()
}
// ZRTP related
val showZrtpSasDialogEvent: MutableLiveData<Event<Pair<String, List<String>>>> by lazy {
MutableLiveData<Event<Pair<String, List<String>>>>()
MutableLiveData()
}
val showZrtpSasCacheMismatchDialogEvent: MutableLiveData<Event<Pair<String, List<String>>>> by lazy {
MutableLiveData<Event<Pair<String, List<String>>>>()
MutableLiveData()
}
val zrtpAuthTokenVerifiedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
var isZrtpDialogVisible: Boolean = false
@ -217,7 +217,7 @@ class CurrentCallViewModel
val operationInProgress = MutableLiveData<Boolean>()
val goToConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
// Conference
@ -225,39 +225,39 @@ class CurrentCallViewModel
val conferenceModel = ConferenceViewModel()
val goToConferenceEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val goToCallEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Extras actions
val toggleExtraActionsBottomSheetEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showNumpadBottomSheetEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val transferInProgressEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val transferFailedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val numpadModel: NumpadModel
val appendDigitToSearchBarEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val removedCharacterAtCurrentPositionEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Sliding answer/decline button

View file

@ -72,15 +72,15 @@ class FileViewModel
val isFromEphemeralMessage = MutableLiveData<Boolean>()
val exportPlainTextFileEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val pdfRendererReadyEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val exportPdfEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
// Below are required for PDF viewer

View file

@ -65,11 +65,11 @@ class MediaViewModel
val position = MutableLiveData<Int>()
val videoSizeChangedEvent: MutableLiveData<Event<Pair<Int, Int>>> by lazy {
MutableLiveData<Event<Pair<Int, Int>>>()
MutableLiveData()
}
val changeFullScreenModeEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
lateinit var mediaPlayer: MediaPlayer

View file

@ -53,7 +53,7 @@ class ConversationsContactsAndSuggestionsListAdapter :
}
val onClickedEvent: MutableLiveData<Event<ConversationContactOrSuggestionModel>> by lazy {
MutableLiveData<Event<ConversationContactOrSuggestionModel>>()
MutableLiveData()
}
override fun displayHeaderForPosition(position: Int): Boolean {

View file

@ -60,15 +60,15 @@ class ConversationEventAdapter :
val chatMessageLongPressEvent = MutableLiveData<Event<MessageModel>>()
val showDeliveryForChatMessageModelEvent: MutableLiveData<Event<MessageModel>> by lazy {
MutableLiveData<Event<MessageModel>>()
MutableLiveData()
}
val showReactionForChatMessageModelEvent: MutableLiveData<Event<MessageModel>> by lazy {
MutableLiveData<Event<MessageModel>>()
MutableLiveData()
}
val scrollToRepliedMessageEvent: MutableLiveData<Event<MessageModel>> by lazy {
MutableLiveData<Event<MessageModel>>()
MutableLiveData()
}
private var isConversationSecured: Boolean = false

View file

@ -41,11 +41,11 @@ class ConversationsListAdapter : ListAdapter<ConversationModel, RecyclerView.Vie
var selectedAdapterPosition = -1
val conversationClickedEvent: MutableLiveData<Event<ConversationModel>> by lazy {
MutableLiveData<Event<ConversationModel>>()
MutableLiveData()
}
val conversationLongClickedEvent: MutableLiveData<Event<ConversationModel>> by lazy {
MutableLiveData<Event<ConversationModel>>()
MutableLiveData()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

View file

@ -886,7 +886,7 @@ open class ConversationFragment : SlidingPaneChildFragment() {
"$TAG Scrolling to message/event at position [$position], " +
"display show events between positions [$firstDisplayedItemPosition] and [$lastDisplayedItemPosition]"
)
if (firstDisplayedItemPosition > position && position > 0) {
if (position in 1..<firstDisplayedItemPosition) {
recyclerView.scrollToPosition(position - 1)
} else if (lastDisplayedItemPosition < position && position < layoutManager.itemCount - 1) {
recyclerView.scrollToPosition(position + 1)

View file

@ -158,7 +158,7 @@ class FileModel
@AnyThread
fun updateTransferProgress(percent: Int) {
transferProgress.postValue(percent)
if (percent < 0 || percent > 100) {
if (percent !in 0..100) {
transferProgressLabel.postValue("")
} else {
transferProgressLabel.postValue("$percent%")

View file

@ -191,7 +191,7 @@ class MessageModel
val formattedVoiceRecordingDuration = MutableLiveData<String>()
val dismissLongPressMenuEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
var isTextHighlighted = false

View file

@ -42,11 +42,11 @@ abstract class AbstractConversationViewModel : GenericViewModel() {
}
val chatRoomFoundEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val confirmGroupCallEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
lateinit var chatRoom: ChatRoom

View file

@ -59,23 +59,23 @@ class ChatMessageLongPressViewModel : GenericViewModel() {
val hasBeenRetracted = MutableLiveData<Boolean>()
val showImdnInfoEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val editMessageEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val replyToMessageEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forwardMessageEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val deleteMessageEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val onDismissedEvent = MutableLiveData<Event<Boolean>>()

View file

@ -44,7 +44,7 @@ class ConversationDocumentsListViewModel
val operationInProgress = MutableLiveData<Boolean>()
val openDocumentEvent: MutableLiveData<Event<FileModel>> by lazy {
MutableLiveData<Event<FileModel>>()
MutableLiveData()
}
private var totalDocumentsCount: Int = -1

View file

@ -48,7 +48,7 @@ class ConversationForwardMessageViewModel
val operationInProgress = MutableLiveData<Boolean>()
val chatRoomCreatedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private val chatRoomListener = object : ChatRoomListenerStub() {

View file

@ -85,23 +85,23 @@ class ConversationInfoViewModel
val disableAddContact = MutableLiveData<Boolean>()
val groupLeftEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val historyDeletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val infoChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showParticipantAdminPopupMenuEvent: MutableLiveData<Event<Pair<View, ParticipantModel>>> by lazy {
MutableLiveData<Event<Pair<View, ParticipantModel>>>()
MutableLiveData()
}
val goToScheduleMeetingEvent: MutableLiveData<Event<Pair<String, ArrayList<String>>>> by lazy {
MutableLiveData<Event<Pair<String, ArrayList<String>>>>()
MutableLiveData()
}
private val chatRoomListener = object : ChatRoomListenerStub() {

View file

@ -44,7 +44,7 @@ class ConversationMediaListViewModel
val operationInProgress = MutableLiveData<Boolean>()
val openMediaEvent: MutableLiveData<Event<FileModel>> by lazy {
MutableLiveData<Event<FileModel>>()
MutableLiveData()
}
private var totalMediaCount: Int = -1

View file

@ -107,43 +107,43 @@ class ConversationViewModel
val unreadMessagesCount = MutableLiveData<Int>()
val focusSearchBarEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val fileToDisplayEvent: MutableLiveData<Event<FileModel>> by lazy {
MutableLiveData<Event<FileModel>>()
MutableLiveData()
}
val sipUriToCallEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val conferenceToJoinEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val openWebBrowserEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val contactToDisplayEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val messageDeletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val updateEvents: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forwardMessageEvent: MutableLiveData<Event<MessageModel>> by lazy {
MutableLiveData<Event<MessageModel>>()
MutableLiveData()
}
val voiceRecordPlaybackEndedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
var eventsList = arrayListOf<EventLogModel>()

View file

@ -120,23 +120,23 @@ class SendMessageInConversationViewModel
}
val requestKeyboardHidingEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val emojiToAddEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val participantUsernameToAddEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val askRecordAudioPermissionEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val messageSentEvent: MutableLiveData<Event<ChatMessage>> by lazy {
MutableLiveData<Event<ChatMessage>>()
MutableLiveData()
}
lateinit var chatRoom: ChatRoom

View file

@ -53,7 +53,7 @@ class StartConversationViewModel
val operationInProgress = MutableLiveData<Boolean>()
val chatRoomCreatedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private val chatRoomListener = object : ChatRoomListenerStub() {

View file

@ -41,11 +41,11 @@ class ContactsListAdapter(
var selectedAdapterPosition = -1
val contactClickedEvent: MutableLiveData<Event<ContactAvatarModel>> by lazy {
MutableLiveData<Event<ContactAvatarModel>>()
MutableLiveData()
}
val contactLongClickedEvent: MutableLiveData<Event<ContactAvatarModel>> by lazy {
MutableLiveData<Event<ContactAvatarModel>>()
MutableLiveData()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

View file

@ -64,7 +64,7 @@ class EditContactFragment : SlidingPaneChildFragment() {
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showAbortConfirmationDialog()
showAbortConfirmationDialogIfPendingChanges()
}
}
@ -121,7 +121,7 @@ class EditContactFragment : SlidingPaneChildFragment() {
viewModel.findFriendByRefKey(refKey)
binding.setBackClickListener {
showAbortConfirmationDialog()
showAbortConfirmationDialogIfPendingChanges()
}
binding.setPickImageClickListener {
@ -215,7 +215,7 @@ class EditContactFragment : SlidingPaneChildFragment() {
pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
private fun showAbortConfirmationDialog() {
private fun showAbortConfirmationDialogIfPendingChanges() {
if (!viewModel.isPendingChanges()) {
Log.i("$TAG No changes detected, do not show confirmation dialog")
backPressedCallback.isEnabled = false

View file

@ -61,7 +61,7 @@ class NewContactFragment : GenericMainFragment() {
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showAbortConfirmationDialogIfNeededOrGoBack()
showAbortConfirmationDialogIfPendingChanges()
}
}
@ -126,7 +126,7 @@ class NewContactFragment : GenericMainFragment() {
viewModel.findFriendByRefKey("")
binding.setBackClickListener {
showAbortConfirmationDialogIfNeededOrGoBack()
showAbortConfirmationDialogIfPendingChanges()
}
binding.setPickImageClickListener {
@ -217,7 +217,7 @@ class NewContactFragment : GenericMainFragment() {
pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
private fun showAbortConfirmationDialogIfNeededOrGoBack() {
private fun showAbortConfirmationDialogIfPendingChanges() {
if (!viewModel.isPendingChanges()) {
Log.i("$TAG No changes detected, do not show confirmation dialog")
backPressedCallback.isEnabled = false

View file

@ -76,7 +76,7 @@ class ContactNewOrEditViewModel
val jobTitle = MutableLiveData<String>()
val saveChangesEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val friendFoundEvent = MutableLiveData<Event<Boolean>>()
@ -85,6 +85,12 @@ class ContactNewOrEditViewModel
val removeNewNumberOrAddressFieldEvent = MutableLiveData<Event<NewOrEditNumberOrAddressModel>>()
private val sipAddressesBeforeEdit = arrayListOf<String>()
private val phoneNumbersBeforeEdit = arrayListOf<String>()
private val sipAddressesLinkedToPresence = arrayListOf<String>()
init {
hideSipAddresses.postValue(corePreferences.hideSipAddresses)
}
@ -119,10 +125,14 @@ class ContactNewOrEditViewModel
// Prevents showing presence address as editable when in fact it's not
if (!LinphoneUtils.isSipAddressLinkedToPhoneNumberByPresence(friend, sipAddress)) {
addSipAddress(sipAddress)
sipAddressesBeforeEdit.add(sipAddress)
} else {
sipAddressesLinkedToPresence.add(sipAddress)
}
}
for (number in friend.phoneNumbersWithLabel) {
phoneNumbersBeforeEdit.add(number.phoneNumber)
addPhoneNumber(number.phoneNumber, number.label)
}
@ -335,20 +345,23 @@ class ContactNewOrEditViewModel
phoneNumbers.clear()
company.value = ""
jobTitle.value = ""
sipAddressesBeforeEdit.clear()
phoneNumbersBeforeEdit.clear()
sipAddressesLinkedToPresence.clear()
}
@UiThread
fun isPendingChanges(): Boolean {
if (isEdit.value == true) {
Log.i("$TAG Contact is being edited, checking if at least one field has changed")
if (firstName.value.orEmpty() != friend.firstName.orEmpty()) return true
if (lastName.value.orEmpty() != friend.lastName.orEmpty()) return true
if (picturePath.value.orEmpty() != friend.photo.orEmpty()) return true
if (company.value.orEmpty() != friend.organization.orEmpty()) return true
if (jobTitle.value.orEmpty() != friend.jobTitle.orEmpty()) return true
for (address in friend.addresses) {
val sipAddress = address.asStringUriOnly()
if (LinphoneUtils.isSipAddressLinkedToPhoneNumberByPresence(friend, sipAddress)) continue
for (sipAddress in sipAddressesBeforeEdit) {
if (sipAddressesLinkedToPresence.contains(sipAddress)) continue
val found = sipAddresses.find {
it.isSip && it.value.value.orEmpty() == sipAddress
@ -359,12 +372,12 @@ class ContactNewOrEditViewModel
val sipAddress = address.value.value.orEmpty()
if (sipAddress.isEmpty()) continue
val found = friend.addresses.find {
it.asStringUriOnly() == sipAddress
val found = sipAddressesBeforeEdit.find {
it == sipAddress
}
if (found == null) return true
}
for (number in friend.phoneNumbers) {
for (number in phoneNumbersBeforeEdit) {
val found = phoneNumbers.find {
!it.isSip && it.value.value.orEmpty() == number
}
@ -373,7 +386,7 @@ class ContactNewOrEditViewModel
for (number in phoneNumbers) {
if (number.value.value.orEmpty().isEmpty()) continue
val found = friend.phoneNumbers.find {
val found = phoneNumbersBeforeEdit.find {
it == number.value.value.orEmpty()
}
if (found == null) return true
@ -382,6 +395,7 @@ class ContactNewOrEditViewModel
return false
}
Log.i("$TAG Checking if at least a field of the new contact form has been filled")
return !picturePath.value.isNullOrEmpty() ||
!firstName.value.isNullOrEmpty() ||
!lastName.value.isNullOrEmpty() ||

View file

@ -102,39 +102,39 @@ class ContactViewModel
val operationInProgress = MutableLiveData<Boolean>()
val showLongPressMenuForNumberOrAddressEvent: MutableLiveData<Event<ContactNumberOrAddressModel>> by lazy {
MutableLiveData<Event<ContactNumberOrAddressModel>>()
MutableLiveData()
}
val showNumberOrAddressPickerDialogEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val openNativeContactEditor: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val openLinphoneContactEditor: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val goToConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val vCardTerminatedEvent: MutableLiveData<Event<Pair<String, File>>> by lazy {
MutableLiveData<Event<Pair<String, File>>>()
MutableLiveData()
}
val displayTrustProcessDialogEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val startCallToDeviceToIncreaseTrustEvent: MutableLiveData<Event<Triple<String, String, String>>> by lazy {
MutableLiveData<Event<Triple<String, String, String>>>()
MutableLiveData()
}
val contactRemovedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var expectedAction: Int = START_AUDIO_CALL

View file

@ -74,11 +74,11 @@ class ContactsListViewModel
val disableAddContact = MutableLiveData<Boolean>()
val vCardTerminatedEvent: MutableLiveData<Event<Pair<String, File>>> by lazy {
MutableLiveData<Event<Pair<String, File>>>()
MutableLiveData()
}
val cardDavSynchronizationCompletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var previousFilter = "NotSet"

View file

@ -35,7 +35,7 @@ import org.linphone.utils.Event
class EmptyFragment : GenericFragment() {
private lateinit var binding: EmptyFragmentBinding
protected lateinit var sharedViewModel: SharedMainViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun onCreateView(
inflater: LayoutInflater,

View file

@ -64,31 +64,31 @@ class HelpViewModel
val canConfigFileBeViewed = MutableLiveData<Boolean>()
val newVersionAvailableEvent: MutableLiveData<Event<Pair<String, String>>> by lazy {
MutableLiveData<Event<Pair<String, String>>>()
MutableLiveData()
}
val versionUpToDateEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val errorEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val debugLogsCleanedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val uploadDebugLogsFinishedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val uploadDebugLogsErrorEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showConfigFileEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private var versionClickCount: Int = 0

View file

@ -37,15 +37,15 @@ class HistoryListAdapter : ListAdapter<CallLogModel, RecyclerView.ViewHolder>(Ca
var selectedAdapterPosition = -1
val callLogClickedEvent: MutableLiveData<Event<CallLogModel>> by lazy {
MutableLiveData<Event<CallLogModel>>()
MutableLiveData()
}
val callLogLongClickedEvent: MutableLiveData<Event<CallLogModel>> by lazy {
MutableLiveData<Event<CallLogModel>>()
MutableLiveData()
}
val callLogCallBackClickedEvent: MutableLiveData<Event<CallLogModel>> by lazy {
MutableLiveData<Event<CallLogModel>>()
MutableLiveData()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

View file

@ -47,11 +47,11 @@ class HistoryListViewModel
val fetchInProgress = MutableLiveData<Boolean>()
val historyInsertedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val historyDeletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private val coreListener = object : CoreListenerStub() {

View file

@ -68,19 +68,19 @@ class HistoryViewModel
val callLogFoundEvent = MutableLiveData<Event<Boolean>>()
val goToMeetingConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val goToConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val conferenceToJoinEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val historyDeletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var address: Address

View file

@ -62,27 +62,27 @@ class StartCallViewModel
val operationInProgress = MutableLiveData<Boolean>()
val appendDigitToSearchBarEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val removedCharacterAtCurrentPositionEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val clearSearchBarEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val requestKeyboardVisibilityChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val leaveFragmentEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val initiateBlindTransferEvent: MutableLiveData<Event<Pair<Address, String>>> by lazy {
MutableLiveData<Event<Pair<Address, String>>>()
MutableLiveData()
}
private val conferenceListener = object : ConferenceListenerStub() {

View file

@ -52,11 +52,11 @@ class MeetingsListAdapter :
var selectedAdapterPosition = -1
val meetingClickedEvent: MutableLiveData<Event<MeetingModel>> by lazy {
MutableLiveData<Event<MeetingModel>>()
MutableLiveData()
}
val meetingLongClickedEvent: MutableLiveData<Event<MeetingModel>> by lazy {
MutableLiveData<Event<MeetingModel>>()
MutableLiveData()
}
override fun displayHeaderForPosition(position: Int): Boolean {

View file

@ -42,7 +42,7 @@ open class CancelMeetingViewModel
val operationInProgress = MutableLiveData<Boolean>()
val conferenceCancelledEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var sendNotificationForCancelledConference: Boolean = false

View file

@ -70,7 +70,7 @@ class MeetingViewModel
val endTimeStamp = MutableLiveData<Long>()
val conferenceInfoDeletedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var conferenceInfo: ConferenceInfo

View file

@ -79,15 +79,15 @@ class MeetingWaitingRoomViewModel
val conferenceInfoFoundEvent = MutableLiveData<Event<Boolean>>()
val showAudioDevicesListEvent: MutableLiveData<Event<ArrayList<AudioDeviceModel>>> by lazy {
MutableLiveData<Event<ArrayList<AudioDeviceModel>>>()
MutableLiveData()
}
val leaveWaitingRoomEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val conferenceCreationError: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var conferenceAddress: Address

View file

@ -83,7 +83,7 @@ class ScheduleMeetingViewModel
val chatDisabled = MutableLiveData<Boolean>()
val conferenceCreatedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var startTimestamp = 0L

View file

@ -45,11 +45,11 @@ class RecordingsListAdapter :
var selectedAdapterPosition = -1
val recordingClickedEvent: MutableLiveData<Event<RecordingModel>> by lazy {
MutableLiveData<Event<RecordingModel>>()
MutableLiveData()
}
val recordingLongClickedEvent: MutableLiveData<Event<RecordingModel>> by lazy {
MutableLiveData<Event<RecordingModel>>()
MutableLiveData()
}
override fun displayHeaderForPosition(position: Int): Boolean {

View file

@ -83,7 +83,7 @@ class RecordingModel
val indexOfSeparator = withoutHeader.indexOf(
LinphoneUtils.RECORDING_FILE_NAME_URI_TIMESTAMP_SEPARATOR
)
sipUri = withoutHeader.substring(0, indexOfSeparator)
sipUri = withoutHeader.take(indexOfSeparator)
val sipAddress = Factory.instance().createAddress(sipUri)
displayName = if (sipAddress != null) {
val contact = coreContext.contactsManager.findContactByAddress(sipAddress)

View file

@ -49,7 +49,7 @@ class RecordingsListViewModel
val fetchInProgress = MutableLiveData<Boolean>()
val focusSearchBarEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
init {

View file

@ -89,7 +89,7 @@ class AccountProfileViewModel
val showDeviceId = MutableLiveData<Boolean>()
val accountRemovedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var account: Account

View file

@ -64,11 +64,11 @@ class CardDavViewModel
var pendingAuthInfo: AuthInfo? = null
val syncSuccessfulEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val friendListRemovedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var friendList: FriendList

View file

@ -68,7 +68,7 @@ class LdapViewModel : GenericViewModel() {
val verboseMode = MutableLiveData<Boolean>()
val ldapServerOperationSuccessfulEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private lateinit var ldapToEdit: Ldap

View file

@ -66,11 +66,11 @@ class SettingsViewModel
val isTunnelAvailable = MutableLiveData<Boolean>()
val recreateActivityEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val keepAliveServiceSettingChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Security settings
@ -124,18 +124,18 @@ class SettingsViewModel
val presenceSubscribe = MutableLiveData<Boolean>()
val addLdapServerEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val editLdapServerEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val addCardDavServerEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val editCardDavServerEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
// Meetings settings

View file

@ -61,11 +61,11 @@ class SingleSignOnViewModel
private var username: String = ""
val startAuthIntentEvent: MutableLiveData<Event<Intent>> by lazy {
MutableLiveData<Event<Intent>>()
MutableLiveData()
}
val onErrorEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private lateinit var authState: AuthState

View file

@ -73,31 +73,31 @@ open class AbstractMainViewModel
val moreThanOneAccount = MutableLiveData<Boolean>()
val focusSearchBarEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val openDrawerMenuEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToHistoryEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToContactsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToConversationsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToMeetingsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val defaultAccountChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
protected var currentFilter = ""

View file

@ -71,11 +71,11 @@ abstract class AddressSelectionViewModel
val showResultsLimitReached = MutableLiveData<Boolean>()
val showNumberOrAddressPickerDialogEvent: MutableLiveData<Event<List<ContactNumberOrAddressModel>>> by lazy {
MutableLiveData<Event<List<ContactNumberOrAddressModel>>>()
MutableLiveData()
}
val dismissNumberOrAddressPickerDialogEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
protected var magicSearchSourceFlags = MagicSearch.Source.All.toInt()

View file

@ -36,7 +36,7 @@ open class DefaultAccountChangedViewModel : GenericViewModel() {
}
val defaultAccountChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private val coreListener = object : CoreListenerStub() {

View file

@ -55,23 +55,23 @@ class DrawerMenuViewModel
val hideQuitButton = MutableLiveData<Boolean>()
val startAssistantEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val closeDrawerEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showAccountPopupMenuEvent: MutableLiveData<Event<Pair<View, Account>>> by lazy {
MutableLiveData<Event<Pair<View, Account>>>()
MutableLiveData()
}
val defaultAccountChangedEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val openLinkInBrowserEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
private val coreListener = object : CoreListenerStub() {

View file

@ -83,35 +83,35 @@ class MainViewModel
val filesOrTextPendingSharingLabel = MutableLiveData<String>()
val goBackToCallEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val openDrawerEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val askPostNotificationsPermissionEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val askFullScreenIntentPermissionEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val showNewAccountToastEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val startLoadingContactsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val lastAccountRemovedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val clearFilesOrTextPendingSharingEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
private var accountsFound = -1

View file

@ -39,27 +39,27 @@ class SharedMainViewModel
val isSlidingPaneSlideable = MutableLiveData<Boolean>()
val closeSlidingPaneEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val openSlidingPaneEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToHistoryEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToContactsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToConversationsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val navigateToMeetingsEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
var currentlyDisplayedFragment = MutableLiveData<Int>()
@ -67,40 +67,40 @@ class SharedMainViewModel
// Top bar related
val searchFilter: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val refreshDrawerMenuAccountsListEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val refreshDrawerMenuQuitButtonEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forceUpdateAvailableNavigationItems: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Account Profile related
val goToAccountProfileEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Contacts related
var displayedFriend: Friend? = null // Prevents the need to go look for the friend
val showContactEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val showNewContactEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forceRefreshContactsList: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
var sipAddressToAddToNewContact: String = ""
@ -108,11 +108,11 @@ class SharedMainViewModel
// Call logs related
val forceRefreshCallLogsListEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val resetMissedCallsCountEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Conversation related
@ -122,48 +122,48 @@ class SharedMainViewModel
val filesToShareFromIntent = MutableLiveData<ArrayList<String>>()
val messageToForwardEvent: MutableLiveData<Event<MessageModel>> by lazy {
MutableLiveData<Event<MessageModel>>()
MutableLiveData()
}
var displayedChatRoom: ChatRoom? = null // Prevents the need to go look for the chat room
val showConversationEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val hideConversationEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// When using keyboard to share gif or other, see RichContentReceiver & RichEditText classes
val richContentUri = MutableLiveData<Event<Uri>>()
val displayFileEvent: MutableLiveData<Event<Bundle>> by lazy {
MutableLiveData<Event<Bundle>>()
MutableLiveData()
}
val forceRefreshDisplayedConversationEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forceRefreshConversationInfoEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forceRefreshConversationEvents: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val newChatMessageEphemeralLifetimeToSetEvent: MutableLiveData<Event<Long>> by lazy {
MutableLiveData<Event<Long>>()
MutableLiveData()
}
val updateConversationLastMessageEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val updateUnreadMessageCountForCurrentConversationEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
// Meetings related
@ -171,19 +171,19 @@ class SharedMainViewModel
var displayedMeeting: ConferenceInfo? = null // Prevents the need to go look for the conference info
val meetingEditedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val forceRefreshMeetingsListEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
MutableLiveData()
}
val goToMeetingWaitingRoomEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>()
MutableLiveData()
}
val goToScheduleMeetingEvent: MutableLiveData<Event<Pair<String, ArrayList<String>>>> by lazy {
MutableLiveData<Event<Pair<String, ArrayList<String>>>>()
MutableLiveData()
}
// Recordings related
@ -195,6 +195,6 @@ class SharedMainViewModel
val mediaViewerFullScreenMode = MutableLiveData<Boolean>()
val listOfSelectedSipUrisEvent: MutableLiveData<Event<ArrayList<String>>> by lazy {
MutableLiveData<Event<ArrayList<String>>>()
MutableLiveData()
}
}

View file

@ -84,7 +84,7 @@ class TimestampUtils {
it.toString()
}
} ?: "?"
val shorten = upperCased.substring(0, 3)
val shorten = upperCased.take(3)
return "$shorten."
}

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
</shape>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="48dp" />
<solid android:color="?attr/color_danger_500" />
</shape>

View file

@ -74,8 +74,6 @@
<string name="conversation_event_security_event_level_downgraded">Úroveň bezpečnosti byla snížena kvůli %s</string>
<string name="conversation_event_security_event_max_participant_count_exceeded">Maximální počet účastníků byl překročen o %s</string>
<string name="meeting_schedule_add_more_participants_title">Klepnutím přidat další účastníky</string>
<string name="meeting_schedule_delete_dialog_title">Smazat schůzku?</string>
<string name="meeting_schedule_delete_dialog_message">Přejete si smazat schůzku?</string>
<string name="call_zrtp_sas_validation_required">Je vyžadováno ověření</string>
<string name="call_stats_fec_lost_packets_label">Ztracené pakety: %s</string>
<string name="call_stats_zrtp_sas_algo">SAS algoritmus: %s</string>

View file

@ -819,8 +819,6 @@
<string name="conversation_event_security_event_level_downgraded">Sicherheitsstufe verringert wegen %s</string>
<string name="conversation_event_security_event_max_participant_count_exceeded">Maximale Teilnehmerzahl um %s überschritten</string>
<string name="meeting_cancel_action_label">Besprechung absagen</string>
<string name="meeting_schedule_delete_dialog_title">Besprechung löschen?</string>
<string name="meeting_schedule_delete_dialog_message">Möchten Sie die Besprechung löschen?</string>
<string name="assistant_forgotten_password_title">Passwort vergessen</string>
<string name="assistant_forgotten_password_message">Sie haben Ihren Account erstellt mit:</string>
<string name="assistant_account_register_unavailable_no_push_warning">Benachrichtigungen scheinen auf Ihrem Gerät nicht verfügbar zu sein, sind allerdings nötig um einen Account in der App zu erstellen.\n\nWir laden Sie ein, stattdessen einen Account auf unserer Webplattform zu erstellen:</string>

View file

@ -658,8 +658,6 @@
<string name="meeting_schedule_notify_cancel_dialog_title">La réunion va être annulée</string>
<string name="meeting_schedule_notify_cancel_dialog_message">Voulez-vous envoyer une notification aux participants ?</string>
<string name="meeting_cancel_action_label">Annuler la réunion</string>
<string name="meeting_schedule_delete_dialog_title">Supprimer la réunion ?</string>
<string name="meeting_schedule_delete_dialog_message">Voulez-vous supprimer la réunion ?</string>
<string name="meeting_delete_action_label">Supprimer la réunion</string>
<string name="meeting_info_created_toast">Réunion créée</string>
<string name="meeting_info_updated_toast">Réunion mise à jour</string>

View file

@ -771,8 +771,6 @@
<string name="meeting_schedule_description_title">Beschrijving</string>
<string name="meeting_schedule_edit_title">Vergadering bewerken</string>
<string name="meeting_cancel_action_label">Vergadering annuleren</string>
<string name="meeting_schedule_delete_dialog_title">Vergadering verwijderen?</string>
<string name="meeting_schedule_delete_dialog_message">Wil je de vergadering verwijderen?</string>
<string name="meeting_delete_action_label">Vergadering verwijderen</string>
<string name="meeting_info_created_toast">Vergadering is aangemaakt</string>
<string name="meeting_info_updated_toast">Vergadering is bijgewerkt</string>

View file

@ -18,13 +18,11 @@
<string name="yesterday">Wczoraj</string>
<plurals name="days">
<item quantity="one">%s dzień</item>
<item quantity="few"></item>
<item quantity="many">%s dni</item>
<item quantity="other">%s dni</item>
</plurals>
<plurals name="selection_count_label">
<item quantity="one">%s wybrany</item>
<item quantity="few"></item>
<item quantity="many">%s wybranych</item>
<item quantity="other">%s wybranych</item>
</plurals>
@ -55,13 +53,11 @@
<string name="notification_file_transfer_startup_message">Trwa przesyłanie plików</string>
<plurals name="notification_file_transfer_upload">
<item quantity="one">%s plik jest przesyłany</item>
<item quantity="few"></item>
<item quantity="many">%s plików jest przesyłanych</item>
<item quantity="other">%s plików jest przesyłanych</item>
</plurals>
<plurals name="notification_file_transfer_download">
<item quantity="one">%s plik jest pobierany</item>
<item quantity="few"></item>
<item quantity="many">%s plików jest pobieranych</item>
<item quantity="other">%s plików jest pobieranych</item>
</plurals>
@ -107,7 +103,7 @@
<string name="assistant_create_account_using_email_on_our_web_platform">Załóż konto, podając swój adres e-mail na stronie:</string>
<string name="assistant_already_have_an_account">Masz już konto?</string>
<string name="assistant_sip_account_transport_protocol">Transport</string>
<string name="assistant_third_party_sip_account_warning_explanation">Niektóre funkcje wymagają konta &appName;, np. wiadomości grupowe, wideokonferencje...\n\nFunkcje te są ukryte, gdy rejestrujesz się za pomocą konta SIP innej firmy.\n\nAby włączyć je w projekcie komercyjnym, skontaktuj się z nami.</string>
<string name="assistant_third_party_sip_account_warning_explanation">Niektóre funkcje wymagają konta &appName;, np. wiadomości grupowe, wideokonferencje\n\nFunkcje te są ukryte, gdy rejestrujesz się za pomocą konta SIP innej firmy.\n\nAby włączyć je w projekcie komercyjnym, skontaktuj się z nami.</string>
<string name="assistant_third_party_sip_account_create_linphone_account">Wolę utworzyć konto &appName;</string>
<string name="assistant_third_party_sip_account_warning_ok">Zrozumiałem</string>
<string name="assistant_account_register_unavailable_no_push_warning">Powiadomienia push nie wydają się być dostępne na Twoim urządzeniu, ale są one obowiązkowe do utworzenia konta w aplikacji mobilnej.\n\nZapraszamy do utworzenia konta na naszej platformie internetowej:</string>

View file

@ -504,8 +504,6 @@
<string name="meeting_schedule_description_title">Descrição</string>
<string name="meeting_schedule_edit_title">Editar reunião</string>
<string name="meeting_cancel_action_label">Cancelar reunião</string>
<string name="meeting_schedule_delete_dialog_title">Excluir a reunião?</string>
<string name="meeting_schedule_delete_dialog_message">Você quer excluir a reunião?</string>
<string name="meeting_delete_action_label">Excluir reunião</string>
<string name="meeting_info_created_toast">A reunião foi criada</string>
<string name="meeting_info_updated_toast">A reunião foi atualizada</string>

View file

@ -486,8 +486,6 @@
<string name="meeting_schedule_description_title">Описание</string>
<string name="meeting_schedule_edit_title">Редактировать встречу</string>
<string name="meeting_cancel_action_label">Отменить встречу</string>
<string name="meeting_schedule_delete_dialog_title">Удалить встречу?</string>
<string name="meeting_schedule_delete_dialog_message">Вы хотите удалить встречу?</string>
<string name="meeting_delete_action_label">Удалить встречу</string>
<string name="meeting_info_updated_toast">Встреча была обновлена</string>
<string name="meeting_info_cancelled">Встреча отменена</string>

View file

@ -566,8 +566,6 @@
<string name="meeting_schedule_description_title">Popis</string>
<string name="meeting_schedule_edit_title">Upraviť schôdzku</string>
<string name="meeting_cancel_action_label">Zrušiť schôdzku</string>
<string name="meeting_schedule_delete_dialog_title">Vymazať schôdzku?</string>
<string name="meeting_schedule_delete_dialog_message">Želáte si vymazať schôdzku?</string>
<string name="meeting_delete_action_label">Vymazať schôdzku</string>
<string name="meeting_info_updated_toast">Schôdzka bola aktualizovaná</string>
<string name="meeting_info_cancelled_toast">Schôdzka bola zrušená</string>

View file

@ -599,8 +599,6 @@
<string name="meeting_schedule_description_title">Опис</string>
<string name="meeting_schedule_edit_title">Редагувати нараду</string>
<string name="meeting_cancel_action_label">Скасувати нараду</string>
<string name="meeting_schedule_delete_dialog_title">Видалити нараду?</string>
<string name="meeting_schedule_delete_dialog_message">Ви хочете видалити нараду?</string>
<string name="meeting_delete_action_label">Видалити нараду</string>
<string name="meeting_info_created_toast">Нараду створено</string>
<string name="meeting_info_updated_toast">Нараду оновлено</string>

View file

@ -531,8 +531,6 @@
<string name="meeting_schedule_description_title">描述</string>
<string name="meeting_schedule_edit_title">编辑会议</string>
<string name="meeting_cancel_action_label">取消会议</string>
<string name="meeting_schedule_delete_dialog_title">删除会议?</string>
<string name="meeting_schedule_delete_dialog_message">您想删除会议吗?</string>
<string name="meeting_delete_action_label">删除会议</string>
<string name="meeting_info_created_toast">会议已创建</string>
<string name="meeting_info_updated_toast">会议已更新</string>

View file

@ -701,8 +701,6 @@
<string name="meeting_schedule_notify_cancel_dialog_title">Meeting will be cancelled</string>
<string name="meeting_schedule_notify_cancel_dialog_message">Do you want to send a notification to all participants?</string>
<string name="meeting_cancel_action_label">Cancel meeting</string>
<string name="meeting_schedule_delete_dialog_title">Delete the meeting?</string>
<string name="meeting_schedule_delete_dialog_message">Do you want to delete the meeting?</string>
<string name="meeting_delete_action_label">Delete meeting</string>
<string name="meeting_info_created_toast">Meeting has been created</string>
<string name="meeting_info_updated_toast">Meeting has been updated</string>