From f19e1b8a1974575ec08f70ad35aab6a4f301a1f0 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 24 Jul 2024 12:11:16 +0200 Subject: [PATCH] remove lib com.amulyakhare:com.amulyakhare.textdrawable replace with own TextDrawable class Signed-off-by: Marcel Hibbe --- app/build.gradle | 1 - .../IncomingVoiceMessageViewHolder.kt | 14 +---- .../talk/extensions/ImageViewExtensions.kt | 27 ++++---- .../com/nextcloud/talk/utils/TextDrawable.kt | 61 +++++++++++++++++++ app/src/main/res/values/colors.xml | 1 + 5 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/utils/TextDrawable.kt diff --git a/app/build.gradle b/app/build.gradle index 039fafa11..3c7a0935e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -259,7 +259,6 @@ dependencies { implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido2:${fidoVersion}" implementation 'com.github.nextcloud:PopupBubble:2.0.0' - implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' implementation "com.afollestad.material-dialogs:core:${materialDialogsVersion}" implementation "com.afollestad.material-dialogs:datetime:${materialDialogsVersion}" diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt index e267495af..8c2f321b0 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt @@ -16,17 +16,16 @@ import android.util.Log import android.view.View import android.widget.SeekBar import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat import androidx.work.WorkInfo import androidx.work.WorkManager import autodagger.AutoInjector import coil.load -import com.amulyakhare.textdrawable.TextDrawable import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.databinding.ItemCustomIncomingVoiceMessageBinding +import com.nextcloud.talk.extensions.loadBotsAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.models.json.chat.ChatMessage @@ -259,16 +258,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : } else if (message.actorType == "bots" && message.actorId == "changelog") { binding.messageUserAvatar.loadChangelogBotAvatar() } else if (message.actorType == "bots") { - val drawable = TextDrawable.builder() - .beginConfig() - .bold() - .endConfig() - .buildRound( - ">", - ResourcesCompat.getColor(context!!.resources, R.color.black, null) - ) - binding.messageUserAvatar.visibility = View.VISIBLE - binding.messageUserAvatar.setImageDrawable(drawable) + binding.messageUserAvatar.loadBotsAvatar() } else if (message.actorType == "federated_users") { binding.messageUserAvatar.loadFederatedUserAvatar(message) } diff --git a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt index 64377dc82..1a544552e 100644 --- a/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt +++ b/app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt @@ -10,13 +10,13 @@ package com.nextcloud.talk.extensions +import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Build import android.util.Log import android.widget.ImageView import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat import coil.annotation.ExperimentalCoilApi import coil.imageLoader import coil.load @@ -26,7 +26,6 @@ import coil.request.SuccessResult import coil.result import coil.transform.CircleCropTransformation import coil.transform.RoundedCornersTransformation -import com.amulyakhare.textdrawable.TextDrawable import com.nextcloud.talk.R import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.models.domain.ConversationModel @@ -36,6 +35,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.TextDrawable private const val ROUNDING_PIXEL = 16f private const val TAG = "ImageViewExtensions" @@ -315,15 +315,20 @@ fun ImageView.loadChangelogBotAvatar(): io.reactivex.disposables.Disposable { } fun ImageView.loadBotsAvatar(): io.reactivex.disposables.Disposable { - return loadUserAvatar( - TextDrawable.builder() - .beginConfig() - .bold() - .endConfig() - .buildRound( - ">", - ResourcesCompat.getColor(context.resources, R.color.black, null) - ) + val data: Any = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val layers = arrayOfNulls(2) + layers[0] = ColorDrawable(context.getColor(R.color.black)) + layers[1] = TextDrawable(context, ">") + val layerDrawable = LayerDrawable(layers) + layerDrawable + } else { + R.mipmap.ic_launcher + } + + return DisposableWrapper( + load(data) { + transformations(CircleCropTransformation()) + } ) } diff --git a/app/src/main/java/com/nextcloud/talk/utils/TextDrawable.kt b/app/src/main/java/com/nextcloud/talk/utils/TextDrawable.kt new file mode 100644 index 000000000..d29b4bdf8 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/TextDrawable.kt @@ -0,0 +1,61 @@ +/* + * Nextcloud Talk - Android Client + * + * SPDX-FileCopyrightText: 2024 Marcel Hibbe + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.nextcloud.talk.utils + +import android.content.Context +import android.graphics.Canvas +import android.graphics.ColorFilter +import android.graphics.Paint +import android.graphics.PixelFormat +import android.graphics.Rect +import android.graphics.drawable.Drawable +import com.nextcloud.talk.R + +class TextDrawable(val context: Context, private var text: String) : Drawable() { + private val paint = Paint() + private val bounds: Rect + + init { + paint.color = context.getColor(R.color.textColorOnPrimaryBackground) + paint.isAntiAlias = true + paint.textSize = TEXT_SIZE + bounds = Rect() + } + + override fun draw(canvas: Canvas) { + if (text.isNotEmpty()) { + paint.getTextBounds( + text, + 0, + text.length, + bounds + ) + val x: Int = (getBounds().width() - bounds.width()) / 2 + val y: Int = ((getBounds().height() + bounds.height()) / 2) + Y_OFFSET + canvas.drawText(text, x.toFloat(), y.toFloat(), paint) + } + } + + override fun setColorFilter(colorFilter: ColorFilter?) { + paint.setColorFilter(colorFilter) + } + + override fun setAlpha(alpha: Int) { + paint.alpha = alpha + } + + @Deprecated("Deprecated in Java", ReplaceWith("PixelFormat.OPAQUE", "android.graphics.PixelFormat")) + override fun getOpacity(): Int { + return PixelFormat.OPAQUE + } + + companion object { + private const val Y_OFFSET = 5 + private const val TEXT_SIZE = 50f + } +} diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 92e643385..2ab51b10c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -49,6 +49,7 @@ #E8E8E8 #757575 #D5D5D5 + #000000 #E9FFFFFF #111111 #767676