diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt index aa85ac769f..60abead952 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt @@ -4,7 +4,6 @@ import android.content.Context import android.net.Uri import android.text.Spannable import android.text.SpannableString -import com.bumptech.glide.Glide import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.Base64 @@ -97,9 +96,9 @@ class DraftRepository( } if (shareMedia != null && shareContentType != null && borderless) { - val details = KeyboardUtil.getImageDetails(Glide.with(context), shareMedia) + val details = KeyboardUtil.getImageDetails(shareMedia) - if (details == null || !details.hasTransparency) { + if (details == null || !details.isSticker) { return ShareOrDraftData.SetMedia(shareMedia, shareMediaType!!, null) to null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index a42c9fb1fe..a02d03dfb7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -4271,7 +4271,7 @@ class ConversationFragment : } private fun sendKeyboardImage(uri: Uri, contentType: String, keyboardImageDetails: KeyboardUtil.ImageDetails?) { - if (keyboardImageDetails == null || !keyboardImageDetails.hasTransparency) { + if (keyboardImageDetails == null || !keyboardImageDetails.isSticker) { setMedia(uri, requireNotNull(SlideFactory.MediaType.from(contentType))) return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt index eadc9a8173..74e7484626 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt @@ -14,7 +14,6 @@ import android.text.SpannableStringBuilder import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.toBitmap -import com.bumptech.glide.Glide import com.bumptech.glide.RequestManager import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.transition.Transition @@ -111,7 +110,7 @@ class ConversationRepository( */ fun getKeyboardImageDetails(uri: Uri): Maybe { return MaybeCompat.fromCallable { - KeyboardUtil.getImageDetails(Glide.with(applicationContext), uri) + KeyboardUtil.getImageDetails(uri) }.subscribeOn(Schedulers.io()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardUtil.kt index 4f2d03e3e8..52b25bf3d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardUtil.kt @@ -5,30 +5,22 @@ package org.thoughtcrime.securesms.keyboard -import android.graphics.Bitmap -import android.graphics.Color import android.net.Uri import androidx.annotation.WorkerThread -import com.bumptech.glide.RequestManager -import com.bumptech.glide.load.engine.DiskCacheStrategy -import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader +import androidx.core.util.component1 +import androidx.core.util.component2 +import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.util.BitmapUtil import java.util.concurrent.ExecutionException -import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException object KeyboardUtil { @WorkerThread - fun getImageDetails(requestManager: RequestManager, uri: Uri): ImageDetails? { + fun getImageDetails(uri: Uri): ImageDetails? { return try { - val bitmap: Bitmap = requestManager.asBitmap() - .load(DecryptableStreamUriLoader.DecryptableUri(uri)) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .submit() - .get(1000, TimeUnit.MILLISECONDS) - val topLeft = bitmap.getPixel(0, 0) - ImageDetails(bitmap.width, bitmap.height, Color.alpha(topLeft) < 255) + val (width, height) = BitmapUtil.getDimensions(AppDependencies.application.contentResolver.openInputStream(uri)) + return ImageDetails(width = width, height = height, isSticker = uri.isForSticker()) } catch (e: InterruptedException) { null } catch (e: ExecutionException) { @@ -38,5 +30,10 @@ object KeyboardUtil { } } - data class ImageDetails(val width: Int, val height: Int, val hasTransparency: Boolean) + private fun Uri.isForSticker(): Boolean { + val string = this.toString() + return string.contains("sticker") || string.contains("com.touchtype.swiftkey.fileprovider/share_images") + } + + data class ImageDetails(val width: Int, val height: Int, val isSticker: Boolean) }