From 47508495edba87890449f91168e8858ec95ac72b Mon Sep 17 00:00:00 2001 From: jeffrey-signal Date: Fri, 15 Aug 2025 12:44:42 -0400 Subject: [PATCH] Improve organization of glide packages. Generic image processing classes were scattered alongside Signal-specific Glide code across multiple packages: `org.signal.glide`, `org.thoughtcrime.securesms.glide` and `org.thoughtcrime.securesms.mms`. This change provides a clearer separation of concerns: - `org.signal.glide` contains generic image loading components - `org.thoughtcrime.securesms.glide` contains Signal-specific Glide integrations - Feature-specific loaders are moved to their respective domain packages (e.g. `.badges`, `.contacts`) --- .../io}/DecryptableStreamLocalUriFetcher.java | 8 +- .../glide/common/io}/GlideStreamConfig.kt | 6 +- .../glide/common/io}/InputStreamFactory.kt | 2 +- .../glide/common/io}/InputStreamRewinder.java | 2 +- .../glide/load}/ImageHeaderParserUtils.kt | 5 +- .../SignalDownsampleStrategy.kt | 2 +- .../resource}/apng/APNGDrawable.java | 4 +- .../resource}/apng/decode/ACTLChunk.java | 4 +- .../resource}/apng/decode/APNGDecoder.java | 6 +- .../resource}/apng/decode/APNGFrame.java | 6 +- .../resource}/apng/decode/APNGParser.java | 4 +- .../resource}/apng/decode/Chunk.java | 4 +- .../resource}/apng/decode/FCTLChunk.java | 4 +- .../resource}/apng/decode/FDATChunk.java | 4 +- .../resource}/apng/decode/IDATChunk.java | 2 +- .../resource}/apng/decode/IENDChunk.java | 2 +- .../resource}/apng/decode/IHDRChunk.java | 4 +- .../resource}/apng/decode/StillFrame.java | 6 +- .../resource}/apng/io/APNGReader.java | 2 +- .../resource}/apng/io/APNGWriter.java | 2 +- .../load/resource/bitmap}/Downsampler.java | 18 +- .../resource/bitmap}/HardwareConfigState.java | 2 +- .../load/resource/bitmap}/ImageReader.java | 10 +- .../securesms/ApplicationContext.java | 158 +++++++++--------- .../securesms/badges/BadgeImageView.kt | 5 +- .../{glide => badges/load}/BadgeLoader.java | 8 +- .../BadgeSpriteTransformation.kt | 7 +- .../{glide => badges/load}/GiftBadgeModel.kt | 8 +- .../securesms/badges/models/Badge.kt | 2 +- .../securesms/components/ThumbnailView.java | 4 +- .../avatars}/ContactPhotoFetcher.java | 9 +- .../avatars}/ContactPhotoLoader.java | 9 +- .../avatars}/ContactPhotoLocalUriFetcher.java | 7 +- .../ConversationListItem.java | 2 +- .../securesms/glide/OkHttpStreamFetcher.java | 13 +- .../{mms => glide}/SignalGlideComponents.java | 23 ++- .../cache/ApngFrameDrawableTranscoder.java | 4 +- .../glide/cache/ByteBufferApngDecoder.java | 4 +- .../cache/EncryptedApngCacheEncoder.java | 2 +- .../cache}/InputStreamFactoryBitmapDecoder.kt | 5 +- .../glide/cache/StreamApngDecoder.java | 4 +- .../glide/cache/StreamFactoryApngDecoder.kt | 6 +- .../glide/cache/StreamFactoryGifDecoder.kt | 2 +- .../targets}/GlideBitmapListeningTarget.java | 2 +- .../GlideDrawableListeningTarget.java | 2 +- .../{ => targets}/GlideLiveDataTarget.java | 2 +- .../mms/DecryptableUriStreamFetcher.kt | 1 + .../mms/DecryptableUriStreamLoader.kt | 1 + 48 files changed, 220 insertions(+), 179 deletions(-) rename app/src/main/java/org/{thoughtcrime/securesms/mms => signal/glide/common/io}/DecryptableStreamLocalUriFetcher.java (94%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/common/io}/GlideStreamConfig.kt (91%) rename app/src/main/java/org/{thoughtcrime/securesms/mms => signal/glide/common/io}/InputStreamFactory.kt (97%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/common/io}/InputStreamRewinder.java (98%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/load}/ImageHeaderParserUtils.kt (97%) rename app/src/main/java/org/signal/glide/{transforms => load}/SignalDownsampleStrategy.kt (97%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/APNGDrawable.java (93%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/ACTLChunk.java (83%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/APNGDecoder.java (97%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/APNGFrame.java (96%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/APNGParser.java (97%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/Chunk.java (93%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/FCTLChunk.java (97%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/FDATChunk.java (82%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/IDATChunk.java (82%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/IENDChunk.java (83%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/IHDRChunk.java (88%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/decode/StillFrame.java (88%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/io/APNGReader.java (97%) rename app/src/main/java/org/signal/glide/{ => load/resource}/apng/io/APNGWriter.java (95%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/load/resource/bitmap}/Downsampler.java (98%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/load/resource/bitmap}/HardwareConfigState.java (99%) rename app/src/main/java/org/{thoughtcrime/securesms/glide => signal/glide/load/resource/bitmap}/ImageReader.java (96%) rename app/src/main/java/org/thoughtcrime/securesms/{glide => badges/load}/BadgeLoader.java (89%) rename app/src/main/java/org/thoughtcrime/securesms/badges/{glide => load}/BadgeSpriteTransformation.kt (98%) rename app/src/main/java/org/thoughtcrime/securesms/{glide => badges/load}/GiftBadgeModel.kt (94%) rename app/src/main/java/org/thoughtcrime/securesms/{glide => contacts/avatars}/ContactPhotoFetcher.java (90%) rename app/src/main/java/org/thoughtcrime/securesms/{glide => contacts/avatars}/ContactPhotoLoader.java (90%) rename app/src/main/java/org/thoughtcrime/securesms/{mms => contacts/avatars}/ContactPhotoLocalUriFetcher.java (87%) rename app/src/main/java/org/thoughtcrime/securesms/{mms => glide}/SignalGlideComponents.java (90%) rename app/src/main/java/org/thoughtcrime/securesms/{mms => glide/cache}/InputStreamFactoryBitmapDecoder.kt (87%) rename app/src/main/java/org/thoughtcrime/securesms/{components => glide/targets}/GlideBitmapListeningTarget.java (94%) rename app/src/main/java/org/thoughtcrime/securesms/{components => glide/targets}/GlideDrawableListeningTarget.java (95%) rename app/src/main/java/org/thoughtcrime/securesms/glide/{ => targets}/GlideLiveDataTarget.java (95%) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java b/app/src/main/java/org/signal/glide/common/io/DecryptableStreamLocalUriFetcher.java similarity index 94% rename from app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java rename to app/src/main/java/org/signal/glide/common/io/DecryptableStreamLocalUriFetcher.java index e732df91b1..43f049e3a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java +++ b/app/src/main/java/org/signal/glide/common/io/DecryptableStreamLocalUriFetcher.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.mms; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.glide.common.io; import android.content.ContentResolver; import android.content.Context; @@ -10,6 +15,7 @@ import com.bumptech.glide.load.data.StreamLocalUriFetcher; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.AttachmentId; +import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.BitmapUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/GlideStreamConfig.kt b/app/src/main/java/org/signal/glide/common/io/GlideStreamConfig.kt similarity index 91% rename from app/src/main/java/org/thoughtcrime/securesms/glide/GlideStreamConfig.kt rename to app/src/main/java/org/signal/glide/common/io/GlideStreamConfig.kt index 5cb0bae936..523e03f254 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/GlideStreamConfig.kt +++ b/app/src/main/java/org/signal/glide/common/io/GlideStreamConfig.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.glide +package org.signal.glide.common.io import android.app.ActivityManager import android.content.Context @@ -11,9 +11,9 @@ import org.signal.core.util.ByteSize import org.signal.core.util.bytes import org.signal.core.util.gibiBytes import org.signal.core.util.mebiBytes +import org.signal.glide.common.io.GlideStreamConfig.MAX_MARK_LIMIT +import org.signal.glide.common.io.GlideStreamConfig.MIN_MARK_LIMIT import org.thoughtcrime.securesms.dependencies.AppDependencies -import org.thoughtcrime.securesms.glide.GlideStreamConfig.MAX_MARK_LIMIT -import org.thoughtcrime.securesms.glide.GlideStreamConfig.MIN_MARK_LIMIT object GlideStreamConfig { private val MIN_MARK_LIMIT: ByteSize = 5.mebiBytes // Glide default diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactory.kt b/app/src/main/java/org/signal/glide/common/io/InputStreamFactory.kt similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactory.kt rename to app/src/main/java/org/signal/glide/common/io/InputStreamFactory.kt index e29752d7da..f619719a2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactory.kt +++ b/app/src/main/java/org/signal/glide/common/io/InputStreamFactory.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.mms +package org.signal.glide.common.io import android.content.Context import android.net.Uri diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/InputStreamRewinder.java b/app/src/main/java/org/signal/glide/common/io/InputStreamRewinder.java similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/glide/InputStreamRewinder.java rename to app/src/main/java/org/signal/glide/common/io/InputStreamRewinder.java index 269c254756..7101eb4b15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/InputStreamRewinder.java +++ b/app/src/main/java/org/signal/glide/common/io/InputStreamRewinder.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.thoughtcrime.securesms.glide; +package org.signal.glide.common.io; import androidx.annotation.NonNull; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/ImageHeaderParserUtils.kt b/app/src/main/java/org/signal/glide/load/ImageHeaderParserUtils.kt similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/glide/ImageHeaderParserUtils.kt rename to app/src/main/java/org/signal/glide/load/ImageHeaderParserUtils.kt index 262e87235c..1e4f28978c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/ImageHeaderParserUtils.kt +++ b/app/src/main/java/org/signal/glide/load/ImageHeaderParserUtils.kt @@ -3,14 +3,15 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.glide +package org.signal.glide.load import androidx.exifinterface.media.ExifInterface import com.bumptech.glide.load.ImageHeaderParser import com.bumptech.glide.load.data.ParcelFileDescriptorRewinder import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool import com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream -import org.thoughtcrime.securesms.mms.InputStreamFactory +import org.signal.glide.common.io.GlideStreamConfig +import org.signal.glide.common.io.InputStreamFactory import org.thoughtcrime.securesms.util.BitmapUtil import java.io.IOException import java.io.InputStream diff --git a/app/src/main/java/org/signal/glide/transforms/SignalDownsampleStrategy.kt b/app/src/main/java/org/signal/glide/load/SignalDownsampleStrategy.kt similarity index 97% rename from app/src/main/java/org/signal/glide/transforms/SignalDownsampleStrategy.kt rename to app/src/main/java/org/signal/glide/load/SignalDownsampleStrategy.kt index 3b8dca8652..e7e78224e1 100644 --- a/app/src/main/java/org/signal/glide/transforms/SignalDownsampleStrategy.kt +++ b/app/src/main/java/org/signal/glide/load/SignalDownsampleStrategy.kt @@ -2,7 +2,7 @@ * Copyright 2023 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.signal.glide.transforms +package org.signal.glide.load import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import kotlin.math.max diff --git a/app/src/main/java/org/signal/glide/apng/APNGDrawable.java b/app/src/main/java/org/signal/glide/load/resource/apng/APNGDrawable.java similarity index 93% rename from app/src/main/java/org/signal/glide/apng/APNGDrawable.java rename to app/src/main/java/org/signal/glide/load/resource/apng/APNGDrawable.java index 021598b399..52f2bafe76 100644 --- a/app/src/main/java/org/signal/glide/apng/APNGDrawable.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/APNGDrawable.java @@ -3,17 +3,17 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng; +package org.signal.glide.load.resource.apng; import android.content.Context; -import org.signal.glide.apng.decode.APNGDecoder; import org.signal.glide.common.FrameAnimationDrawable; import org.signal.glide.common.decode.FrameSeqDecoder; import org.signal.glide.common.loader.AssetStreamLoader; import org.signal.glide.common.loader.FileLoader; import org.signal.glide.common.loader.Loader; import org.signal.glide.common.loader.ResourceStreamLoader; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; /** * @Description: APNGDrawable diff --git a/app/src/main/java/org/signal/glide/apng/decode/ACTLChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/ACTLChunk.java similarity index 83% rename from app/src/main/java/org/signal/glide/apng/decode/ACTLChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/ACTLChunk.java index 37f60d90cb..382664ce3b 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/ACTLChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/ACTLChunk.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; -import org.signal.glide.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/APNGDecoder.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGDecoder.java similarity index 97% rename from app/src/main/java/org/signal/glide/apng/decode/APNGDecoder.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGDecoder.java index 5ab21bed82..eeb9837bee 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/APNGDecoder.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGDecoder.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -13,12 +13,12 @@ import android.graphics.PorterDuff; import android.graphics.Rect; import org.signal.core.util.logging.Log; -import org.signal.glide.apng.io.APNGReader; -import org.signal.glide.apng.io.APNGWriter; import org.signal.glide.common.decode.Frame; import org.signal.glide.common.decode.FrameSeqDecoder; import org.signal.glide.common.io.Reader; import org.signal.glide.common.loader.Loader; +import org.signal.glide.load.resource.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGWriter; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/app/src/main/java/org/signal/glide/apng/decode/APNGFrame.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGFrame.java similarity index 96% rename from app/src/main/java/org/signal/glide/apng/decode/APNGFrame.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGFrame.java index fd1ca27064..b291cbc4a7 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/APNGFrame.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGFrame.java @@ -3,16 +3,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; -import org.signal.glide.apng.io.APNGReader; -import org.signal.glide.apng.io.APNGWriter; import org.signal.glide.common.decode.Frame; +import org.signal.glide.load.resource.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGWriter; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/org/signal/glide/apng/decode/APNGParser.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGParser.java similarity index 97% rename from app/src/main/java/org/signal/glide/apng/decode/APNGParser.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGParser.java index 04d52757a3..16cfb52193 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/APNGParser.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/APNGParser.java @@ -3,13 +3,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; import android.content.Context; -import org.signal.glide.apng.io.APNGReader; import org.signal.glide.common.io.Reader; import org.signal.glide.common.io.StreamReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.FileInputStream; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/Chunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/Chunk.java similarity index 93% rename from app/src/main/java/org/signal/glide/apng/decode/Chunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/Chunk.java index 192cc0fd65..a3f1861894 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/Chunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/Chunk.java @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; import android.text.TextUtils; -import org.signal.glide.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/FCTLChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/FCTLChunk.java similarity index 97% rename from app/src/main/java/org/signal/glide/apng/decode/FCTLChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/FCTLChunk.java index 9e74d806f0..52c8f10669 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/FCTLChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/FCTLChunk.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; -import org.signal.glide.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/FDATChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/FDATChunk.java similarity index 82% rename from app/src/main/java/org/signal/glide/apng/decode/FDATChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/FDATChunk.java index 1618c59df3..fbe93ee6bb 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/FDATChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/FDATChunk.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; -import org.signal.glide.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/IDATChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IDATChunk.java similarity index 82% rename from app/src/main/java/org/signal/glide/apng/decode/IDATChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/IDATChunk.java index bd7a60fee6..cf93ccfb09 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/IDATChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IDATChunk.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; /** * @Description: 作用描述 diff --git a/app/src/main/java/org/signal/glide/apng/decode/IENDChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IENDChunk.java similarity index 83% rename from app/src/main/java/org/signal/glide/apng/decode/IENDChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/IENDChunk.java index f0cbd8008b..7092368799 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/IENDChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IENDChunk.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; /** * @Description: 作用描述 diff --git a/app/src/main/java/org/signal/glide/apng/decode/IHDRChunk.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IHDRChunk.java similarity index 88% rename from app/src/main/java/org/signal/glide/apng/decode/IHDRChunk.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/IHDRChunk.java index eebd9d278e..b4347dd5bb 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/IHDRChunk.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/IHDRChunk.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; -import org.signal.glide.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGReader; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/decode/StillFrame.java b/app/src/main/java/org/signal/glide/load/resource/apng/decode/StillFrame.java similarity index 88% rename from app/src/main/java/org/signal/glide/apng/decode/StillFrame.java rename to app/src/main/java/org/signal/glide/load/resource/apng/decode/StillFrame.java index 65715f1e46..c7e5811495 100644 --- a/app/src/main/java/org/signal/glide/apng/decode/StillFrame.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/decode/StillFrame.java @@ -3,16 +3,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.decode; +package org.signal.glide.load.resource.apng.decode; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; -import org.signal.glide.apng.io.APNGReader; -import org.signal.glide.apng.io.APNGWriter; import org.signal.glide.common.decode.Frame; +import org.signal.glide.load.resource.apng.io.APNGReader; +import org.signal.glide.load.resource.apng.io.APNGWriter; import java.io.IOException; diff --git a/app/src/main/java/org/signal/glide/apng/io/APNGReader.java b/app/src/main/java/org/signal/glide/load/resource/apng/io/APNGReader.java similarity index 97% rename from app/src/main/java/org/signal/glide/apng/io/APNGReader.java rename to app/src/main/java/org/signal/glide/load/resource/apng/io/APNGReader.java index 293ed24611..eaa7678beb 100644 --- a/app/src/main/java/org/signal/glide/apng/io/APNGReader.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/io/APNGReader.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.io; +package org.signal.glide.load.resource.apng.io; import android.text.TextUtils; diff --git a/app/src/main/java/org/signal/glide/apng/io/APNGWriter.java b/app/src/main/java/org/signal/glide/load/resource/apng/io/APNGWriter.java similarity index 95% rename from app/src/main/java/org/signal/glide/apng/io/APNGWriter.java rename to app/src/main/java/org/signal/glide/load/resource/apng/io/APNGWriter.java index 25a7c27644..2e24712caf 100644 --- a/app/src/main/java/org/signal/glide/apng/io/APNGWriter.java +++ b/app/src/main/java/org/signal/glide/load/resource/apng/io/APNGWriter.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.signal.glide.apng.io; +package org.signal.glide.load.resource.apng.io; import org.signal.glide.common.io.ByteBufferWriter; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/Downsampler.java b/app/src/main/java/org/signal/glide/load/resource/bitmap/Downsampler.java similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/glide/Downsampler.java rename to app/src/main/java/org/signal/glide/load/resource/bitmap/Downsampler.java index b27c4706c0..032cf00902 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/Downsampler.java +++ b/app/src/main/java/org/signal/glide/load/resource/bitmap/Downsampler.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.thoughtcrime.securesms.glide; +package org.signal.glide.load.resource.bitmap; import android.annotation.TargetApi; import android.graphics.Bitmap; @@ -53,7 +53,7 @@ import com.bumptech.glide.util.Preconditions; import com.bumptech.glide.util.Util; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.mms.InputStreamFactory; +import org.signal.glide.common.io.InputStreamFactory; import java.io.File; import java.io.IOException; @@ -228,13 +228,13 @@ public final class Downsampler { * of the image for the given InputStream is available, the operation is much less expensive in * terms of memory. * - * @param inputStreamFactory An {@link InputStreamFactory} to the data for the image. - * @param requestedWidth The width the final image should be close to. - * @param requestedHeight The height the final image should be close to. - * @param options A set of options that may contain one or more supported options that influence - * how a Bitmap will be decoded from the given stream. - * @param callbacks A set of callbacks allowing callers to optionally respond to various - * significant events during the decode process. + * @param inputStreamFactory An {@link InputStreamFactory} to the data for the image. + * @param requestedWidth The width the final image should be close to. + * @param requestedHeight The height the final image should be close to. + * @param options A set of options that may contain one or more supported options that influence + * how a Bitmap will be decoded from the given stream. + * @param callbacks A set of callbacks allowing callers to optionally respond to various + * significant events during the decode process. * @return A new bitmap containing the image from the given InputStream, or recycle if recycle is * not null. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/HardwareConfigState.java b/app/src/main/java/org/signal/glide/load/resource/bitmap/HardwareConfigState.java similarity index 99% rename from app/src/main/java/org/thoughtcrime/securesms/glide/HardwareConfigState.java rename to app/src/main/java/org/signal/glide/load/resource/bitmap/HardwareConfigState.java index a68f878ad7..f985a9b970 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/HardwareConfigState.java +++ b/app/src/main/java/org/signal/glide/load/resource/bitmap/HardwareConfigState.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.thoughtcrime.securesms.glide; +package org.signal.glide.load.resource.bitmap; import android.annotation.SuppressLint; import android.annotation.TargetApi; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/ImageReader.java b/app/src/main/java/org/signal/glide/load/resource/bitmap/ImageReader.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/glide/ImageReader.java rename to app/src/main/java/org/signal/glide/load/resource/bitmap/ImageReader.java index 6863ee3e37..9ba5ed2a84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/ImageReader.java +++ b/app/src/main/java/org/signal/glide/load/resource/bitmap/ImageReader.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.glide; +package org.signal.glide.load.resource.bitmap; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -24,7 +24,9 @@ import com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream; import com.bumptech.glide.util.ByteBufferUtil; import com.bumptech.glide.util.Preconditions; -import org.thoughtcrime.securesms.mms.InputStreamFactory; +import org.signal.glide.common.io.InputStreamFactory; +import org.signal.glide.common.io.InputStreamRewinder; +import org.signal.glide.load.ImageHeaderParserUtils; import java.io.File; import java.io.FileInputStream; @@ -173,8 +175,8 @@ interface ImageReader { } final class InputStreamImageReader implements ImageReader { - private final InputStreamRewinder dataRewinder; - private final ArrayPool byteArrayPool; + private final InputStreamRewinder dataRewinder; + private final ArrayPool byteArrayPool; private final List parsers; private final InputStreamFactory inputStreamFactory; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 7d2c270c8c..4682f5ec69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -54,6 +54,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencyProvider; import org.thoughtcrime.securesms.emoji.EmojiSource; import org.thoughtcrime.securesms.emoji.JumboEmoji; import org.thoughtcrime.securesms.gcm.FcmFetchManager; +import org.thoughtcrime.securesms.glide.SignalGlideComponents; import org.thoughtcrime.securesms.jobs.AccountConsistencyWorkerJob; import org.thoughtcrime.securesms.jobs.BackupRefreshJob; import org.thoughtcrime.securesms.jobs.BackupSubscriptionCheckJob; @@ -83,7 +84,6 @@ import org.thoughtcrime.securesms.logging.CustomSignalProtocolLogger; import org.thoughtcrime.securesms.logging.PersistentLogger; import org.thoughtcrime.securesms.messageprocessingalarm.RoutineMessageFetchReceiver; import org.thoughtcrime.securesms.migrations.ApplicationMigrations; -import org.thoughtcrime.securesms.mms.SignalGlideComponents; import org.thoughtcrime.securesms.mms.SignalGlideModule; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.ratelimit.RateLimitUtil; @@ -128,7 +128,7 @@ import rxdogtag2.RxDogTag; /** * Will be called once when the TextSecure process is created. - * + *

* We're using this as an insertion point to patch up the Android PRNG disaster, * to initialize the job manager, and to check for GCM registration freshness. * @@ -139,7 +139,7 @@ public class ApplicationContext extends Application implements AppForegroundObse private static final String TAG = Log.tag(ApplicationContext.class); public static ApplicationContext getInstance(Context context) { - return (ApplicationContext)context.getApplicationContext(); + return (ApplicationContext) context.getApplicationContext(); } @Override @@ -153,82 +153,82 @@ public class ApplicationContext extends Application implements AppForegroundObse super.onCreate(); AppStartup.getInstance().addBlocking("sqlcipher-init", () -> { - SqlCipherLibraryLoader.load(); - SignalDatabase.init(this, - DatabaseSecretProvider.getOrCreateDatabaseSecret(this), - AttachmentSecretProvider.getInstance(this).getOrCreateAttachmentSecret()); - }) - .addBlocking("signal-store", () -> SignalStore.init(this)) - .addBlocking("logging", () -> { - initializeLogging(); - Log.i(TAG, "onCreate()"); - }) - .addBlocking("app-dependencies", this::initializeAppDependencies) - .addBlocking("anr-detector", this::startAnrDetector) - .addBlocking("security-provider", this::initializeSecurityProvider) - .addBlocking("crash-handling", this::initializeCrashHandling) - .addBlocking("rx-init", this::initializeRx) - .addBlocking("event-bus", () -> EventBus.builder().logNoSubscriberMessages(false).installDefaultEventBus()) - .addBlocking("scrubber", () -> Scrubber.setIdentifierHmacKeyProvider(() -> SignalStore.svr().getMasterKey().deriveLoggingKey())) - .addBlocking("first-launch", this::initializeFirstEverAppLaunch) - .addBlocking("app-migrations", this::initializeApplicationMigrations) - .addBlocking("lifecycle-observer", () -> AppForegroundObserver.addListener(this)) - .addBlocking("message-retriever", this::initializeMessageRetrieval) - .addBlocking("dynamic-theme", () -> DynamicTheme.setDefaultDayNightMode(this)) - .addBlocking("proxy-init", () -> { - if (SignalStore.proxy().isProxyEnabled()) { - Log.w(TAG, "Proxy detected. Enabling Conscrypt.setUseEngineSocketByDefault()"); - ConscryptSignal.setUseEngineSocketByDefault(true); - } - }) - .addBlocking("blob-provider", this::initializeBlobProvider) - .addBlocking("remote-config", RemoteConfig::init) - .addBlocking("ring-rtc", this::initializeRingRtc) - .addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents())) - .addBlocking("tracer", this::initializeTracer) - .addNonBlocking(() -> RegistrationUtil.maybeMarkRegistrationComplete()) - .addNonBlocking(() -> Glide.get(this)) - .addNonBlocking(this::cleanAvatarStorage) - .addNonBlocking(this::initializeRevealableMessageManager) - .addNonBlocking(this::initializePendingRetryReceiptManager) - .addNonBlocking(this::initializeScheduledMessageManager) - .addNonBlocking(this::initializeFcmCheck) - .addNonBlocking(PreKeysSyncJob::enqueueIfNeeded) - .addNonBlocking(this::initializePeriodicTasks) - .addNonBlocking(this::initializeCircumvention) - .addNonBlocking(this::initializeCleanup) - .addNonBlocking(this::initializeGlideCodecs) - .addNonBlocking(StorageSyncHelper::scheduleRoutineSync) - .addNonBlocking(this::beginJobLoop) - .addNonBlocking(EmojiSource::refresh) - .addNonBlocking(() -> AppDependencies.getGiphyMp4Cache().onAppStart(this)) - .addNonBlocking(AppDependencies::getBillingApi) - .addNonBlocking(this::ensureProfileUploaded) - .addNonBlocking(() -> AppDependencies.getExpireStoriesManager().scheduleIfNecessary()) - .addPostRender(() -> AppDependencies.getDeletedCallEventManager().scheduleIfNecessary()) - .addPostRender(() -> RateLimitUtil.retryAllRateLimitedMessages(this)) - .addPostRender(this::initializeExpiringMessageManager) - .addPostRender(this::initializeTrimThreadsByDateManager) - .addPostRender(RefreshSvrCredentialsJob::enqueueIfNecessary) - .addPostRender(() -> DownloadLatestEmojiDataJob.scheduleIfNecessary(this)) - .addPostRender(EmojiSearchIndexDownloadJob::scheduleIfNecessary) - .addPostRender(() -> SignalDatabase.messageLog().trimOldMessages(System.currentTimeMillis(), RemoteConfig.retryRespondMaxAge())) - .addPostRender(() -> JumboEmoji.updateCurrentVersion(this)) - .addPostRender(RetrieveRemoteAnnouncementsJob::enqueue) - .addPostRender(() -> AndroidTelecomUtil.registerPhoneAccount()) - .addPostRender(() -> AppDependencies.getJobManager().add(new FontDownloaderJob())) - .addPostRender(CheckServiceReachabilityJob::enqueueIfNecessary) - .addPostRender(GroupV2UpdateSelfProfileKeyJob::enqueueForGroupsIfNecessary) - .addPostRender(StoryOnboardingDownloadJob.Companion::enqueueIfNeeded) - .addPostRender(() -> AppDependencies.getExoPlayerPool().getPoolStats().getMaxUnreserved()) - .addPostRender(() -> AppDependencies.getRecipientCache().warmUp()) - .addPostRender(AccountConsistencyWorkerJob::enqueueIfNecessary) - .addPostRender(GroupRingCleanupJob::enqueue) - .addPostRender(LinkedDeviceInactiveCheckJob::enqueueIfNecessary) - .addPostRender(() -> ActiveCallManager.clearNotifications(this)) - .addPostRender(RestoreOptimizedMediaJob::enqueueIfNecessary) - .addPostRender(RetryPendingSendsJob::enqueueForAll) - .execute(); + SqlCipherLibraryLoader.load(); + SignalDatabase.init(this, + DatabaseSecretProvider.getOrCreateDatabaseSecret(this), + AttachmentSecretProvider.getInstance(this).getOrCreateAttachmentSecret()); + }) + .addBlocking("signal-store", () -> SignalStore.init(this)) + .addBlocking("logging", () -> { + initializeLogging(); + Log.i(TAG, "onCreate()"); + }) + .addBlocking("app-dependencies", this::initializeAppDependencies) + .addBlocking("anr-detector", this::startAnrDetector) + .addBlocking("security-provider", this::initializeSecurityProvider) + .addBlocking("crash-handling", this::initializeCrashHandling) + .addBlocking("rx-init", this::initializeRx) + .addBlocking("event-bus", () -> EventBus.builder().logNoSubscriberMessages(false).installDefaultEventBus()) + .addBlocking("scrubber", () -> Scrubber.setIdentifierHmacKeyProvider(() -> SignalStore.svr().getMasterKey().deriveLoggingKey())) + .addBlocking("first-launch", this::initializeFirstEverAppLaunch) + .addBlocking("app-migrations", this::initializeApplicationMigrations) + .addBlocking("lifecycle-observer", () -> AppForegroundObserver.addListener(this)) + .addBlocking("message-retriever", this::initializeMessageRetrieval) + .addBlocking("dynamic-theme", () -> DynamicTheme.setDefaultDayNightMode(this)) + .addBlocking("proxy-init", () -> { + if (SignalStore.proxy().isProxyEnabled()) { + Log.w(TAG, "Proxy detected. Enabling Conscrypt.setUseEngineSocketByDefault()"); + ConscryptSignal.setUseEngineSocketByDefault(true); + } + }) + .addBlocking("blob-provider", this::initializeBlobProvider) + .addBlocking("remote-config", RemoteConfig::init) + .addBlocking("ring-rtc", this::initializeRingRtc) + .addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents())) + .addBlocking("tracer", this::initializeTracer) + .addNonBlocking(() -> RegistrationUtil.maybeMarkRegistrationComplete()) + .addNonBlocking(() -> Glide.get(this)) + .addNonBlocking(this::cleanAvatarStorage) + .addNonBlocking(this::initializeRevealableMessageManager) + .addNonBlocking(this::initializePendingRetryReceiptManager) + .addNonBlocking(this::initializeScheduledMessageManager) + .addNonBlocking(this::initializeFcmCheck) + .addNonBlocking(PreKeysSyncJob::enqueueIfNeeded) + .addNonBlocking(this::initializePeriodicTasks) + .addNonBlocking(this::initializeCircumvention) + .addNonBlocking(this::initializeCleanup) + .addNonBlocking(this::initializeGlideCodecs) + .addNonBlocking(StorageSyncHelper::scheduleRoutineSync) + .addNonBlocking(this::beginJobLoop) + .addNonBlocking(EmojiSource::refresh) + .addNonBlocking(() -> AppDependencies.getGiphyMp4Cache().onAppStart(this)) + .addNonBlocking(AppDependencies::getBillingApi) + .addNonBlocking(this::ensureProfileUploaded) + .addNonBlocking(() -> AppDependencies.getExpireStoriesManager().scheduleIfNecessary()) + .addPostRender(() -> AppDependencies.getDeletedCallEventManager().scheduleIfNecessary()) + .addPostRender(() -> RateLimitUtil.retryAllRateLimitedMessages(this)) + .addPostRender(this::initializeExpiringMessageManager) + .addPostRender(this::initializeTrimThreadsByDateManager) + .addPostRender(RefreshSvrCredentialsJob::enqueueIfNecessary) + .addPostRender(() -> DownloadLatestEmojiDataJob.scheduleIfNecessary(this)) + .addPostRender(EmojiSearchIndexDownloadJob::scheduleIfNecessary) + .addPostRender(() -> SignalDatabase.messageLog().trimOldMessages(System.currentTimeMillis(), RemoteConfig.retryRespondMaxAge())) + .addPostRender(() -> JumboEmoji.updateCurrentVersion(this)) + .addPostRender(RetrieveRemoteAnnouncementsJob::enqueue) + .addPostRender(() -> AndroidTelecomUtil.registerPhoneAccount()) + .addPostRender(() -> AppDependencies.getJobManager().add(new FontDownloaderJob())) + .addPostRender(CheckServiceReachabilityJob::enqueueIfNecessary) + .addPostRender(GroupV2UpdateSelfProfileKeyJob::enqueueForGroupsIfNecessary) + .addPostRender(StoryOnboardingDownloadJob.Companion::enqueueIfNeeded) + .addPostRender(() -> AppDependencies.getExoPlayerPool().getPoolStats().getMaxUnreserved()) + .addPostRender(() -> AppDependencies.getRecipientCache().warmUp()) + .addPostRender(AccountConsistencyWorkerJob::enqueueIfNecessary) + .addPostRender(GroupRingCleanupJob::enqueue) + .addPostRender(LinkedDeviceInactiveCheckJob::enqueueIfNecessary) + .addPostRender(() -> ActiveCallManager.clearNotifications(this)) + .addPostRender(RestoreOptimizedMediaJob::enqueueIfNecessary) + .addPostRender(RetryPendingSendsJob::enqueueForAll) + .execute(); Log.d(TAG, "onCreate() took " + (System.currentTimeMillis() - startTime) + " ms"); SignalLocalMetrics.ColdStart.onApplicationCreateFinished(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt index f7b413d380..1a07b6487f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt @@ -8,15 +8,14 @@ import com.bumptech.glide.Glide import com.bumptech.glide.RequestManager import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation +import org.thoughtcrime.securesms.badges.load.BadgeSpriteTransformation +import org.thoughtcrime.securesms.badges.load.GiftBadgeModel import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.components.settings.app.subscription.BadgeImageSize import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge -import org.thoughtcrime.securesms.glide.GiftBadgeModel import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.ScreenDensity import org.thoughtcrime.securesms.util.ThemeUtil -import org.thoughtcrime.securesms.util.visible class BadgeImageView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/BadgeLoader.java b/app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeLoader.java similarity index 89% rename from app/src/main/java/org/thoughtcrime/securesms/glide/BadgeLoader.java rename to app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeLoader.java index dd5e07315c..12d26eb3e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/BadgeLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeLoader.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.glide; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.badges.load; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -11,6 +16,7 @@ import com.bumptech.glide.load.model.MultiModelLoaderFactory; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.dependencies.AppDependencies; +import org.thoughtcrime.securesms.glide.OkHttpStreamFetcher; import java.io.InputStream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/glide/BadgeSpriteTransformation.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeSpriteTransformation.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/badges/glide/BadgeSpriteTransformation.kt rename to app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeSpriteTransformation.kt index 3d07cad6b5..96796d1576 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/glide/BadgeSpriteTransformation.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/load/BadgeSpriteTransformation.kt @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.badges.glide +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.badges.load import android.graphics.Bitmap import android.graphics.Canvas diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/GiftBadgeModel.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/load/GiftBadgeModel.kt similarity index 94% rename from app/src/main/java/org/thoughtcrime/securesms/glide/GiftBadgeModel.kt rename to app/src/main/java/org/thoughtcrime/securesms/badges/load/GiftBadgeModel.kt index 5292299a9a..a1f2495b54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/GiftBadgeModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/load/GiftBadgeModel.kt @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.glide +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.badges.load import com.bumptech.glide.Priority import com.bumptech.glide.load.DataSource @@ -14,6 +19,7 @@ import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation import org.thoughtcrime.securesms.components.settings.app.subscription.getBadge import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.glide.OkHttpStreamFetcher import java.io.InputStream import java.security.MessageDigest import java.util.Locale diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/models/Badge.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/models/Badge.kt index 2ba4b355b2..af7de8a678 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/models/Badge.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/models/Badge.kt @@ -13,7 +13,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import kotlinx.parcelize.Parcelize import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation +import org.thoughtcrime.securesms.badges.load.BadgeSpriteTransformation import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.util.ThemeUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java index 8ec2c7560b..808dc4e20a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -39,13 +39,15 @@ import com.bumptech.glide.request.RequestOptions; import org.signal.core.util.concurrent.ListenableFuture; import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.logging.Log; -import org.signal.glide.transforms.SignalDownsampleStrategy; +import org.signal.glide.load.SignalDownsampleStrategy; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.blurhash.BlurHash; import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView; import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.glide.targets.GlideBitmapListeningTarget; +import org.thoughtcrime.securesms.glide.targets.GlideDrawableListeningTarget; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.DecryptableUri; import org.thoughtcrime.securesms.mms.ImageSlide; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFetcher.java similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java rename to app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFetcher.java index 4eb8152738..6722cf20d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFetcher.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.glide; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.contacts.avatars; import android.content.Context; @@ -9,8 +14,6 @@ import com.bumptech.glide.Priority; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.data.DataFetcher; -import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; - import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLoader.java similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java rename to app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLoader.java index 105e20bc82..b1d2d48ed1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLoader.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.glide; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.contacts.avatars; import android.content.Context; @@ -10,8 +15,6 @@ import com.bumptech.glide.load.model.ModelLoader; import com.bumptech.glide.load.model.ModelLoaderFactory; import com.bumptech.glide.load.model.MultiModelLoaderFactory; -import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; - import java.io.InputStream; public class ContactPhotoLoader implements ModelLoader { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/ContactPhotoLocalUriFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLocalUriFetcher.java similarity index 87% rename from app/src/main/java/org/thoughtcrime/securesms/mms/ContactPhotoLocalUriFetcher.java rename to app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLocalUriFetcher.java index 33f232e7f3..2edd57b528 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/ContactPhotoLocalUriFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoLocalUriFetcher.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.mms; +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.contacts.avatars; import android.content.ContentResolver; import android.content.Context; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 8f9f54491c..ab152dae5a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -72,7 +72,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.UpdateDescription; import org.thoughtcrime.securesms.fonts.SignalSymbols.Glyph; -import org.thoughtcrime.securesms.glide.GlideLiveDataTarget; +import org.thoughtcrime.securesms.glide.targets.GlideLiveDataTarget; import org.thoughtcrime.securesms.mms.DecryptableUri; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/OkHttpStreamFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/glide/OkHttpStreamFetcher.java index 09a03e57e9..aa53f313b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/OkHttpStreamFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/OkHttpStreamFetcher.java @@ -1,3 +1,8 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + package org.thoughtcrime.securesms.glide; import androidx.annotation.NonNull; @@ -8,8 +13,6 @@ import com.bumptech.glide.load.data.DataFetcher; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.util.ContentLengthInputStream; -import org.signal.core.util.logging.Log; - import java.io.IOException; import java.io.InputStream; import java.util.Map; @@ -22,16 +25,14 @@ import okhttp3.ResponseBody; /** * Fetches an {@link InputStream} using the okhttp library. */ -class OkHttpStreamFetcher implements DataFetcher { - - private static final String TAG = Log.tag(OkHttpStreamFetcher.class); +public class OkHttpStreamFetcher implements DataFetcher { private final OkHttpClient client; private final GlideUrl url; private InputStream stream; private ResponseBody responseBody; - OkHttpStreamFetcher(OkHttpClient client, GlideUrl url) { + public OkHttpStreamFetcher(OkHttpClient client, GlideUrl url) { this.client = client; this.url = url; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java b/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java rename to app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java index bacd1d3219..e68c0a60d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java @@ -1,9 +1,4 @@ -/* - * Copyright 2025 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.thoughtcrime.securesms.mms; +package org.thoughtcrime.securesms.glide; import android.content.Context; import android.graphics.Bitmap; @@ -21,20 +16,19 @@ import com.bumptech.glide.load.resource.gif.ByteBufferGifDecoder; import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.load.resource.gif.StreamGifDecoder; -import org.signal.glide.apng.decode.APNGDecoder; +import org.signal.glide.common.io.InputStreamFactory; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; +import org.thoughtcrime.securesms.badges.load.BadgeLoader; +import org.thoughtcrime.securesms.badges.load.GiftBadgeModel; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.blurhash.BlurHash; import org.thoughtcrime.securesms.blurhash.BlurHashModelLoader; import org.thoughtcrime.securesms.blurhash.BlurHashResourceDecoder; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; +import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoLoader; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.giph.model.ChunkedImageUrl; -import org.thoughtcrime.securesms.glide.BadgeLoader; -import org.thoughtcrime.securesms.glide.ChunkedImageUrlLoader; -import org.thoughtcrime.securesms.glide.ContactPhotoLoader; -import org.thoughtcrime.securesms.glide.GiftBadgeModel; -import org.thoughtcrime.securesms.glide.OkHttpUrlLoader; import org.thoughtcrime.securesms.glide.cache.ApngFrameDrawableTranscoder; import org.thoughtcrime.securesms.glide.cache.ByteBufferApngDecoder; import org.thoughtcrime.securesms.glide.cache.EncryptedApngCacheEncoder; @@ -42,11 +36,16 @@ import org.thoughtcrime.securesms.glide.cache.EncryptedBitmapResourceEncoder; import org.thoughtcrime.securesms.glide.cache.EncryptedCacheDecoder; import org.thoughtcrime.securesms.glide.cache.EncryptedCacheEncoder; import org.thoughtcrime.securesms.glide.cache.EncryptedGifDrawableResourceEncoder; +import org.thoughtcrime.securesms.glide.cache.InputStreamFactoryBitmapDecoder; import org.thoughtcrime.securesms.glide.cache.StreamApngDecoder; import org.thoughtcrime.securesms.glide.cache.StreamBitmapDecoder; import org.thoughtcrime.securesms.glide.cache.StreamFactoryApngDecoder; import org.thoughtcrime.securesms.glide.cache.StreamFactoryGifDecoder; import org.thoughtcrime.securesms.glide.cache.WebpSanDecoder; +import org.thoughtcrime.securesms.mms.DecryptableUri; +import org.thoughtcrime.securesms.mms.DecryptableUriStreamLoader; +import org.thoughtcrime.securesms.mms.RegisterGlideComponents; +import org.thoughtcrime.securesms.mms.SignalGlideModule; import org.thoughtcrime.securesms.stickers.StickerRemoteUri; import org.thoughtcrime.securesms.stickers.StickerRemoteUriLoader; import org.thoughtcrime.securesms.stories.StoryTextPostModel; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ApngFrameDrawableTranscoder.java b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ApngFrameDrawableTranscoder.java index f12af6a812..fbd06b0ae6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ApngFrameDrawableTranscoder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ApngFrameDrawableTranscoder.java @@ -10,8 +10,8 @@ import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.resource.drawable.DrawableResource; import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; -import org.signal.glide.apng.APNGDrawable; -import org.signal.glide.apng.decode.APNGDecoder; +import org.signal.glide.load.resource.apng.APNGDrawable; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; public class ApngFrameDrawableTranscoder implements ResourceTranscoder { diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ByteBufferApngDecoder.java b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ByteBufferApngDecoder.java index a2e2812a37..ee854d5db7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ByteBufferApngDecoder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/ByteBufferApngDecoder.java @@ -7,11 +7,11 @@ import com.bumptech.glide.load.Options; import com.bumptech.glide.load.ResourceDecoder; import com.bumptech.glide.load.engine.Resource; -import org.signal.glide.apng.decode.APNGDecoder; -import org.signal.glide.apng.decode.APNGParser; import org.signal.glide.common.io.ByteBufferReader; import org.signal.glide.common.loader.ByteBufferLoader; import org.signal.glide.common.loader.Loader; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; +import org.signal.glide.load.resource.apng.decode.APNGParser; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/EncryptedApngCacheEncoder.java b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/EncryptedApngCacheEncoder.java index 2962fde066..fadbd89bd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/EncryptedApngCacheEncoder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/EncryptedApngCacheEncoder.java @@ -9,8 +9,8 @@ import com.bumptech.glide.load.engine.Resource; import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; -import org.signal.glide.apng.decode.APNGDecoder; import org.signal.glide.common.loader.Loader; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; import java.io.File; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactoryBitmapDecoder.kt b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/InputStreamFactoryBitmapDecoder.kt similarity index 87% rename from app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactoryBitmapDecoder.kt rename to app/src/main/java/org/thoughtcrime/securesms/glide/cache/InputStreamFactoryBitmapDecoder.kt index e16a907a3b..d94f0ad75a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/InputStreamFactoryBitmapDecoder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/InputStreamFactoryBitmapDecoder.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.mms +package org.thoughtcrime.securesms.glide.cache import android.content.Context import android.graphics.Bitmap @@ -12,7 +12,8 @@ import com.bumptech.glide.Registry import com.bumptech.glide.load.Options import com.bumptech.glide.load.ResourceDecoder import com.bumptech.glide.load.engine.Resource -import org.thoughtcrime.securesms.glide.Downsampler +import org.signal.glide.common.io.InputStreamFactory +import org.signal.glide.load.resource.bitmap.Downsampler /** * A Glide [ResourceDecoder] that decodes [Bitmap]s from a [InputStreamFactory] instances. diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamApngDecoder.java b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamApngDecoder.java index ad23d350fb..43295624ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamApngDecoder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamApngDecoder.java @@ -8,9 +8,9 @@ import com.bumptech.glide.load.ResourceDecoder; import com.bumptech.glide.load.engine.Resource; import org.signal.core.util.StreamUtil; -import org.signal.glide.apng.decode.APNGDecoder; -import org.signal.glide.apng.decode.APNGParser; import org.signal.glide.common.io.StreamReader; +import org.signal.glide.load.resource.apng.decode.APNGDecoder; +import org.signal.glide.load.resource.apng.decode.APNGParser; import java.io.IOException; import java.io.InputStream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryApngDecoder.kt b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryApngDecoder.kt index af770ddbdf..3cd53ec291 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryApngDecoder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryApngDecoder.kt @@ -12,9 +12,9 @@ import com.bumptech.glide.load.Options import com.bumptech.glide.load.ResourceDecoder import com.bumptech.glide.load.engine.Resource import org.signal.core.util.StreamUtil -import org.signal.glide.apng.decode.APNGDecoder -import org.thoughtcrime.securesms.glide.ImageHeaderParserUtils -import org.thoughtcrime.securesms.mms.InputStreamFactory +import org.signal.glide.common.io.InputStreamFactory +import org.signal.glide.load.ImageHeaderParserUtils +import org.signal.glide.load.resource.apng.decode.APNGDecoder import java.nio.ByteBuffer /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryGifDecoder.kt b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryGifDecoder.kt index 757fccf525..eb31f59199 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryGifDecoder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/StreamFactoryGifDecoder.kt @@ -10,7 +10,7 @@ import com.bumptech.glide.load.ResourceDecoder import com.bumptech.glide.load.engine.Resource import com.bumptech.glide.load.resource.gif.GifDrawable import com.bumptech.glide.load.resource.gif.StreamGifDecoder -import org.thoughtcrime.securesms.mms.InputStreamFactory +import org.signal.glide.common.io.InputStreamFactory /** * A variant of [StreamGifDecoder] that decodes animated PNGs from [InputStreamFactory] sources. diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideBitmapListeningTarget.java similarity index 94% rename from app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java rename to app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideBitmapListeningTarget.java index 678d350949..3e15b0585b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideBitmapListeningTarget.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.components; +package org.thoughtcrime.securesms.glide.targets; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideDrawableListeningTarget.java similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java rename to app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideDrawableListeningTarget.java index b20fb0069f..b052598ea0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideDrawableListeningTarget.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.components; +package org.thoughtcrime.securesms.glide.targets; import android.graphics.drawable.Drawable; import android.widget.ImageView; diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/GlideLiveDataTarget.java b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideLiveDataTarget.java similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/glide/GlideLiveDataTarget.java rename to app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideLiveDataTarget.java index 889fe87a2d..f4c16f0d53 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/GlideLiveDataTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/targets/GlideLiveDataTarget.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.glide; +package org.thoughtcrime.securesms.glide.targets; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamFetcher.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamFetcher.kt index edba2813b5..4a82d27c3c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamFetcher.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamFetcher.kt @@ -9,6 +9,7 @@ import android.content.Context import com.bumptech.glide.Priority import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.data.DataFetcher +import org.signal.glide.common.io.InputStreamFactory /** * A Glide [DataFetcher] that retrieves an [InputStreamFactory] for a [DecryptableUri]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamLoader.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamLoader.kt index 2052a33dfd..0e04a663cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamLoader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/DecryptableUriStreamLoader.kt @@ -11,6 +11,7 @@ import com.bumptech.glide.load.model.ModelLoader import com.bumptech.glide.load.model.ModelLoaderFactory import com.bumptech.glide.load.model.MultiModelLoaderFactory import com.bumptech.glide.signature.ObjectKey +import org.signal.glide.common.io.InputStreamFactory /** * A Glide [ModelLoader] that handles conversion from [DecryptableUri] to [InputStreamFactory].