From 6ab7c47571e4d092cc2f6c8f2e0ef15bfbd3cc25 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 18 May 2021 15:02:27 +0200 Subject: [PATCH] UI changes + bumped com.android.tools.build:gradle version --- .../chat/adapters/ChatMessagesListAdapter.kt | 89 ++++++------ .../chat/data/ChatMessageAttachmentData.kt | 2 + .../main/chat/data/ChatMessageContentData.kt | 19 ++- .../java/org/linphone/core/CorePreferences.kt | 4 +- .../org/linphone/utils/DataBindingUtils.kt | 6 + app/src/main/res/drawable-xhdpi/file.png | Bin 1264 -> 0 bytes .../res/drawable-xhdpi/file_audio_default.png | Bin 0 -> 1675 bytes .../main/res/drawable-xhdpi/file_default.png | Bin 0 -> 1821 bytes .../res/drawable-xhdpi/file_pdf_default.png | Bin 0 -> 2300 bytes .../drawable-xhdpi/file_picture_default.png | Bin 0 -> 2072 bytes .../res/drawable-xhdpi/file_video_default.png | Bin 0 -> 11226 bytes .../drawable-xhdpi/menu_copy_text_default.png | Bin 0 -> 1370 bytes .../drawable-xhdpi/menu_forward_default.png | Bin 0 -> 1421 bytes .../drawable-xhdpi/menu_imdn_info_default.png | Bin 0 -> 1590 bytes app/src/main/res/drawable/file.xml | 15 ++ app/src/main/res/drawable/file_audio.xml | 15 ++ app/src/main/res/drawable/file_pdf.xml | 15 ++ app/src/main/res/drawable/file_picture.xml | 15 ++ app/src/main/res/drawable/file_video.xml | 15 ++ app/src/main/res/drawable/menu_copy_text.xml | 15 ++ app/src/main/res/drawable/menu_delete.xml | 15 ++ app/src/main/res/drawable/menu_forward.xml | 15 ++ app/src/main/res/drawable/menu_imdn_info.xml | 15 ++ .../layout/chat_message_attachment_cell.xml | 77 +++++----- .../res/layout/chat_message_content_cell.xml | 134 +++++------------- .../res/layout/chat_room_detail_fragment.xml | 2 +- app/src/main/res/menu/chat_message_menu.xml | 6 + app/src/main/res/values/dimen.xml | 2 + app/src/main/res/values/styles.xml | 2 +- build.gradle | 2 +- 30 files changed, 289 insertions(+), 191 deletions(-) delete mode 100644 app/src/main/res/drawable-xhdpi/file.png create mode 100644 app/src/main/res/drawable-xhdpi/file_audio_default.png create mode 100644 app/src/main/res/drawable-xhdpi/file_default.png create mode 100644 app/src/main/res/drawable-xhdpi/file_pdf_default.png create mode 100644 app/src/main/res/drawable-xhdpi/file_picture_default.png create mode 100644 app/src/main/res/drawable-xhdpi/file_video_default.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_copy_text_default.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_forward_default.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_imdn_info_default.png create mode 100644 app/src/main/res/drawable/file.xml create mode 100644 app/src/main/res/drawable/file_audio.xml create mode 100644 app/src/main/res/drawable/file_pdf.xml create mode 100644 app/src/main/res/drawable/file_picture.xml create mode 100644 app/src/main/res/drawable/file_video.xml create mode 100644 app/src/main/res/drawable/menu_copy_text.xml create mode 100644 app/src/main/res/drawable/menu_delete.xml create mode 100644 app/src/main/res/drawable/menu_forward.xml create mode 100644 app/src/main/res/drawable/menu_imdn_info.xml diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt index d6e0f2de5..f41b3e13c 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt @@ -23,9 +23,11 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.view.LayoutInflater +import android.view.MenuInflater import android.view.MenuItem import android.view.ViewGroup -import androidx.appcompat.widget.PopupMenu +import androidx.appcompat.view.menu.MenuBuilder +import androidx.appcompat.view.menu.MenuPopupHelper import androidx.databinding.DataBindingUtil import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData @@ -134,7 +136,7 @@ class ChatMessagesListAdapter( inner class ChatMessageViewHolder( val binding: ChatMessageListCellBinding - ) : RecyclerView.ViewHolder(binding.root), PopupMenu.OnMenuItemClickListener { + ) : RecyclerView.ViewHolder(binding.root) { fun bind(eventLog: EventLog) { with(binding) { if (eventLog.type == EventLog.Type.ConferenceChatMessage) { @@ -192,61 +194,66 @@ class ChatMessagesListAdapter( if (contextMenuDisabled) return setContextMenuClickListener { - val popup = PopupMenu(root.context, background) - popup.setOnMenuItemClickListener(this@ChatMessageViewHolder) - popup.inflate(R.menu.chat_message_menu) + val builder = MenuBuilder(root.context) + val popupMenu = MenuPopupHelper(root.context, builder, background) + popupMenu.setForceShowIcon(true) + MenuInflater(root.context).inflate(R.menu.chat_message_menu, builder) if (chatMessage.chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) || chatMessage.state == ChatMessage.State.NotDelivered) { // No message id - popup.menu.removeItem(R.id.chat_message_menu_imdn_infos) + builder.removeItem(R.id.chat_message_menu_imdn_infos) } if (chatMessage.state != ChatMessage.State.NotDelivered) { - popup.menu.removeItem(R.id.chat_message_menu_resend) + builder.removeItem(R.id.chat_message_menu_resend) } if (chatMessage.contents.find { content -> content.isText } == null) { - popup.menu.removeItem(R.id.chat_message_menu_copy_text) + builder.removeItem(R.id.chat_message_menu_copy_text) } - if (chatMessageViewModel.contact.value != null) { - popup.menu.removeItem(R.id.chat_message_menu_add_to_contacts) + if (chatMessage.isOutgoing || chatMessageViewModel.contact.value != null) { + builder.removeItem(R.id.chat_message_menu_add_to_contacts) } - popup.show() + builder.setCallback(object : MenuBuilder.Callback { + override fun onMenuModeChange(menu: MenuBuilder) {} + + override fun onMenuItemSelected(menu: MenuBuilder, item: MenuItem): Boolean { + return when (item.itemId) { + R.id.chat_message_menu_imdn_infos -> { + showImdnDeliveryFragment() + true + } + R.id.chat_message_menu_resend -> { + resendMessage() + true + } + R.id.chat_message_menu_copy_text -> { + copyTextToClipboard() + true + } + R.id.chat_message_forward_message -> { + forwardMessage() + true + } + R.id.chat_message_menu_delete_message -> { + deleteMessage() + true + } + R.id.chat_message_menu_add_to_contacts -> { + addSenderToContacts() + true + } + else -> false + } + } + }) + + popupMenu.show() true } } } } - override fun onMenuItemClick(item: MenuItem): Boolean { - return when (item.itemId) { - R.id.chat_message_menu_imdn_infos -> { - showImdnDeliveryFragment() - true - } - R.id.chat_message_menu_resend -> { - resendMessage() - true - } - R.id.chat_message_menu_copy_text -> { - copyTextToClipboard() - true - } - R.id.chat_message_forward_message -> { - forwardMessage() - true - } - R.id.chat_message_menu_delete_message -> { - deleteMessage() - true - } - R.id.chat_message_menu_add_to_contacts -> { - addSenderToContacts() - true - } - else -> false - } - } - private fun resendMessage() { val chatMessage = binding.data?.chatMessage if (chatMessage != null) { diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageAttachmentData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageAttachmentData.kt index 22c6b8235..a761aeb16 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageAttachmentData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageAttachmentData.kt @@ -32,6 +32,8 @@ class ChatMessageAttachmentData( val fileName: String = FileUtils.getNameFromFilePath(path) val isImage: Boolean = FileUtils.isExtensionImage(path) val isVideo: Boolean = FileUtils.isExtensionVideo(path) + val isAudio: Boolean = FileUtils.isExtensionAudio(path) + val isPdf: Boolean = FileUtils.isExtensionPdf(path) val videoPreview = MutableLiveData() private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob()) diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt index eeac47d2c..08dccdd5c 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageContentData.kt @@ -22,6 +22,7 @@ package org.linphone.activities.main.chat.data import android.graphics.Bitmap import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.* +import org.linphone.R import org.linphone.core.ChatMessage import org.linphone.core.ChatMessageListenerStub import org.linphone.core.Content @@ -39,18 +40,17 @@ class ChatMessageContentData( val isVideo = MutableLiveData() val isAudio = MutableLiveData() val videoPreview = MutableLiveData() + val isPdf = MutableLiveData() + val isGenericFile = MutableLiveData() val fileName = MutableLiveData() - val filePath = MutableLiveData() - val fileSize = MutableLiveData() val downloadable = MutableLiveData() - val downloadEnabled = MutableLiveData() - val downloadProgress = MutableLiveData() + val downloadLabel = MutableLiveData() val isAlone: Boolean get() { @@ -97,6 +97,7 @@ class ChatMessageContentData( content.name } fileSize.value = AppUtils.bytesToDisplayableSize(content.fileSize.toLong()) + downloadLabel.value = "${AppUtils.getString(R.string.chat_message_download_file)} (${fileSize.value})" if (content.isFile || (content.isFileTransfer && chatMessage.isOutgoing)) { val path = if (content.isFileEncrypted) content.plainFilePath else content.filePath ?: "" @@ -108,6 +109,7 @@ class ChatMessageContentData( isImage.value = FileUtils.isExtensionImage(path) isVideo.value = FileUtils.isExtensionVideo(path) isAudio.value = FileUtils.isExtensionAudio(path) + isPdf.value = FileUtils.isExtensionPdf(path) if (isVideo.value == true) { scope.launch { @@ -121,14 +123,17 @@ class ChatMessageContentData( isImage.value = false isVideo.value = false isAudio.value = false + isPdf.value = false } } else { downloadable.value = true - isImage.value = false - isVideo.value = false - isAudio.value = false + isImage.value = FileUtils.isExtensionImage(fileName.value!!) + isVideo.value = FileUtils.isExtensionVideo(fileName.value!!) + isAudio.value = FileUtils.isExtensionAudio(fileName.value!!) + isPdf.value = FileUtils.isExtensionPdf(fileName.value!!) } + isGenericFile.value = !isPdf.value!! && !isAudio.value!! && !isVideo.value!! && !isImage.value!! downloadEnabled.value = !chatMessage.isFileTransferInProgress downloadProgress.value = 0 chatMessage.addListener(chatMessageListener) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index ef63fdbb8..b2063b090 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -132,10 +132,8 @@ class CorePreferences constructor(private val context: Context) { /* Chat */ - // iOS and Android 4.4.x releases currently can't display more than 1 file per message - // TODO: Remove for the release, this won't be necessary anymore var preventMoreThanOneFilePerMessage: Boolean - get() = config.getBool("app", "prevent_more_than_one_file_per_message", true) + get() = config.getBool("app", "prevent_more_than_one_file_per_message", false) set(value) { config.setBool("app", "prevent_more_than_one_file_per_message", value) } diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index 972ff29d7..86bea09eb 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -92,6 +92,7 @@ fun ImageView.setImageMaxHeight(dimension: Float) { @BindingAdapter("android:layout_size") fun View.setLayoutSize(dimension: Float) { + if (dimension == 0f) return this.layoutParams.height = dimension.toInt() this.layoutParams.width = dimension.toInt() } @@ -304,6 +305,11 @@ fun setEntries( setEntries(viewGroup, entries, layoutId, null, parent) } +@BindingAdapter("android:scaleType") +fun setImageViewScaleType(imageView: ImageView, scaleType: ImageView.ScaleType) { + imageView.scaleType = scaleType +} + @BindingAdapter("glideAvatarFallback") fun loadAvatarWithGlideFallback(imageView: ImageView, path: String?) { if (path != null && path.isNotEmpty() && FileUtils.isExtensionImage(path)) { diff --git a/app/src/main/res/drawable-xhdpi/file.png b/app/src/main/res/drawable-xhdpi/file.png deleted file mode 100644 index 769cdc7ed0bc0e073ed405525fcef87d4bb96bd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1264 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/file_default.png b/app/src/main/res/drawable-xhdpi/file_default.png new file mode 100644 index 0000000000000000000000000000000000000000..086edeacc699d4d67f7882fe4293f89aed1eb5c6 GIT binary patch literal 1821 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/menu_copy_text_default.png b/app/src/main/res/drawable-xhdpi/menu_copy_text_default.png new file mode 100644 index 0000000000000000000000000000000000000000..ac945fb5e89872922cf303e1b0eb4eba4977f6ca GIT binary patch literal 1370 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/file.xml b/app/src/main/res/drawable/file.xml new file mode 100644 index 000000000..662649d38 --- /dev/null +++ b/app/src/main/res/drawable/file.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/file_audio.xml b/app/src/main/res/drawable/file_audio.xml new file mode 100644 index 000000000..cd8223c10 --- /dev/null +++ b/app/src/main/res/drawable/file_audio.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/file_pdf.xml b/app/src/main/res/drawable/file_pdf.xml new file mode 100644 index 000000000..63c2db532 --- /dev/null +++ b/app/src/main/res/drawable/file_pdf.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/file_picture.xml b/app/src/main/res/drawable/file_picture.xml new file mode 100644 index 000000000..9fa961da4 --- /dev/null +++ b/app/src/main/res/drawable/file_picture.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/file_video.xml b/app/src/main/res/drawable/file_video.xml new file mode 100644 index 000000000..215d086a3 --- /dev/null +++ b/app/src/main/res/drawable/file_video.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/menu_copy_text.xml b/app/src/main/res/drawable/menu_copy_text.xml new file mode 100644 index 000000000..bf1f870e3 --- /dev/null +++ b/app/src/main/res/drawable/menu_copy_text.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/menu_delete.xml b/app/src/main/res/drawable/menu_delete.xml new file mode 100644 index 000000000..764e5bd35 --- /dev/null +++ b/app/src/main/res/drawable/menu_delete.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/menu_forward.xml b/app/src/main/res/drawable/menu_forward.xml new file mode 100644 index 000000000..b74011c5f --- /dev/null +++ b/app/src/main/res/drawable/menu_forward.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/menu_imdn_info.xml b/app/src/main/res/drawable/menu_imdn_info.xml new file mode 100644 index 000000000..4dbe5d99d --- /dev/null +++ b/app/src/main/res/drawable/menu_imdn_info.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/chat_message_attachment_cell.xml b/app/src/main/res/layout/chat_message_attachment_cell.xml index 328b66b36..e5c0d31de 100644 --- a/app/src/main/res/layout/chat_message_attachment_cell.xml +++ b/app/src/main/res/layout/chat_message_attachment_cell.xml @@ -10,37 +10,31 @@ - - - - - + android:background="?attr/backgroundColor" + android:visibility="@{data.image || data.video ? View.GONE : View.VISIBLE}"> + + + + diff --git a/app/src/main/res/layout/chat_message_content_cell.xml b/app/src/main/res/layout/chat_message_content_cell.xml index 124487d04..5c8c86d93 100644 --- a/app/src/main/res/layout/chat_message_content_cell.xml +++ b/app/src/main/res/layout/chat_message_content_cell.xml @@ -4,6 +4,7 @@ + @@ -14,7 +15,8 @@ + android:layout_height="wrap_content" + android:layout_margin="5dp"> - - - - + android:background="?attr/backgroundColor" + android:visibility="@{data.downloadable || data.pdf || data.audio || data.genericFile ? View.VISIBLE : View.GONE}"> - + + - - - - - - - - - - - - - - + android:text="@{data.downloadLabel}" + android:onClick="@{() -> data.download()}" + android:visibility="@{data.downloadable ? View.VISIBLE : View.GONE}"/> diff --git a/app/src/main/res/layout/chat_room_detail_fragment.xml b/app/src/main/res/layout/chat_room_detail_fragment.xml index d0350a52c..4e5e0c789 100644 --- a/app/src/main/res/layout/chat_room_detail_fragment.xml +++ b/app/src/main/res/layout/chat_room_detail_fragment.xml @@ -150,7 +150,7 @@ \ No newline at end of file diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index a66cf73be..019ec8e24 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -7,6 +7,8 @@ 3dp 200dp 100dp + 150dp + 30dp 600dp 200dp 50dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 34f71a876..89f0bb18b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -225,7 +225,7 @@ diff --git a/build.gradle b/build.gradle index c9e31e4a2..4f1406228 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { maven { url "https://www.jitpack.io" } // for com.github.chrisbanes:PhotoView } dependencies { - classpath 'com.android.tools.build:gradle:4.2.0' + classpath 'com.android.tools.build:gradle:4.2.1' classpath 'com.google.gms:google-services:4.3.5' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jlleitschuh.gradle:ktlint-gradle:9.1.1"