From 746ddf6457d1724b3a2b9fa46511b56ca5aaf6e7 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 21 Nov 2023 16:40:48 +0100 Subject: [PATCH] Fixed some TODOs --- .../compatibility/Api31Compatibility.kt | 42 +++++++++++++++++++ .../linphone/compatibility/Compatibility.kt | 13 ++++++ .../model/ZrtpSasConfirmationDialogModel.kt | 7 +++- .../chat/fragment/ConversationFragment.kt | 9 ++-- .../viewmodel/ConversationsListViewModel.kt | 2 +- .../org/linphone/utils/DataBindingUtils.kt | 3 -- .../java/org/linphone/utils/LinphoneUtils.kt | 6 ++- app/src/main/res/values/strings.xml | 5 +++ 8 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt 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