diff --git a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt
new file mode 100644
index 000000000..fa2bd2b9c
--- /dev/null
+++ b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.graphics.RenderEffect
+import android.graphics.Shader
+import android.os.Build
+import android.view.View
+import androidx.annotation.RequiresApi
+
+@RequiresApi(Build.VERSION_CODES.S)
+class Api31Compatibility {
+ companion object {
+ private const val TAG = "[API 31 Compatibility]"
+
+ fun setBlurRenderEffect(view: View) {
+ val blurEffect = RenderEffect.createBlurEffect(16F, 16F, Shader.TileMode.MIRROR)
+ view.setRenderEffect(blurEffect)
+ }
+
+ fun removeBlurRenderEffect(view: View) {
+ view.setRenderEffect(null)
+ }
+ }
+}
diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
index a29e5ecf9..9db7fb995 100644
--- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt
+++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
@@ -22,6 +22,7 @@ package org.linphone.compatibility
import android.annotation.SuppressLint
import android.app.Notification
import android.app.Service
+import android.view.View
import org.linphone.mediastream.Version
@SuppressLint("NewApi")
@@ -50,5 +51,17 @@ class Compatibility {
Api28Compatibility.startServiceForeground(service, id, notification)
}
}
+
+ fun setBlurRenderEffect(view: View) {
+ if (Version.sdkAboveOrEqual(Version.API31_ANDROID_12)) {
+ Api31Compatibility.setBlurRenderEffect(view)
+ }
+ }
+
+ fun removeBlurRenderEffect(view: View) {
+ if (Version.sdkAboveOrEqual(Version.API31_ANDROID_12)) {
+ Api31Compatibility.removeBlurRenderEffect(view)
+ }
+ }
}
}
diff --git a/app/src/main/java/org/linphone/ui/call/model/ZrtpSasConfirmationDialogModel.kt b/app/src/main/java/org/linphone/ui/call/model/ZrtpSasConfirmationDialogModel.kt
index 2e7e973e7..a18d10209 100644
--- a/app/src/main/java/org/linphone/ui/call/model/ZrtpSasConfirmationDialogModel.kt
+++ b/app/src/main/java/org/linphone/ui/call/model/ZrtpSasConfirmationDialogModel.kt
@@ -23,7 +23,9 @@ import androidx.annotation.UiThread
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import java.util.Random
+import org.linphone.R
import org.linphone.core.tools.Log
+import org.linphone.utils.AppUtils
import org.linphone.utils.Event
class ZrtpSasConfirmationDialogModel @UiThread constructor(
@@ -46,7 +48,10 @@ class ZrtpSasConfirmationDialogModel @UiThread constructor(
val dismissEvent = MutableLiveData>()
init {
- message.value = "Dites $authTokenToRead et cliquez sur les lettres données par votre interlocuteur :"
+ message.value = AppUtils.getFormattedString(
+ R.string.dialog_zrtp_validate_trust_subtitle,
+ authTokenToRead
+ )
// TODO: improve algo?
val rnd = Random()
diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt
index f1ab9aa33..2e77a98b3 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt
@@ -25,8 +25,6 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
-import android.graphics.RenderEffect
-import android.graphics.Shader
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.net.Uri
@@ -58,6 +56,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
+import org.linphone.compatibility.Compatibility
import org.linphone.core.ChatMessage
import org.linphone.core.tools.Log
import org.linphone.databinding.ChatBubbleLongPressMenuBinding
@@ -502,9 +501,7 @@ class ConversationFragment : GenericFragment() {
}
private fun showChatMessageLongPressMenu(chatMessageModel: ChatMessageModel) {
- // TODO: handle backward compat for blurring
- val blurEffect = RenderEffect.createBlurEffect(16F, 16F, Shader.TileMode.MIRROR)
- binding.root.setRenderEffect(blurEffect)
+ Compatibility.setBlurRenderEffect(binding.root)
val dialog = Dialog(requireContext(), R.style.Theme_LinphoneDialog)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
@@ -564,7 +561,7 @@ class ConversationFragment : GenericFragment() {
dialog.setContentView(layout.root)
dialog.setOnDismissListener {
- binding.root.setRenderEffect(null)
+ Compatibility.removeBlurRenderEffect(binding.root)
}
dialog.window
diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt
index cc6e59b67..ed0929962 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt
@@ -58,7 +58,7 @@ class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewMod
when (state) {
ChatRoom.State.Created, ChatRoom.State.Instantiated, ChatRoom.State.Deleted -> {
computeChatRoomsList(currentFilter)
- // TODO: display toast
+ // TODO: show toast
}
else -> {}
}
diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
index 00c82a55e..db82359d0 100644
--- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
+++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
@@ -257,9 +257,6 @@ private fun loadImageForChatBubble(imageView: ImageView, file: String?, grid: Bo
"$TAG Error getting preview picture from video? [$file]: ${result.throwable}"
)
imageView.visibility = View.GONE
- },
- onSuccess = { _, _ ->
- // TODO: Display "play" button above video preview
}
)
}
diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt
index 4285a6aac..9fc83865f 100644
--- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt
+++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt
@@ -316,9 +316,11 @@ class LinphoneUtils {
if (text.isEmpty()) {
val firstContent = message.contents.firstOrNull()
if (firstContent?.isIcalendar == true) {
- text = "meeting invite" // TODO: use translated string
+ text = AppUtils.getString(
+ R.string.message_meeting_invitation_content_description
+ )
} else if (firstContent?.isVoiceRecording == true) {
- text = "voice message" // TODO: use translated string
+ text = AppUtils.getString(R.string.message_voice_message_content_description)
} else {
for (content in message.contents) {
if (text.isNotEmpty()) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c4ec44f7f..3e9132ad1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -97,6 +97,7 @@
Don\'t save changes?
All changes will be lost
Validate the device
+ Say %s and click on the letters given by your correspondent:
Blah
Letters don\'t match!
Increase trust level
@@ -482,4 +483,8 @@
Skip
Forgotten password?
Skip
+
+
+ meeting invite
+ voice message
\ No newline at end of file