parent
aa33fd44b8
commit
ec96b4e3aa
132 changed files with 755 additions and 679 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -47,7 +47,7 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO
|
||||||
|
|
||||||
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;
|
||||||
|
@ -111,8 +111,8 @@ 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;
|
||||||
|
|
||||||
|
@ -172,14 +172,14 @@ 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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,8 +593,8 @@ 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) {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -34,11 +34,11 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
|
||||||
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<>();
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,13 +23,13 @@ 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<>();
|
||||||
|
@ -38,7 +39,7 @@ public class ContactShareEditAdapter extends RecyclerView.Adapter<ContactShareEd
|
||||||
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()));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,12 +23,12 @@ 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<>();
|
||||||
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
@ -140,7 +141,7 @@ 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(),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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,7 +46,7 @@ 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();
|
||||||
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()));
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,14 +57,14 @@ 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);
|
||||||
|
@ -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(),
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
Loading…
Add table
Reference in a new issue