Update Glide to use ksp, drop kapt.

Resolves #13381
This commit is contained in:
Jameson Williams 2024-01-24 02:54:09 -06:00 committed by Nicholas Tinsley
parent aa33fd44b8
commit ec96b4e3aa
132 changed files with 755 additions and 679 deletions

View file

@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.conversation.v2.items
import android.net.Uri import android.net.Uri
import android.view.View import android.view.View
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.bumptech.glide.RequestManager
import io.mockk.mockk import io.mockk.mockk
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Rule import org.junit.Rule
@ -29,7 +30,6 @@ import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange
import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.stickers.StickerLocator import org.thoughtcrime.securesms.stickers.StickerLocator
@ -209,7 +209,7 @@ class V2ConversationItemShapeTest {
override val selectedItems: Set<MultiselectPart> = emptySet() override val selectedItems: Set<MultiselectPart> = emptySet()
override val isMessageRequestAccepted: Boolean = true override val isMessageRequestAccepted: Boolean = true
override val searchQuery: String? = null override val searchQuery: String? = null
override val glideRequests: GlideRequests = mockk() override val requestManager: RequestManager = mockk()
override val isParentInScroll: Boolean = false override val isParentInScroll: Boolean = false
override fun getChatColorsData(): ChatColorsDrawable.ChatColorsData = ChatColorsDrawable.ChatColorsData(null, null) override fun getChatColorsData(): ChatColorsDrawable.ChatColorsData = ChatColorsDrawable.ChatColorsData(null, null)

View file

@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.navigation.navGraphViewModels import androidx.navigation.navGraphViewModels
import com.bumptech.glide.Glide
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.kotlin.subscribeBy
import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.LifecycleDisposable
@ -42,7 +43,6 @@ import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange
import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.stickers.StickerLocator import org.thoughtcrime.securesms.stickers.StickerLocator
@ -62,7 +62,7 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val adapter = ConversationAdapterV2( val adapter = ConversationAdapterV2(
lifecycleOwner = viewLifecycleOwner, lifecycleOwner = viewLifecycleOwner,
glideRequests = GlideApp.with(this), requestManager = Glide.with(this),
clickListener = ClickListener(), clickListener = ClickListener(),
hasWallpaper = springboardViewModel.hasWallpaper.value, hasWallpaper = springboardViewModel.hasWallpaper.value,
colorizer = Colorizer(), colorizer = Colorizer(),

View file

@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread; import androidx.annotation.WorkerThread;
import androidx.multidex.MultiDexApplication; import androidx.multidex.MultiDexApplication;
import com.bumptech.glide.Glide;
import com.google.android.gms.security.ProviderInstaller; import com.google.android.gms.security.ProviderInstaller;
import org.conscrypt.ConscryptSignal; import org.conscrypt.ConscryptSignal;
@ -74,7 +75,6 @@ import org.thoughtcrime.securesms.logging.CustomSignalProtocolLogger;
import org.thoughtcrime.securesms.logging.PersistentLogger; import org.thoughtcrime.securesms.logging.PersistentLogger;
import org.thoughtcrime.securesms.messageprocessingalarm.RoutineMessageFetchReceiver; import org.thoughtcrime.securesms.messageprocessingalarm.RoutineMessageFetchReceiver;
import org.thoughtcrime.securesms.migrations.ApplicationMigrations; import org.thoughtcrime.securesms.migrations.ApplicationMigrations;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.SignalGlideComponents; import org.thoughtcrime.securesms.mms.SignalGlideComponents;
import org.thoughtcrime.securesms.mms.SignalGlideModule; import org.thoughtcrime.securesms.mms.SignalGlideModule;
import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.providers.BlobProvider;
@ -178,7 +178,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr
.addBlocking("ring-rtc", this::initializeRingRtc) .addBlocking("ring-rtc", this::initializeRingRtc)
.addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents())) .addBlocking("glide", () -> SignalGlideModule.setRegisterGlideComponents(new SignalGlideComponents()))
.addNonBlocking(() -> RegistrationUtil.maybeMarkRegistrationComplete()) .addNonBlocking(() -> RegistrationUtil.maybeMarkRegistrationComplete())
.addNonBlocking(() -> GlideApp.get(this)) .addNonBlocking(() -> Glide.get(this))
.addNonBlocking(this::cleanAvatarStorage) .addNonBlocking(this::cleanAvatarStorage)
.addNonBlocking(this::initializeRevealableMessageManager) .addNonBlocking(this::initializeRevealableMessageManager)
.addNonBlocking(this::initializePendingRetryReceiptManager) .addNonBlocking(this::initializePendingRetryReceiptManager)

View file

@ -18,6 +18,7 @@ import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityOptionsCompat; import androidx.core.app.ActivityOptionsCompat;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.engine.GlideException;
@ -32,7 +33,6 @@ import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.FullscreenHelper; import org.thoughtcrime.securesms.util.FullscreenHelper;
@ -96,7 +96,7 @@ public final class AvatarPreviewActivity extends PassphraseRequiredActivity {
Resources resources = this.getResources(); Resources resources = this.getResources();
GlideApp.with(this) Glide.with(this)
.asBitmap() .asBitmap()
.load(contactPhoto) .load(contactPhoto)
.fallback(fallbackPhoto.asCallCard(this)) .fallback(fallbackPhoto.asCallCard(this))

View file

@ -8,6 +8,8 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import com.bumptech.glide.RequestManager;
import org.signal.ringrtc.CallLinkRootKey; import org.signal.ringrtc.CallLinkRootKey;
import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState;
import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.contactshare.Contact;
@ -26,7 +28,6 @@ import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange; import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange;
import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.stickers.StickerLocator;
@ -41,7 +42,7 @@ public interface BindableConversationItem extends Unbindable, GiphyMp4Playable,
@NonNull ConversationMessage messageRecord, @NonNull ConversationMessage messageRecord,
@NonNull Optional<MessageRecord> previousMessageRecord, @NonNull Optional<MessageRecord> previousMessageRecord,
@NonNull Optional<MessageRecord> nextMessageRecord, @NonNull Optional<MessageRecord> nextMessageRecord,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<MultiselectPart> batchSelected, @NonNull Set<MultiselectPart> batchSelected,
@NonNull Recipient recipients, @NonNull Recipient recipients,

View file

@ -3,9 +3,10 @@ package org.thoughtcrime.securesms;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet;
import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
@ -14,7 +15,7 @@ public interface BindableConversationListItem extends Unbindable {
void bind(@NonNull LifecycleOwner lifecycleOwner, void bind(@NonNull LifecycleOwner lifecycleOwner,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull Locale locale, @NonNull RequestManager requestManager, @NonNull Locale locale,
@NonNull Set<Long> typingThreads, @NonNull Set<Long> typingThreads,
@NonNull ConversationSet selectedConversations); @NonNull ConversationSet selectedConversations);

View file

@ -8,12 +8,12 @@ import android.widget.TextView
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.view.setPadding import androidx.core.view.setPadding
import com.airbnb.lottie.SimpleColorFilter import com.airbnb.lottie.SimpleColorFilter
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.Avatar import org.thoughtcrime.securesms.avatar.Avatar
import org.thoughtcrime.securesms.avatar.AvatarRenderer import org.thoughtcrime.securesms.avatar.AvatarRenderer
import org.thoughtcrime.securesms.avatar.Avatars import org.thoughtcrime.securesms.avatar.Avatars
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
@ -132,12 +132,12 @@ object AvatarPickerItem {
} }
is Avatar.Photo -> { is Avatar.Photo -> {
textView.visible = false textView.visible = false
GlideApp.with(imageView).load(DecryptableStreamUriLoader.DecryptableUri(model.avatar.uri)).into(imageView) Glide.with(imageView).load(DecryptableStreamUriLoader.DecryptableUri(model.avatar.uri)).into(imageView)
} }
is Avatar.Resource -> { is Avatar.Resource -> {
imageView.setPadding((imageView.width * 0.2).toInt()) imageView.setPadding((imageView.width * 0.2).toInt())
textView.visible = false textView.visible = false
GlideApp.with(imageView).clear(imageView) Glide.with(imageView).clear(imageView)
imageView.setImageResource(model.avatar.resourceId) imageView.setImageResource(model.avatar.resourceId)
imageView.colorFilter = SimpleColorFilter(model.avatar.color.foregroundColor) imageView.colorFilter = SimpleColorFilter(model.avatar.color.foregroundColor)
imageView.background.colorFilter = SimpleColorFilter(model.avatar.color.backgroundColor) imageView.background.colorFilter = SimpleColorFilter(model.avatar.color.backgroundColor)

View file

@ -5,10 +5,10 @@ import android.util.AttributeSet
import android.view.View import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.core.content.res.use import androidx.core.content.res.use
import com.bumptech.glide.RequestManager
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.AvatarImageView import org.thoughtcrime.securesms.components.AvatarImageView
import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.database.model.StoryViewState
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.stories.Stories
import org.thoughtcrime.securesms.util.visible import org.thoughtcrime.securesms.util.visible
@ -76,7 +76,7 @@ class AvatarView @JvmOverloads constructor(
/** /**
* Displays Note-to-Self * Displays Note-to-Self
*/ */
fun displayChatAvatar(requestManager: GlideRequests, recipient: Recipient, isQuickContactEnabled: Boolean) { fun displayChatAvatar(requestManager: RequestManager, recipient: Recipient, isQuickContactEnabled: Boolean) {
avatar.setAvatar(requestManager, recipient, isQuickContactEnabled) avatar.setAvatar(requestManager, recipient, isQuickContactEnabled)
} }

View file

@ -4,6 +4,8 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.res.use import androidx.core.content.res.use
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestManager
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation
@ -11,8 +13,6 @@ import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.components.settings.app.subscription.BadgeImageSize import org.thoughtcrime.securesms.components.settings.app.subscription.BadgeImageSize
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
import org.thoughtcrime.securesms.glide.GiftBadgeModel import org.thoughtcrime.securesms.glide.GiftBadgeModel
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.ScreenDensity import org.thoughtcrime.securesms.util.ScreenDensity
import org.thoughtcrime.securesms.util.ThemeUtil import org.thoughtcrime.securesms.util.ThemeUtil
@ -43,35 +43,35 @@ class BadgeImageView @JvmOverloads constructor(
} }
fun setBadgeFromRecipient(recipient: Recipient?) { fun setBadgeFromRecipient(recipient: Recipient?) {
getGlideRequests()?.let { getGlideRequestManager()?.let {
setBadgeFromRecipient(recipient, it) setBadgeFromRecipient(recipient, it)
} ?: clearDrawable() } ?: clearDrawable()
} }
fun setBadgeFromRecipient(recipient: Recipient?, glideRequests: GlideRequests) { fun setBadgeFromRecipient(recipient: Recipient?, requestManager: RequestManager) {
if (recipient == null || recipient.badges.isEmpty()) { if (recipient == null || recipient.badges.isEmpty()) {
setBadge(null, glideRequests) setBadge(null, requestManager)
} else if (recipient.isSelf) { } else if (recipient.isSelf) {
val badge = recipient.featuredBadge val badge = recipient.featuredBadge
if (badge == null || !badge.visible || badge.isExpired()) { if (badge == null || !badge.visible || badge.isExpired()) {
setBadge(null, glideRequests) setBadge(null, requestManager)
} else { } else {
setBadge(badge, glideRequests) setBadge(badge, requestManager)
} }
} else { } else {
setBadge(recipient.featuredBadge, glideRequests) setBadge(recipient.featuredBadge, requestManager)
} }
} }
fun setBadge(badge: Badge?) { fun setBadge(badge: Badge?) {
getGlideRequests()?.let { getGlideRequestManager()?.let {
setBadge(badge, it) setBadge(badge, it)
} ?: clearDrawable() } ?: clearDrawable()
} }
fun setBadge(badge: Badge?, glideRequests: GlideRequests) { fun setBadge(badge: Badge?, requestManager: RequestManager) {
if (badge != null) { if (badge != null) {
glideRequests requestManager
.load(badge) .load(badge)
.downsample(DownsampleStrategy.NONE) .downsample(DownsampleStrategy.NONE)
.transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), badge.imageDensity, ThemeUtil.isDarkTheme(context))) .transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), badge.imageDensity, ThemeUtil.isDarkTheme(context)))
@ -79,21 +79,21 @@ class BadgeImageView @JvmOverloads constructor(
isClickable = true isClickable = true
} else { } else {
glideRequests requestManager
.clear(this) .clear(this)
clearDrawable() clearDrawable()
} }
} }
fun setGiftBadge(badge: GiftBadge?, glideRequests: GlideRequests) { fun setGiftBadge(badge: GiftBadge?, requestManager: RequestManager) {
if (badge != null) { if (badge != null) {
glideRequests requestManager
.load(GiftBadgeModel(badge)) .load(GiftBadgeModel(badge))
.downsample(DownsampleStrategy.NONE) .downsample(DownsampleStrategy.NONE)
.transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), ScreenDensity.getBestDensityBucketForDevice(), ThemeUtil.isDarkTheme(context))) .transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), ScreenDensity.getBestDensityBucketForDevice(), ThemeUtil.isDarkTheme(context)))
.into(this) .into(this)
} else { } else {
glideRequests requestManager
.clear(this) .clear(this)
clearDrawable() clearDrawable()
} }
@ -106,9 +106,9 @@ class BadgeImageView @JvmOverloads constructor(
} }
} }
private fun getGlideRequests(): GlideRequests? { private fun getGlideRequestManager(): RequestManager? {
return try { return try {
GlideApp.with(this) Glide.with(this)
} catch (e: IllegalArgumentException) { } catch (e: IllegalArgumentException) {
// View not attached to an activity or activity destroyed // View not attached to an activity or activity destroyed
null null

View file

@ -9,13 +9,13 @@ import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.res.use import androidx.core.content.res.use
import androidx.swiperefreshlayout.widget.CircularProgressDrawable import androidx.swiperefreshlayout.widget.CircularProgressDrawable
import com.bumptech.glide.RequestManager
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import org.signal.core.util.DimensionUnit import org.signal.core.util.DimensionUnit
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.BadgeImageView import org.thoughtcrime.securesms.badges.BadgeImageView
import org.thoughtcrime.securesms.badges.gifts.Gifts.formatExpiry import org.thoughtcrime.securesms.badges.gifts.Gifts.formatExpiry
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
/** /**
@ -50,7 +50,7 @@ class GiftMessageView @JvmOverloads constructor(
} }
} }
fun setGiftBadge(glideRequests: GlideRequests, giftBadge: GiftBadge, isOutgoing: Boolean, callback: Callback, fromRecipient: Recipient, toRecipient: Recipient) { fun setGiftBadge(requestManager: RequestManager, giftBadge: GiftBadge, isOutgoing: Boolean, callback: Callback, fromRecipient: Recipient, toRecipient: Recipient) {
descriptionView.text = giftBadge.formatExpiry(context) descriptionView.text = giftBadge.formatExpiry(context)
actionView.icon = null actionView.icon = null
actionView.setOnClickListener { callback.onViewGiftBadgeClicked() } actionView.setOnClickListener { callback.onViewGiftBadgeClicked() }
@ -88,7 +88,7 @@ class GiftMessageView @JvmOverloads constructor(
) )
} }
badgeView.setGiftBadge(giftBadge, glideRequests) badgeView.setGiftBadge(giftBadge, requestManager)
} }
fun onGiftNotOpened() { fun onGiftNotOpened() {

View file

@ -7,6 +7,7 @@ import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import com.bumptech.glide.Glide
import com.bumptech.glide.load.Key import com.bumptech.glide.load.Key
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
@ -14,7 +15,6 @@ import kotlinx.parcelize.Parcelize
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation
import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.components.settings.PreferenceModel
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.util.ThemeUtil import org.thoughtcrime.securesms.util.ThemeUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
@ -130,7 +130,7 @@ data class Badge(
badge.alpha = if (model.badge.isExpired() || model.isFaded) 0.5f else 1f badge.alpha = if (model.badge.isExpired() || model.isFaded) 0.5f else 1f
GlideApp.with(badge) Glide.with(badge)
.load(model.badge) .load(model.badge)
.downsample(DownsampleStrategy.NONE) .downsample(DownsampleStrategy.NONE)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -2,10 +2,10 @@ package org.thoughtcrime.securesms.badges.models
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.BadgeImageView import org.thoughtcrime.securesms.badges.BadgeImageView
import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
@ -49,7 +49,7 @@ object BadgeDisplay112 {
override fun bind(model: GiftModel) { override fun bind(model: GiftModel) {
titleView.visible = false titleView.visible = false
badgeImageView.setGiftBadge(model.giftBadge, GlideApp.with(badgeImageView)) badgeImageView.setGiftBadge(model.giftBadge, Glide.with(badgeImageView))
} }
} }
} }

View file

@ -7,13 +7,13 @@ import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.database.CallTable import org.thoughtcrime.securesms.database.CallTable
import org.thoughtcrime.securesms.database.MessageTypes import org.thoughtcrime.securesms.database.MessageTypes
import org.thoughtcrime.securesms.databinding.CallLogAdapterItemBinding import org.thoughtcrime.securesms.databinding.CallLogAdapterItemBinding
import org.thoughtcrime.securesms.databinding.CallLogCreateCallLinkItemBinding import org.thoughtcrime.securesms.databinding.CallLogCreateCallLinkItemBinding
import org.thoughtcrime.securesms.databinding.ConversationListItemClearFilterBinding import org.thoughtcrime.securesms.databinding.ConversationListItemClearFilterBinding
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.DateUtils
import org.thoughtcrime.securesms.util.SearchUtil import org.thoughtcrime.securesms.util.SearchUtil
@ -272,7 +272,7 @@ class CallLogAdapter(
} }
private fun presentRecipientDetails(recipient: Recipient, searchQuery: String?) { private fun presentRecipientDetails(recipient: Recipient, searchQuery: String?) {
binding.callRecipientAvatar.setAvatar(GlideApp.with(binding.callRecipientAvatar), recipient, true) binding.callRecipientAvatar.setAvatar(Glide.with(binding.callRecipientAvatar), recipient, true)
binding.callRecipientBadge.setBadgeFromRecipient(recipient) binding.callRecipientBadge.setBadgeFromRecipient(recipient)
binding.callRecipientName.text = if (searchQuery != null) { binding.callRecipientName.text = if (searchQuery != null) {
SearchUtil.getHighlightedSpan( SearchUtil.getHighlightedSpan(

View file

@ -16,9 +16,10 @@ import androidx.annotation.IdRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView; import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlideClickListener;
import org.thoughtcrime.securesms.mms.SlidesClickedListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener;
@ -65,7 +66,7 @@ public class AlbumThumbnailView extends FrameLayout {
transferControlsStub = new Stub<>(findViewById(R.id.album_transfer_controls_stub)); transferControlsStub = new Stub<>(findViewById(R.id.album_transfer_controls_stub));
} }
public void setSlides(@NonNull GlideRequests glideRequests, @NonNull List<Slide> slides, boolean showControls) { public void setSlides(@NonNull RequestManager requestManager, @NonNull List<Slide> slides, boolean showControls) {
if (slides.size() < 2) { if (slides.size() < 2) {
throw new IllegalStateException("Provided less than two slides."); throw new IllegalStateException("Provided less than two slides.");
} }
@ -98,7 +99,7 @@ public class AlbumThumbnailView extends FrameLayout {
currentSizeClass = sizeClass; currentSizeClass = sizeClass;
} }
showSlides(glideRequests, slides); showSlides(requestManager, slides);
applyCorners(); applyCorners();
forceLayout(); forceLayout();
} }
@ -261,21 +262,21 @@ public class AlbumThumbnailView extends FrameLayout {
applyCornersForSizeClass5(); applyCornersForSizeClass5();
} }
private void showSlides(@NonNull GlideRequests glideRequests, @NonNull List<Slide> slides) { private void showSlides(@NonNull RequestManager requestManager, @NonNull List<Slide> slides) {
boolean showControls = TransferControlView.containsPlayableSlides(slides); boolean showControls = TransferControlView.containsPlayableSlides(slides);
setSlide(glideRequests, slides.get(0), R.id.album_cell_1, showControls); setSlide(requestManager, slides.get(0), R.id.album_cell_1, showControls);
setSlide(glideRequests, slides.get(1), R.id.album_cell_2, showControls); setSlide(requestManager, slides.get(1), R.id.album_cell_2, showControls);
if (slides.size() >= 3) { if (slides.size() >= 3) {
setSlide(glideRequests, slides.get(2), R.id.album_cell_3, showControls); setSlide(requestManager, slides.get(2), R.id.album_cell_3, showControls);
} }
if (slides.size() >= 4) { if (slides.size() >= 4) {
setSlide(glideRequests, slides.get(3), R.id.album_cell_4, showControls); setSlide(requestManager, slides.get(3), R.id.album_cell_4, showControls);
} }
if (slides.size() >= 5) { if (slides.size() >= 5) {
setSlide(glideRequests, slides.get(4), R.id.album_cell_5, showControls && slides.size() == 5); setSlide(requestManager, slides.get(4), R.id.album_cell_5, showControls && slides.size() == 5);
} }
if (slides.size() > 5) { if (slides.size() > 5) {
@ -284,7 +285,7 @@ public class AlbumThumbnailView extends FrameLayout {
} }
} }
private void setSlide(@NonNull GlideRequests glideRequests, @NonNull Slide slide, @IdRes int id, boolean showControls) { private void setSlide(@NonNull RequestManager requestManager, @NonNull Slide slide, @IdRes int id, boolean showControls) {
ThumbnailView cell = findViewById(id); ThumbnailView cell = findViewById(id);
cell.showSecondaryText(false); cell.showSecondaryText(false);
cell.setThumbnailClickListener(defaultThumbnailClickListener); cell.setThumbnailClickListener(defaultThumbnailClickListener);
@ -294,7 +295,7 @@ public class AlbumThumbnailView extends FrameLayout {
cell.setPlayVideoClickListener(playVideoClickListener); cell.setPlayVideoClickListener(playVideoClickListener);
} }
cell.setOnLongClickListener(defaultLongClickListener); cell.setOnLongClickListener(defaultLongClickListener);
cell.setImageResource(glideRequests, slide, showControls, false); cell.setImageResource(requestManager, slide, showControls, false);
} }
private int sizeClass(int size) { private int sizeClass(int size) {

View file

@ -15,6 +15,9 @@ import androidx.annotation.Px;
import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.AppCompatImageView;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.MultiTransformation; import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.load.Transformation; import com.bumptech.glide.load.Transformation;
@ -37,9 +40,6 @@ import org.thoughtcrime.securesms.conversation.colors.AvatarColor;
import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.conversation.colors.ChatColors;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequest;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment; import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment;
import org.thoughtcrime.securesms.util.AvatarUtil; import org.thoughtcrime.securesms.util.AvatarUtil;
@ -129,10 +129,10 @@ public final class AvatarImageView extends AppCompatImageView {
*/ */
public void setRecipient(@NonNull Recipient recipient, boolean quickContactEnabled) { public void setRecipient(@NonNull Recipient recipient, boolean quickContactEnabled) {
if (recipient.isSelf()) { if (recipient.isSelf()) {
setAvatar(GlideApp.with(this), null, quickContactEnabled); setAvatar(Glide.with(this), null, quickContactEnabled);
AvatarUtil.loadIconIntoImageView(recipient, this); AvatarUtil.loadIconIntoImageView(recipient, this);
} else { } else {
setAvatar(GlideApp.with(this), recipient, quickContactEnabled); setAvatar(Glide.with(this), recipient, quickContactEnabled);
} }
} }
@ -144,21 +144,21 @@ public final class AvatarImageView extends AppCompatImageView {
* Shows self as the note to self icon. * Shows self as the note to self icon.
*/ */
public void setAvatar(@Nullable Recipient recipient) { public void setAvatar(@Nullable Recipient recipient) {
setAvatar(GlideApp.with(this), recipient, false); setAvatar(Glide.with(this), recipient, false);
} }
/** /**
* Shows self as the profile avatar. * Shows self as the profile avatar.
*/ */
public void setAvatarUsingProfile(@Nullable Recipient recipient) { public void setAvatarUsingProfile(@Nullable Recipient recipient) {
setAvatar(GlideApp.with(this), recipient, false, true); setAvatar(Glide.with(this), recipient, false, true);
} }
public void setAvatar(@NonNull GlideRequests requestManager, @Nullable Recipient recipient, boolean quickContactEnabled) { public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient, boolean quickContactEnabled) {
setAvatar(requestManager, recipient, quickContactEnabled, false); setAvatar(requestManager, recipient, quickContactEnabled, false);
} }
public void setAvatar(@NonNull GlideRequests requestManager, @Nullable Recipient recipient, boolean quickContactEnabled, boolean useSelfProfileAvatar) { public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient, boolean quickContactEnabled, boolean useSelfProfileAvatar) {
setAvatar(requestManager, recipient, new AvatarOptions.Builder(this) setAvatar(requestManager, recipient, new AvatarOptions.Builder(this)
.withUseSelfProfileAvatar(useSelfProfileAvatar) .withUseSelfProfileAvatar(useSelfProfileAvatar)
.withQuickContactEnabled(quickContactEnabled) .withQuickContactEnabled(quickContactEnabled)
@ -166,10 +166,10 @@ public final class AvatarImageView extends AppCompatImageView {
} }
private void setAvatar(@Nullable Recipient recipient, @NonNull AvatarOptions avatarOptions) { private void setAvatar(@Nullable Recipient recipient, @NonNull AvatarOptions avatarOptions) {
setAvatar(GlideApp.with(this), recipient, avatarOptions); setAvatar(Glide.with(this), recipient, avatarOptions);
} }
private void setAvatar(@NonNull GlideRequests requestManager, @Nullable Recipient recipient, @NonNull AvatarOptions avatarOptions) { private void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient, @NonNull AvatarOptions avatarOptions) {
if (recipient != null) { if (recipient != null) {
RecipientContactPhoto photo = (recipient.isSelf() && avatarOptions.useSelfProfileAvatar) ? new RecipientContactPhoto(recipient, RecipientContactPhoto photo = (recipient.isSelf() && avatarOptions.useSelfProfileAvatar) ? new RecipientContactPhoto(recipient,
new ProfileContactPhoto(Recipient.self())) new ProfileContactPhoto(Recipient.self()))
@ -199,7 +199,7 @@ public final class AvatarImageView extends AppCompatImageView {
transforms.add(new CircleCrop()); transforms.add(new CircleCrop());
blurred = shouldBlur; blurred = shouldBlur;
GlideRequest<Drawable> request = requestManager.load(photo.contactPhoto) RequestBuilder<Drawable> request = requestManager.load(photo.contactPhoto)
.dontAnimate() .dontAnimate()
.fallback(fallbackContactPhotoDrawable) .fallback(fallbackContactPhotoDrawable)
.error(fallbackContactPhotoDrawable) .error(fallbackContactPhotoDrawable)
@ -265,7 +265,7 @@ public final class AvatarImageView extends AppCompatImageView {
.getPhotoForGroup() .getPhotoForGroup()
.asDrawable(getContext(), color); .asDrawable(getContext(), color);
GlideApp.with(this) Glide.with(this)
.load(avatarBytes) .load(avatarBytes)
.dontAnimate() .dontAnimate()
.fallback(fallback) .fallback(fallback)

View file

@ -9,8 +9,9 @@ import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlideClickListener;
import org.thoughtcrime.securesms.mms.SlidesClickedListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener;
@ -52,15 +53,15 @@ public class BorderlessImageView extends FrameLayout {
image.setOnLongClickListener(l); image.setOnLongClickListener(l);
} }
public void setSlide(@NonNull GlideRequests glideRequests, @NonNull Slide slide) { public void setSlide(@NonNull RequestManager requestManager, @NonNull Slide slide) {
boolean showControls = slide.asAttachment().getUri() == null; boolean showControls = slide.asAttachment().getUri() == null;
if (slide.hasSticker()) { if (slide.hasSticker()) {
image.setScaleType(ImageView.ScaleType.FIT_CENTER); image.setScaleType(ImageView.ScaleType.FIT_CENTER);
image.setImageResource(glideRequests, slide, showControls, false); image.setImageResource(requestManager, slide, showControls, false);
} else { } else {
image.setScaleType(ImageView.ScaleType.CENTER_CROP); image.setScaleType(ImageView.ScaleType.CENTER_CROP);
image.setImageResource(glideRequests, slide, showControls, false, slide.asAttachment().width, slide.asAttachment().height); image.setImageResource(requestManager, slide, showControls, false, slide.asAttachment().width, slide.asAttachment().height);
} }
missingShade.setVisibility(showControls ? View.VISIBLE : View.GONE); missingShade.setVisibility(showControls ? View.VISIBLE : View.GONE);

View file

@ -16,10 +16,10 @@ import androidx.annotation.ColorInt
import androidx.annotation.Px import androidx.annotation.Px
import androidx.annotation.UiThread import androidx.annotation.UiThread
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import com.bumptech.glide.RequestManager
import org.signal.core.util.dp import org.signal.core.util.dp
import org.signal.core.util.getParcelableCompat import org.signal.core.util.getParcelableCompat
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.mms.Slide import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.mms.SlideClickListener import org.thoughtcrime.securesms.mms.SlideClickListener
import org.thoughtcrime.securesms.mms.SlidesClickedListener import org.thoughtcrime.securesms.mms.SlidesClickedListener
@ -192,7 +192,7 @@ class ConversationItemThumbnail @JvmOverloads constructor(
@UiThread @UiThread
fun setImageResource( fun setImageResource(
glideRequests: GlideRequests, requestManager: RequestManager,
slides: List<Slide>, slides: List<Slide>,
showControls: Boolean, showControls: Boolean,
isPreview: Boolean isPreview: Boolean
@ -223,7 +223,7 @@ class ConversationItemThumbnail @JvmOverloads constructor(
val attachment = slides[0].asAttachment() val attachment = slides[0].asAttachment()
thumbnail.get().setImageResource(glideRequests, slides[0], showControls, isPreview, attachment.width, attachment.height) thumbnail.get().setImageResource(requestManager, slides[0], showControls, isPreview, attachment.width, attachment.height)
touchDelegate = thumbnail.get().touchDelegate touchDelegate = thumbnail.get().touchDelegate
} else { } else {
state = state.copy( state = state.copy(
@ -232,7 +232,7 @@ class ConversationItemThumbnail @JvmOverloads constructor(
) )
state.applyState(thumbnail, album) state.applyState(thumbnail, album)
album.get().setSlides(glideRequests, slides, showControls) album.get().setSlides(requestManager, slides, showControls)
touchDelegate = album.get().touchDelegate touchDelegate = album.get().touchDelegate
} }
} }

View file

@ -11,9 +11,10 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.badges.BadgeImageView;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import java.util.List; import java.util.List;
@ -49,7 +50,7 @@ public class ConversationTypingView extends ConstraintLayout {
indicator = findViewById(R.id.typing_indicator); indicator = findViewById(R.id.typing_indicator);
} }
public void setTypists(@NonNull GlideRequests glideRequests, @NonNull List<Recipient> typists, boolean isGroupThread, boolean hasWallpaper) { public void setTypists(@NonNull RequestManager requestManager, @NonNull List<Recipient> typists, boolean isGroupThread, boolean hasWallpaper) {
if (typists.isEmpty()) { if (typists.isEmpty()) {
indicator.stopAnimation(); indicator.stopAnimation();
return; return;
@ -64,7 +65,7 @@ public class ConversationTypingView extends ConstraintLayout {
typistCount.setVisibility(GONE); typistCount.setVisibility(GONE);
if (isGroupThread) { if (isGroupThread) {
presentGroupThreadAvatars(glideRequests, typists); presentGroupThreadAvatars(requestManager, typists);
} }
if (hasWallpaper) { if (hasWallpaper) {
@ -84,23 +85,23 @@ public class ConversationTypingView extends ConstraintLayout {
return indicator.isActive(); return indicator.isActive();
} }
private void presentGroupThreadAvatars(@NonNull GlideRequests glideRequests, @NonNull List<Recipient> typists) { private void presentGroupThreadAvatars(@NonNull RequestManager requestManager, @NonNull List<Recipient> typists) {
avatar1.setAvatar(glideRequests, typists.get(0), typists.size() == 1); avatar1.setAvatar(requestManager, typists.get(0), typists.size() == 1);
avatar1.setVisibility(VISIBLE); avatar1.setVisibility(VISIBLE);
badge1.setBadgeFromRecipient(typists.get(0), glideRequests); badge1.setBadgeFromRecipient(typists.get(0), requestManager);
badge1.setVisibility(VISIBLE); badge1.setVisibility(VISIBLE);
if (typists.size() > 1) { if (typists.size() > 1) {
avatar2.setAvatar(glideRequests, typists.get(1), false); avatar2.setAvatar(requestManager, typists.get(1), false);
avatar2.setVisibility(VISIBLE); avatar2.setVisibility(VISIBLE);
badge2.setBadgeFromRecipient(typists.get(1), glideRequests); badge2.setBadgeFromRecipient(typists.get(1), requestManager);
badge2.setVisibility(VISIBLE); badge2.setVisibility(VISIBLE);
} }
if (typists.size() == 3) { if (typists.size() == 3) {
avatar3.setAvatar(glideRequests, typists.get(2), false); avatar3.setAvatar(requestManager, typists.get(2), false);
avatar3.setVisibility(VISIBLE); avatar3.setVisibility(VISIBLE);
badge3.setBadgeFromRecipient(typists.get(2), glideRequests); badge3.setBadgeFromRecipient(typists.get(2), requestManager);
badge3.setVisibility(VISIBLE); badge3.setVisibility(VISIBLE);
} }

View file

@ -32,6 +32,8 @@ import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.signal.core.util.ThreadUtil; import org.signal.core.util.ThreadUtil;
@ -59,8 +61,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository; import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.QuoteModel; import org.thoughtcrime.securesms.mms.QuoteModel;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.SlideDeck;
@ -184,7 +184,7 @@ public class InputPanel extends ConstraintLayout
} }
}); });
stickerSuggestionAdapter = new ConversationStickerSuggestionAdapter(GlideApp.with(this), this); stickerSuggestionAdapter = new ConversationStickerSuggestionAdapter(Glide.with(this), this);
stickerSuggestion.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); stickerSuggestion.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
stickerSuggestion.setAdapter(stickerSuggestionAdapter); stickerSuggestion.setAdapter(stickerSuggestionAdapter);
@ -212,14 +212,14 @@ public class InputPanel extends ConstraintLayout
composeText.setMediaListener(listener); composeText.setMediaListener(listener);
} }
public void setQuote(@NonNull GlideRequests glideRequests, public void setQuote(@NonNull RequestManager requestManager,
long id, long id,
@NonNull Recipient author, @NonNull Recipient author,
@Nullable CharSequence body, @Nullable CharSequence body,
@NonNull SlideDeck attachments, @NonNull SlideDeck attachments,
@NonNull QuoteModel.Type quoteType) @NonNull QuoteModel.Type quoteType)
{ {
this.quoteView.setQuote(glideRequests, id, author, body, false, attachments, null, quoteType); this.quoteView.setQuote(requestManager, id, author, body, false, attachments, null, quoteType);
int originalHeight = this.quoteView.getVisibility() == VISIBLE ? this.quoteView.getMeasuredHeight() int originalHeight = this.quoteView.getVisibility() == VISIBLE ? this.quoteView.getMeasuredHeight()
: 0; : 0;
@ -325,10 +325,10 @@ public class InputPanel extends ConstraintLayout
this.linkPreview.setNoPreview(customError); this.linkPreview.setNoPreview(customError);
} }
public void setLinkPreview(@NonNull GlideRequests glideRequests, @NonNull Optional<LinkPreview> preview) { public void setLinkPreview(@NonNull RequestManager requestManager, @NonNull Optional<LinkPreview> preview) {
if (preview.isPresent()) { if (preview.isPresent()) {
this.linkPreview.setVisibility(View.VISIBLE); this.linkPreview.setVisibility(View.VISIBLE);
this.linkPreview.setLinkPreview(glideRequests, preview.get(), true); this.linkPreview.setLinkPreview(requestManager, preview.get(), true);
} else { } else {
this.linkPreview.setVisibility(View.GONE); this.linkPreview.setVisibility(View.GONE);
} }
@ -404,7 +404,7 @@ public class InputPanel extends ConstraintLayout
quoteView.setWallpaperEnabled(enabled); quoteView.setWallpaperEnabled(enabled);
} }
public void enterEditMessageMode(@NonNull GlideRequests glideRequests, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft) { public void enterEditMessageMode(@NonNull RequestManager requestManager, @NonNull ConversationMessage conversationMessageToEdit, boolean fromDraft) {
SpannableString textToEdit = conversationMessageToEdit.getDisplayBody(getContext()); SpannableString textToEdit = conversationMessageToEdit.getDisplayBody(getContext());
if (!fromDraft) { if (!fromDraft) {
MessageStyler.convertSpoilersToComposeMode(textToEdit); MessageStyler.convertSpoilersToComposeMode(textToEdit);
@ -415,14 +415,14 @@ public class InputPanel extends ConstraintLayout
if (quote == null) { if (quote == null) {
clearQuote(); clearQuote();
} else { } else {
setQuote(glideRequests, quote.getId(), Recipient.resolved(quote.getAuthor()), quote.getDisplayText(), quote.getAttachment(), quote.getQuoteType()); setQuote(requestManager, quote.getId(), Recipient.resolved(quote.getAuthor()), quote.getDisplayText(), quote.getAttachment(), quote.getQuoteType());
} }
this.messageToEdit = conversationMessageToEdit.getMessageRecord(); this.messageToEdit = conversationMessageToEdit.getMessageRecord();
updateEditModeThumbnail(glideRequests); updateEditModeThumbnail(requestManager);
updateEditModeUi(); updateEditModeUi();
} }
private void updateEditModeThumbnail(@NonNull GlideRequests glideRequests) { private void updateEditModeThumbnail(@NonNull RequestManager requestManager) {
if (messageToEdit instanceof MmsMessageRecord) { if (messageToEdit instanceof MmsMessageRecord) {
MmsMessageRecord mediaEditMessage = (MmsMessageRecord) messageToEdit; MmsMessageRecord mediaEditMessage = (MmsMessageRecord) messageToEdit;
SlideDeck slideDeck = mediaEditMessage.getSlideDeck(); SlideDeck slideDeck = mediaEditMessage.getSlideDeck();
@ -430,7 +430,7 @@ public class InputPanel extends ConstraintLayout
if (imageVideoSlide != null && imageVideoSlide.getUri() != null) { if (imageVideoSlide != null && imageVideoSlide.getUri() != null) {
editMessageThumbnail.setVisibility(VISIBLE); editMessageThumbnail.setVisibility(VISIBLE);
glideRequests.load(new DecryptableStreamUriLoader.DecryptableUri(imageVideoSlide.getUri())) requestManager.load(new DecryptableStreamUriLoader.DecryptableUri(imageVideoSlide.getUri()))
.centerCrop() .centerCrop()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(editMessageThumbnail); .into(editMessageThumbnail);

View file

@ -16,13 +16,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import com.bumptech.glide.RequestManager;
import org.signal.ringrtc.CallLinkRootKey; import org.signal.ringrtc.CallLinkRootKey;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.calls.links.CallLinks; import org.thoughtcrime.securesms.calls.links.CallLinks;
import org.thoughtcrime.securesms.conversation.colors.AvatarColorHash; import org.thoughtcrime.securesms.conversation.colors.AvatarColorHash;
import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository; import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.ImageSlide;
import org.thoughtcrime.securesms.mms.SlidesClickedListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -162,11 +163,11 @@ public class LinkPreviewView extends FrameLayout {
noPreview.setText(getLinkPreviewErrorString(customError)); noPreview.setText(getLinkPreviewErrorString(customError));
} }
public void setLinkPreview(@NonNull GlideRequests glideRequests, @NonNull LinkPreview linkPreview, boolean showThumbnail) { public void setLinkPreview(@NonNull RequestManager requestManager, @NonNull LinkPreview linkPreview, boolean showThumbnail) {
setLinkPreview(glideRequests, linkPreview, showThumbnail, true, false); setLinkPreview(requestManager, linkPreview, showThumbnail, true, false);
} }
public void setLinkPreview(@NonNull GlideRequests glideRequests, @NonNull LinkPreview linkPreview, boolean showThumbnail, boolean showDescription, boolean scheduleMessageMode) { public void setLinkPreview(@NonNull RequestManager requestManager, @NonNull LinkPreview linkPreview, boolean showThumbnail, boolean showDescription, boolean scheduleMessageMode) {
spinner.setVisibility(GONE); spinner.setVisibility(GONE);
noPreview.setVisibility(GONE); noPreview.setVisibility(GONE);
@ -216,13 +217,13 @@ public class LinkPreviewView extends FrameLayout {
if (showThumbnail && linkPreview.getThumbnail().isPresent()) { if (showThumbnail && linkPreview.getThumbnail().isPresent()) {
thumbnail.setVisibility(VISIBLE); thumbnail.setVisibility(VISIBLE);
thumbnailState.applyState(thumbnail); thumbnailState.applyState(thumbnail);
thumbnail.get().setImageResource(glideRequests, new ImageSlide(linkPreview.getThumbnail().get()), type == TYPE_CONVERSATION && !scheduleMessageMode, false); thumbnail.get().setImageResource(requestManager, new ImageSlide(linkPreview.getThumbnail().get()), type == TYPE_CONVERSATION && !scheduleMessageMode, false);
thumbnail.get().showSecondaryText(false); thumbnail.get().showSecondaryText(false);
} else if (callLinkRootKey != null) { } else if (callLinkRootKey != null) {
thumbnail.setVisibility(VISIBLE); thumbnail.setVisibility(VISIBLE);
thumbnailState.applyState(thumbnail); thumbnailState.applyState(thumbnail);
thumbnail.get().setImageDrawable( thumbnail.get().setImageDrawable(
glideRequests, requestManager,
Recipient.DEFAULT_FALLBACK_PHOTO_PROVIDER Recipient.DEFAULT_FALLBACK_PHOTO_PROVIDER
.getPhotoForCallLink() .getPhotoForCallLink()
.asDrawable(getContext(), .asDrawable(getContext(),

View file

@ -15,6 +15,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.shape.CornerFamily; import com.google.android.material.shape.CornerFamily;
@ -32,7 +33,6 @@ import org.thoughtcrime.securesms.conversation.MessageStyler;
import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.Mention;
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.QuoteModel; import org.thoughtcrime.securesms.mms.QuoteModel;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.SlideDeck;
@ -193,7 +193,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
} }
} }
public void setQuote(GlideRequests glideRequests, public void setQuote(RequestManager requestManager,
long id, long id,
@NonNull Recipient author, @NonNull Recipient author,
@Nullable CharSequence body, @Nullable CharSequence body,
@ -213,7 +213,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
this.author.observeForever(this); this.author.observeForever(this);
setQuoteAuthor(author); setQuoteAuthor(author);
setQuoteText(resolveBody(body, quoteType), attachments, originalMissing, storyReaction); setQuoteText(resolveBody(body, quoteType), attachments, originalMissing, storyReaction);
setQuoteAttachment(glideRequests, body, attachments, originalMissing); setQuoteAttachment(requestManager, body, attachments, originalMissing);
setQuoteMissingFooter(originalMissing); setQuoteMissingFooter(originalMissing);
applyColorTheme(); applyColorTheme();
} }
@ -347,7 +347,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
} }
} }
private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull CharSequence body, @NonNull SlideDeck slideDeck, boolean originalMissing) { private void setQuoteAttachment(@NonNull RequestManager requestManager, @NonNull CharSequence body, @NonNull SlideDeck slideDeck, boolean originalMissing) {
boolean outgoing = messageType != MessageType.INCOMING && messageType != MessageType.STORY_REPLY_INCOMING; boolean outgoing = messageType != MessageType.INCOMING && messageType != MessageType.STORY_REPLY_INCOMING;
boolean preview = messageType == MessageType.PREVIEW || messageType == MessageType.STORY_REPLY_PREVIEW; boolean preview = messageType == MessageType.PREVIEW || messageType == MessageType.STORY_REPLY_PREVIEW;
@ -359,7 +359,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
attachmentVideoOVerlayStub.setVisibility(GONE); attachmentVideoOVerlayStub.setVisibility(GONE);
attachmentNameViewStub.setVisibility(GONE); attachmentNameViewStub.setVisibility(GONE);
thumbnailView.setVisibility(VISIBLE); thumbnailView.setVisibility(VISIBLE);
glideRequests.load(model) requestManager.load(model)
.centerCrop() .centerCrop()
.override(thumbWidth, thumbHeight) .override(thumbWidth, thumbHeight)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
@ -377,7 +377,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
attachmentVideoOVerlayStub.setVisibility(GONE); attachmentVideoOVerlayStub.setVisibility(GONE);
attachmentNameViewStub.setVisibility(GONE); attachmentNameViewStub.setVisibility(GONE);
thumbnailView.setVisibility(VISIBLE); thumbnailView.setVisibility(VISIBLE);
glideRequests.load(R.drawable.ic_gift_thumbnail) requestManager.load(R.drawable.ic_gift_thumbnail)
.centerCrop() .centerCrop()
.override(thumbWidth, thumbHeight) .override(thumbWidth, thumbHeight)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
@ -404,7 +404,7 @@ public class QuoteView extends ConstraintLayout implements RecipientForeverObser
if (imageVideoSlide.hasVideo() && !imageVideoSlide.isVideoGif()) { if (imageVideoSlide.hasVideo() && !imageVideoSlide.isVideoGif()) {
attachmentVideoOVerlayStub.setVisibility(VISIBLE); attachmentVideoOVerlayStub.setVisibility(VISIBLE);
} }
glideRequests.load(new DecryptableUri(imageVideoSlide.getUri())) requestManager.load(new DecryptableUri(imageVideoSlide.getUri()))
.centerCrop() .centerCrop()
.override(thumbWidth, thumbHeight) .override(thumbWidth, thumbHeight)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)

View file

@ -22,6 +22,7 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.Key; import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
@ -31,7 +32,6 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter;
import org.thoughtcrime.securesms.database.loaders.RecentPhotosLoader; import org.thoughtcrime.securesms.database.loaders.RecentPhotosLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.LoaderCallbacks<Cursor> { public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.LoaderCallbacks<Cursor> {
@ -119,7 +119,7 @@ public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.Lo
Key signature = new MediaStoreSignature(mimeType, dateModified, orientation); Key signature = new MediaStoreSignature(mimeType, dateModified, orientation);
GlideApp.with(getContext().getApplicationContext()) Glide.with(getContext().getApplicationContext())
.load(uri) .load(uri)
.signature(signature) .signature(signature)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -17,6 +17,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactUtil; import org.thoughtcrime.securesms.contactshare.ContactUtil;
import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.RecipientTable;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver; import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
@ -45,13 +45,13 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO
private TextView actionButtonView; private TextView actionButtonView;
private ConversationItemFooter footer; private ConversationItemFooter footer;
private Contact contact; private Contact contact;
private Locale locale; private Locale locale;
private GlideRequests glideRequests; private RequestManager requestManager;
private EventListener eventListener; private EventListener eventListener;
private CornerMask cornerMask; private CornerMask cornerMask;
private int bigCornerRadius; private int bigCornerRadius;
private int smallCornerRadius; private int smallCornerRadius;
private final Map<RecipientId, LiveRecipient> activeRecipients = new HashMap<>(); private final Map<RecipientId, LiveRecipient> activeRecipients = new HashMap<>();
@ -111,10 +111,10 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO
cornerMask.mask(canvas); cornerMask.mask(canvas);
} }
public void setContact(@NonNull Contact contact, @NonNull GlideRequests glideRequests, @NonNull Locale locale) { public void setContact(@NonNull Contact contact, @NonNull RequestManager requestManager, @NonNull Locale locale) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.locale = locale; this.locale = locale;
this.contact = contact; this.contact = contact;
Stream.of(activeRecipients.values()).forEach(recipient -> recipient.removeForeverObserver(this)); Stream.of(activeRecipients.values()).forEach(recipient -> recipient.removeForeverObserver(this));
this.activeRecipients.clear(); this.activeRecipients.clear();
@ -172,17 +172,17 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO
private void presentAvatar(@Nullable Uri uri) { private void presentAvatar(@Nullable Uri uri) {
if (uri != null) { if (uri != null) {
glideRequests.load(new DecryptableUri(uri)) requestManager.load(new DecryptableUri(uri))
.fallback(R.drawable.symbol_person_display_40) .fallback(R.drawable.symbol_person_display_40)
.circleCrop() .circleCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.dontAnimate() .dontAnimate()
.into(avatarView); .into(avatarView);
} else { } else {
glideRequests.load(R.drawable.symbol_person_display_40) requestManager.load(R.drawable.symbol_person_display_40)
.circleCrop() .circleCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(avatarView); .into(avatarView);
} }
} }

View file

@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components;
import android.content.Context; import android.content.Context;
import android.database.Cursor;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -15,11 +14,12 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.MediaTable;
import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache; import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
@ -58,8 +58,8 @@ public class ThreadPhotoRailView extends FrameLayout {
} }
} }
public void setMediaRecords(@NonNull GlideRequests glideRequests, @NonNull List<MediaTable.MediaRecord> mediaRecords) { public void setMediaRecords(@NonNull RequestManager requestManager, @NonNull List<MediaTable.MediaRecord> mediaRecords) {
this.recyclerView.setAdapter(new ThreadPhotoRailAdapter(getContext(), glideRequests, mediaRecords, this.listener)); this.recyclerView.setAdapter(new ThreadPhotoRailAdapter(getContext(), requestManager, mediaRecords, this.listener));
} }
private static class ThreadPhotoRailAdapter extends RecyclerView.Adapter<ThreadPhotoRailAdapter.ThreadPhotoViewHolder> { private static class ThreadPhotoRailAdapter extends RecyclerView.Adapter<ThreadPhotoRailAdapter.ThreadPhotoViewHolder> {
@ -67,18 +67,18 @@ public class ThreadPhotoRailView extends FrameLayout {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static final String TAG = Log.tag(ThreadPhotoRailAdapter.class); private static final String TAG = Log.tag(ThreadPhotoRailAdapter.class);
@NonNull private final GlideRequests glideRequests; @NonNull private final RequestManager requestManager;
@Nullable private OnItemClickedListener clickedListener; @Nullable private OnItemClickedListener clickedListener;
private final List<MediaTable.MediaRecord> mediaRecords = new ArrayList<>(); private final List<MediaTable.MediaRecord> mediaRecords = new ArrayList<>();
private ThreadPhotoRailAdapter(@NonNull Context context, private ThreadPhotoRailAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull List<MediaTable.MediaRecord> mediaRecords, @NonNull List<MediaTable.MediaRecord> mediaRecords,
@Nullable OnItemClickedListener listener) @Nullable OnItemClickedListener listener)
{ {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.clickedListener = listener; this.clickedListener = listener;
this.mediaRecords.clear(); this.mediaRecords.clear();
@ -103,7 +103,7 @@ public class ThreadPhotoRailView extends FrameLayout {
MediaTable.MediaRecord mediaRecord = mediaRecords.get(position); MediaTable.MediaRecord mediaRecord = mediaRecords.get(position);
Slide slide = MediaUtil.getSlideForAttachment(mediaRecord.getAttachment()); Slide slide = MediaUtil.getSlideForAttachment(mediaRecord.getAttachment());
viewHolder.imageView.setImageResource(glideRequests, slide, false, false); viewHolder.imageView.setImageResource(requestManager, slide, false, false);
viewHolder.imageView.setOnClickListener(v -> { viewHolder.imageView.setOnClickListener(v -> {
MediaPreviewCache.INSTANCE.setDrawable(viewHolder.imageView.getImageDrawable()); MediaPreviewCache.INSTANCE.setDrawable(viewHolder.imageView.getImageDrawable());
if (clickedListener != null) clickedListener.onItemClicked(viewHolder.imageView, mediaRecord); if (clickedListener != null) clickedListener.onItemClicked(viewHolder.imageView, mediaRecord);

View file

@ -27,6 +27,7 @@ import androidx.annotation.UiThread;
import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.AppCompatImageView;
import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.Request; import com.bumptech.glide.request.Request;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
@ -39,8 +40,6 @@ import org.thoughtcrime.securesms.blurhash.BlurHash;
import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView; import org.thoughtcrime.securesms.components.transfercontrols.TransferControlView;
import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.AttachmentTable;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequest;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.ImageSlide;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlideClickListener;
@ -314,23 +313,23 @@ public class ThumbnailView extends FrameLayout {
} }
} }
public void setImageDrawable(@NonNull GlideRequests glideRequests, @Nullable Drawable drawable) { public void setImageDrawable(@NonNull RequestManager requestManager, @Nullable Drawable drawable) {
glideRequests.clear(image); requestManager.clear(image);
glideRequests.clear(blurHash); requestManager.clear(blurHash);
image.setImageDrawable(drawable); image.setImageDrawable(drawable);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
} }
@UiThread @UiThread
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Slide slide, public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull Slide slide,
boolean showControls, boolean isPreview) boolean showControls, boolean isPreview)
{ {
return setImageResource(glideRequests, slide, showControls, isPreview, 0, 0); return setImageResource(requestManager, slide, showControls, isPreview, 0, 0);
} }
@UiThread @UiThread
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Slide slide, public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull Slide slide,
boolean showControls, boolean isPreview, boolean showControls, boolean isPreview,
int naturalWidth, int naturalHeight) int naturalWidth, int naturalHeight)
{ {
@ -340,10 +339,10 @@ public class ThumbnailView extends FrameLayout {
transferControlViewStub.setVisibility(View.GONE); transferControlViewStub.setVisibility(View.GONE);
playOverlay.setVisibility(View.GONE); playOverlay.setVisibility(View.GONE);
glideRequests.clear(blurHash); requestManager.clear(blurHash);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
glideRequests.clear(image); requestManager.clear(image);
image.setImageDrawable(null); image.setImageDrawable(null);
int errorImageResource; int errorImageResource;
@ -414,10 +413,10 @@ public class ThumbnailView extends FrameLayout {
boolean resultHandled = false; boolean resultHandled = false;
if (slide.hasPlaceholder() && (previousBlurHash == null || !Objects.equals(slide.getPlaceholderBlur(), previousBlurHash))) { if (slide.hasPlaceholder() && (previousBlurHash == null || !Objects.equals(slide.getPlaceholderBlur(), previousBlurHash))) {
buildPlaceholderGlideRequest(glideRequests, slide).into(new GlideBitmapListeningTarget(blurHash, result)); buildPlaceholderRequestBuilder(requestManager, slide).into(new GlideBitmapListeningTarget(blurHash, result));
resultHandled = true; resultHandled = true;
} else if (!slide.hasPlaceholder()) { } else if (!slide.hasPlaceholder()) {
glideRequests.clear(blurHash); requestManager.clear(blurHash);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
} }
@ -425,14 +424,14 @@ public class ThumbnailView extends FrameLayout {
if (!MediaUtil.isJpegType(slide.getContentType()) && !MediaUtil.isVideoType(slide.getContentType())) { if (!MediaUtil.isJpegType(slide.getContentType()) && !MediaUtil.isVideoType(slide.getContentType())) {
SettableFuture<Boolean> thumbnailFuture = new SettableFuture<>(); SettableFuture<Boolean> thumbnailFuture = new SettableFuture<>();
thumbnailFuture.deferTo(result); thumbnailFuture.deferTo(result);
thumbnailFuture.addListener(new BlurHashClearListener(glideRequests, blurHash)); thumbnailFuture.addListener(new BlurHashClearListener(requestManager, blurHash));
} }
buildThumbnailGlideRequest(glideRequests, slide).into(new GlideDrawableListeningTarget(image, result)); buildThumbnailRequestBuilder(requestManager, slide).into(new GlideDrawableListeningTarget(image, result));
resultHandled = true; resultHandled = true;
} else { } else {
glideRequests.clear(image); requestManager.clear(image);
image.setImageDrawable(null); image.setImageDrawable(null);
} }
@ -443,20 +442,20 @@ public class ThumbnailView extends FrameLayout {
return result; return result;
} }
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Uri uri) { public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull Uri uri) {
return setImageResource(glideRequests, uri, 0, 0); return setImageResource(requestManager, uri, 0, 0);
} }
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Uri uri, int width, int height) { public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull Uri uri, int width, int height) {
return setImageResource(glideRequests, uri, width, height, true, null); return setImageResource(requestManager, uri, width, height, true, null);
} }
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Uri uri, int width, int height, boolean animate, @Nullable ThumbnailRequestListener listener) { public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull Uri uri, int width, int height, boolean animate, @Nullable ThumbnailRequestListener listener) {
SettableFuture<Boolean> future = new SettableFuture<>(); SettableFuture<Boolean> future = new SettableFuture<>();
transferControlViewStub.setVisibility(View.GONE); transferControlViewStub.setVisibility(View.GONE);
GlideRequest<Drawable> request = glideRequests.load(new DecryptableUri(uri)) RequestBuilder<Drawable> request = requestManager.load(new DecryptableUri(uri))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE) .downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.listener(listener); .listener(listener);
@ -483,12 +482,12 @@ public class ThumbnailView extends FrameLayout {
return future; return future;
} }
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull StoryTextPostModel model, int width, int height) { public ListenableFuture<Boolean> setImageResource(@NonNull RequestManager requestManager, @NonNull StoryTextPostModel model, int width, int height) {
SettableFuture<Boolean> future = new SettableFuture<>(); SettableFuture<Boolean> future = new SettableFuture<>();
transferControlViewStub.setVisibility(View.GONE); transferControlViewStub.setVisibility(View.GONE);
GlideRequest<Drawable> request = glideRequests.load(model) RequestBuilder<Drawable> request = requestManager.load(model)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.placeholder(model.getPlaceholder()) .placeholder(model.getPlaceholder())
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE) .downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
@ -502,7 +501,7 @@ public class ThumbnailView extends FrameLayout {
return future; return future;
} }
private <T> GlideRequest<T> override(@NonNull GlideRequest<T> request, int width, int height) { private <T> RequestBuilder<T> override(@NonNull RequestBuilder<T> request, int width, int height) {
if (width > 0 && height > 0) { if (width > 0 && height > 0) {
Log.d(TAG, "override: apply w" + width + "xh" + height); Log.d(TAG, "override: apply w" + width + "xh" + height);
return request.override(width, height); return request.override(width, height);
@ -542,8 +541,8 @@ public class ThumbnailView extends FrameLayout {
return false; return false;
} }
private GlideRequest<Drawable> buildThumbnailGlideRequest(@NonNull GlideRequests glideRequests, @NonNull Slide slide) { private RequestBuilder<Drawable> buildThumbnailRequestBuilder(@NonNull RequestManager requestManager, @NonNull Slide slide) {
GlideRequest<Drawable> request = applySizing(glideRequests.load(new DecryptableUri(Objects.requireNonNull(slide.getUri()))) RequestBuilder<Drawable> requestBuilder = applySizing(requestManager.load(new DecryptableUri(Objects.requireNonNull(slide.getUri())))
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE) .downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.transition(withCrossFade())); .transition(withCrossFade()));
@ -551,21 +550,21 @@ public class ThumbnailView extends FrameLayout {
boolean doNotShowMissingThumbnailImage = Build.VERSION.SDK_INT < 23; boolean doNotShowMissingThumbnailImage = Build.VERSION.SDK_INT < 23;
if (slide.isInProgress() || doNotShowMissingThumbnailImage) { if (slide.isInProgress() || doNotShowMissingThumbnailImage) {
return request; return requestBuilder;
} else { } else {
return request.apply(RequestOptions.errorOf(R.drawable.missing_thumbnail)); return requestBuilder.apply(RequestOptions.errorOf(R.drawable.missing_thumbnail));
} }
} }
public void clear(GlideRequests glideRequests) { public void clear(RequestManager requestManager) {
glideRequests.clear(image); requestManager.clear(image);
image.setImageDrawable(null); image.setImageDrawable(null);
if (transferControlViewStub.resolved()) { if (transferControlViewStub.resolved()) {
transferControlViewStub.get().clear(); transferControlViewStub.get().clear();
} }
glideRequests.clear(blurHash); requestManager.clear(blurHash);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
slide = null; slide = null;
@ -594,9 +593,9 @@ public class ThumbnailView extends FrameLayout {
} }
private RequestBuilder<Bitmap> buildPlaceholderGlideRequest(@NonNull GlideRequests glideRequests, @NonNull Slide slide) { private RequestBuilder<Bitmap> buildPlaceholderRequestBuilder(@NonNull RequestManager requestManager, @NonNull Slide slide) {
GlideRequest<Bitmap> bitmap = glideRequests.asBitmap(); RequestBuilder<Bitmap> bitmap = requestManager.asBitmap();
BlurHash placeholderBlur = slide.getPlaceholderBlur(); BlurHash placeholderBlur = slide.getPlaceholderBlur();
if (placeholderBlur != null) { if (placeholderBlur != null) {
bitmap = bitmap.load(placeholderBlur); bitmap = bitmap.load(placeholderBlur);
@ -604,7 +603,7 @@ public class ThumbnailView extends FrameLayout {
bitmap = bitmap.load(slide.getPlaceholderRes(getContext().getTheme())); bitmap = bitmap.load(slide.getPlaceholderRes(getContext().getTheme()));
} }
final GlideRequest<Bitmap> resizedRequest = applySizing(bitmap.diskCacheStrategy(DiskCacheStrategy.NONE)); final RequestBuilder<Bitmap> resizedRequest = applySizing(bitmap.diskCacheStrategy(DiskCacheStrategy.NONE));
if (placeholderBlur != null) { if (placeholderBlur != null) {
return resizedRequest.centerCrop(); return resizedRequest.centerCrop();
} else { } else {
@ -612,7 +611,7 @@ public class ThumbnailView extends FrameLayout {
} }
} }
private <TranscodeType> GlideRequest<TranscodeType> applySizing(@NonNull GlideRequest<TranscodeType> request) { private <TranscodeType> RequestBuilder<TranscodeType> applySizing(@NonNull RequestBuilder<TranscodeType> request) {
int[] size = new int[2]; int[] size = new int[2];
fillTargetDimensions(size, dimens, bounds); fillTargetDimensions(size, dimens, bounds);
if (size[WIDTH] == 0 && size[HEIGHT] == 0) { if (size[WIDTH] == 0 && size[HEIGHT] == 0) {
@ -701,23 +700,23 @@ public class ThumbnailView extends FrameLayout {
private static class BlurHashClearListener implements ListenableFuture.Listener<Boolean> { private static class BlurHashClearListener implements ListenableFuture.Listener<Boolean> {
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final ImageView blurHash; private final ImageView blurHash;
private BlurHashClearListener(@NonNull GlideRequests glideRequests, @NonNull ImageView blurHash) { private BlurHashClearListener(@NonNull RequestManager requestManager, @NonNull ImageView blurHash) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.blurHash = blurHash; this.blurHash = blurHash;
} }
@Override @Override
public void onSuccess(Boolean result) { public void onSuccess(Boolean result) {
glideRequests.clear(blurHash); requestManager.clear(blurHash);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
} }
@Override @Override
public void onFailure(ExecutionException e) { public void onFailure(ExecutionException e) {
glideRequests.clear(blurHash); requestManager.clear(blurHash);
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
} }
} }

View file

@ -18,13 +18,13 @@ import androidx.annotation.Px;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.bumptech.glide.Glide;
import com.google.android.material.shape.MaterialShapeDrawable; import com.google.android.material.shape.MaterialShapeDrawable;
import com.google.android.material.shape.ShapeAppearanceModel; import com.google.android.material.shape.ShapeAppearanceModel;
import org.signal.core.util.DimensionUnit; import org.signal.core.util.DimensionUnit;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideApp;
/** /**
* Class for creating simple tooltips to show throughout the app. Utilizes a popup window so you * Class for creating simple tooltips to show throughout the app. Utilizes a popup window so you
@ -101,7 +101,7 @@ public class TooltipPopup extends PopupWindow {
if (iconGlideModel != null) { if (iconGlideModel != null) {
ImageView iconView = getContentView().findViewById(R.id.tooltip_icon); ImageView iconView = getContentView().findViewById(R.id.tooltip_icon);
iconView.setVisibility(View.VISIBLE); iconView.setVisibility(View.VISIBLE);
GlideApp.with(anchor.getContext()).load(iconGlideModel).into(iconView); Glide.with(anchor.getContext()).load(iconGlideModel).into(iconView);
} }
setElevation(10); setElevation(10);

View file

@ -11,6 +11,7 @@ import android.widget.FrameLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.exifinterface.media.ExifInterface; import androidx.exifinterface.media.ExifInterface;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.davemorrissey.labs.subscaleview.ImageSource; import com.davemorrissey.labs.subscaleview.ImageSource;
@ -23,7 +24,6 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.subsampling.AttachmentBitmapDecoder; import org.thoughtcrime.securesms.components.subsampling.AttachmentBitmapDecoder;
import org.thoughtcrime.securesms.components.subsampling.AttachmentRegionDecoder; import org.thoughtcrime.securesms.components.subsampling.AttachmentRegionDecoder;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.ActionRequestListener; import org.thoughtcrime.securesms.util.ActionRequestListener;
import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.BitmapDecodingException;
@ -81,7 +81,7 @@ public class ZoomingImageView extends FrameLayout {
} }
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
public void setImageUri(@NonNull GlideRequests glideRequests, @NonNull Uri uri, @NonNull String contentType, @NonNull Runnable onMediaReady) public void setImageUri(@NonNull RequestManager requestManager, @NonNull Uri uri, @NonNull String contentType, @NonNull Runnable onMediaReady)
{ {
final Context context = getContext(); final Context context = getContext();
final int maxTextureSize = BitmapUtil.getMaxTextureSize(); final int maxTextureSize = BitmapUtil.getMaxTextureSize();
@ -103,7 +103,7 @@ public class ZoomingImageView extends FrameLayout {
if (dimensions == null || (dimensions.first <= maxTextureSize && dimensions.second <= maxTextureSize)) { if (dimensions == null || (dimensions.first <= maxTextureSize && dimensions.second <= maxTextureSize)) {
Log.i(TAG, "Loading in standard image view..."); Log.i(TAG, "Loading in standard image view...");
setImageViewUri(glideRequests, uri, onMediaReady); setImageViewUri(requestManager, uri, onMediaReady);
} else { } else {
Log.i(TAG, "Loading in subsampling image view..."); Log.i(TAG, "Loading in subsampling image view...");
setSubsamplingImageViewUri(uri); setSubsamplingImageViewUri(uri);
@ -112,11 +112,11 @@ public class ZoomingImageView extends FrameLayout {
}); });
} }
private void setImageViewUri(@NonNull GlideRequests glideRequests, @NonNull Uri uri, @NonNull Runnable onMediaReady) { private void setImageViewUri(@NonNull RequestManager requestManager, @NonNull Uri uri, @NonNull Runnable onMediaReady) {
photoView.setVisibility(View.VISIBLE); photoView.setVisibility(View.VISIBLE);
subsamplingImageView.setVisibility(View.GONE); subsamplingImageView.setVisibility(View.GONE);
glideRequests.load(new DecryptableUri(uri)) requestManager.load(new DecryptableUri(uri))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.dontTransform() .dontTransform()
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)

View file

@ -1,11 +1,11 @@
package org.thoughtcrime.securesms.components.settings.conversation.preferences package org.thoughtcrime.securesms.components.settings.conversation.preferences
import android.view.View import android.view.View
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.ThreadPhotoRailView import org.thoughtcrime.securesms.components.ThreadPhotoRailView
import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.components.settings.PreferenceModel
import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.database.MediaTable
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
@ -40,7 +40,7 @@ object SharedMediaPreference {
private val rail: ThreadPhotoRailView = itemView.findViewById(R.id.rail_view) private val rail: ThreadPhotoRailView = itemView.findViewById(R.id.rail_view)
override fun bind(model: Model) { override fun bind(model: Model) {
rail.setMediaRecords(GlideApp.with(rail), model.mediaRecords) rail.setMediaRecords(Glide.with(rail), model.mediaRecords)
rail.setListener { v, m -> rail.setListener { v, m ->
model.onMediaRecordClick(v, m, ViewUtil.isLtr(rail)) model.onMediaRecordClick(v, m, ViewUtil.isLtr(rail))
} }

View file

@ -19,6 +19,7 @@ import androidx.core.widget.ImageViewCompat;
import androidx.transition.Transition; import androidx.transition.Transition;
import androidx.transition.TransitionManager; import androidx.transition.TransitionManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -33,7 +34,6 @@ import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.conversation.colors.ChatColors;
import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.events.CallParticipant;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.AvatarUtil; import org.thoughtcrime.securesms.util.AvatarUtil;
@ -408,7 +408,7 @@ public class CallParticipantView extends ConstraintLayout {
: recipient.getContactPhoto(); : recipient.getContactPhoto();
FallbackContactPhoto fallbackPhoto = recipient.getFallbackContactPhoto(FALLBACK_PHOTO_PROVIDER); FallbackContactPhoto fallbackPhoto = recipient.getFallbackContactPhoto(FALLBACK_PHOTO_PROVIDER);
GlideApp.with(this) Glide.with(this)
.load(contactPhoto) .load(contactPhoto)
.fallback(fallbackPhoto.asCallCard(getContext())) .fallback(fallbackPhoto.asCallCard(getContext()))
.error(fallbackPhoto.asCallCard(getContext())) .error(fallbackPhoto.asCallCard(getContext()))

View file

@ -36,6 +36,7 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.MarginPageTransformer; import androidx.viewpager2.widget.MarginPageTransformer;
import androidx.viewpager2.widget.ViewPager2; import androidx.viewpager2.widget.ViewPager2;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
@ -52,7 +53,6 @@ import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.events.CallParticipant;
import org.thoughtcrime.securesms.events.WebRtcViewModel; import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.ringrtc.CameraState; import org.thoughtcrime.securesms.ringrtc.CameraState;
@ -555,7 +555,7 @@ public class WebRtcCallView extends InsetAwareConstraintLayout {
if (!localAvatar.equals(previousLocalAvatar)) { if (!localAvatar.equals(previousLocalAvatar)) {
previousLocalAvatar = localAvatar; previousLocalAvatar = localAvatar;
GlideApp.with(getContext().getApplicationContext()) Glide.with(getContext().getApplicationContext())
.load(localAvatar) .load(localAvatar)
.transform(new CenterCrop(), new BlurTransformation(getContext(), 0.25f, BlurTransformation.MAX_RADIUS)) .transform(new CenterCrop(), new BlurTransformation(getContext(), 0.25f, BlurTransformation.MAX_RADIUS))
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)

View file

@ -11,13 +11,13 @@ import android.util.AttributeSet;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
import com.google.android.material.chip.Chip; import com.google.android.material.chip.Chip;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
public final class ContactChip extends Chip { public final class ContactChip extends Chip {
@ -44,7 +44,7 @@ public final class ContactChip extends Chip {
return contact; return contact;
} }
public void setAvatar(@NonNull GlideRequests requestManager, @Nullable Recipient recipient, @Nullable Runnable onAvatarSet) { public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient, @Nullable Runnable onAvatarSet) {
if (recipient != null) { if (recipient != null) {
requestManager.clear(this); requestManager.clear(this);

View file

@ -1,8 +1,8 @@
package org.thoughtcrime.securesms.contacts package org.thoughtcrime.securesms.contacts
import android.view.View import android.view.View
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
@ -36,7 +36,7 @@ object SelectedContacts {
chip.setOnCloseIconClickListener { chip.setOnCloseIconClickListener {
onCloseIconClicked(model) onCloseIconClicked(model)
} }
chip.setAvatar(GlideApp.with(itemView), model.recipient, null) chip.setAvatar(Glide.with(itemView), model.recipient, null)
} }
} }
} }

View file

@ -15,11 +15,11 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contactshare.Contact.Phone; import org.thoughtcrime.securesms.contactshare.Contact.Phone;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -31,16 +31,16 @@ import static org.thoughtcrime.securesms.contactshare.Contact.PostalAddress;
class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.ContactFieldViewHolder> { class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.ContactFieldViewHolder> {
private final Locale locale; private final Locale locale;
private final boolean selectable; private final boolean selectable;
private final List<Field> fields; private final List<Field> fields;
private final GlideRequests glideRequests; private final RequestManager requestManager;
public ContactFieldAdapter(@NonNull Locale locale, @NonNull GlideRequests glideRequests, boolean selectable) { public ContactFieldAdapter(@NonNull Locale locale, @NonNull RequestManager requestManager, boolean selectable) {
this.locale = locale; this.locale = locale;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.selectable = selectable; this.selectable = selectable;
this.fields = new ArrayList<>(); this.fields = new ArrayList<>();
} }
@Override @Override
@ -50,7 +50,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
@Override @Override
public void onBindViewHolder(@NonNull ContactFieldViewHolder holder, int position) { public void onBindViewHolder(@NonNull ContactFieldViewHolder holder, int position) {
holder.bind(fields.get(position), glideRequests, selectable); holder.bind(fields.get(position), requestManager, selectable);
} }
@Override @Override
@ -98,7 +98,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
checkBox = itemView.findViewById(R.id.contact_field_checkbox); checkBox = itemView.findViewById(R.id.contact_field_checkbox);
} }
void bind(@NonNull Field field, @NonNull GlideRequests glideRequests, boolean selectable) { void bind(@NonNull Field field, @NonNull RequestManager requestManager, boolean selectable) {
value.setMaxLines(field.maxLines); value.setMaxLines(field.maxLines);
value.setText(field.value); value.setText(field.value);
label.setText(field.label); label.setText(field.label);
@ -106,7 +106,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
if (field.iconUri != null) { if (field.iconUri != null) {
avatar.setVisibility(View.VISIBLE); avatar.setVisibility(View.VISIBLE);
glideRequests.load(field.iconUri) requestManager.load(field.iconUri)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true) .skipMemoryCache(true)
.circleCrop() .circleCrop()

View file

@ -20,9 +20,10 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.DynamicTheme;
@ -89,7 +90,7 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
Material3OnScrollHelper onScrollHelper = new Material3OnScrollHelper(this, Collections.singletonList(toolbar), Collections.emptyList(), this); Material3OnScrollHelper onScrollHelper = new Material3OnScrollHelper(this, Collections.singletonList(toolbar), Collections.emptyList(), this);
onScrollHelper.attach(contactList); onScrollHelper.attach(contactList);
ContactShareEditAdapter contactAdapter = new ContactShareEditAdapter(GlideApp.with(this), dynamicLanguage.getCurrentLocale(), this); ContactShareEditAdapter contactAdapter = new ContactShareEditAdapter(Glide.with(this), dynamicLanguage.getCurrentLocale(), this);
contactList.setAdapter(contactAdapter); contactList.setAdapter(contactAdapter);
SharedContactRepository contactRepository = new SharedContactRepository(this, AsyncTask.THREAD_POOL_EXECUTOR); SharedContactRepository contactRepository = new SharedContactRepository(this, AsyncTask.THREAD_POOL_EXECUTOR);

View file

@ -11,8 +11,9 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -22,23 +23,23 @@ import static org.thoughtcrime.securesms.contactshare.Contact.Name;
public class ContactShareEditAdapter extends RecyclerView.Adapter<ContactShareEditAdapter.ContactEditViewHolder> { public class ContactShareEditAdapter extends RecyclerView.Adapter<ContactShareEditAdapter.ContactEditViewHolder> {
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final Locale locale; private final Locale locale;
private final EventListener eventListener; private final EventListener eventListener;
private final List<Contact> contacts; private final List<Contact> contacts;
ContactShareEditAdapter(@NonNull GlideRequests glideRequests, @NonNull Locale locale, @NonNull EventListener eventListener) { ContactShareEditAdapter(@NonNull RequestManager requestManager, @NonNull Locale locale, @NonNull EventListener eventListener) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.locale = locale; this.locale = locale;
this.eventListener = eventListener; this.eventListener = eventListener;
this.contacts = new ArrayList<>(); this.contacts = new ArrayList<>();
} }
@Override @Override
public @NonNull ContactEditViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public @NonNull ContactEditViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ContactEditViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_editable_contact, parent, false), return new ContactEditViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_editable_contact, parent, false),
locale, locale,
glideRequests); requestManager);
} }
@Override @Override
@ -67,12 +68,12 @@ public class ContactShareEditAdapter extends RecyclerView.Adapter<ContactShareEd
private final View nameEditButton; private final View nameEditButton;
private final ContactFieldAdapter fieldAdapter; private final ContactFieldAdapter fieldAdapter;
ContactEditViewHolder(View itemView, @NonNull Locale locale, @NonNull GlideRequests glideRequests) { ContactEditViewHolder(View itemView, @NonNull Locale locale, @NonNull RequestManager requestManager) {
super(itemView); super(itemView);
this.name = itemView.findViewById(R.id.editable_contact_name); this.name = itemView.findViewById(R.id.editable_contact_name);
this.nameEditButton = itemView.findViewById(R.id.editable_contact_name_edit_button); this.nameEditButton = itemView.findViewById(R.id.editable_contact_name_edit_button);
this.fieldAdapter = new ContactFieldAdapter(locale, glideRequests, true); this.fieldAdapter = new ContactFieldAdapter(locale, requestManager, true);
RecyclerView fields = itemView.findViewById(R.id.editable_contact_fields); RecyclerView fields = itemView.findViewById(R.id.editable_contact_fields);
fields.setLayoutManager(new LinearLayoutManager(itemView.getContext())); fields.setLayoutManager(new LinearLayoutManager(itemView.getContext()));

View file

@ -18,6 +18,8 @@ import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
@ -25,8 +27,6 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.RecipientTable;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob; import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
@ -59,7 +59,7 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity {
private View messageButtonView; private View messageButtonView;
private View callButtonView; private View callButtonView;
private GlideRequests glideRequests; private RequestManager requestManager;
private Contact contact; private Contact contact;
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
@ -132,13 +132,13 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity {
messageButtonView = findViewById(R.id.contact_details_message_button); messageButtonView = findViewById(R.id.contact_details_message_button);
callButtonView = findViewById(R.id.contact_details_call_button); callButtonView = findViewById(R.id.contact_details_call_button);
contactFieldAdapter = new ContactFieldAdapter(dynamicLanguage.getCurrentLocale(), glideRequests, false); contactFieldAdapter = new ContactFieldAdapter(dynamicLanguage.getCurrentLocale(), requestManager, false);
RecyclerView list = findViewById(R.id.contact_details_fields); RecyclerView list = findViewById(R.id.contact_details_fields);
list.setLayoutManager(new LinearLayoutManager(this)); list.setLayoutManager(new LinearLayoutManager(this));
list.setAdapter(contactFieldAdapter); list.setAdapter(contactFieldAdapter);
glideRequests = GlideApp.with(this); requestManager = Glide.with(this);
} }
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
@ -172,13 +172,15 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity {
public void presentAvatar(@Nullable Uri uri) { public void presentAvatar(@Nullable Uri uri) {
if (uri != null) { if (uri != null) {
glideRequests.load(new DecryptableUri(uri)) requestManager
.load(new DecryptableUri(uri))
.fallback(R.drawable.symbol_person_display_40) .fallback(R.drawable.symbol_person_display_40)
.circleCrop() .circleCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(avatarView); .into(avatarView);
} else { } else {
glideRequests.load(R.drawable.symbol_person_display_40) requestManager
.load(R.drawable.symbol_person_display_40)
.circleCrop() .circleCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(avatarView); .into(avatarView);

View file

@ -12,10 +12,11 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.InputAwareLayout; import org.thoughtcrime.securesms.components.InputAwareLayout;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StorageUtil;
import java.util.Arrays; import java.util.Arrays;
@ -63,7 +64,7 @@ public class AttachmentKeyboard extends FrameLayout implements InputAwareLayout.
RecyclerView buttonList = findViewById(R.id.attachment_keyboard_button_list); RecyclerView buttonList = findViewById(R.id.attachment_keyboard_button_list);
buttonList.setItemAnimator(null); buttonList.setItemAnimator(null);
mediaAdapter = new AttachmentKeyboardMediaAdapter(GlideApp.with(this), media -> { mediaAdapter = new AttachmentKeyboardMediaAdapter(Glide.with(this), media -> {
if (callback != null) { if (callback != null) {
callback.onAttachmentMediaClicked(media); callback.onAttachmentMediaClicked(media);
} }

View file

@ -8,10 +8,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.components.ThumbnailView;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.adapter.StableIdGenerator; import org.thoughtcrime.securesms.util.adapter.StableIdGenerator;
@ -22,15 +23,15 @@ import java.util.concurrent.TimeUnit;
class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyboardMediaAdapter.MediaViewHolder> { class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyboardMediaAdapter.MediaViewHolder> {
private final List<Media> media; private final List<Media> media;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final Listener listener; private final Listener listener;
private final StableIdGenerator<Media> idGenerator; private final StableIdGenerator<Media> idGenerator;
AttachmentKeyboardMediaAdapter(@NonNull GlideRequests glideRequests, @NonNull Listener listener) { AttachmentKeyboardMediaAdapter(@NonNull RequestManager requestManager, @NonNull Listener listener) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.listener = listener; this.listener = listener;
this.media = new ArrayList<>(); this.media = new ArrayList<>();
this.idGenerator = new StableIdGenerator<>(); this.idGenerator = new StableIdGenerator<>();
setHasStableIds(true); setHasStableIds(true);
} }
@ -47,7 +48,7 @@ class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyb
@Override @Override
public void onBindViewHolder(@NonNull MediaViewHolder holder, int position) { public void onBindViewHolder(@NonNull MediaViewHolder holder, int position) {
holder.bind(media.get(position), glideRequests, listener); holder.bind(media.get(position), requestManager, listener);
} }
@Override @Override
@ -83,8 +84,8 @@ class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyb
videoIcon = itemView.findViewById(R.id.attachment_keyboard_item_video_icon); videoIcon = itemView.findViewById(R.id.attachment_keyboard_item_video_icon);
} }
void bind(@NonNull Media media, @NonNull GlideRequests glideRequests, @NonNull Listener listener) { void bind(@NonNull Media media, @NonNull RequestManager requestManager, @NonNull Listener listener) {
image.setImageResource(glideRequests, media.getUri(), 400, 400); image.setImageResource(requestManager, media.getUri(), 400, 400);
image.setOnClickListener(v -> listener.onMediaClicked(media)); image.setOnClickListener(v -> listener.onMediaClicked(media));
duration.setVisibility(View.GONE); duration.setVisibility(View.GONE);

View file

@ -39,6 +39,8 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import com.bumptech.glide.RequestManager;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.signal.paging.PagingController; import org.signal.paging.PagingController;
import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.BindableConversationItem;
@ -50,7 +52,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CachedInflater; import org.thoughtcrime.securesms.util.CachedInflater;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
@ -99,7 +100,7 @@ public class ConversationAdapter
private final ItemClickListener clickListener; private final ItemClickListener clickListener;
private final Context context; private final Context context;
private final LifecycleOwner lifecycleOwner; private final LifecycleOwner lifecycleOwner;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final Locale locale; private final Locale locale;
private final Set<MultiselectPart> selected; private final Set<MultiselectPart> selected;
private final Calendar calendar; private final Calendar calendar;
@ -119,7 +120,7 @@ public class ConversationAdapter
public ConversationAdapter(@NonNull Context context, public ConversationAdapter(@NonNull Context context,
@NonNull LifecycleOwner lifecycleOwner, @NonNull LifecycleOwner lifecycleOwner,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@Nullable ItemClickListener clickListener, @Nullable ItemClickListener clickListener,
boolean hasWallpaper, boolean hasWallpaper,
@ -137,10 +138,10 @@ public class ConversationAdapter
} }
}); });
this.lifecycleOwner = lifecycleOwner; this.lifecycleOwner = lifecycleOwner;
this.context = context; this.context = context;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.locale = locale; this.locale = locale;
this.clickListener = clickListener; this.clickListener = clickListener;
this.selected = new HashSet<>(); this.selected = new HashSet<>();
@ -276,7 +277,7 @@ public class ConversationAdapter
conversationMessage, conversationMessage,
Optional.ofNullable(previousMessage != null ? previousMessage.getMessageRecord() : null), Optional.ofNullable(previousMessage != null ? previousMessage.getMessageRecord() : null),
Optional.ofNullable(nextMessage != null ? nextMessage.getMessageRecord() : null), Optional.ofNullable(nextMessage != null ? nextMessage.getMessageRecord() : null),
glideRequests, requestManager,
locale, locale,
selected, selected,
conversationMessage.getThreadRecipient(), conversationMessage.getThreadRecipient(),

View file

@ -15,6 +15,8 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.view.ViewKt; import androidx.core.view.ViewKt;
import com.bumptech.glide.RequestManager;
import org.signal.core.util.DimensionUnit; import org.signal.core.util.DimensionUnit;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
@ -23,7 +25,6 @@ import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.databinding.ConversationHeaderViewBinding; import org.thoughtcrime.securesms.databinding.ConversationHeaderViewBinding;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.ContextUtil;
import org.thoughtcrime.securesms.util.LongClickMovementMethod; import org.thoughtcrime.securesms.util.LongClickMovementMethod;
@ -60,8 +61,8 @@ public class ConversationHeaderView extends ConstraintLayout {
} }
} }
public void setAvatar(@NonNull GlideRequests requests, @Nullable Recipient recipient) { public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient) {
binding.messageRequestAvatar.setAvatar(requests, recipient, false); binding.messageRequestAvatar.setAvatar(requestManager, recipient, false);
if (recipient != null && recipient.shouldBlurAvatar() && recipient.getContactPhoto() != null) { if (recipient != null && recipient.shouldBlurAvatar() && recipient.getContactPhoto() != null) {
binding.messageRequestAvatarTapToView.setVisibility(VISIBLE); binding.messageRequestAvatarTapToView.setVisibility(VISIBLE);

View file

@ -60,6 +60,7 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -123,7 +124,6 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory;
import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache; import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache;
import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Fragment; import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Fragment;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.ImageSlide;
import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
@ -199,7 +199,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
private Locale locale; private Locale locale;
private boolean groupThread; private boolean groupThread;
private LiveRecipient author; private LiveRecipient author;
private GlideRequests glideRequests; private RequestManager requestManager;
private Optional<MessageRecord> previousMessage; private Optional<MessageRecord> previousMessage;
private ConversationItemDisplayMode displayMode; private ConversationItemDisplayMode displayMode;
@ -364,7 +364,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
@NonNull ConversationMessage conversationMessage, @NonNull ConversationMessage conversationMessage,
@NonNull Optional<MessageRecord> previousMessageRecord, @NonNull Optional<MessageRecord> previousMessageRecord,
@NonNull Optional<MessageRecord> nextMessageRecord, @NonNull Optional<MessageRecord> nextMessageRecord,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<MultiselectPart> batchSelected, @NonNull Set<MultiselectPart> batchSelected,
@NonNull Recipient conversationRecipient, @NonNull Recipient conversationRecipient,
@ -386,7 +386,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
this.messageRecord = conversationMessage.getMessageRecord(); this.messageRecord = conversationMessage.getMessageRecord();
this.nextMessageRecord = nextMessageRecord; this.nextMessageRecord = nextMessageRecord;
this.locale = locale; this.locale = locale;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.batchSelected = batchSelected; this.batchSelected = batchSelected;
this.conversationRecipient = conversationRecipient.live(); this.conversationRecipient = conversationRecipient.live();
this.groupThread = conversationRecipient.isGroup(); this.groupThread = conversationRecipient.isGroup();
@ -716,7 +716,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
bodyBubble.setVideoPlayerProjection(null); bodyBubble.setVideoPlayerProjection(null);
bodyBubble.setQuoteViewProjection(null); bodyBubble.setQuoteViewProjection(null);
glideRequests = null; requestManager = null;
} }
@Override @Override
@ -1131,7 +1131,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
if (joinCallLinkStub.resolved()) joinCallLinkStub.get().setVisibility(View.GONE); if (joinCallLinkStub.resolved()) joinCallLinkStub.get().setVisibility(View.GONE);
paymentViewStub.setVisibility(View.GONE); paymentViewStub.setVisibility(View.GONE);
sharedContactStub.get().setContact(((MmsMessageRecord) messageRecord).getSharedContacts().get(0), glideRequests, locale); sharedContactStub.get().setContact(((MmsMessageRecord) messageRecord).getSharedContacts().get(0), requestManager, locale);
sharedContactStub.get().setEventListener(sharedContactEventListener); sharedContactStub.get().setEventListener(sharedContactEventListener);
sharedContactStub.get().setOnClickListener(sharedContactClickListener); sharedContactStub.get().setOnClickListener(sharedContactClickListener);
sharedContactStub.get().setOnLongClickListener(passthroughClickListener); sharedContactStub.get().setOnLongClickListener(passthroughClickListener);
@ -1174,14 +1174,14 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
mediaThumbnailStub.require().setVisibility(VISIBLE); mediaThumbnailStub.require().setVisibility(VISIBLE);
mediaThumbnailStub.require().setMinimumThumbnailWidth(readDimen(R.dimen.media_bubble_min_width_with_content)); mediaThumbnailStub.require().setMinimumThumbnailWidth(readDimen(R.dimen.media_bubble_min_width_with_content));
mediaThumbnailStub.require().setMaximumThumbnailHeight(readDimen(R.dimen.media_bubble_max_height)); mediaThumbnailStub.require().setMaximumThumbnailHeight(readDimen(R.dimen.media_bubble_max_height));
mediaThumbnailStub.require().setImageResource(glideRequests, Collections.singletonList(new ImageSlide(linkPreview.getThumbnail().get())), showControls, false); mediaThumbnailStub.require().setImageResource(requestManager, Collections.singletonList(new ImageSlide(linkPreview.getThumbnail().get())), showControls, false);
mediaThumbnailStub.require().setThumbnailClickListener(new LinkPreviewThumbnailClickListener()); mediaThumbnailStub.require().setThumbnailClickListener(new LinkPreviewThumbnailClickListener());
mediaThumbnailStub.require().setStartTransferClickListener(downloadClickListener); mediaThumbnailStub.require().setStartTransferClickListener(downloadClickListener);
mediaThumbnailStub.require().setCancelTransferClickListener(attachmentCancelClickListener); mediaThumbnailStub.require().setCancelTransferClickListener(attachmentCancelClickListener);
mediaThumbnailStub.require().setPlayVideoClickListener(playVideoClickListener); mediaThumbnailStub.require().setPlayVideoClickListener(playVideoClickListener);
mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener); mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener);
linkPreviewStub.get().setLinkPreview(glideRequests, linkPreview, false); linkPreviewStub.get().setLinkPreview(requestManager, linkPreview, false);
setThumbnailCorners(messageRecord, previousRecord, nextRecord, isGroupThread); setThumbnailCorners(messageRecord, previousRecord, nextRecord, isGroupThread);
setLinkPreviewCorners(messageRecord, previousRecord, nextRecord, isGroupThread, true); setLinkPreviewCorners(messageRecord, previousRecord, nextRecord, isGroupThread, true);
@ -1190,7 +1190,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
ViewUtil.updateLayoutParamsIfNonNull(groupSenderHolder, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); ViewUtil.updateLayoutParamsIfNonNull(groupSenderHolder, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ViewUtil.setTopMargin(linkPreviewStub.get(), 0); ViewUtil.setTopMargin(linkPreviewStub.get(), 0);
} else { } else {
linkPreviewStub.get().setLinkPreview(glideRequests, linkPreview, true, !isContentCondensed(), displayMode.getScheduleMessageMode()); linkPreviewStub.get().setLinkPreview(requestManager, linkPreview, true, !isContentCondensed(), displayMode.getScheduleMessageMode());
linkPreviewStub.get().setDownloadClickedListener(downloadClickListener); linkPreviewStub.get().setDownloadClickedListener(downloadClickListener);
setLinkPreviewCorners(messageRecord, previousRecord, nextRecord, isGroupThread, false); setLinkPreviewCorners(messageRecord, previousRecord, nextRecord, isGroupThread, false);
ViewUtil.updateLayoutParams(bodyText, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); ViewUtil.updateLayoutParams(bodyText, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@ -1277,11 +1277,11 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
if (hasSticker(messageRecord)) { if (hasSticker(messageRecord)) {
//noinspection ConstantConditions //noinspection ConstantConditions
stickerStub.get().setSlide(glideRequests, ((MmsMessageRecord) messageRecord).getSlideDeck().getStickerSlide()); stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getStickerSlide());
stickerStub.get().setThumbnailClickListener(new StickerClickListener()); stickerStub.get().setThumbnailClickListener(new StickerClickListener());
} else { } else {
//noinspection ConstantConditions //noinspection ConstantConditions
stickerStub.get().setSlide(glideRequests, ((MmsMessageRecord) messageRecord).getSlideDeck().getThumbnailSlide()); stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getThumbnailSlide());
stickerStub.get().setThumbnailClickListener((v, slide) -> performClick()); stickerStub.get().setThumbnailClickListener((v, slide) -> performClick());
} }
@ -1319,7 +1319,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener); mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener);
mediaThumbnailStub.require().setOnClickListener(passthroughClickListener); mediaThumbnailStub.require().setOnClickListener(passthroughClickListener);
mediaThumbnailStub.require().showShade(messageRecord.isDisplayBodyEmpty(getContext()) && !hasExtraText(messageRecord)); mediaThumbnailStub.require().showShade(messageRecord.isDisplayBodyEmpty(getContext()) && !hasExtraText(messageRecord));
mediaThumbnailStub.require().setImageResource(glideRequests, mediaThumbnailStub.require().setImageResource(requestManager,
thumbnailSlides, thumbnailSlides,
showControls, showControls,
false); false);
@ -1366,7 +1366,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
paymentViewStub.setVisibility(View.GONE); paymentViewStub.setVisibility(View.GONE);
MmsMessageRecord mmsMessageRecord = (MmsMessageRecord) messageRecord; MmsMessageRecord mmsMessageRecord = (MmsMessageRecord) messageRecord;
giftViewStub.get().setGiftBadge(glideRequests, Objects.requireNonNull(mmsMessageRecord.getGiftBadge()), messageRecord.isOutgoing(), giftMessageViewCallback, messageRecord.getFromRecipient(), messageRecord.getToRecipient()); giftViewStub.get().setGiftBadge(requestManager, Objects.requireNonNull(mmsMessageRecord.getGiftBadge()), messageRecord.isOutgoing(), giftMessageViewCallback, messageRecord.getFromRecipient(), messageRecord.getToRecipient());
giftViewStub.get().setVisibility(VISIBLE); giftViewStub.get().setVisibility(VISIBLE);
footer.setVisibility(VISIBLE); footer.setVisibility(VISIBLE);
@ -1537,8 +1537,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
} }
}); });
contactPhoto.setAvatar(glideRequests, recipient, false); contactPhoto.setAvatar(requestManager, recipient, false);
badgeImageView.setBadgeFromRecipient(recipient, glideRequests); badgeImageView.setBadgeFromRecipient(recipient, requestManager);
badgeImageView.setClickable(false); badgeImageView.setClickable(false);
} }
@ -1601,7 +1601,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
} }
//noinspection ConstantConditions //noinspection ConstantConditions
quoteView.setQuote(glideRequests, quoteView.setQuote(requestManager,
quote.getId(), quote.getId(),
Recipient.live(quote.getAuthor()).get(), Recipient.live(quote.getAuthor()).get(),
quote.getDisplayText(), quote.getDisplayText(),

View file

@ -8,24 +8,24 @@ import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.database.model.StickerRecord;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter<ConversationStickerSuggestionAdapter.StickerSuggestionViewHolder> { public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter<ConversationStickerSuggestionAdapter.StickerSuggestionViewHolder> {
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final EventListener eventListener; private final EventListener eventListener;
private final List<StickerRecord> stickers; private final List<StickerRecord> stickers;
public ConversationStickerSuggestionAdapter(@NonNull GlideRequests glideRequests, @NonNull EventListener eventListener) { public ConversationStickerSuggestionAdapter(@NonNull RequestManager requestManager, @NonNull EventListener eventListener) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.eventListener = eventListener; this.eventListener = eventListener;
this.stickers = new ArrayList<>(); this.stickers = new ArrayList<>();
} }
@ -37,7 +37,7 @@ public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter<C
@Override @Override
public void onBindViewHolder(@NonNull StickerSuggestionViewHolder viewHolder, int i) { public void onBindViewHolder(@NonNull StickerSuggestionViewHolder viewHolder, int i) {
viewHolder.bind(glideRequests, eventListener, stickers.get(i)); viewHolder.bind(requestManager, eventListener, stickers.get(i));
} }
@Override @Override
@ -65,8 +65,8 @@ public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter<C
this.image = itemView.findViewById(R.id.sticker_suggestion_item_image); this.image = itemView.findViewById(R.id.sticker_suggestion_item_image);
} }
void bind(@NonNull GlideRequests glideRequests, @NonNull EventListener eventListener, @NonNull StickerRecord sticker) { void bind(@NonNull RequestManager requestManager, @NonNull EventListener eventListener, @NonNull StickerRecord sticker) {
glideRequests.load(new DecryptableUri(sticker.getUri())) requestManager.load(new DecryptableUri(sticker.getUri()))
.transition(DrawableTransitionOptions.withCrossFade()) .transition(DrawableTransitionOptions.withCrossFade())
.fitCenter() .fitCenter()
.into(image); .into(image);

View file

@ -17,12 +17,12 @@ import androidx.core.content.ContextCompat;
import com.annimon.stream.Collectors; import com.annimon.stream.Collectors;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.avatar.view.AvatarView; import org.thoughtcrime.securesms.avatar.view.AvatarView;
import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.badges.BadgeImageView;
import org.thoughtcrime.securesms.database.model.StoryViewState; import org.thoughtcrime.securesms.database.model.StoryViewState;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.ContextUtil;
import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.DrawableUtil;
@ -106,7 +106,7 @@ public class ConversationTitleView extends ConstraintLayout {
updateSubtitleVisibility(); updateSubtitleVisibility();
} }
public void setTitle(@NonNull GlideRequests glideRequests, @Nullable Recipient recipient) { public void setTitle(@NonNull RequestManager requestManager, @Nullable Recipient recipient) {
isSelf = recipient != null && recipient.isSelf(); isSelf = recipient != null && recipient.isSelf();
this.subtitleContainer.setVisibility(View.VISIBLE); this.subtitleContainer.setVisibility(View.VISIBLE);
@ -144,7 +144,7 @@ public class ConversationTitleView extends ConstraintLayout {
title.setCompoundDrawablesRelativeWithIntrinsicBounds(startDrawable, null, endDrawable, null); title.setCompoundDrawablesRelativeWithIntrinsicBounds(startDrawable, null, endDrawable, null);
if (recipient != null) { if (recipient != null) {
this.avatar.displayChatAvatar(glideRequests, recipient, false); this.avatar.displayChatAvatar(requestManager, recipient, false);
} }
if (recipient == null || recipient.isSelf()) { if (recipient == null || recipient.isSelf()) {

View file

@ -20,6 +20,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.Transformations; import androidx.lifecycle.Transformations;
import com.bumptech.glide.RequestManager;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -37,7 +38,6 @@ import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.UpdateDescription; import org.thoughtcrime.securesms.database.model.UpdateDescription;
import org.thoughtcrime.securesms.groups.LiveGroup; import org.thoughtcrime.securesms.groups.LiveGroup;
import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
@ -116,7 +116,7 @@ public final class ConversationUpdateItem extends FrameLayout
@NonNull ConversationMessage conversationMessage, @NonNull ConversationMessage conversationMessage,
@NonNull Optional<MessageRecord> previousMessageRecord, @NonNull Optional<MessageRecord> previousMessageRecord,
@NonNull Optional<MessageRecord> nextMessageRecord, @NonNull Optional<MessageRecord> nextMessageRecord,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<MultiselectPart> batchSelected, @NonNull Set<MultiselectPart> batchSelected,
@NonNull Recipient conversationRecipient, @NonNull Recipient conversationRecipient,

View file

@ -12,6 +12,7 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.signal.core.util.StreamUtil import org.signal.core.util.StreamUtil
import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.LifecycleDisposable
@ -38,7 +39,6 @@ import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler
import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.mms.TextSlide import org.thoughtcrime.securesms.mms.TextSlide
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
@ -91,7 +91,7 @@ class ScheduledMessagesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment
val colorizer = Colorizer() val colorizer = Colorizer()
messageAdapter = ConversationAdapter(requireContext(), viewLifecycleOwner, GlideApp.with(this), Locale.getDefault(), ConversationAdapterListener(), conversationRecipient.hasWallpaper(), colorizer).apply { messageAdapter = ConversationAdapter(requireContext(), viewLifecycleOwner, Glide.with(this), Locale.getDefault(), ConversationAdapterListener(), conversationRecipient.hasWallpaper(), colorizer).apply {
setCondensedMode(ConversationItemDisplayMode.Condensed(scheduleMessageMode = true)) setCondensedMode(ConversationItemDisplayMode.Condensed(scheduleMessageMode = true))
} }

View file

@ -4,6 +4,7 @@ import android.content.Context
import android.net.Uri import android.net.Uri
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
import com.bumptech.glide.Glide
import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import org.signal.core.util.Base64 import org.signal.core.util.Base64
@ -33,7 +34,6 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.keyboard.KeyboardUtil import org.thoughtcrime.securesms.keyboard.KeyboardUtil
import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.Media
import org.thoughtcrime.securesms.mms.GifSlide import org.thoughtcrime.securesms.mms.GifSlide
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.ImageSlide import org.thoughtcrime.securesms.mms.ImageSlide
import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.mms.QuoteId import org.thoughtcrime.securesms.mms.QuoteId
@ -97,7 +97,7 @@ class DraftRepository(
} }
if (shareMedia != null && shareContentType != null && borderless) { if (shareMedia != null && shareContentType != null && borderless) {
val details = KeyboardUtil.getImageDetails(GlideApp.with(context), shareMedia) val details = KeyboardUtil.getImageDetails(Glide.with(context), shareMedia)
if (details == null || !details.hasTransparency) { if (details == null || !details.hasTransparency) {
return ShareOrDraftData.SetMedia(shareMedia, shareMediaType!!, null) to null return ShareOrDraftData.SetMedia(shareMedia, shareMediaType!!, null) to null

View file

@ -10,6 +10,7 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.LifecycleDisposable
@ -35,7 +36,6 @@ import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler
import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange
import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.BottomSheetUtil
@ -73,7 +73,7 @@ class MessageQuotesBottomSheet : FixedRoundedCornerBottomSheetDialogFragment() {
val colorizer = Colorizer() val colorizer = Colorizer()
messageAdapter = ConversationAdapter(requireContext(), viewLifecycleOwner, GlideApp.with(this), Locale.getDefault(), ConversationAdapterListener(), conversationRecipient.hasWallpaper(), colorizer).apply { messageAdapter = ConversationAdapter(requireContext(), viewLifecycleOwner, Glide.with(this), Locale.getDefault(), ConversationAdapterListener(), conversationRecipient.hasWallpaper(), colorizer).apply {
setCondensedMode(ConversationItemDisplayMode.Condensed(scheduleMessageMode = false)) setCondensedMode(ConversationItemDisplayMode.Condensed(scheduleMessageMode = false))
} }

View file

@ -10,6 +10,7 @@ import androidx.core.view.doOnNextLayout
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.kotlin.subscribeBy
@ -36,7 +37,6 @@ import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler
import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.BottomSheetUtil
@ -85,7 +85,7 @@ class EditMessageHistoryDialog : FixedRoundedCornerBottomSheetDialogFragment() {
val messageAdapter = ConversationAdapter( val messageAdapter = ConversationAdapter(
requireContext(), requireContext(),
viewLifecycleOwner, viewLifecycleOwner,
GlideApp.with(this), Glide.with(this),
Locale.getDefault(), Locale.getDefault(),
ConversationAdapterListener(), ConversationAdapterListener(),
conversationRecipient.hasWallpaper(), conversationRecipient.hasWallpaper(),

View file

@ -13,6 +13,7 @@ import androidx.core.view.children
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.RequestManager
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
import org.signal.core.util.toOptional import org.signal.core.util.toOptional
import org.thoughtcrime.securesms.BindableConversationItem import org.thoughtcrime.securesms.BindableConversationItem
@ -50,7 +51,6 @@ import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer
import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.messagerequests.MessageRequestState import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.CachedInflater import org.thoughtcrime.securesms.util.CachedInflater
@ -63,7 +63,7 @@ import java.util.Optional
class ConversationAdapterV2( class ConversationAdapterV2(
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
override val glideRequests: GlideRequests, override val requestManager: RequestManager,
override val clickListener: ItemClickListener, override val clickListener: ItemClickListener,
private var hasWallpaper: Boolean, private var hasWallpaper: Boolean,
private val colorizer: Colorizer, private val colorizer: Colorizer,
@ -336,7 +336,7 @@ class ConversationAdapterV2(
model.conversationMessage, model.conversationMessage,
previousMessage, previousMessage,
nextMessage, nextMessage,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
_selected, _selected,
model.conversationMessage.threadRecipient, model.conversationMessage.threadRecipient,
@ -364,7 +364,7 @@ class ConversationAdapterV2(
model.conversationMessage, model.conversationMessage,
previousMessage, previousMessage,
nextMessage, nextMessage,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
_selected, _selected,
model.conversationMessage.threadRecipient, model.conversationMessage.threadRecipient,
@ -392,7 +392,7 @@ class ConversationAdapterV2(
model.conversationMessage, model.conversationMessage,
previousMessage, previousMessage,
nextMessage, nextMessage,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
_selected, _selected,
model.conversationMessage.threadRecipient, model.conversationMessage.threadRecipient,
@ -420,7 +420,7 @@ class ConversationAdapterV2(
model.conversationMessage, model.conversationMessage,
previousMessage, previousMessage,
nextMessage, nextMessage,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
_selected, _selected,
model.conversationMessage.threadRecipient, model.conversationMessage.threadRecipient,
@ -448,7 +448,7 @@ class ConversationAdapterV2(
model.conversationMessage, model.conversationMessage,
previousMessage, previousMessage,
nextMessage, nextMessage,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
_selected, _selected,
model.conversationMessage.threadRecipient, model.conversationMessage.threadRecipient,
@ -569,7 +569,7 @@ class ConversationAdapterV2(
val (recipient, groupInfo, sharedGroups, messageRequestState) = model.recipientInfo val (recipient, groupInfo, sharedGroups, messageRequestState) = model.recipientInfo
val isSelf = recipient.id == Recipient.self().id val isSelf = recipient.id == Recipient.self().id
conversationBanner.setAvatar(glideRequests, recipient) conversationBanner.setAvatar(requestManager, recipient)
conversationBanner.showBackgroundBubble(recipient.hasWallpaper()) conversationBanner.showBackgroundBubble(recipient.hasWallpaper())
val title: String = conversationBanner.setTitle(recipient) val title: String = conversationBanner.setTitle(recipient)
conversationBanner.setAbout(recipient) conversationBanner.setAbout(recipient)

View file

@ -66,6 +66,7 @@ import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.ConversationLayoutManager import androidx.recyclerview.widget.ConversationLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.BaseTransientBottomBar.Duration import com.google.android.material.snackbar.BaseTransientBottomBar.Duration
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
@ -246,7 +247,6 @@ import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.AttachmentManager import org.thoughtcrime.securesms.mms.AttachmentManager
import org.thoughtcrime.securesms.mms.AudioSlide import org.thoughtcrime.securesms.mms.AudioSlide
import org.thoughtcrime.securesms.mms.GifSlide import org.thoughtcrime.securesms.mms.GifSlide
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.ImageSlide import org.thoughtcrime.securesms.mms.ImageSlide
import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.mms.MediaConstraints
import org.thoughtcrime.securesms.mms.QuoteModel import org.thoughtcrime.securesms.mms.QuoteModel
@ -1203,7 +1203,7 @@ class ConversationFragment :
) )
conversationActivityResultContracts.launchMediaEditor(listOf(media), recipientId, composeText.textTrimmed) conversationActivityResultContracts.launchMediaEditor(listOf(media), recipientId, composeText.textTrimmed)
} else { } else {
attachmentManager.setMedia(GlideApp.with(this), uri, mediaType, MediaConstraints.getPushMediaConstraints(), width, height) attachmentManager.setMedia(Glide.with(this), uri, mediaType, MediaConstraints.getPushMediaConstraints(), width, height)
} }
} }
@ -1299,7 +1299,7 @@ class ConversationFragment :
val titleView = binding.conversationTitleView.root val titleView = binding.conversationTitleView.root
titleView.setTitle(GlideApp.with(this), recipient) titleView.setTitle(Glide.with(this), recipient)
if (recipient.expiresInSeconds > 0) { if (recipient.expiresInSeconds > 0) {
titleView.showExpiring(recipient) titleView.showExpiring(recipient)
} else { } else {
@ -1443,7 +1443,7 @@ class ConversationFragment :
is ShareOrDraftData.SetLocation -> attachmentManager.setLocation(data.location, MediaConstraints.getPushMediaConstraints()) is ShareOrDraftData.SetLocation -> attachmentManager.setLocation(data.location, MediaConstraints.getPushMediaConstraints())
is ShareOrDraftData.SetEditMessage -> { is ShareOrDraftData.SetEditMessage -> {
composeText.setDraftText(data.draftText) composeText.setDraftText(data.draftText)
inputPanel.enterEditMessageMode(GlideApp.with(this), data.messageEdit, true) inputPanel.enterEditMessageMode(Glide.with(this), data.messageEdit, true)
} }
is ShareOrDraftData.SetMedia -> { is ShareOrDraftData.SetMedia -> {
@ -1531,7 +1531,7 @@ class ConversationFragment :
adapter = ConversationAdapterV2( adapter = ConversationAdapterV2(
lifecycleOwner = viewLifecycleOwner, lifecycleOwner = viewLifecycleOwner,
glideRequests = GlideApp.with(this), requestManager = Glide.with(this),
clickListener = ConversationItemClickListener(), clickListener = ConversationItemClickListener(),
hasWallpaper = args.wallpaper != null, hasWallpaper = args.wallpaper != null,
colorizer = colorizer, colorizer = colorizer,
@ -1539,7 +1539,7 @@ class ConversationFragment :
chatColorsDataProvider = viewModel::chatColorsSnapshot chatColorsDataProvider = viewModel::chatColorsSnapshot
) )
typingIndicatorAdapter = ConversationTypingIndicatorAdapter(GlideApp.with(this)) typingIndicatorAdapter = ConversationTypingIndicatorAdapter(Glide.with(this))
scrollToPositionDelegate = ScrollToPositionDelegate( scrollToPositionDelegate = ScrollToPositionDelegate(
recyclerView = binding.conversationItemRecycler, recyclerView = binding.conversationItemRecycler,
@ -1640,7 +1640,7 @@ class ConversationFragment :
} else if (state.hasLinks() && !state.linkPreview.isPresent) { } else if (state.hasLinks() && !state.linkPreview.isPresent) {
inputPanel.setLinkPreviewNoPreview(state.error) inputPanel.setLinkPreviewNoPreview(state.error)
} else { } else {
inputPanel.setLinkPreview(GlideApp.with(this), state.linkPreview) inputPanel.setLinkPreview(Glide.with(this), state.linkPreview)
} }
updateToggleButtonState() updateToggleButtonState()
@ -1853,7 +1853,7 @@ class ConversationFragment :
composeTextEventsListener?.typingStatusEnabled = false composeTextEventsListener?.typingStatusEnabled = false
composeText.setText("") composeText.setText("")
composeTextEventsListener?.typingStatusEnabled = true composeTextEventsListener?.typingStatusEnabled = true
attachmentManager.clear(GlideApp.with(this@ConversationFragment), false) attachmentManager.clear(Glide.with(this@ConversationFragment), false)
inputPanel.clearQuote() inputPanel.clearQuote()
} }
scrollToPositionDelegate.markListCommittedVersion() scrollToPositionDelegate.markListCommittedVersion()
@ -2129,7 +2129,7 @@ class ConversationFragment :
val author = conversationMessage.messageRecord.fromRecipient val author = conversationMessage.messageRecord.fromRecipient
inputPanel.setQuote( inputPanel.setQuote(
GlideApp.with(this), Glide.with(this),
conversationMessage.messageRecord.dateSent, conversationMessage.messageRecord.dateSent,
author, author,
body, body,
@ -2147,7 +2147,7 @@ class ConversationFragment :
viewModel.resolveMessageToEdit(conversationMessage) viewModel.resolveMessageToEdit(conversationMessage)
.subscribeBy { updatedMessage -> .subscribeBy { updatedMessage ->
inputPanel.enterEditMessageMode(GlideApp.with(this), updatedMessage, false) inputPanel.enterEditMessageMode(Glide.with(this), updatedMessage, false)
} }
.addTo(disposables) .addTo(disposables)
} }
@ -3120,7 +3120,7 @@ class ConversationFragment :
requireActivity().registerReceiver(pinnedShortcutReceiver, IntentFilter(ACTION_PINNED_SHORTCUT)) requireActivity().registerReceiver(pinnedShortcutReceiver, IntentFilter(ACTION_PINNED_SHORTCUT))
} }
viewModel.getContactPhotoIcon(requireContext(), GlideApp.with(this@ConversationFragment)) viewModel.getContactPhotoIcon(requireContext(), Glide.with(this@ConversationFragment))
.subscribe { infoCompat -> .subscribe { infoCompat ->
val intent = Intent(ACTION_PINNED_SHORTCUT) val intent = Intent(ACTION_PINNED_SHORTCUT)
val callback = PendingIntent.getBroadcast(requireContext(), 902, intent, PendingIntentFlags.mutable()) val callback = PendingIntent.getBroadcast(requireContext(), 902, intent, PendingIntentFlags.mutable())

View file

@ -13,6 +13,8 @@ import android.os.Build
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestManager
import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
@ -75,8 +77,6 @@ import org.thoughtcrime.securesms.keyboard.KeyboardUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.messagerequests.MessageRequestState import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.mms.OutgoingMessage import org.thoughtcrime.securesms.mms.OutgoingMessage
import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.mms.QuoteModel import org.thoughtcrime.securesms.mms.QuoteModel
@ -123,7 +123,7 @@ class ConversationRepository(
*/ */
fun getKeyboardImageDetails(uri: Uri): Maybe<KeyboardUtil.ImageDetails> { fun getKeyboardImageDetails(uri: Uri): Maybe<KeyboardUtil.ImageDetails> {
return MaybeCompat.fromCallable { return MaybeCompat.fromCallable {
KeyboardUtil.getImageDetails(GlideApp.with(applicationContext), uri) KeyboardUtil.getImageDetails(Glide.with(applicationContext), uri)
}.subscribeOn(Schedulers.io()) }.subscribeOn(Schedulers.io())
} }
@ -474,12 +474,12 @@ class ConversationRepository(
.joinTo(buffer = SpannableStringBuilder(), separator = "\n") .joinTo(buffer = SpannableStringBuilder(), separator = "\n")
} }
fun getRecipientContactPhotoBitmap(context: Context, glideRequests: GlideRequests, recipient: Recipient): Single<ShortcutInfoCompat> { fun getRecipientContactPhotoBitmap(context: Context, requestManager: RequestManager, recipient: Recipient): Single<ShortcutInfoCompat> {
val fallback = recipient.fallbackContactPhoto.asDrawable(context, recipient.avatarColor, false) val fallback = recipient.fallbackContactPhoto.asDrawable(context, recipient.avatarColor, false)
return Single return Single
.create { emitter -> .create { emitter ->
glideRequests requestManager
.asBitmap() .asBitmap()
.load(recipient.contactPhoto) .load(recipient.contactPhoto)
.error(fallback) .error(fallback)

View file

@ -8,14 +8,14 @@ package org.thoughtcrime.securesms.conversation.v2
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.RequestManager
import org.signal.core.util.toInt import org.signal.core.util.toInt
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.ConversationTypingView import org.thoughtcrime.securesms.components.ConversationTypingView
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
class ConversationTypingIndicatorAdapter( class ConversationTypingIndicatorAdapter(
private val glideRequests: GlideRequests private val requestManager: RequestManager
) : RecyclerView.Adapter<ConversationTypingIndicatorAdapter.ViewHolder>() { ) : RecyclerView.Adapter<ConversationTypingIndicatorAdapter.ViewHolder>() {
private var state: State = State() private var state: State = State()
@ -42,16 +42,16 @@ class ConversationTypingIndicatorAdapter(
override fun getItemCount(): Int = state.typists.isNotEmpty().toInt() override fun getItemCount(): Int = state.typists.isNotEmpty().toInt()
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(glideRequests, state) holder.bind(requestManager, state)
} }
class ViewHolder(private val conversationTypingView: ConversationTypingView) : RecyclerView.ViewHolder(conversationTypingView) { class ViewHolder(private val conversationTypingView: ConversationTypingView) : RecyclerView.ViewHolder(conversationTypingView) {
fun bind( fun bind(
glideRequests: GlideRequests, requestManager: RequestManager,
state: State state: State
) { ) {
conversationTypingView.setTypists( conversationTypingView.setTypists(
glideRequests, requestManager,
state.typists, state.typists,
state.isGroupThread, state.isGroupThread,
state.hasWallpaper state.hasWallpaper

View file

@ -11,6 +11,7 @@ import android.net.Uri
import android.os.Build import android.os.Build
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.bumptech.glide.RequestManager
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Completable
@ -58,7 +59,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.messagerequests.MessageRequestRepository import org.thoughtcrime.securesms.messagerequests.MessageRequestRepository
import org.thoughtcrime.securesms.messagerequests.MessageRequestState import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.mms.QuoteModel import org.thoughtcrime.securesms.mms.QuoteModel
import org.thoughtcrime.securesms.mms.Slide import org.thoughtcrime.securesms.mms.Slide
import org.thoughtcrime.securesms.mms.SlideDeck import org.thoughtcrime.securesms.mms.SlideDeck
@ -348,9 +348,9 @@ class ConversationViewModel(
.addTo(disposables) .addTo(disposables)
} }
fun getContactPhotoIcon(context: Context, glideRequests: GlideRequests): Single<ShortcutInfoCompat> { fun getContactPhotoIcon(context: Context, requestManager: RequestManager): Single<ShortcutInfoCompat> {
return recipient.firstOrError().flatMap { return recipient.firstOrError().flatMap {
repository.getRecipientContactPhotoBitmap(context, glideRequests, it) repository.getRecipientContactPhotoBitmap(context, requestManager, it)
} }
} }

View file

@ -5,19 +5,19 @@
package org.thoughtcrime.securesms.conversation.v2.items package org.thoughtcrime.securesms.conversation.v2.items
import com.bumptech.glide.RequestManager
import org.thoughtcrime.securesms.conversation.ConversationAdapter import org.thoughtcrime.securesms.conversation.ConversationAdapter
import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode
import org.thoughtcrime.securesms.conversation.colors.Colorizer import org.thoughtcrime.securesms.conversation.colors.Colorizer
import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart
import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.mms.GlideRequests
/** /**
* Describes the Adapter "context" that would normally have been * Describes the Adapter "context" that would normally have been
* visible to an inner class. * visible to an inner class.
*/ */
interface V2ConversationContext { interface V2ConversationContext {
val glideRequests: GlideRequests val requestManager: RequestManager
val displayMode: ConversationItemDisplayMode val displayMode: ConversationItemDisplayMode
val clickListener: ConversationAdapter.ItemClickListener val clickListener: ConversationAdapter.ItemClickListener
val selectedItems: Set<MultiselectPart> val selectedItems: Set<MultiselectPart>

View file

@ -77,7 +77,7 @@ class V2ConversationItemMediaViewHolder<Model : MappingModel<Model>>(
binding.quoteStub.visibility = View.VISIBLE binding.quoteStub.visibility = View.VISIBLE
quoteView.setQuote( quoteView.setQuote(
conversationContext.glideRequests, conversationContext.requestManager,
quote.id, quote.id,
Recipient.live(quote.author).get(), Recipient.live(quote.author).get(),
quote.displayText, quote.displayText,

View file

@ -531,8 +531,8 @@ open class V2ConversationItemTextOnlyViewHolder<Model : MappingModel<Model>>(
binding.senderBadge.visible = shape.isEndingShape binding.senderBadge.visible = shape.isEndingShape
binding.senderName.text = sender.getDisplayName(context) binding.senderName.text = sender.getDisplayName(context)
binding.senderPhoto.setAvatar(conversationContext.glideRequests, sender, false) binding.senderPhoto.setAvatar(conversationContext.requestManager, sender, false)
binding.senderBadge.setBadgeFromRecipient(sender, conversationContext.glideRequests) binding.senderBadge.setBadgeFromRecipient(sender, conversationContext.requestManager)
binding.senderPhoto.setOnClickListener { binding.senderPhoto.setOnClickListener {
conversationContext.clickListener.onGroupMemberClicked( conversationContext.clickListener.onGroupMemberClicked(
conversationMessage.messageRecord.fromRecipient.id, conversationMessage.messageRecord.fromRecipient.id,

View file

@ -115,10 +115,10 @@ class V2ConversationItemThumbnail @JvmOverloads constructor(
thumbnailSlide = thumbnail thumbnailSlide = thumbnail
this.fastPreflightId = fastPreflightId this.fastPreflightId = fastPreflightId
conversationContext.glideRequests.clear(this) conversationContext.requestManager.clear(this)
if (placeholderTarget != null) { if (placeholderTarget != null) {
conversationContext.glideRequests.clear(placeholderTarget) conversationContext.requestManager.clear(placeholderTarget)
} }
val thumbnailUri = thumbnail.uri val thumbnailUri = thumbnail.uri
@ -147,7 +147,7 @@ class V2ConversationItemThumbnail @JvmOverloads constructor(
if (thumbnailBlur != null) { if (thumbnailBlur != null) {
val placeholderTarget = PlaceholderTarget(this) val placeholderTarget = PlaceholderTarget(this)
conversationContext conversationContext
.glideRequests .requestManager
.load(thumbnailBlur) .load(thumbnailBlur)
.centerInside() .centerInside()
.dontAnimate() .dontAnimate()
@ -159,7 +159,7 @@ class V2ConversationItemThumbnail @JvmOverloads constructor(
if (thumbnailUri != null) { if (thumbnailUri != null) {
conversationContext conversationContext
.glideRequests .requestManager
.load(DecryptableStreamUriLoader.DecryptableUri(thumbnailUri)) .load(DecryptableStreamUriLoader.DecryptableUri(thumbnailUri))
.centerInside() .centerInside()
.dontAnimate() .dontAnimate()

View file

@ -13,13 +13,13 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.signal.paging.PagingController; import org.signal.paging.PagingController;
import org.thoughtcrime.securesms.BindableConversationListItem; import org.thoughtcrime.securesms.BindableConversationListItem;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.Conversation;
import org.thoughtcrime.securesms.conversationlist.model.ConversationReader;
import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.CachedInflater; import org.thoughtcrime.securesms.util.CachedInflater;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
@ -46,8 +46,8 @@ class ConversationListAdapter extends ListAdapter<Conversation, RecyclerView.Vie
} }
private final LifecycleOwner lifecycleOwner; private final LifecycleOwner lifecycleOwner;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final OnConversationClickListener onConversationClickListener; private final OnConversationClickListener onConversationClickListener;
private final ClearFilterViewHolder.OnClearFilterClickListener onClearFilterClicked; private final ClearFilterViewHolder.OnClearFilterClickListener onClearFilterClicked;
private ConversationSet selectedConversations = new ConversationSet(); private ConversationSet selectedConversations = new ConversationSet();
private final Set<Long> typingSet = new HashSet<>(); private final Set<Long> typingSet = new HashSet<>();
@ -55,14 +55,14 @@ class ConversationListAdapter extends ListAdapter<Conversation, RecyclerView.Vie
private PagingController pagingController; private PagingController pagingController;
protected ConversationListAdapter(@NonNull LifecycleOwner lifecycleOwner, protected ConversationListAdapter(@NonNull LifecycleOwner lifecycleOwner,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull OnConversationClickListener onConversationClickListener, @NonNull OnConversationClickListener onConversationClickListener,
@NonNull ClearFilterViewHolder.OnClearFilterClickListener onClearFilterClicked) @NonNull ClearFilterViewHolder.OnClearFilterClickListener onClearFilterClicked)
{ {
super(new ConversationDiffCallback()); super(new ConversationDiffCallback());
this.lifecycleOwner = lifecycleOwner; this.lifecycleOwner = lifecycleOwner;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.onConversationClickListener = onConversationClickListener; this.onConversationClickListener = onConversationClickListener;
this.onClearFilterClicked = onClearFilterClicked; this.onClearFilterClicked = onClearFilterClicked;
} }
@ -151,7 +151,7 @@ class ConversationListAdapter extends ListAdapter<Conversation, RecyclerView.Vie
casted.getConversationListItem().bind(lifecycleOwner, casted.getConversationListItem().bind(lifecycleOwner,
conversation.getThreadRecord(), conversation.getThreadRecord(),
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
typingSet, typingSet,
selectedConversations); selectedConversations);

View file

@ -68,6 +68,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.airbnb.lottie.SimpleColorFilter; import com.airbnb.lottie.SimpleColorFilter;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.Glide;
import com.google.android.material.animation.ArgbEvaluatorCompat; import com.google.android.material.animation.ArgbEvaluatorCompat;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout;
@ -148,7 +149,6 @@ import org.thoughtcrime.securesms.megaphone.Megaphone;
import org.thoughtcrime.securesms.megaphone.MegaphoneActionController; import org.thoughtcrime.securesms.megaphone.MegaphoneActionController;
import org.thoughtcrime.securesms.megaphone.MegaphoneViewBuilder; import org.thoughtcrime.securesms.megaphone.MegaphoneViewBuilder;
import org.thoughtcrime.securesms.megaphone.Megaphones; import org.thoughtcrime.securesms.megaphone.Megaphones;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.notifications.MarkReadReceiver; import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile; import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile;
import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.permissions.Permissions;
@ -324,7 +324,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
storyContextMenuCallbacks, storyContextMenuCallbacks,
callButtonClickCallbacks, callButtonClickCallbacks,
getViewLifecycleOwner(), getViewLifecycleOwner(),
GlideApp.with(this) Glide.with(this)
); );
}, },
new ConversationListSearchAdapter.ChatFilterRepository() new ConversationListSearchAdapter.ChatFilterRepository()
@ -875,7 +875,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
private void initializeListAdapters() { private void initializeListAdapters() {
defaultAdapter = new ConversationListAdapter(getViewLifecycleOwner(), GlideApp.with(this), this, this); defaultAdapter = new ConversationListAdapter(getViewLifecycleOwner(), Glide.with(this), this, this);
setAdapter(defaultAdapter); setAdapter(defaultAdapter);

View file

@ -43,6 +43,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.Transformations; import androidx.lifecycle.Transformations;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.makeramen.roundedimageview.RoundedDrawable; import com.makeramen.roundedimageview.RoundedDrawable;
@ -72,7 +73,6 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.database.model.UpdateDescription; import org.thoughtcrime.securesms.database.model.UpdateDescription;
import org.thoughtcrime.securesms.glide.GlideLiveDataTarget; import org.thoughtcrime.securesms.glide.GlideLiveDataTarget;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -113,7 +113,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
private Set<Long> typingThreads; private Set<Long> typingThreads;
private LiveRecipient recipient; private LiveRecipient recipient;
private long threadId; private long threadId;
private GlideRequests glideRequests; private RequestManager requestManager;
private EmojiTextView subjectView; private EmojiTextView subjectView;
private TypingIndicatorView typingView; private TypingIndicatorView typingView;
private FromTextView fromView; private FromTextView fromView;
@ -206,7 +206,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
@Override @Override
public void bind(@NonNull LifecycleOwner lifecycleOwner, public void bind(@NonNull LifecycleOwner lifecycleOwner,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull RequestManager glideRequests,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<Long> typingThreads, @NonNull Set<Long> typingThreads,
@NonNull ConversationSet selectedConversations) @NonNull ConversationSet selectedConversations)
@ -216,14 +216,14 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
public void bindThread(@NonNull LifecycleOwner lifecycleOwner, public void bindThread(@NonNull LifecycleOwner lifecycleOwner,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<Long> typingThreads, @NonNull Set<Long> typingThreads,
@NonNull ConversationSet selectedConversations, @NonNull ConversationSet selectedConversations,
@Nullable String highlightSubstring) @Nullable String highlightSubstring)
{ {
this.threadId = thread.getThreadId(); this.threadId = thread.getThreadId();
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.unreadCount = thread.getUnreadCount(); this.unreadCount = thread.getUnreadCount();
this.lastSeen = thread.getLastSeen(); this.lastSeen = thread.getLastSeen();
this.thread = thread; this.thread = thread;
@ -245,7 +245,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
this.typingThreads = typingThreads; this.typingThreads = typingThreads;
updateTypingIndicator(typingThreads); updateTypingIndicator(typingThreads);
LiveData<SpannableString> displayBody = getThreadDisplayBody(getContext(), thread, glideRequests, thumbSize, thumbTarget); LiveData<SpannableString> displayBody = getThreadDisplayBody(getContext(), thread, requestManager, thumbSize, thumbTarget);
setSubjectViewText(displayBody.getValue()); setSubjectViewText(displayBody.getValue());
observeDisplayBody(lifecycleOwner, displayBody); observeDisplayBody(lifecycleOwner, displayBody);
@ -272,7 +272,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
setSelectedConversations(selectedConversations); setSelectedConversations(selectedConversations);
setBadgeFromRecipient(recipient.get()); setBadgeFromRecipient(recipient.get());
setUnreadIndicator(thread); setUnreadIndicator(thread);
this.contactPhotoImage.setAvatar(glideRequests, recipient.get(), !batchMode); this.contactPhotoImage.setAvatar(requestManager, recipient.get(), !batchMode);
} }
private void setBadgeFromRecipient(Recipient recipient) { private void setBadgeFromRecipient(Recipient recipient) {
@ -286,11 +286,11 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
public void bindMessage(@NonNull LifecycleOwner lifecycleOwner, public void bindMessage(@NonNull LifecycleOwner lifecycleOwner,
@NonNull MessageResult messageResult, @NonNull MessageResult messageResult,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@Nullable String highlightSubstring) @Nullable String highlightSubstring)
{ {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.locale = locale; this.locale = locale;
this.highlightSubstring = highlightSubstring; this.highlightSubstring = highlightSubstring;
@ -313,15 +313,15 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
setSelectedConversations(new ConversationSet()); setSelectedConversations(new ConversationSet());
setBadgeFromRecipient(recipient.get()); setBadgeFromRecipient(recipient.get());
contactPhotoImage.setAvatar(glideRequests, recipient.get(), !batchMode, false); contactPhotoImage.setAvatar(requestManager, recipient.get(), !batchMode, false);
} }
public void bindGroupWithMembers(@NonNull LifecycleOwner lifecycleOwner, public void bindGroupWithMembers(@NonNull LifecycleOwner lifecycleOwner,
@NonNull ContactSearchData.GroupWithMembers groupWithMembers, @NonNull ContactSearchData.GroupWithMembers groupWithMembers,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale) @NonNull Locale locale)
{ {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.locale = locale; this.locale = locale;
this.highlightSubstring = groupWithMembers.getQuery(); this.highlightSubstring = groupWithMembers.getQuery();
@ -344,7 +344,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
setSelectedConversations(new ConversationSet()); setSelectedConversations(new ConversationSet());
setBadgeFromRecipient(recipient.get()); setBadgeFromRecipient(recipient.get());
contactPhotoImage.setAvatar(glideRequests, recipient.get(), !batchMode); contactPhotoImage.setAvatar(requestManager, recipient.get(), !batchMode);
} }
private @NonNull Single<String> joinMembersToDisplayBody(@NonNull List<RecipientId> members, @NonNull String highlightSubstring) { private @NonNull Single<String> joinMembersToDisplayBody(@NonNull List<RecipientId> members, @NonNull String highlightSubstring) {
@ -363,7 +363,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
if (this.recipient != null) { if (this.recipient != null) {
observeRecipient(null, null); observeRecipient(null, null);
setSelectedConversations(new ConversationSet()); setSelectedConversations(new ConversationSet());
contactPhotoImage.setAvatar(glideRequests, null, !batchMode); contactPhotoImage.setAvatar(requestManager, null, !batchMode);
} }
observeDisplayBody(null, null); observeDisplayBody(null, null);
@ -379,7 +379,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
setSelected(selected); setSelected(selected);
if (recipient != null) { if (recipient != null) {
contactPhotoImage.setAvatar(glideRequests, recipient.get(), !batchMode); contactPhotoImage.setAvatar(requestManager, recipient.get(), !batchMode);
} }
if (batchMode && selected) { if (batchMode && selected) {
@ -452,8 +452,8 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
} }
private void observeDisplayBody(@Nullable LifecycleOwner lifecycleOwner, @Nullable LiveData<SpannableString> displayBody) { private void observeDisplayBody(@Nullable LifecycleOwner lifecycleOwner, @Nullable LiveData<SpannableString> displayBody) {
if (displayBody == null && glideRequests != null) { if (displayBody == null && requestManager != null) {
glideRequests.clear(thumbTarget); requestManager.clear(thumbTarget);
} }
if (this.displayBody != null) { if (this.displayBody != null) {
@ -552,13 +552,13 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
} else { } else {
fromView.setText(recipient, false); fromView.setText(recipient, false);
} }
contactPhotoImage.setAvatar(glideRequests, recipient, !batchMode, false); contactPhotoImage.setAvatar(requestManager, recipient, !batchMode, false);
setBadgeFromRecipient(recipient); setBadgeFromRecipient(recipient);
} }
private static @NonNull LiveData<SpannableString> getThreadDisplayBody(@NonNull Context context, private static @NonNull LiveData<SpannableString> getThreadDisplayBody(@NonNull Context context,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@Px int thumbSize, @Px int thumbSize,
@NonNull GlideLiveDataTarget thumbTarget) @NonNull GlideLiveDataTarget thumbTarget)
{ {
@ -659,7 +659,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
MessageStyler.style(thread.getDate(), thread.getBodyRanges(), sourceBody); MessageStyler.style(thread.getDate(), thread.getBodyRanges(), sourceBody);
CharSequence body = StringUtil.replace(sourceBody, '\n', " "); CharSequence body = StringUtil.replace(sourceBody, '\n', " ");
LiveData<SpannableString> finalBody = Transformations.map(createFinalBodyWithMediaIcon(context, body, thread, glideRequests, thumbSize, thumbTarget), updatedBody -> { LiveData<SpannableString> finalBody = Transformations.map(createFinalBodyWithMediaIcon(context, body, thread, requestManager, thumbSize, thumbTarget), updatedBody -> {
if (thread.getRecipient().isGroup()) { if (thread.getRecipient().isGroup()) {
RecipientId groupMessageSender = thread.getGroupMessageSender(); RecipientId groupMessageSender = thread.getGroupMessageSender();
if (!groupMessageSender.isUnknown()) { if (!groupMessageSender.isUnknown()) {
@ -678,7 +678,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
private static LiveData<CharSequence> createFinalBodyWithMediaIcon(@NonNull Context context, private static LiveData<CharSequence> createFinalBodyWithMediaIcon(@NonNull Context context,
@NonNull CharSequence body, @NonNull CharSequence body,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@Px int thumbSize, @Px int thumbSize,
@NonNull GlideLiveDataTarget thumbTarget) @NonNull GlideLiveDataTarget thumbTarget)
{ {
@ -700,7 +700,7 @@ public final class ConversationListItem extends ConstraintLayout implements Bind
return LiveDataUtil.just(body); return LiveDataUtil.just(body);
} }
glideRequests.asBitmap() requestManager.asBitmap()
.load(new DecryptableStreamUriLoader.DecryptableUri(thread.getSnippetUri())) .load(new DecryptableStreamUriLoader.DecryptableUri(thread.getSnippetUri()))
.override(thumbSize, thumbSize) .override(thumbSize, thumbSize)
.transform( .transform(

View file

@ -8,11 +8,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.BindableConversationListItem; import org.thoughtcrime.securesms.BindableConversationListItem;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet;
import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
@ -42,7 +43,7 @@ public class ConversationListItemAction extends FrameLayout implements BindableC
@Override @Override
public void bind(@NonNull LifecycleOwner lifecycleOwner, public void bind(@NonNull LifecycleOwner lifecycleOwner,
@NonNull ThreadRecord thread, @NonNull ThreadRecord thread,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull Locale locale, @NonNull Locale locale,
@NonNull Set<Long> typingThreads, @NonNull Set<Long> typingThreads,
@NonNull ConversationSet selectedConversations) @NonNull ConversationSet selectedConversations)

View file

@ -5,6 +5,7 @@ import android.view.View
import android.widget.TextView import android.widget.TextView
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import com.bumptech.glide.RequestManager
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.contacts.paged.ArbitraryRepository import org.thoughtcrime.securesms.contacts.paged.ArbitraryRepository
import org.thoughtcrime.securesms.contacts.paged.ContactSearchAdapter import org.thoughtcrime.securesms.contacts.paged.ContactSearchAdapter
@ -12,7 +13,6 @@ import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration
import org.thoughtcrime.securesms.contacts.paged.ContactSearchData import org.thoughtcrime.securesms.contacts.paged.ContactSearchData
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
import org.thoughtcrime.securesms.conversationlist.model.ConversationSet import org.thoughtcrime.securesms.conversationlist.model.ConversationSet
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
@ -32,7 +32,7 @@ class ConversationListSearchAdapter(
storyContextMenuCallbacks: StoryContextMenuCallbacks, storyContextMenuCallbacks: StoryContextMenuCallbacks,
callButtonClickCallbacks: CallButtonClickCallbacks, callButtonClickCallbacks: CallButtonClickCallbacks,
lifecycleOwner: LifecycleOwner, lifecycleOwner: LifecycleOwner,
glideRequests: GlideRequests requestManager: RequestManager
) : ContactSearchAdapter(context, fixedContacts, displayOptions, onClickedCallbacks, longClickCallbacks, storyContextMenuCallbacks, callButtonClickCallbacks), TimestampPayloadSupport { ) : ContactSearchAdapter(context, fixedContacts, displayOptions, onClickedCallbacks, longClickCallbacks, storyContextMenuCallbacks, callButtonClickCallbacks), TimestampPayloadSupport {
companion object { companion object {
@ -42,11 +42,11 @@ class ConversationListSearchAdapter(
init { init {
registerFactory( registerFactory(
ThreadModel::class.java, ThreadModel::class.java,
LayoutFactory({ ThreadViewHolder(onClickedCallbacks::onThreadClicked, lifecycleOwner, glideRequests, it) }, R.layout.conversation_list_item_view) LayoutFactory({ ThreadViewHolder(onClickedCallbacks::onThreadClicked, lifecycleOwner, requestManager, it) }, R.layout.conversation_list_item_view)
) )
registerFactory( registerFactory(
MessageModel::class.java, MessageModel::class.java,
LayoutFactory({ MessageViewHolder(onClickedCallbacks::onMessageClicked, lifecycleOwner, glideRequests, it) }, R.layout.conversation_list_item_view) LayoutFactory({ MessageViewHolder(onClickedCallbacks::onMessageClicked, lifecycleOwner, requestManager, it) }, R.layout.conversation_list_item_view)
) )
registerFactory( registerFactory(
ChatFilterMappingModel::class.java, ChatFilterMappingModel::class.java,
@ -62,7 +62,7 @@ class ConversationListSearchAdapter(
) )
registerFactory( registerFactory(
GroupWithMembersModel::class.java, GroupWithMembersModel::class.java,
LayoutFactory({ GroupWithMembersViewHolder(onClickedCallbacks::onGroupWithMembersClicked, lifecycleOwner, glideRequests, it) }, R.layout.conversation_list_item_view) LayoutFactory({ GroupWithMembersViewHolder(onClickedCallbacks::onGroupWithMembersClicked, lifecycleOwner, requestManager, it) }, R.layout.conversation_list_item_view)
) )
} }
@ -105,7 +105,7 @@ class ConversationListSearchAdapter(
private class ThreadViewHolder( private class ThreadViewHolder(
private val threadListener: OnClickedCallback<ContactSearchData.Thread>, private val threadListener: OnClickedCallback<ContactSearchData.Thread>,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val glideRequests: GlideRequests, private val requestManager: RequestManager,
itemView: View itemView: View
) : ConversationListItemViewHolder<ThreadModel>(itemView) { ) : ConversationListItemViewHolder<ThreadModel>(itemView) {
override fun fullBind(model: ThreadModel) { override fun fullBind(model: ThreadModel) {
@ -116,7 +116,7 @@ class ConversationListSearchAdapter(
(itemView as ConversationListItem).bindThread( (itemView as ConversationListItem).bindThread(
lifecycleOwner, lifecycleOwner,
model.thread.threadRecord, model.thread.threadRecord,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
emptySet(), emptySet(),
ConversationSet(), ConversationSet(),
@ -128,7 +128,7 @@ class ConversationListSearchAdapter(
private class MessageViewHolder( private class MessageViewHolder(
private val messageListener: OnClickedCallback<ContactSearchData.Message>, private val messageListener: OnClickedCallback<ContactSearchData.Message>,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val glideRequests: GlideRequests, private val requestManager: RequestManager,
itemView: View itemView: View
) : ConversationListItemViewHolder<MessageModel>(itemView) { ) : ConversationListItemViewHolder<MessageModel>(itemView) {
override fun fullBind(model: MessageModel) { override fun fullBind(model: MessageModel) {
@ -139,7 +139,7 @@ class ConversationListSearchAdapter(
(itemView as ConversationListItem).bindMessage( (itemView as ConversationListItem).bindMessage(
lifecycleOwner, lifecycleOwner,
model.message.messageResult, model.message.messageResult,
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
model.message.query model.message.query
) )
@ -149,7 +149,7 @@ class ConversationListSearchAdapter(
private class GroupWithMembersViewHolder( private class GroupWithMembersViewHolder(
private val groupWithMembersListener: OnClickedCallback<ContactSearchData.GroupWithMembers>, private val groupWithMembersListener: OnClickedCallback<ContactSearchData.GroupWithMembers>,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val glideRequests: GlideRequests, private val requestManager: RequestManager,
itemView: View itemView: View
) : ConversationListItemViewHolder<GroupWithMembersModel>(itemView) { ) : ConversationListItemViewHolder<GroupWithMembersModel>(itemView) {
override fun fullBind(model: GroupWithMembersModel) { override fun fullBind(model: GroupWithMembersModel) {
@ -160,7 +160,7 @@ class ConversationListSearchAdapter(
(itemView as ConversationListItem).bindGroupWithMembers( (itemView as ConversationListItem).bindGroupWithMembers(
lifecycleOwner, lifecycleOwner,
model.groupWithMembers, model.groupWithMembers,
glideRequests, requestManager,
Locale.getDefault() Locale.getDefault()
) )
} }

View file

@ -10,6 +10,7 @@ import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette;
import org.thoughtcrime.securesms.giph.model.ChunkedImageUrl; import org.thoughtcrime.securesms.giph.model.ChunkedImageUrl;
import org.thoughtcrime.securesms.giph.model.GiphyImage; import org.thoughtcrime.securesms.giph.model.GiphyImage;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.Projection;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
@ -99,7 +99,7 @@ final class GiphyMp4ViewHolder extends MappingViewHolder<GiphyImage> implements
} }
private void loadPlaceholderImage(@NonNull GiphyImage giphyImage) { private void loadPlaceholderImage(@NonNull GiphyImage giphyImage) {
GlideApp.with(itemView) Glide.with(itemView)
.load(new ChunkedImageUrl(giphyImage.getStillUrl())) .load(new ChunkedImageUrl(giphyImage.getStillUrl()))
.placeholder(placeholder) .placeholder(placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)

View file

@ -25,6 +25,7 @@ import androidx.navigation.Navigation;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import com.airbnb.lottie.SimpleColorFilter; import com.airbnb.lottie.SimpleColorFilter;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
@ -39,7 +40,6 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
@ -136,7 +136,7 @@ public class AddGroupDetailsFragment extends LoggingFragment {
if (avatarBytes == null) { if (avatarBytes == null) {
avatar.setImageDrawable(new InsetDrawable(avatarPlaceholder, ViewUtil.dpToPx(AVATAR_PLACEHOLDER_INSET_DP))); avatar.setImageDrawable(new InsetDrawable(avatarPlaceholder, ViewUtil.dpToPx(AVATAR_PLACEHOLDER_INSET_DP)));
} else { } else {
GlideApp.with(this) Glide.with(this)
.load(avatarBytes) .load(avatarBytes)
.circleCrop() .circleCrop()
.skipMemoryCache(true) .skipMemoryCache(true)
@ -178,7 +178,7 @@ public class AddGroupDetailsFragment extends LoggingFragment {
viewModel.setAvatarMedia(result); viewModel.setAvatarMedia(result);
GlideApp.with(this) Glide.with(this)
.asBitmap() .asBitmap()
.load(decryptableUri) .load(decryptableUri)
.skipMemoryCache(true) .skipMemoryCache(true)

View file

@ -9,9 +9,9 @@ import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import com.bumptech.glide.RequestManager
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
import org.thoughtcrime.securesms.mms.GlideRequests
import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutionException
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException import java.util.concurrent.TimeoutException
@ -19,9 +19,9 @@ import java.util.concurrent.TimeoutException
object KeyboardUtil { object KeyboardUtil {
@WorkerThread @WorkerThread
fun getImageDetails(glideRequests: GlideRequests, uri: Uri): ImageDetails? { fun getImageDetails(requestManager: RequestManager, uri: Uri): ImageDetails? {
return try { return try {
val bitmap: Bitmap = glideRequests.asBitmap() val bitmap: Bitmap = requestManager.asBitmap()
.load(DecryptableStreamUriLoader.DecryptableUri(uri)) .load(DecryptableStreamUriLoader.DecryptableUri(uri))
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -4,19 +4,19 @@ import android.content.Context
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.bumptech.glide.RequestManager
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.database.model.StickerRecord import org.thoughtcrime.securesms.database.model.StickerRecord
import org.thoughtcrime.securesms.glide.cache.ApngOptions import org.thoughtcrime.securesms.glide.cache.ApngOptions
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
class KeyboardStickerListAdapter( class KeyboardStickerListAdapter(
private val glideRequests: GlideRequests, private val requestManager: RequestManager,
private val eventListener: EventListener?, private val eventListener: EventListener?,
private val allowApngAnimation: Boolean private val allowApngAnimation: Boolean
) : MappingAdapter() { ) : MappingAdapter() {
@ -44,7 +44,7 @@ class KeyboardStickerListAdapter(
private val image: ImageView = findViewById(R.id.sticker_keyboard_page_image) private val image: ImageView = findViewById(R.id.sticker_keyboard_page_image)
override fun bind(model: Sticker) { override fun bind(model: Sticker) {
glideRequests.load(model.uri) requestManager.load(model.uri)
.set(ApngOptions.ANIMATE, allowApngAnimation) .set(ApngOptions.ANIMATE, allowApngAnimation)
.transition(DrawableTransitionOptions.withCrossFade()) .transition(DrawableTransitionOptions.withCrossFade())
.into(image) .into(image)

View file

@ -4,16 +4,16 @@ import android.content.res.ColorStateList
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.core.widget.ImageViewCompat import androidx.core.widget.ImageViewCompat
import com.bumptech.glide.RequestManager
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.glide.cache.ApngOptions import org.thoughtcrime.securesms.glide.cache.ApngOptions
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
class KeyboardStickerPackListAdapter(private val glideRequests: GlideRequests, private val allowApngAnimation: Boolean, private val onTabSelected: (StickerPack) -> Unit) : MappingAdapter() { class KeyboardStickerPackListAdapter(private val requestManager: RequestManager, private val allowApngAnimation: Boolean, private val onTabSelected: (StickerPack) -> Unit) : MappingAdapter() {
init { init {
registerFactory(StickerPack::class.java, LayoutFactory(::StickerPackViewHolder, R.layout.keyboard_pager_category_icon)) registerFactory(StickerPack::class.java, LayoutFactory(::StickerPackViewHolder, R.layout.keyboard_pager_category_icon))
@ -47,7 +47,7 @@ class KeyboardStickerPackListAdapter(private val glideRequests: GlideRequests, p
if (model.loadImage) { if (model.loadImage) {
ImageViewCompat.setImageTintList(icon, null) ImageViewCompat.setImageTintList(icon, null)
icon.alpha = if (model.selected) 1f else 0.5f icon.alpha = if (model.selected) 1f else 0.5f
glideRequests.load(model.uri) requestManager.load(model.uri)
.set(ApngOptions.ANIMATE, allowApngAnimation) .set(ApngOptions.ANIMATE, allowApngAnimation)
.into(icon) .into(icon)
} else { } else {

View file

@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SmoothScroller import androidx.recyclerview.widget.RecyclerView.SmoothScroller
import com.bumptech.glide.Glide
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import org.signal.libsignal.protocol.util.Pair import org.signal.libsignal.protocol.util.Pair
import org.thoughtcrime.securesms.LoggingFragment import org.thoughtcrime.securesms.LoggingFragment
@ -16,7 +17,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.database.DatabaseObserver import org.thoughtcrime.securesms.database.DatabaseObserver
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.stickers.StickerEventListener import org.thoughtcrime.securesms.stickers.StickerEventListener
import org.thoughtcrime.securesms.stickers.StickerRolloverTouchListener import org.thoughtcrime.securesms.stickers.StickerRolloverTouchListener
import org.thoughtcrime.securesms.stickers.StickerRolloverTouchListener.RolloverStickerRetriever import org.thoughtcrime.securesms.stickers.StickerRolloverTouchListener.RolloverStickerRetriever
@ -57,8 +57,8 @@ open class StickerKeyboardPageFragment :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val glideRequests = GlideApp.with(this) val requestManager = Glide.with(this)
stickerListAdapter = KeyboardStickerListAdapter(glideRequests, this, DeviceProperties.shouldAllowApngStickerAnimation(requireContext())) stickerListAdapter = KeyboardStickerListAdapter(requestManager, this, DeviceProperties.shouldAllowApngStickerAnimation(requireContext()))
layoutManager = GridLayoutManager(requireContext(), 2).apply { layoutManager = GridLayoutManager(requireContext(), 2).apply {
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int { override fun getSpanSize(position: Int): Int {
@ -70,7 +70,7 @@ open class StickerKeyboardPageFragment :
} }
} }
} }
listTouchListener = StickerRolloverTouchListener(requireContext(), glideRequests, this, this) listTouchListener = StickerRolloverTouchListener(requireContext(), requestManager, this, this)
stickerList = view.findViewById(R.id.sticker_keyboard_list) stickerList = view.findViewById(R.id.sticker_keyboard_list)
stickerList.layoutManager = layoutManager stickerList.layoutManager = layoutManager
@ -81,7 +81,7 @@ open class StickerKeyboardPageFragment :
stickerPacksRecycler = view.findViewById(R.id.sticker_packs_recycler) stickerPacksRecycler = view.findViewById(R.id.sticker_packs_recycler)
stickerPacksAdapter = KeyboardStickerPackListAdapter(glideRequests, DeviceProperties.shouldAllowApngStickerAnimation(requireContext()), this::onTabSelected) stickerPacksAdapter = KeyboardStickerPackListAdapter(requestManager, DeviceProperties.shouldAllowApngStickerAnimation(requireContext()), this::onTabSelected)
stickerPacksRecycler.adapter = stickerPacksAdapter stickerPacksRecycler.adapter = stickerPacksAdapter
appBarLayout = view.findViewById(R.id.sticker_keyboard_search_appbar) appBarLayout = view.findViewById(R.id.sticker_keyboard_search_appbar)

View file

@ -10,9 +10,9 @@ import androidx.fragment.app.FragmentManager
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView import org.thoughtcrime.securesms.keyboard.emoji.KeyboardPageSearchView
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.stickers.StickerEventListener import org.thoughtcrime.securesms.stickers.StickerEventListener
import org.thoughtcrime.securesms.util.DeviceProperties import org.thoughtcrime.securesms.util.DeviceProperties
import org.thoughtcrime.securesms.util.InsetItemDecoration import org.thoughtcrime.securesms.util.InsetItemDecoration
@ -47,7 +47,7 @@ class StickerSearchDialogFragment : DialogFragment(), KeyboardStickerListAdapter
list = view.findViewById(R.id.sticker_search_list) list = view.findViewById(R.id.sticker_search_list)
noResults = view.findViewById(R.id.sticker_search_no_results) noResults = view.findViewById(R.id.sticker_search_no_results)
adapter = KeyboardStickerListAdapter(GlideApp.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(requireContext())) adapter = KeyboardStickerListAdapter(Glide.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(requireContext()))
layoutManager = GridLayoutManager(requireContext(), 2) layoutManager = GridLayoutManager(requireContext(), 2)
list.layoutManager = layoutManager list.layoutManager = layoutManager

View file

@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.util.Consumer; import androidx.core.util.Consumer;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.signal.core.util.Hex; import org.signal.core.util.Hex;
@ -35,7 +36,6 @@ import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl;
import org.thoughtcrime.securesms.jobs.AvatarGroupsV2DownloadJob; import org.thoughtcrime.securesms.jobs.AvatarGroupsV2DownloadJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil.OpenGraph; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil.OpenGraph;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.PushMediaConstraints; import org.thoughtcrime.securesms.mms.PushMediaConstraints;
import org.thoughtcrime.securesms.net.CallRequestController; import org.thoughtcrime.securesms.net.CallRequestController;
import org.thoughtcrime.securesms.net.CompositeRequestController; import org.thoughtcrime.securesms.net.CompositeRequestController;
@ -279,7 +279,7 @@ public class LinkPreviewRepository {
Optional<StickerInfo> cover = OptionalUtil.or(manifest.getCover(), firstSticker); Optional<StickerInfo> cover = OptionalUtil.or(manifest.getCover(), firstSticker);
if (cover.isPresent()) { if (cover.isPresent()) {
Bitmap bitmap = GlideApp.with(context).asBitmap() Bitmap bitmap = Glide.with(context).asBitmap()
.load(new StickerRemoteUri(packIdString, packKeyString, cover.get().getId())) .load(new StickerRemoteUri(packIdString, packKeyString, cover.get().getId()))
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -32,6 +32,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Collectors; import com.annimon.stream.Collectors;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.RequestManager;
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter; import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.protocol.util.Pair;
@ -45,7 +46,6 @@ import org.thoughtcrime.securesms.database.MediaTable.MediaRecord;
import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader.GroupedThreadMedia; import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader.GroupedThreadMedia;
import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache; import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache;
import org.thoughtcrime.securesms.mms.AudioSlide; import org.thoughtcrime.securesms.mms.AudioSlide;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.LiveRecipient;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -70,7 +70,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
private final Context context; private final Context context;
private final boolean showThread; private final boolean showThread;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final ItemClickListener itemClickListener; private final ItemClickListener itemClickListener;
private final Map<AttachmentId, MediaRecord> selected = new HashMap<>(); private final Map<AttachmentId, MediaRecord> selected = new HashMap<>();
private final AudioItemListener audioItemListener; private final AudioItemListener audioItemListener;
@ -102,7 +102,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
} }
MediaGalleryAllAdapter(@NonNull Context context, MediaGalleryAllAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
GroupedThreadMedia media, GroupedThreadMedia media,
ItemClickListener clickListener, ItemClickListener clickListener,
@NonNull AudioItemListener audioItemListener, @NonNull AudioItemListener audioItemListener,
@ -110,7 +110,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
boolean showThread) boolean showThread)
{ {
this.context = context; this.context = context;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.media = media; this.media = media;
this.itemClickListener = clickListener; this.itemClickListener = clickListener;
this.audioItemListener = audioItemListener; this.audioItemListener = audioItemListener;
@ -345,7 +345,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
imageFileSize.setVisibility(View.GONE); imageFileSize.setVisibility(View.GONE);
} }
thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setImageResource(requestManager, slide, false, false);
thumbnailView.setOnClickListener(view -> { thumbnailView.setOnClickListener(view -> {
MediaPreviewCache.INSTANCE.setDrawable(thumbnailView.getImageDrawable()); MediaPreviewCache.INSTANCE.setDrawable(thumbnailView.getImageDrawable());
itemClickListener.onMediaClicked(thumbnailView, mediaRecord); itemClickListener.onMediaClicked(thumbnailView, mediaRecord);
@ -366,13 +366,13 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
@Override @Override
void rebind() { void rebind() {
thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setImageResource(requestManager, slide, false, false);
super.rebind(); super.rebind();
} }
@Override @Override
void unbind() { void unbind() {
thumbnailView.clear(glideRequests); thumbnailView.clear(requestManager);
super.unbind(); super.unbind();
} }
@ -591,7 +591,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) {
super.bind(context, mediaRecord, slide); super.bind(context, mediaRecord, slide);
this.slide = slide; this.slide = slide;
thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setImageResource(requestManager, slide, false, false);
thumbnailView.setOnClickListener(view -> itemClickListener.onMediaClicked(thumbnailView, mediaRecord)); thumbnailView.setOnClickListener(view -> itemClickListener.onMediaClicked(thumbnailView, mediaRecord));
thumbnailView.setOnLongClickListener(view -> onLongClick()); thumbnailView.setOnLongClickListener(view -> onLongClick());
} }
@ -611,13 +611,13 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
@Override @Override
void rebind() { void rebind() {
thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setImageResource(requestManager, slide, false, false);
super.rebind(); super.rebind();
} }
@Override @Override
void unbind() { void unbind() {
thumbnailView.clear(glideRequests); thumbnailView.clear(requestManager);
super.unbind(); super.unbind();
} }
} }

View file

@ -26,6 +26,7 @@ import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader; import androidx.loader.content.Loader;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager; import com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager;
import org.signal.core.util.DimensionUnit; import org.signal.core.util.DimensionUnit;
@ -41,7 +42,6 @@ import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader;
import org.thoughtcrime.securesms.database.loaders.MediaLoader; import org.thoughtcrime.securesms.database.loaders.MediaLoader;
import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory;
import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Activity; import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Activity;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.BottomOffsetDecoration; import org.thoughtcrime.securesms.util.BottomOffsetDecoration;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
@ -125,7 +125,7 @@ public final class MediaOverviewPageFragment extends Fragment
this.gridManager = new StickyHeaderGridLayoutManager(spans); this.gridManager = new StickyHeaderGridLayoutManager(spans);
this.adapter = new MediaGalleryAllAdapter(context, this.adapter = new MediaGalleryAllAdapter(context,
GlideApp.with(this), Glide.with(this),
new GroupedThreadMediaLoader.EmptyGroupedThreadMedia(), new GroupedThreadMediaLoader.EmptyGroupedThreadMedia(),
this, this,
this, this,

View file

@ -9,10 +9,11 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.ZoomingImageView; import org.thoughtcrime.securesms.components.ZoomingImageView;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.signal.core.util.concurrent.LifecycleDisposable; import org.signal.core.util.concurrent.LifecycleDisposable;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
@ -33,7 +34,7 @@ public final class ImageMediaPreviewFragment extends MediaPreviewFragment {
Bundle savedInstanceState) Bundle savedInstanceState)
{ {
View view = inflater.inflate(R.layout.media_preview_image_fragment, container, false); View view = inflater.inflate(R.layout.media_preview_image_fragment, container, false);
GlideRequests glideRequests = GlideApp.with(requireActivity()); RequestManager requestManager = Glide.with(requireActivity());
Bundle arguments = requireArguments(); Bundle arguments = requireArguments();
Uri uri = arguments.getParcelable(DATA_URI); Uri uri = arguments.getParcelable(DATA_URI);
String contentType = arguments.getString(DATA_CONTENT_TYPE); String contentType = arguments.getString(DATA_CONTENT_TYPE);
@ -49,7 +50,7 @@ public final class ImageMediaPreviewFragment extends MediaPreviewFragment {
} }
//noinspection ConstantConditions //noinspection ConstantConditions
zoomingImageView.setImageUri(glideRequests, uri, contentType, () -> events.onMediaReady()); zoomingImageView.setImageUri(requestManager, uri, contentType, () -> events.onMediaReady());
zoomingImageView.setOnClickListener(v -> events.singleTapOnMedia()); zoomingImageView.setOnClickListener(v -> events.singleTapOnMedia());

View file

@ -32,6 +32,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.MarginPageTransformer import androidx.viewpager2.widget.MarginPageTransformer
import androidx.viewpager2.widget.ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT import androidx.viewpager2.widget.ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.bumptech.glide.Glide
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
@ -58,7 +59,6 @@ import org.thoughtcrime.securesms.mediapreview.mediarail.MediaRailAdapter
import org.thoughtcrime.securesms.mediapreview.mediarail.MediaRailAdapter.ImageLoadingListener import org.thoughtcrime.securesms.mediapreview.mediarail.MediaRailAdapter.ImageLoadingListener
import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.Media
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.mms.PartAuthority
import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
@ -187,7 +187,7 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
addItemDecoration(CenterDecoration(0)) addItemDecoration(CenterDecoration(0))
albumRailAdapter = MediaRailAdapter( albumRailAdapter = MediaRailAdapter(
GlideApp.with(this@MediaPreviewV2Fragment), Glide.with(this@MediaPreviewV2Fragment),
{ media -> jumpViewPagerToMedia(media) }, { media -> jumpViewPagerToMedia(media) },
object : ImageLoadingListener() { object : ImageLoadingListener() {
override fun onAllRequestsFinished() { override fun onAllRequestsFinished() {

View file

@ -4,13 +4,13 @@ import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.RequestManager
import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.ThumbnailView import org.thoughtcrime.securesms.components.ThumbnailView
import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.Media
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
@ -21,7 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger
* This is the RecyclerView.Adapter for the row of thumbnails present in the media viewer screen. * This is the RecyclerView.Adapter for the row of thumbnails present in the media viewer screen.
*/ */
class MediaRailAdapter( class MediaRailAdapter(
private val glideRequests: GlideRequests, private val requestManager: RequestManager,
private val onRailItemSelected: (Media) -> Unit, private val onRailItemSelected: (Media) -> Unit,
private val imageLoadingListener: ImageLoadingListener private val imageLoadingListener: ImageLoadingListener
) : MappingAdapter() { ) : MappingAdapter() {
@ -77,7 +77,7 @@ class MediaRailAdapter(
} }
override fun bind(model: MediaRailItem) { override fun bind(model: MediaRailItem) {
image.setImageResource(glideRequests, model.media.uri, 0, 0, false, imageLoadingListener) image.setImageResource(requestManager, model.media.uri, 0, 0, false, imageLoadingListener)
image.setOnClickListener { onRailItemSelected(model.media) } image.setOnClickListener { onRailItemSelected(model.media) }
captionIndicator.visibility = if (model.media.caption.isPresent) View.VISIBLE else View.GONE captionIndicator.visibility = if (model.media.caption.isPresent) View.VISIBLE else View.GONE

View file

@ -49,7 +49,6 @@ import org.thoughtcrime.securesms.mediasend.camerax.CameraXModelBlocklist;
import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations; import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations;
import org.thoughtcrime.securesms.mediasend.v2.MediaCountIndicatorButton; import org.thoughtcrime.securesms.mediasend.v2.MediaCountIndicatorButton;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
@ -396,7 +395,7 @@ public class Camera1Fragment extends LoggingFragment implements CameraFragment,
Transformation<Bitmap> transformation = frontFacing ? new MultiTransformation<>(new CenterCrop(), new FlipTransformation()) Transformation<Bitmap> transformation = frontFacing ? new MultiTransformation<>(new CenterCrop(), new FlipTransformation())
: new CenterCrop(); : new CenterCrop();
GlideApp.with(this) Glide.with(this)
.asBitmap() .asBitmap()
.load(jpegData) .load(jpegData)
.transform(transformation) .transform(transformation)

View file

@ -11,10 +11,11 @@ import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.FromTextView; import org.thoughtcrime.securesms.components.FromTextView;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter; import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter;
import org.thoughtcrime.securesms.util.adapter.StableIdGenerator; import org.thoughtcrime.securesms.util.adapter.StableIdGenerator;
@ -35,7 +36,7 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter<String, CameraCo
private static final String TAG_ALL = "all"; private static final String TAG_ALL = "all";
private static final String TAG_GROUPS = "groups"; private static final String TAG_GROUPS = "groups";
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final Set<Recipient> selected; private final Set<Recipient> selected;
private final CameraContactListener cameraContactListener; private final CameraContactListener cameraContactListener;
@ -50,8 +51,8 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter<String, CameraCo
add(groups); add(groups);
}}; }};
CameraContactAdapter(@NonNull GlideRequests glideRequests, @NonNull CameraContactListener listener) { CameraContactAdapter(@NonNull RequestManager requestManager, @NonNull CameraContactListener listener) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.selected = new HashSet<>(); this.selected = new HashSet<>();
this.cameraContactListener = listener; this.cameraContactListener = listener;
} }
@ -114,7 +115,7 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter<String, CameraCo
@Override @Override
protected void bindViewHolder(@NonNull RecyclerView.ViewHolder holder, @NonNull ContactSection section, int localPosition) { protected void bindViewHolder(@NonNull RecyclerView.ViewHolder holder, @NonNull ContactSection section, int localPosition) {
section.bind(holder, localPosition, selected, glideRequests, cameraContactListener); section.bind(holder, localPosition, selected, requestManager, cameraContactListener);
} }
@Override @Override
@ -179,14 +180,14 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter<String, CameraCo
void bind(@NonNull RecyclerView.ViewHolder viewHolder, void bind(@NonNull RecyclerView.ViewHolder viewHolder,
int localPosition, int localPosition,
@NonNull Set<Recipient> selected, @NonNull Set<Recipient> selected,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull CameraContactListener cameraContactListener) @NonNull CameraContactListener cameraContactListener)
{ {
if (localPosition == 0) { if (localPosition == 0) {
((HeaderViewHolder) viewHolder).bind(titleResId); ((HeaderViewHolder) viewHolder).bind(titleResId);
} else { } else {
Recipient recipient = recipients.get(localPosition - 1); Recipient recipient = recipients.get(localPosition - 1);
((ContactViewHolder) viewHolder).bind(recipient, selected.contains(recipient), glideRequests, cameraContactListener); ((ContactViewHolder) viewHolder).bind(recipient, selected.contains(recipient), requestManager, cameraContactListener);
} }
} }
} }
@ -221,10 +222,10 @@ class CameraContactAdapter extends SectionedRecyclerViewAdapter<String, CameraCo
void bind(@NonNull Recipient recipient, void bind(@NonNull Recipient recipient,
boolean selected, boolean selected,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull CameraContactListener listener) @NonNull CameraContactListener listener)
{ {
avatar.setAvatar(glideRequests, recipient, false); avatar.setAvatar(requestManager, recipient, false);
name.setText(recipient); name.setText(recipient);
itemView.setOnClickListener(v -> listener.onContactClicked(recipient)); itemView.setOnClickListener(v -> listener.onContactClicked(recipient));
checkbox.setChecked(selected); checkbox.setChecked(selected);

View file

@ -22,10 +22,11 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.InviteActivity; import org.thoughtcrime.securesms.InviteActivity;
import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
@ -90,7 +91,7 @@ public class CameraContactSelectionFragment extends LoggingFragment implements C
this.selectionFooterGroup = view.findViewById(R.id.camera_contacts_footer_group); this.selectionFooterGroup = view.findViewById(R.id.camera_contacts_footer_group);
this.cameraContactsEmpty = view.findViewById(R.id.camera_contacts_empty); this.cameraContactsEmpty = view.findViewById(R.id.camera_contacts_empty);
this.inviteButton = view.findViewById(R.id.camera_contacts_invite_button); this.inviteButton = view.findViewById(R.id.camera_contacts_invite_button);
this.contactAdapter = new CameraContactAdapter(GlideApp.with(this), this); this.contactAdapter = new CameraContactAdapter(Glide.with(this), this);
this.selectionAdapter = new CameraContactSelectionAdapter(); this.selectionAdapter = new CameraContactSelectionAdapter();
contactList.setLayoutManager(new LinearLayoutManager(requireContext())); contactList.setLayoutManager(new LinearLayoutManager(requireContext()));

View file

@ -11,9 +11,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
public class MediaSendGifFragment extends Fragment implements MediaSendPageFragment { public class MediaSendGifFragment extends Fragment implements MediaSendPageFragment {
@ -41,7 +42,7 @@ public class MediaSendGifFragment extends Fragment implements MediaSendPageFragm
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
uri = getArguments().getParcelable(KEY_URI); uri = getArguments().getParcelable(KEY_URI);
GlideApp.with(this).load(new DecryptableStreamUriLoader.DecryptableUri(uri)).fitCenter().into((ImageView) view); Glide.with(this).load(new DecryptableStreamUriLoader.DecryptableUri(uri)).fitCenter().into((ImageView) view);
} }
@Override @Override

View file

@ -6,6 +6,7 @@ import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.view.setPadding import androidx.core.view.setPadding
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestListener
@ -17,7 +18,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.Media
import org.thoughtcrime.securesms.mediasend.MediaFolder import org.thoughtcrime.securesms.mediasend.MediaFolder
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
@ -65,7 +65,7 @@ object MediaGallerySelectableItem {
class FolderViewHolder(itemView: View, private val onMediaFolderClicked: OnMediaFolderClicked) : BaseViewHolder<FolderModel>(itemView) { class FolderViewHolder(itemView: View, private val onMediaFolderClicked: OnMediaFolderClicked) : BaseViewHolder<FolderModel>(itemView) {
override fun bind(model: FolderModel) { override fun bind(model: FolderModel) {
GlideApp.with(imageView) Glide.with(imageView)
.load(DecryptableStreamUriLoader.DecryptableUri(model.mediaFolder.thumbnailUri)) .load(DecryptableStreamUriLoader.DecryptableUri(model.mediaFolder.thumbnailUri))
.into(imageView) .into(imageView)
@ -120,7 +120,7 @@ object MediaGallerySelectableItem {
updateImageView(if (model.isSelected) 1f else 0f) updateImageView(if (model.isSelected) 1f else 0f)
} }
GlideApp.with(imageView) Glide.with(imageView)
.load(DecryptableStreamUriLoader.DecryptableUri(model.media.uri)) .load(DecryptableStreamUriLoader.DecryptableUri(model.media.uri))
.addListener(ErrorLoggingRequestListener(FILE_VIEW_HOLDER_TAG)) .addListener(ErrorLoggingRequestListener(FILE_VIEW_HOLDER_TAG))
.into(imageView) .into(imageView)

View file

@ -60,9 +60,9 @@ public class BasicMegaphoneView extends FrameLayout {
if (megaphone.getImageRes() != 0) { if (megaphone.getImageRes() != 0) {
image.setVisibility(VISIBLE); image.setVisibility(VISIBLE);
image.setImageResource(megaphone.getImageRes()); image.setImageResource(megaphone.getImageRes());
} else if (megaphone.getImageRequest() != null) { } else if (megaphone.getImageRequestBuilder() != null) {
image.setVisibility(VISIBLE); image.setVisibility(VISIBLE);
megaphone.getImageRequest().into(image); megaphone.getImageRequestBuilder().into(image);
} else if (megaphone.getLottieRes() != 0) { } else if (megaphone.getLottieRes() != 0) {
image.setVisibility(VISIBLE); image.setVisibility(VISIBLE);
image.setAnimation(megaphone.getLottieRes()); image.setAnimation(megaphone.getLottieRes());

View file

@ -9,8 +9,9 @@ import androidx.annotation.Nullable;
import androidx.annotation.RawRes; import androidx.annotation.RawRes;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import com.bumptech.glide.RequestBuilder;
import org.thoughtcrime.securesms.megaphone.Megaphones.Event; import org.thoughtcrime.securesms.megaphone.Megaphones.Event;
import org.thoughtcrime.securesms.mms.GlideRequest;
/** /**
* For guidance on creating megaphones, see {@link Megaphones}. * For guidance on creating megaphones, see {@link Megaphones}.
@ -27,7 +28,7 @@ public class Megaphone {
private final MegaphoneText bodyText; private final MegaphoneText bodyText;
private final int imageRes; private final int imageRes;
private final int lottieRes; private final int lottieRes;
private final GlideRequest<Drawable> imageRequest; private final RequestBuilder<Drawable> requestBuilder;
private final MegaphoneText buttonText; private final MegaphoneText buttonText;
private final EventListener buttonListener; private final EventListener buttonListener;
private final EventListener snoozeListener; private final EventListener snoozeListener;
@ -43,7 +44,7 @@ public class Megaphone {
this.bodyText = builder.bodyText; this.bodyText = builder.bodyText;
this.imageRes = builder.imageRes; this.imageRes = builder.imageRes;
this.lottieRes = builder.lottieRes; this.lottieRes = builder.lottieRes;
this.imageRequest = builder.imageRequest; this.requestBuilder = builder.requestBuilder;
this.buttonText = builder.buttonText; this.buttonText = builder.buttonText;
this.buttonListener = builder.buttonListener; this.buttonListener = builder.buttonListener;
this.snoozeListener = builder.snoozeListener; this.snoozeListener = builder.snoozeListener;
@ -80,8 +81,8 @@ public class Megaphone {
return imageRes; return imageRes;
} }
public @Nullable GlideRequest<Drawable> getImageRequest() { public @Nullable RequestBuilder<Drawable> getImageRequestBuilder() {
return imageRequest; return requestBuilder;
} }
public @Nullable MegaphoneText getButtonText() { public @Nullable MegaphoneText getButtonText() {
@ -126,7 +127,7 @@ public class Megaphone {
private MegaphoneText bodyText; private MegaphoneText bodyText;
private int imageRes; private int imageRes;
private int lottieRes; private int lottieRes;
private GlideRequest<Drawable> imageRequest; private RequestBuilder<Drawable> requestBuilder;
private MegaphoneText buttonText; private MegaphoneText buttonText;
private EventListener buttonListener; private EventListener buttonListener;
private EventListener snoozeListener; private EventListener snoozeListener;
@ -181,8 +182,8 @@ public class Megaphone {
return this; return this;
} }
public @NonNull Builder setImageRequest(@Nullable GlideRequest<Drawable> imageRequest) { public @NonNull Builder setImageRequestBuilder(@Nullable RequestBuilder<Drawable> requestBuilder) {
this.imageRequest = imageRequest; this.requestBuilder = requestBuilder;
return this; return this;
} }

View file

@ -11,6 +11,7 @@ import androidx.annotation.WorkerThread;
import androidx.core.app.NotificationManagerCompat; import androidx.core.app.NotificationManagerCompat;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.Glide;
import org.signal.core.util.MapUtil; import org.signal.core.util.MapUtil;
import org.signal.core.util.SetUtil; import org.signal.core.util.SetUtil;
@ -28,7 +29,6 @@ import org.thoughtcrime.securesms.lock.SignalPinReminderDialog;
import org.thoughtcrime.securesms.lock.SignalPinReminders; import org.thoughtcrime.securesms.lock.SignalPinReminders;
import org.thoughtcrime.securesms.lock.v2.CreateSvrPinActivity; import org.thoughtcrime.securesms.lock.v2.CreateSvrPinActivity;
import org.thoughtcrime.securesms.lock.v2.SvrMigrationActivity; import org.thoughtcrime.securesms.lock.v2.SvrMigrationActivity;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.NotificationChannels;
import org.thoughtcrime.securesms.notifications.TurnOnNotificationsBottomSheet; import org.thoughtcrime.securesms.notifications.TurnOnNotificationsBottomSheet;
import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.AvatarHelper;
@ -273,7 +273,7 @@ public final class Megaphones {
.setBody(record.getBody()); .setBody(record.getBody());
if (record.getImageUri() != null) { if (record.getImageUri() != null) {
builder.setImageRequest(GlideApp.with(context).asDrawable().load(record.getImageUri())); builder.setImageRequestBuilder(Glide.with(context).asDrawable().load(record.getImageUri()));
} }
if (record.hasPrimaryAction()) { if (record.hasPrimaryAction()) {

View file

@ -55,9 +55,9 @@ public class PopupMegaphoneView extends FrameLayout {
this.megaphone = megaphone; this.megaphone = megaphone;
this.megaphoneListener = megaphoneListener; this.megaphoneListener = megaphoneListener;
if (megaphone.getImageRequest() != null) { if (megaphone.getImageRequestBuilder() != null) {
image.setVisibility(VISIBLE); image.setVisibility(VISIBLE);
megaphone.getImageRequest().into(image); megaphone.getImageRequestBuilder().into(image);
} else if (megaphone.getLottieRes() != 0) { } else if (megaphone.getLottieRes() != 0) {
image.setVisibility(VISIBLE); image.setVisibility(VISIBLE);
image.setAnimation(megaphone.getLottieRes()); image.setAnimation(megaphone.getLottieRes());

View file

@ -10,24 +10,25 @@ import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.ConversationMessage; import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.databinding.MessageDetailsViewEditHistoryBinding; import org.thoughtcrime.securesms.databinding.MessageDetailsViewEditHistoryBinding;
import org.thoughtcrime.securesms.mms.GlideRequests;
final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.MessageDetailsViewState<?>, RecyclerView.ViewHolder> { final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.MessageDetailsViewState<?>, RecyclerView.ViewHolder> {
private final LifecycleOwner lifecycleOwner; private final LifecycleOwner lifecycleOwner;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final Colorizer colorizer; private final Colorizer colorizer;
private final Callbacks callbacks; private final Callbacks callbacks;
MessageDetailsAdapter(@NonNull LifecycleOwner lifecycleOwner, @NonNull GlideRequests glideRequests, @NonNull Colorizer colorizer, @NonNull Callbacks callbacks) { MessageDetailsAdapter(@NonNull LifecycleOwner lifecycleOwner, @NonNull RequestManager requestManager, @NonNull Colorizer colorizer, @NonNull Callbacks callbacks) {
super(new MessageDetailsDiffer()); super(new MessageDetailsDiffer());
this.lifecycleOwner = lifecycleOwner; this.lifecycleOwner = lifecycleOwner;
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.colorizer = colorizer; this.colorizer = colorizer;
this.callbacks = callbacks; this.callbacks = callbacks;
} }
@ -36,7 +37,7 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
public @NonNull RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public @NonNull RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType) { switch (viewType) {
case MessageDetailsViewState.MESSAGE_HEADER: case MessageDetailsViewState.MESSAGE_HEADER:
return new MessageHeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_header, parent, false), glideRequests, colorizer); return new MessageHeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_header, parent, false), requestManager, colorizer);
case MessageDetailsViewState.RECIPIENT_HEADER: case MessageDetailsViewState.RECIPIENT_HEADER:
return new RecipientHeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_recipient_header, parent, false)); return new RecipientHeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_recipient_header, parent, false));
case MessageDetailsViewState.RECIPIENT: case MessageDetailsViewState.RECIPIENT:

View file

@ -11,20 +11,20 @@ import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.FullScreenDialogFragment; import org.thoughtcrime.securesms.components.FullScreenDialogFragment;
import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.conversation.colors.RecyclerViewColorizer; import org.thoughtcrime.securesms.conversation.colors.RecyclerViewColorizer;
import org.thoughtcrime.securesms.conversation.ui.edit.EditMessageHistoryDialog; import org.thoughtcrime.securesms.conversation.ui.edit.EditMessageHistoryDialog;
import org.thoughtcrime.securesms.database.model.MessageId;
import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler;
import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.MessageDetailsViewState; import org.thoughtcrime.securesms.messagedetails.MessageDetailsAdapter.MessageDetailsViewState;
import org.thoughtcrime.securesms.messagedetails.MessageDetailsViewModel.Factory; import org.thoughtcrime.securesms.messagedetails.MessageDetailsViewModel.Factory;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet; import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet;
import org.thoughtcrime.securesms.util.Material3OnScrollHelper; import org.thoughtcrime.securesms.util.Material3OnScrollHelper;
@ -39,7 +39,7 @@ public final class MessageDetailsFragment extends FullScreenDialogFragment imple
private static final String MESSAGE_ID_EXTRA = "message_id"; private static final String MESSAGE_ID_EXTRA = "message_id";
private static final String RECIPIENT_EXTRA = "recipient_id"; private static final String RECIPIENT_EXTRA = "recipient_id";
private GlideRequests glideRequests; private RequestManager requestManager;
private MessageDetailsViewModel viewModel; private MessageDetailsViewModel viewModel;
private MessageDetailsAdapter adapter; private MessageDetailsAdapter adapter;
private Colorizer colorizer; private Colorizer colorizer;
@ -69,7 +69,7 @@ public final class MessageDetailsFragment extends FullScreenDialogFragment imple
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
glideRequests = GlideApp.with(this); requestManager = Glide.with(this);
initializeList(view); initializeList(view);
initializeViewModel(); initializeViewModel();
@ -92,7 +92,7 @@ public final class MessageDetailsFragment extends FullScreenDialogFragment imple
View toolbarShadow = view.findViewById(R.id.toolbar_shadow); View toolbarShadow = view.findViewById(R.id.toolbar_shadow);
colorizer = new Colorizer(); colorizer = new Colorizer();
adapter = new MessageDetailsAdapter(getViewLifecycleOwner(), glideRequests, colorizer, this); adapter = new MessageDetailsAdapter(getViewLifecycleOwner(), requestManager, colorizer, this);
recyclerViewColorizer = new RecyclerViewColorizer(list); recyclerViewColorizer = new RecyclerViewColorizer(list);
list.setAdapter(adapter); list.setAdapter(adapter);

View file

@ -20,6 +20,8 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import com.bumptech.glide.RequestManager;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.ConversationItem; import org.thoughtcrime.securesms.conversation.ConversationItem;
@ -30,7 +32,6 @@ import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode;
import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.ExpirationUtil;
@ -56,15 +57,15 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G
private final ViewStub sentStub; private final ViewStub sentStub;
private final ViewStub receivedStub; private final ViewStub receivedStub;
private final Colorizer colorizer; private final Colorizer colorizer;
private final GlideRequests glideRequests; private final RequestManager requestManager;
private ConversationItem conversationItem; private ConversationItem conversationItem;
private CountDownTimer expiresUpdater; private CountDownTimer expiresUpdater;
MessageHeaderViewHolder(@NonNull View itemView, GlideRequests glideRequests, @NonNull Colorizer colorizer) { MessageHeaderViewHolder(@NonNull View itemView, RequestManager requestManager, @NonNull Colorizer colorizer) {
super(itemView); super(itemView);
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.colorizer = colorizer; this.colorizer = colorizer;
sentDate = itemView.findViewById(R.id.message_details_header_sent_time); sentDate = itemView.findViewById(R.id.message_details_header_sent_time);
receivedDate = itemView.findViewById(R.id.message_details_header_received_time); receivedDate = itemView.findViewById(R.id.message_details_header_received_time);
@ -101,7 +102,7 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G
conversationMessage, conversationMessage,
Optional.empty(), Optional.empty(),
Optional.empty(), Optional.empty(),
glideRequests, requestManager,
Locale.getDefault(), Locale.getDefault(),
new HashSet<>(), new HashSet<>(),
conversationMessage.getMessageRecord().getToRecipient(), conversationMessage.getMessageRecord().getToRecipient(),

View file

@ -14,12 +14,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.BaseActivity; import org.thoughtcrime.securesms.BaseActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
@ -70,7 +71,7 @@ public class CalleeMustAcceptMessageRequestActivity extends BaseActivity {
viewModel.getRecipient().observe(this, recipient -> { viewModel.getRecipient().observe(this, recipient -> {
description.setText(getString(R.string.CalleeMustAcceptMessageRequestDialogFragment__s_will_get_a_message_request_from_you, recipient.getDisplayName(this))); description.setText(getString(R.string.CalleeMustAcceptMessageRequestDialogFragment__s_will_get_a_message_request_from_you, recipient.getDisplayName(this)));
avatar.setAvatar(GlideApp.with(this), recipient, false); avatar.setAvatar(Glide.with(this), recipient, false);
}); });
} }

View file

@ -3,9 +3,10 @@ package org.thoughtcrime.securesms.migrations;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.Glide;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.FileUtils; import org.thoughtcrime.securesms.util.FileUtils;
import java.io.File; import java.io.File;
@ -39,7 +40,7 @@ public class CachedAttachmentsMigrationJob extends MigrationJob {
} }
FileUtils.deleteDirectoryContents(context.getExternalCacheDir()); FileUtils.deleteDirectoryContents(context.getExternalCacheDir());
GlideApp.get(context).clearDiskCache(); Glide.get(context).clearDiskCache();
} }
@Override @Override

View file

@ -6,6 +6,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.bumptech.glide.Glide;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.crypto.MasterSecret;
@ -21,7 +23,6 @@ import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
import org.thoughtcrime.securesms.jobs.PreKeysSyncJob; import org.thoughtcrime.securesms.jobs.PreKeysSyncJob;
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.util.FileUtils; import org.thoughtcrime.securesms.util.FileUtils;
@ -200,7 +201,7 @@ public class LegacyMigrationJob extends MigrationJob {
if (lastSeenVersion < IMAGE_CACHE_CLEANUP) { if (lastSeenVersion < IMAGE_CACHE_CLEANUP) {
FileUtils.deleteDirectoryContents(context.getExternalCacheDir()); FileUtils.deleteDirectoryContents(context.getExternalCacheDir());
GlideApp.get(context).clearDiskCache(); Glide.get(context).clearDiskCache();
} }
// This migration became unnecessary after switching away from WorkManager // This migration became unnecessary after switching away from WorkManager

View file

@ -39,6 +39,8 @@ import androidx.annotation.WorkerThread;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.signal.core.util.ThreadUtil; import org.signal.core.util.ThreadUtil;
@ -137,14 +139,14 @@ public class AttachmentManager {
} }
public void clear(@NonNull GlideRequests glideRequests, boolean animate) { public void clear(@NonNull RequestManager requestManager, boolean animate) {
if (attachmentViewStub.resolved()) { if (attachmentViewStub.resolved()) {
if (animate) { if (animate) {
ViewUtil.fadeOut(attachmentViewStub.get(), 200).addListener(new Listener<Boolean>() { ViewUtil.fadeOut(attachmentViewStub.get(), 200).addListener(new Listener<Boolean>() {
@Override @Override
public void onSuccess(Boolean result) { public void onSuccess(Boolean result) {
thumbnail.clear(glideRequests); thumbnail.clear(requestManager);
attachmentViewStub.get().setVisibility(View.GONE); attachmentViewStub.get().setVisibility(View.GONE);
attachmentListener.onAttachmentChanged(); attachmentListener.onAttachmentChanged();
} }
@ -154,7 +156,7 @@ public class AttachmentManager {
} }
}); });
} else { } else {
thumbnail.clear(glideRequests); thumbnail.clear(requestManager);
attachmentViewStub.get().setVisibility(View.GONE); attachmentViewStub.get().setVisibility(View.GONE);
attachmentListener.onAttachmentChanged(); attachmentListener.onAttachmentChanged();
} }
@ -255,7 +257,7 @@ public class AttachmentManager {
} }
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
public ListenableFuture<Boolean> setMedia(@NonNull final GlideRequests glideRequests, public ListenableFuture<Boolean> setMedia(@NonNull final RequestManager requestManager,
@NonNull final Uri uri, @NonNull final Uri uri,
@NonNull final SlideFactory.MediaType mediaType, @NonNull final SlideFactory.MediaType mediaType,
@NonNull final MediaConstraints constraints, @NonNull final MediaConstraints constraints,
@ -271,7 +273,7 @@ public class AttachmentManager {
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
thumbnail.clear(glideRequests); thumbnail.clear(requestManager);
thumbnail.showProgressSpinner(); thumbnail.showProgressSpinner();
attachmentViewStub.get().setVisibility(View.VISIBLE); attachmentViewStub.get().setVisibility(View.VISIBLE);
} }
@ -323,7 +325,7 @@ public class AttachmentManager {
result.set(true); result.set(true);
} else { } else {
Attachment attachment = slide.asAttachment(); Attachment attachment = slide.asAttachment();
result.deferTo(thumbnail.setImageResource(glideRequests, slide, false, true, attachment.width, attachment.height)); result.deferTo(thumbnail.setImageResource(requestManager, slide, false, true, attachment.width, attachment.height));
removableMediaView.display(thumbnail, mediaType == SlideFactory.MediaType.IMAGE); removableMediaView.display(thumbnail, mediaType == SlideFactory.MediaType.IMAGE);
} }
@ -580,7 +582,7 @@ public class AttachmentManager {
}); });
cleanup(); cleanup();
clear(GlideApp.with(context.getApplicationContext()), true); clear(Glide.with(context.getApplicationContext()), true);
} }
} }

View file

@ -7,6 +7,7 @@ import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import com.bumptech.glide.Glide
import com.bumptech.glide.load.MultiTransformation import com.bumptech.glide.load.MultiTransformation
import com.bumptech.glide.load.Transformation import com.bumptech.glide.load.Transformation
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
@ -18,7 +19,6 @@ import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri
import org.thoughtcrime.securesms.mms.GlideApp
import org.thoughtcrime.securesms.notifications.NotificationIds import org.thoughtcrime.securesms.notifications.NotificationIds
import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.BitmapUtil import org.thoughtcrime.securesms.util.BitmapUtil
@ -46,7 +46,7 @@ fun Recipient.getContactDrawable(context: Context): Drawable? {
} }
transforms += CircleCrop() transforms += CircleCrop()
GlideApp.with(context.applicationContext) Glide.with(context.applicationContext)
.load(contactPhoto) .load(contactPhoto)
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.transform(MultiTransformation(transforms)) .transform(MultiTransformation(transforms))
@ -67,7 +67,7 @@ fun Recipient.getContactDrawable(context: Context): Drawable? {
fun Uri.toBitmap(context: Context, dimension: Int): Bitmap { fun Uri.toBitmap(context: Context, dimension: Int): Bitmap {
return try { return try {
GlideApp.with(context.applicationContext) Glide.with(context.applicationContext)
.asBitmap() .asBitmap()
.load(DecryptableUri(this)) .load(DecryptableUri(this))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -20,6 +20,7 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation; import androidx.navigation.Navigation;
import com.airbnb.lottie.SimpleColorFilter; import com.airbnb.lottie.SimpleColorFilter;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.signal.core.util.EditTextUtil; import org.signal.core.util.EditTextUtil;
@ -36,7 +37,6 @@ import org.thoughtcrime.securesms.groups.ParcelableGroupId;
import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues; import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues;
import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanFindMeByPhoneNumberFragment; import org.thoughtcrime.securesms.profiles.edit.pnp.WhoCanFindMeByPhoneNumberFragment;
import org.thoughtcrime.securesms.profiles.manage.EditProfileNameFragment; import org.thoughtcrime.securesms.profiles.manage.EditProfileNameFragment;
import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.providers.BlobProvider;
@ -130,7 +130,7 @@ public class CreateProfileFragment extends LoggingFragment {
if (avatarBytes != null) { if (avatarBytes != null) {
viewModel.setAvatarMedia(media); viewModel.setAvatarMedia(media);
viewModel.setAvatar(avatarBytes); viewModel.setAvatar(avatarBytes);
GlideApp.with(CreateProfileFragment.this) Glide.with(CreateProfileFragment.this)
.load(avatarBytes) .load(avatarBytes)
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
@ -252,11 +252,11 @@ public class CreateProfileFragment extends LoggingFragment {
private void initializeProfileAvatar() { private void initializeProfileAvatar() {
viewModel.avatar().observe(getViewLifecycleOwner(), bytes -> { viewModel.avatar().observe(getViewLifecycleOwner(), bytes -> {
if (bytes == null) { if (bytes == null) {
GlideApp.with(this).clear(binding.avatar); Glide.with(this).clear(binding.avatar);
return; return;
} }
GlideApp.with(this) Glide.with(this)
.load(bytes) .load(bytes)
.circleCrop() .circleCrop()
.into(binding.avatar); .into(binding.avatar);

View file

@ -8,10 +8,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.badges.BadgeImageView;
import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.AvatarUtil; import org.thoughtcrime.securesms.util.AvatarUtil;
import java.util.Collections; import java.util.Collections;
@ -65,12 +66,12 @@ final class ReactionRecipientsAdapter extends RecyclerView.Adapter<ReactionRecip
if (reaction.getSender().isSelf()) { if (reaction.getSender().isSelf()) {
this.recipient.setText(R.string.ReactionsRecipientAdapter_you); this.recipient.setText(R.string.ReactionsRecipientAdapter_you);
this.avatar.setAvatar(GlideApp.with(avatar), null, false); this.avatar.setAvatar(Glide.with(avatar), null, false);
this.badge.setBadge(null); this.badge.setBadge(null);
AvatarUtil.loadIconIntoImageView(reaction.getSender(), avatar); AvatarUtil.loadIconIntoImageView(reaction.getSender(), avatar);
} else { } else {
this.recipient.setText(reaction.getSender().getDisplayName(itemView.getContext())); this.recipient.setText(reaction.getSender().getDisplayName(itemView.getContext()));
this.avatar.setAvatar(GlideApp.with(avatar), reaction.getSender(), false); this.avatar.setAvatar(Glide.with(avatar), reaction.getSender(), false);
this.badge.setBadgeFromRecipient(reaction.getSender()); this.badge.setBadgeFromRecipient(reaction.getSender());
} }
} }

View file

@ -16,11 +16,12 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.app.AppCompatDelegate;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.bumptech.glide.Glide;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.mms.VideoSlide;
import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.providers.BlobProvider;
@ -141,7 +142,7 @@ public class ViewOnceMessageActivity extends PassphraseRequiredActivity implemen
image.setVisibility(View.VISIBLE); image.setVisibility(View.VISIBLE);
duration.setVisibility(View.GONE); duration.setVisibility(View.GONE);
GlideApp.with(this) Glide.with(this)
.load(new DecryptableUri(uri)) .load(new DecryptableUri(uri))
.fitCenter() .fitCenter()
.into(image); .into(image);

View file

@ -19,6 +19,8 @@ import android.renderscript.ScriptIntrinsicBlur;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
@ -31,8 +33,6 @@ import org.signal.imageeditor.core.SelectableRenderer;
import org.signal.imageeditor.core.model.EditorElement; import org.signal.imageeditor.core.model.EditorElement;
import org.signal.imageeditor.core.model.EditorModel; import org.signal.imageeditor.core.model.EditorModel;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequest;
import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.BitmapUtil;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -94,13 +94,13 @@ public final class UriGlideRenderer implements SelectableRenderer {
if (getBitmap() == null) { if (getBitmap() == null) {
if (rendererContext.isBlockingLoad()) { if (rendererContext.isBlockingLoad()) {
try { try {
Bitmap bitmap = getBitmapGlideRequest(rendererContext.context, false).submit().get(); Bitmap bitmap = getGlideRequestBuilder(rendererContext.context, false).submit().get();
setBitmap(rendererContext, bitmap); setBitmap(rendererContext, bitmap);
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} else { } else {
getBitmapGlideRequest(rendererContext.context, true).into(new CustomTarget<Bitmap>() { getGlideRequestBuilder(rendererContext.context, true).into(new CustomTarget<Bitmap>() {
@Override @Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
setBitmap(rendererContext, resource); setBitmap(rendererContext, resource);
@ -181,7 +181,7 @@ public final class UriGlideRenderer implements SelectableRenderer {
} }
} }
private GlideRequest<Bitmap> getBitmapGlideRequest(@NonNull Context context, boolean preview) { private RequestBuilder<Bitmap> getGlideRequestBuilder(@NonNull Context context, boolean preview) {
int width = this.maxWidth; int width = this.maxWidth;
int height = this.maxHeight; int height = this.maxHeight;
@ -190,7 +190,7 @@ public final class UriGlideRenderer implements SelectableRenderer {
height = Math.min(height, PREVIEW_DIMENSION_LIMIT); height = Math.min(height, PREVIEW_DIMENSION_LIMIT);
} }
return GlideApp.with(context) return Glide.with(context)
.asBitmap() .asBitmap()
.override(width, height) .override(width, height)
.centerInside() .centerInside()

View file

@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
@ -18,7 +19,6 @@ import org.thoughtcrime.securesms.components.LinkPreviewView;
import org.thoughtcrime.securesms.components.SelectionAwareEmojiEditText; import org.thoughtcrime.securesms.components.SelectionAwareEmojiEditText;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository; import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel; import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.sharing.MultiShareArgs; import org.thoughtcrime.securesms.sharing.MultiShareArgs;
import org.thoughtcrime.securesms.sharing.MultiShareDialogs; import org.thoughtcrime.securesms.sharing.MultiShareDialogs;
@ -156,7 +156,7 @@ public class ShareInterstitialActivity extends PassphraseRequiredActivity {
preview.setLoading(); preview.setLoading();
viewModel.onLinkPreviewChanged(null); viewModel.onLinkPreviewChanged(null);
} else if (linkPreviewState.linkPreview.isPresent()) { } else if (linkPreviewState.linkPreview.isPresent()) {
preview.setLinkPreview(GlideApp.with(this), linkPreviewState.linkPreview.get(), true); preview.setLinkPreview(Glide.with(this), linkPreviewState.linkPreview.get(), true);
viewModel.onLinkPreviewChanged(linkPreviewState.linkPreview.get()); viewModel.onLinkPreviewChanged(linkPreviewState.linkPreview.get());
} else if (!linkPreviewState.hasLinks()) { } else if (!linkPreviewState.hasLinks()) {
preview.setVisibility(View.GONE); preview.setVisibility(View.GONE);

View file

@ -11,11 +11,12 @@ import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment;
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.sharing.MultiShareArgs; import org.thoughtcrime.securesms.sharing.MultiShareArgs;
import org.thoughtcrime.securesms.util.DeviceProperties; import org.thoughtcrime.securesms.util.DeviceProperties;
import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.DynamicTheme;
@ -110,7 +111,7 @@ public final class StickerManagementActivity extends PassphraseRequiredActivity
private void initView() { private void initView() {
this.list = findViewById(R.id.sticker_management_list); this.list = findViewById(R.id.sticker_management_list);
this.adapter = new StickerManagementAdapter(GlideApp.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(this)); this.adapter = new StickerManagementAdapter(Glide.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(this));
list.setLayoutManager(new LinearLayoutManager(this)); list.setLayoutManager(new LinearLayoutManager(this));
list.setAdapter(adapter); list.setAdapter(adapter);

View file

@ -17,6 +17,7 @@ import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.database.model.StickerPackRecord;
import org.thoughtcrime.securesms.glide.cache.ApngOptions; import org.thoughtcrime.securesms.glide.cache.ApngOptions;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.DrawableUtil;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter; import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter;
@ -40,7 +40,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
private static final String TAG_MESSAGE_STICKERS = "MessageStickers"; private static final String TAG_MESSAGE_STICKERS = "MessageStickers";
private static final String TAG_BLESSED_STICKERS = "BlessedStickers"; private static final String TAG_BLESSED_STICKERS = "BlessedStickers";
private final GlideRequests glideRequests; private final RequestManager requestManager;
private final EventListener eventListener; private final EventListener eventListener;
private final boolean allowApngAnimation; private final boolean allowApngAnimation;
@ -60,8 +60,8 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
add(messageStickers); add(messageStickers);
}}; }};
StickerManagementAdapter(@NonNull GlideRequests glideRequests, @NonNull EventListener eventListener, boolean allowApngAnimation) { StickerManagementAdapter(@NonNull RequestManager requestManager, @NonNull EventListener eventListener, boolean allowApngAnimation) {
this.glideRequests = glideRequests; this.requestManager = requestManager;
this.eventListener = eventListener; this.eventListener = eventListener;
this.allowApngAnimation = allowApngAnimation; this.allowApngAnimation = allowApngAnimation;
} }
@ -88,7 +88,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
@Override @Override
public void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull StickerSection section, int localPosition) { public void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull StickerSection section, int localPosition) {
section.bindViewHolder(viewHolder, localPosition, glideRequests, eventListener, allowApngAnimation); section.bindViewHolder(viewHolder, localPosition, requestManager, eventListener, allowApngAnimation);
} }
@Override @Override
@ -203,7 +203,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder,
int localPosition, int localPosition,
@NonNull GlideRequests glideRequests, @NonNull RequestManager requestManager,
@NonNull EventListener eventListener, @NonNull EventListener eventListener,
boolean allowApngAnimation) boolean allowApngAnimation)
{ {
@ -212,7 +212,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
} else if (records.isEmpty()) { } else if (records.isEmpty()) {
((EmptyViewHolder) viewHolder).bind(emptyResId); ((EmptyViewHolder) viewHolder).bind(emptyResId);
} else { } else {
((StickerViewHolder) viewHolder).bind(glideRequests, eventListener, records.get(localPosition - 1), localPosition == records.size(), allowApngAnimation); ((StickerViewHolder) viewHolder).bind(requestManager, eventListener, records.get(localPosition - 1), localPosition == records.size(), allowApngAnimation);
} }
} }
@ -258,7 +258,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
this.blessedBadge = buildBlessedBadge(itemView.getContext()); this.blessedBadge = buildBlessedBadge(itemView.getContext());
} }
void bind(@NonNull GlideRequests glideRequests, void bind(@NonNull RequestManager requestManager,
@NonNull EventListener eventListener, @NonNull EventListener eventListener,
@NonNull StickerPackRecord stickerPack, @NonNull StickerPackRecord stickerPack,
boolean lastInList, boolean lastInList,
@ -273,7 +273,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
author.setText(stickerPack.getAuthor().orElse(itemView.getResources().getString(R.string.StickerManagementAdapter_unknown))); author.setText(stickerPack.getAuthor().orElse(itemView.getResources().getString(R.string.StickerManagementAdapter_unknown)));
divider.setVisibility(lastInList ? View.GONE : View.VISIBLE); divider.setVisibility(lastInList ? View.GONE : View.VISIBLE);
glideRequests.load(new DecryptableUri(stickerPack.getCover().getUri())) requestManager.load(new DecryptableUri(stickerPack.getCover().getUri()))
.transition(DrawableTransitionOptions.withCrossFade()) .transition(DrawableTransitionOptions.withCrossFade())
.fitCenter() .fitCenter()
.set(ApngOptions.ANIMATE, allowApngAnimation) .set(ApngOptions.ANIMATE, allowApngAnimation)

View file

@ -16,6 +16,7 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
@ -26,7 +27,6 @@ import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectFor
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs;
import org.thoughtcrime.securesms.glide.cache.ApngOptions; import org.thoughtcrime.securesms.glide.cache.ApngOptions;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.sharing.MultiShareArgs; import org.thoughtcrime.securesms.sharing.MultiShareArgs;
import org.thoughtcrime.securesms.stickers.StickerManifest.Sticker; import org.thoughtcrime.securesms.stickers.StickerManifest.Sticker;
import org.thoughtcrime.securesms.util.DeviceProperties; import org.thoughtcrime.securesms.util.DeviceProperties;
@ -154,9 +154,9 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity
this.shareButton = findViewById(R.id.sticker_install_share_button); this.shareButton = findViewById(R.id.sticker_install_share_button);
this.shareButtonImage = findViewById(R.id.sticker_install_share_button_image); this.shareButtonImage = findViewById(R.id.sticker_install_share_button_image);
this.adapter = new StickerPackPreviewAdapter(GlideApp.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(this)); this.adapter = new StickerPackPreviewAdapter(Glide.with(this), this, DeviceProperties.shouldAllowApngStickerAnimation(this));
this.layoutManager = new GridLayoutManager(this, 2); this.layoutManager = new GridLayoutManager(this, 2);
this.touchListener = new StickerRolloverTouchListener(this, GlideApp.with(this), this, this); this.touchListener = new StickerRolloverTouchListener(this, Glide.with(this), this, this);
onScreenWidthChanged(getScreenWidth()); onScreenWidthChanged(getScreenWidth());
stickerList.setLayoutManager(layoutManager); stickerList.setLayoutManager(layoutManager);
@ -204,7 +204,7 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity
if (cover != null) { if (cover != null) {
Object model = cover.getUri().isPresent() ? new DecryptableStreamUriLoader.DecryptableUri(cover.getUri().get()) Object model = cover.getUri().isPresent() ? new DecryptableStreamUriLoader.DecryptableUri(cover.getUri().get())
: new StickerRemoteUri(cover.getPackId(), cover.getPackKey(), cover.getId()); : new StickerRemoteUri(cover.getPackId(), cover.getPackKey(), cover.getId());
GlideApp.with(this).load(model) Glide.with(this).load(model)
.transition(DrawableTransitionOptions.withCrossFade()) .transition(DrawableTransitionOptions.withCrossFade())
.fitCenter() .fitCenter()
.set(ApngOptions.ANIMATE, DeviceProperties.shouldAllowApngStickerAnimation(this)) .set(ApngOptions.ANIMATE, DeviceProperties.shouldAllowApngStickerAnimation(this))

Some files were not shown because too many files have changed in this diff Show more