diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/CountryPickerFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/CountryPickerFragment.kt index 9f7f10024..2e3d4dc72 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/CountryPickerFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/CountryPickerFragment.kt @@ -29,7 +29,7 @@ import org.linphone.activities.assistant.adapters.CountryPickerAdapter import org.linphone.core.DialPlan import org.linphone.databinding.AssistantCountryPickerFragmentBinding -class CountryPickerFragment() : DialogFragment() { +class CountryPickerFragment : DialogFragment() { private var _binding: AssistantCountryPickerFragmentBinding? = null private val binding get() = _binding!! private lateinit var adapter: CountryPickerAdapter diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt index 28732a224..edcf18210 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/PhoneAccountValidationFragment.kt @@ -34,6 +34,7 @@ import org.linphone.activities.assistant.viewmodels.PhoneAccountValidationViewMo import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel import org.linphone.activities.navigateToAccountSettings import org.linphone.activities.navigateToEchoCancellerCalibration +import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log import org.linphone.databinding.AssistantPhoneAccountValidationFragmentBinding @@ -113,7 +114,7 @@ class PhoneAccountValidationFragment : GenericFragment() val conferenceTime = MutableLiveData() val conferenceDuration = MutableLiveData() - var conferenceAddress = MutableLiveData() val showDuration = MutableLiveData() val isAlone: Boolean @@ -107,6 +106,8 @@ class ChatMessageContentData( stopVoiceRecording() } + private var conferenceAddress: String? = null + private fun getContent(): Content { return chatMessage.contents[contentIndex] } @@ -342,9 +343,9 @@ class ChatMessageContentData( val conferenceInfo = Factory.instance().createConferenceInfoFromIcalendarContent(content) val conferenceUri = conferenceInfo?.uri?.asStringUriOnly() if (conferenceInfo != null && conferenceUri != null) { - conferenceAddress.value = conferenceUri!! + conferenceAddress = conferenceUri!! Log.i( - "[Content] Created conference info from ICS with address ${conferenceAddress.value}" + "[Content] Created conference info from ICS with address $conferenceAddress" ) conferenceSubject.value = conferenceInfo.subject conferenceDescription.value = conferenceInfo.description @@ -407,7 +408,7 @@ class ChatMessageContentData( } fun callConferenceAddress() { - val address = conferenceAddress.value + val address = conferenceAddress if (address == null) { Log.e("[Content] Can't call null conference address!") return diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 45e0d1b02..060dc4413 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -469,7 +469,7 @@ class DetailChatRoomFragment : MasterFragment : GenericFragment() { override fun onResume() { if (isSecure) { - enableSecureMode(isSecure) + enableSecureMode(true) } else { // This is a workaround to prevent a small blink showing the previous secured screen lifecycleScope.launch { diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt index ca4d3904d..edbdffe06 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt @@ -289,7 +289,7 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( account.params = params transportIndex.value = account.params.transport.toInt() } else { - Log.e("[Account Settings] Couldn't parse address: $address") + Log.e("[Account Settings] Couldn't parse address: $newValue") } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AudioSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AudioSettingsViewModel.kt index 192106b83..9e7bc11ce 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AudioSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AudioSettingsViewModel.kt @@ -141,7 +141,7 @@ class AudioSettingsViewModel : GenericSettingsViewModel() { override fun onTextValueChanged(newValue: String) { try { core.micGainDb = newValue.toFloat() - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } @@ -151,7 +151,7 @@ class AudioSettingsViewModel : GenericSettingsViewModel() { override fun onTextValueChanged(newValue: String) { try { core.playbackGainDb = newValue.toFloat() - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt index 42eab7990..45fb318f1 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt @@ -97,7 +97,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { Log.w("[Call Settings] Disabling Telecom Manager auto-enable") prefs.manuallyDisabledTelecomManager = true } - prefs.useTelecomManager = newValue + prefs.useTelecomManager = false } } } @@ -169,7 +169,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { override fun onTextValueChanged(newValue: String) { try { prefs.autoAnswerDelay = newValue.toInt() - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } @@ -179,7 +179,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { override fun onTextValueChanged(newValue: String) { try { core.incTimeout = newValue.toInt() - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ChatSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ChatSettingsViewModel.kt index e7a563ad0..d926b7b45 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ChatSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ChatSettingsViewModel.kt @@ -61,7 +61,7 @@ class ChatSettingsViewModel : GenericSettingsViewModel() { val maxSize = newValue.toInt() core.maxSizeForAutoDownloadIncomingFiles = maxSize updateAutoDownloadIndexFromMaxSize(maxSize) - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt index 0806ab461..68847e3fb 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt @@ -77,12 +77,12 @@ class ContactsSettingsViewModel : GenericSettingsViewModel() { override fun onBoolValueChanged(newValue: Boolean) { if (newValue) { if (PermissionHelper.get().hasWriteContactsPermission()) { - prefs.storePresenceInNativeContact = newValue + prefs.storePresenceInNativeContact = true } else { askWriteContactsPermissionForPresenceStorageEvent.value = Event(true) } } else { - prefs.storePresenceInNativeContact = newValue + prefs.storePresenceInNativeContact = false } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/NetworkSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/NetworkSettingsViewModel.kt index c282b006e..057997971 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/NetworkSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/NetworkSettingsViewModel.kt @@ -52,7 +52,7 @@ class NetworkSettingsViewModel : GenericSettingsViewModel() { try { val port = newValue.toInt() setTransportPort(port) - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/TunnelSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/TunnelSettingsViewModel.kt index 3822fe5fa..8bdcf2110 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/TunnelSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/TunnelSettingsViewModel.kt @@ -43,7 +43,7 @@ class TunnelSettingsViewModel : GenericSettingsViewModel() { val config = getTunnelConfig() config.port = newValue.toInt() updateTunnelConfig(config) - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } @@ -72,7 +72,7 @@ class TunnelSettingsViewModel : GenericSettingsViewModel() { val config = getTunnelConfig() config.port2 = newValue.toInt() updateTunnelConfig(config) - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt index 68278a2da..21ca33c22 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/VideoSettingsViewModel.kt @@ -106,7 +106,7 @@ class VideoSettingsViewModel : GenericSettingsViewModel() { try { core.downloadBandwidth = newValue.toInt() core.uploadBandwidth = newValue.toInt() - } catch (nfe: NumberFormatException) { + } catch (_: NumberFormatException) { } } } diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/ListTopBarViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/ListTopBarViewModel.kt index c8980f75d..0c0ffc090 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/ListTopBarViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/ListTopBarViewModel.kt @@ -63,7 +63,7 @@ class ListTopBarViewModel : ViewModel() { val list = arrayListOf() selectedItems.value = list - isSelectionNotEmpty.value = list.isNotEmpty() + isSelectionNotEmpty.value = false } fun onToggleSelect(position: Int) { diff --git a/app/src/main/java/org/linphone/activities/voip/viewmodels/ControlsViewModel.kt b/app/src/main/java/org/linphone/activities/voip/viewmodels/ControlsViewModel.kt index 13b0f999c..f3d1cc9fd 100644 --- a/app/src/main/java/org/linphone/activities/voip/viewmodels/ControlsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/voip/viewmodels/ControlsViewModel.kt @@ -536,7 +536,7 @@ class ControlsViewModel : ViewModel() { isVideoEnabled.value = enabled showTakeSnapshotButton.value = enabled && corePreferences.showScreenshotButton - var isVideoBeingSent = if (coreContext.core.currentCall?.conference != null) { + val isVideoBeingSent = if (coreContext.core.currentCall?.conference != null) { val videoDirection = coreContext.core.currentCall?.currentParams?.videoDirection videoDirection == MediaDirection.SendRecv || videoDirection == MediaDirection.SendOnly } else { diff --git a/app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt new file mode 100644 index 000000000..cccd52d54 --- /dev/null +++ b/app/src/main/java/org/linphone/compatibility/Api28Compatibility.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-android + * (see https://www.linphone.org). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.linphone.compatibility + +import android.annotation.TargetApi +import android.content.ClipboardManager + +@TargetApi(28) +class Api28Compatibility { + companion object { + fun clearClipboard(clipboard: ClipboardManager) { + clipboard.clearPrimaryClip() + } + } +} diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 846f0af4a..e7d940694 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -23,6 +23,7 @@ import android.app.Activity import android.app.Notification import android.app.PendingIntent import android.app.Service +import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.graphics.Bitmap @@ -455,5 +456,11 @@ class Compatibility { } return false } + + fun clearClipboard(clipboard: ClipboardManager) { + if (Version.sdkAboveOrEqual(Version.API28_PIE_90)) { + Api28Compatibility.clearClipboard(clipboard) + } + } } } diff --git a/app/src/main/java/org/linphone/contact/ContactDataInterface.kt b/app/src/main/java/org/linphone/contact/ContactDataInterface.kt index fe4e1ac1b..2d346e305 100644 --- a/app/src/main/java/org/linphone/contact/ContactDataInterface.kt +++ b/app/src/main/java/org/linphone/contact/ContactDataInterface.kt @@ -88,7 +88,7 @@ abstract class GenericContactViewModel(private val sipAddress: Address) : Messag contactLookup() } - protected fun contactLookup() { + private fun contactLookup() { displayName.value = LinphoneUtils.getDisplayName(sipAddress) val friend = coreContext.contactsManager.findContactByAddress(sipAddress) if (friend != null) { diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index ec6be7aea..ecb27618c 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -410,10 +410,12 @@ fun Friend.getPictureUri(thumbnailPreferred: Boolean = false): Uri? { // Check that the URI points to a real file val contentResolver = coreContext.context.contentResolver try { - if (contentResolver.openAssetFileDescriptor(pictureUri, "r") != null) { + val fd = contentResolver.openAssetFileDescriptor(pictureUri, "r") + if (fd != null) { + fd.close() return pictureUri } - } catch (ioe: IOException) { } + } catch (_: IOException) { } } // Fallback to thumbnail if high res picture isn't available @@ -421,11 +423,11 @@ fun Friend.getPictureUri(thumbnailPreferred: Boolean = false): Uri? { lookupUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY ) - } catch (e: Exception) { } + } catch (_: Exception) { } } else if (photo != null) { try { return Uri.parse(photo) - } catch (e: Exception) { } + } catch (_: Exception) { } } return null } diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 46d499e77..74a58cdd0 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -598,7 +598,7 @@ fun addPrefixEditTextValidation(editText: EditText, enabled: Boolean) { @SuppressLint("SetTextI18n") override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - if (s == null || s.isEmpty() || !s.startsWith("+")) { + if (s.isNullOrEmpty() || !s.startsWith("+")) { editText.setText("+$s") } } diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 1d4f47857..47c095644 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -51,7 +51,7 @@ class LinphoneUtils { } val localDisplayName = account?.params?.identityAddress?.displayName // Do not return an empty local display name - if (localDisplayName != null && localDisplayName.isNotEmpty()) { + if (!localDisplayName.isNullOrEmpty()) { return localDisplayName } } @@ -179,7 +179,7 @@ class LinphoneUtils { fun deleteFilesAttachedToChatMessage(chatMessage: ChatMessage) { for (content in chatMessage.contents) { val filePath = content.filePath - if (filePath != null && filePath.isNotEmpty()) { + if (!filePath.isNullOrEmpty()) { Log.i("[Linphone Utils] Deleting file $filePath") FileUtils.deleteFile(filePath) } diff --git a/app/src/main/res/layout/assistant_country_picker_cell.xml b/app/src/main/res/layout/assistant_country_picker_cell.xml index 27a648efd..ccc3d74d9 100644 --- a/app/src/main/res/layout/assistant_country_picker_cell.xml +++ b/app/src/main/res/layout/assistant_country_picker_cell.xml @@ -4,8 +4,7 @@ android:layout_height="40dp" android:layout_gravity="center" android:orientation="horizontal" - android:padding="5dp" - android:background="?attr/backgroundColor"> + android:padding="5dp"> - + @@ -46,8 +48,8 @@ android:gravity="center" android:textAlignment="center" android:drawablePadding="5dp" - android:drawableTop="@drawable/file_video" - android:text="@{data.fileName, default=`test.mkv`}"/> + android:text="@{data.fileName, default=`test.mkv`}" + app:drawableTopCompat="@drawable/file_video" /> + android:text="@{data.fileName, default=`test.txt`}" + android:drawableTop="@{data.pdf ? @drawable/file_pdf : (data.audio ? @drawable/file_audio : @drawable/file), default=@drawable/file}" + tools:ignore="UseCompatTextViewDrawableXml" /> - + @@ -29,7 +31,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" - android:drawableTop="@{data.video ? @drawable/file_video : (data.image ? @drawable/file_picture : (data.pdf ? @drawable/file_pdf : (data.audio ? @drawable/file_audio : (data.voiceRecording ? @drawable/audio_recording_reply_preview_default : @drawable/file)))), default=@drawable/file}" android:drawablePadding="5dp" android:ellipsize="middle" android:gravity="center" @@ -37,7 +38,9 @@ android:onLongClick="@{longClickListener}" android:singleLine="true" android:text="@{data.fileName, default=`test.pdf`}" - android:textAlignment="center" /> + android:textAlignment="center" + android:drawableTop="@{data.video ? @drawable/file_video : (data.image ? @drawable/file_picture : (data.pdf ? @drawable/file_pdf : (data.audio ? @drawable/file_audio : (data.voiceRecording ? @drawable/audio_recording_reply_preview_default : @drawable/file)))), default=@drawable/file}" + tools:ignore="UseCompatTextViewDrawableXml" /> - + @@ -29,7 +31,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" - android:drawableTop="@{data.video ? @drawable/file_video : (data.image ? @drawable/file_picture : (data.pdf ? @drawable/file_pdf : (data.audio ? @drawable/file_audio : (data.voiceRecording ? @drawable/audio_recording_reply_preview_default : @drawable/file)))), default=@drawable/file}" android:drawablePadding="5dp" android:ellipsize="middle" android:gravity="center" @@ -37,7 +38,9 @@ android:onLongClick="@{longClickListener}" android:singleLine="true" android:text="@{data.fileName, default=`test.pdf`}" - android:textAlignment="center" /> + android:textAlignment="center" + android:drawableTop="@{data.video ? @drawable/file_video : (data.image ? @drawable/file_picture : (data.pdf ? @drawable/file_pdf : (data.audio ? @drawable/file_audio : (data.voiceRecording ? @drawable/audio_recording_reply_preview_default : @drawable/file)))), default=@drawable/file}" + tools:ignore="UseCompatTextViewDrawableXml" /> diff --git a/app/src/main/res/layout/chat_message_list_cell.xml b/app/src/main/res/layout/chat_message_list_cell.xml index 71b7d4b89..1892c571a 100644 --- a/app/src/main/res/layout/chat_message_list_cell.xml +++ b/app/src/main/res/layout/chat_message_list_cell.xml @@ -85,7 +85,8 @@ android:background="@drawable/led_background" android:padding="2dp" app:presenceIcon="@{data.presenceStatus}" - android:visibility="@{data.chatMessage.outgoing || selectionListViewModel.isEditionEnabled || data.hideAvatar || data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{data.chatMessage.outgoing || selectionListViewModel.isEditionEnabled || data.hideAvatar || data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -49,7 +50,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{data.presenceStatus}" - android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -50,7 +51,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" - app:presenceIcon="@{data.presenceStatus}" /> + app:presenceIcon="@{data.presenceStatus}" + tools:ignore="ContentDescription" /> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -37,7 +38,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{data.presenceStatus}" - android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> + app:layout_constraintBottom_toBottomOf="@id/avatar" + tools:ignore="ContentDescription"/> diff --git a/app/src/main/res/layout/conference_scheduling_summary_fragment.xml b/app/src/main/res/layout/conference_scheduling_summary_fragment.xml index 3a62d3abf..2e6fc3da4 100644 --- a/app/src/main/res/layout/conference_scheduling_summary_fragment.xml +++ b/app/src/main/res/layout/conference_scheduling_summary_fragment.xml @@ -102,6 +102,7 @@ android:layout_marginTop="5dp" android:layout_marginStart="5dp" android:layout_marginEnd="5dp" + android:inputType="textEmailSubject" style="@style/conference_scheduling_font" android:background="?attr/voipFormDisabledFieldBackgroundColor" android:text="@{viewModel.subject}" @@ -252,6 +253,7 @@ android:gravity="top" android:minLines="3" android:maxLines="5" + android:inputType="textMultiLine" style="@style/conference_scheduling_font" android:background="?attr/voipFormDisabledFieldBackgroundColor" android:hint="@string/conference_schedule_description_hint" diff --git a/app/src/main/res/layout/contact_detail_fragment.xml b/app/src/main/res/layout/contact_detail_fragment.xml index 002a24103..fe3f75ee4 100644 --- a/app/src/main/res/layout/contact_detail_fragment.xml +++ b/app/src/main/res/layout/contact_detail_fragment.xml @@ -105,7 +105,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_big_badge_padding" app:presenceIcon="@{viewModel.presenceStatus}" - android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> diff --git a/app/src/main/res/layout/contact_list_cell.xml b/app/src/main/res/layout/contact_list_cell.xml index 731a4afa5..33cb88757 100644 --- a/app/src/main/res/layout/contact_list_cell.xml +++ b/app/src/main/res/layout/contact_list_cell.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -54,7 +55,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{viewModel.presenceStatus}" - android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -52,7 +53,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{data.presenceStatus}" - android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> + android:layout_height="match_parent"> \ No newline at end of file diff --git a/app/src/main/res/layout/history_detail_fragment.xml b/app/src/main/res/layout/history_detail_fragment.xml index 280854a97..ff74d4bcb 100644 --- a/app/src/main/res/layout/history_detail_fragment.xml +++ b/app/src/main/res/layout/history_detail_fragment.xml @@ -107,7 +107,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_big_badge_padding" app:presenceIcon="@{viewModel.presenceStatus}" - android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + bind:ignore="ContentDescription" /> diff --git a/app/src/main/res/layout/history_list_cell.xml b/app/src/main/res/layout/history_list_cell.xml index d25b0318b..fef2934ac 100644 --- a/app/src/main/res/layout/history_list_cell.xml +++ b/app/src/main/res/layout/history_list_cell.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -103,7 +104,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{viewModel.presenceStatus}" - android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> diff --git a/app/src/main/res/layout/side_menu_fragment.xml b/app/src/main/res/layout/side_menu_fragment.xml index 528031725..ead22be46 100644 --- a/app/src/main/res/layout/side_menu_fragment.xml +++ b/app/src/main/res/layout/side_menu_fragment.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> @@ -81,7 +82,8 @@ android:background="@drawable/led_background" android:padding="@dimen/contact_presence_badge_padding" app:presenceIcon="@{viewModel.presenceStatus}" - android:visibility="@{!viewModel.defaultAccountFound || viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" /> + android:visibility="@{!viewModel.defaultAccountFound || viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" + tools:ignore="ContentDescription" /> ]> - + Kopírovat adresu schůzky Okamžité zahájení volání Volání se spustí automaticky, pokud je spuštěno z jiné aplikace @@ -107,7 +107,7 @@ SIP adresa SIP adresy Zrušit - + den dny dní @@ -670,7 +670,7 @@ Zakázáno 1 hodina 1 týden - + %s píše… %s píší… %s píše… diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 40f6a45c0..0bda6c139 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -788,4 +788,5 @@ Authentification requise La connexion a échouée car l\'authentification est manquante ou invalide pour le compte\n%s.\n\nVous pouvez fournir le mot de passe à nouveau ou vérifier la configuration de votre compte dans les paramètres. Confirmer + Change la visibilité du selectionneur d\'emoji \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1da9bf070..fdb67c706 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -2,7 +2,7 @@ ]> - + 传输 UDP 用户数据报协议 TLS安全传输层协议 @@ -351,9 +351,6 @@ 写入联系人权限被拒绝,无法编辑联系人 您要删除这个联系人吗?\n它也将会从您的设备通讯录中删除 您确定要删除这些联系人吗?\n他们将会从您的设备通讯录中删除 - - \@string/history_delete_one_dialog - 选择保存联系人的位置 本地存储 输入电话号码或地址 @@ -503,17 +500,11 @@ 是否要在此聊天室转发信息? 短暂信息 群组创建失败 - - \@string/chat_room_delete_one_dialog - 对方要求启用视讯 \n如果将您的帐户关联您的电话号码,您的朋友们可以更容易的找到你。\n\n您在通讯录里可以查看谁在使用&appName;,他们也同样可以通过&appName;联系您。\n 请输入您的用户名与密码和您的SIP域名 您的帐户已经创建。请检查邮件以驗證您的帐户: 接收视频分辨率: - - \@string/contact_delete_one_dialog - 撤消通知后标记为已读 发送日志 重启日志 @@ -549,7 +540,7 @@ 信息 按住按钮录制语音信息 您的媒体音量很低,您可能需要提高音量 - + %1$d 未读消息 %1$d 未读消息 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d3492c188..a0366f19d 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -541,7 +541,6 @@ 滑動到畫面底部或第一則未讀訊息 複製會議地址 切換顯示會議詳細資訊 - 您已開啟「閱後即焚」訊息 總是在此程式中開啟 還是可以匯出到第三方應用程式 自動下載收到的錄音檔 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9637f0a94..4cea5f544 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -920,4 +920,5 @@ User is online User is offline User is asking not to be disturbed + Toggle emoji picker visibility diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml index 01b6e9ff2..7f67f3994 100644 --- a/app/src/main/res/xml/locales_config.xml +++ b/app/src/main/res/xml/locales_config.xml @@ -11,6 +11,7 @@ +