From c6d91dce6eb31e83dbfefc8972167387bf7b08ce Mon Sep 17 00:00:00 2001 From: jeffrey-signal Date: Tue, 28 Apr 2026 15:05:22 -0400 Subject: [PATCH] Convert ContextUtil to Kotlin. --- .../securesms/components/FromTextView.java | 2 +- .../components/emoji/EmojiPageView.java | 2 +- .../components/emoji/EmojiToggle.java | 4 +-- .../components/emoji/MediaKeyboard.java | 4 +-- .../mention/MentionRendererDelegate.java | 2 +- .../ConversationSettingsFragment.kt | 8 +++--- .../preferences/RecipientPreference.kt | 4 +-- .../components/verify/SafetyNumberQrView.kt | 4 +-- .../contacts/paged/ContactSearchAdapter.kt | 4 +-- .../conversation/ConversationTitleView.java | 2 +- .../ui/error/SafetyNumberChangeAdapter.java | 2 +- .../conversation/v2/ConversationFragment.kt | 4 +-- .../ConversationListItem.java | 3 +-- .../logsubmit/LogSectionSystemInfo.kt | 4 +-- .../mediapreview/MediaPreviewV2Fragment.kt | 4 +-- .../securesms/recipients/Recipient.kt | 4 +-- .../RecipientBottomSheetDialogFragment.kt | 4 +-- .../revealable/ViewOnceMessageView.java | 6 +---- .../stories/StoryFirstTimeNavigationView.kt | 4 +-- .../stories/landing/StoriesLandingItem.kt | 4 +-- .../securesms/util/ContextUtil.java | 26 ------------------- .../org/signal/core/util/ContextExtensions.kt | 19 ++++++++++++++ 22 files changed, 53 insertions(+), 67 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/util/ContextUtil.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java index e8ae1042ce..e2a6ff3244 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java @@ -9,10 +9,10 @@ import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.SimpleEmojiTextView; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.util.SpanUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java index ac72463c4e..a13d4e8cae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java @@ -15,11 +15,11 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearSmoothScroller; import androidx.recyclerview.widget.RecyclerView; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.EmojiHeader; import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.EmojiNoResultsModel; import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.VariationSelectorListener; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java index 4ed9271eb7..5e84a0d7d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java @@ -1,17 +1,15 @@ package org.thoughtcrime.securesms.components.emoji; import android.content.Context; -import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageButton; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.keyboard.KeyboardPage; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; public class EmojiToggle extends AppCompatImageButton implements MediaKeyboard.MediaKeyboardListener { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java index c777a82193..6535e46183 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java @@ -14,7 +14,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import org.signal.core.util.ContextExtensionsKt; +import org.signal.core.util.ContextUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.InputAwareLayout.InputView; @@ -175,7 +175,7 @@ public class MediaKeyboard extends FrameLayout implements InputView { LayoutInflater.from(getContext()).inflate(R.layout.media_keyboard, this, true); if (fragmentManager == null) { - FragmentActivity activity = ContextExtensionsKt.requireFragmentActivity(getContext()); + FragmentActivity activity = ContextUtil.requireFragmentActivity(getContext()); fragmentManager = activity.getSupportFragmentManager(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionRendererDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionRendererDelegate.java index 4626a1000c..b69a4a69bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionRendererDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionRendererDelegate.java @@ -11,9 +11,9 @@ import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.core.graphics.drawable.DrawableCompat; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.signal.core.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt index 44e134401b..242f3338df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt @@ -38,6 +38,7 @@ import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.addTo import org.signal.core.util.getParcelableArrayListExtraCompat import org.signal.core.util.orNull +import org.signal.core.util.requireDrawable import org.signal.core.util.requireParcelableCompat import org.signal.donations.InAppPaymentType import org.thoughtcrime.securesms.AvatarPreviewActivity @@ -111,7 +112,6 @@ import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.viewer.AddToGroupStoryDelegate import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.CommunicationActions -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.ExpirationUtil import org.thoughtcrime.securesms.util.Material3OnScrollHelper @@ -147,19 +147,19 @@ class ConversationSettingsFragment : private val alertDisabledTint by lazy { ContextCompat.getColor(requireContext(), R.color.signal_alert_primary_50) } private val colorizer = ColorizerV2() private val blockIcon by lazy { - ContextUtil.requireDrawable(requireContext(), R.drawable.symbol_block_24).apply { + requireContext().requireDrawable(R.drawable.symbol_block_24).apply { colorFilter = PorterDuffColorFilter(alertTint, PorterDuff.Mode.SRC_IN) } } private val leaveIcon by lazy { - ContextUtil.requireDrawable(requireContext(), R.drawable.symbol_leave_24).apply { + requireContext().requireDrawable(R.drawable.symbol_leave_24).apply { colorFilter = PorterDuffColorFilter(alertTint, PorterDuff.Mode.SRC_IN) } } private val endGroupIcon by lazy { - ContextUtil.requireDrawable(requireContext(), R.drawable.symbol_x_circle_24).apply { + requireContext().requireDrawable(R.drawable.symbol_x_circle_24).apply { colorFilter = PorterDuffColorFilter(alertTint, PorterDuff.Mode.SRC_IN) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt index 07b296b787..53a1b2a0d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt @@ -6,6 +6,7 @@ import android.widget.TextView import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.Observer +import org.signal.core.util.requireDrawable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.badges.BadgeImageView import org.thoughtcrime.securesms.components.AvatarImageView @@ -13,7 +14,6 @@ import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.groups.memberlabel.MemberLabelPillView import org.thoughtcrime.securesms.groups.memberlabel.StyledMemberLabel import org.thoughtcrime.securesms.recipients.Recipient -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.SpanUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -105,7 +105,7 @@ object RecipientPreference { } else { if (recipient.isSystemContact) { SpannableStringBuilder(recipient.getDisplayName(context)).apply { - val drawable = ContextUtil.requireDrawable(context, R.drawable.symbol_person_circle_24).apply { + val drawable = context.requireDrawable(R.drawable.symbol_person_circle_24).apply { setTint(ContextCompat.getColor(context, CoreUiR.color.signal_colorOnSurface)) } SpanUtil.appendCenteredImageSpan(this, drawable, 16, 16) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/verify/SafetyNumberQrView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/verify/SafetyNumberQrView.kt index abb514be87..5ec9c2ff0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/verify/SafetyNumberQrView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/verify/SafetyNumberQrView.kt @@ -30,10 +30,10 @@ import androidx.core.widget.ImageViewCompat import androidx.interpolator.view.animation.FastOutSlowInInterpolator import com.google.android.material.button.MaterialButton import org.signal.core.util.dp +import org.signal.core.util.requireDrawable import org.signal.libsignal.protocol.fingerprint.Fingerprint import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.qr.QrCodeUtil -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.visible import java.nio.charset.Charset @@ -205,7 +205,7 @@ class SafetyNumberQrView : ConstraintLayout { private fun createVerifiedBitmap(width: Int, height: Int, @DrawableRes id: Int): Bitmap { val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) - val check = ContextUtil.requireDrawable(context, id).toBitmap() + val check = context.requireDrawable(id).toBitmap() val offset = ((width - check.width) / 2).toFloat() canvas.drawBitmap(check, offset, offset, null) return bitmap diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt index 992d1d8c83..a4c8efc265 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt @@ -14,6 +14,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.disposables.Disposable import org.signal.core.util.BreakIteratorCompat +import org.signal.core.util.requireDrawable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar import org.thoughtcrime.securesms.avatar.view.AvatarView @@ -29,7 +30,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.SpanUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -543,7 +543,7 @@ open class ContactSearchAdapter( val recipient = getRecipient(model) val suffix: CharSequence? = if (recipient.isSystemContact && !recipient.showVerified) { SpannableStringBuilder().apply { - val drawable = ContextUtil.requireDrawable(context, R.drawable.symbol_person_circle_24).apply { + val drawable = context.requireDrawable(R.drawable.symbol_person_circle_24).apply { setTint(ContextCompat.getColor(context, CoreUiR.color.signal_colorOnSurface)) } SpanUtil.appendCenteredImageSpan(this, drawable, 16, 16) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java index e3b458054f..25766b5e51 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java @@ -17,12 +17,12 @@ import androidx.core.content.ContextCompat; import com.bumptech.glide.RequestManager; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.avatar.view.AvatarView; import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.database.model.StoryViewState; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.ViewUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java index cd24fbde86..904f5a546a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java @@ -12,11 +12,11 @@ import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView; +import org.signal.core.util.ContextUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.FromTextView; import org.thoughtcrime.securesms.database.model.IdentityRecord; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.AlwaysChangedDiffUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index 8119b4ad8a..e7038544a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -129,6 +129,7 @@ import org.signal.core.util.concurrent.addTo import org.signal.core.util.dp import org.signal.core.util.logging.Log import org.signal.core.util.orNull +import org.signal.core.util.requireDrawable import org.signal.core.util.requireParcelableCompat import org.signal.core.util.setActionItemTint import org.signal.donations.InAppPaymentType @@ -349,7 +350,6 @@ import org.thoughtcrime.securesms.stories.StoryViewerArgs import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.BubbleUtil import org.thoughtcrime.securesms.util.CommunicationActions -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.ConversationUtil import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.Debouncer @@ -1820,7 +1820,7 @@ class ConversationFragment : private fun presentNavigationIconForBubble() { binding.toolbar.navigationIcon = DrawableUtil.tint( - ContextUtil.requireDrawable(requireContext(), R.drawable.ic_notification), + requireContext().requireDrawable(R.drawable.ic_notification), ContextCompat.getColor(requireContext(), R.color.signal_accent_primary) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 7d8122f218..93cf31dcf5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -47,6 +47,7 @@ import com.bumptech.glide.RequestManager; import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.makeramen.roundedimageview.RoundedDrawable; +import org.signal.core.util.ContextUtil; import org.signal.core.util.DimensionUnit; import org.signal.core.util.StringUtil; import org.signal.core.util.logging.Log; @@ -72,14 +73,12 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.UpdateDescription; import org.thoughtcrime.securesms.fonts.SignalSymbols.Glyph; -import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.glide.targets.GlideLiveDataTarget; import org.signal.glide.decryptableuri.DecryptableUri; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.search.MessageResult; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.MediaUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.kt b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.kt index 2f5e2ea4f9..e295bd6e6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.kt @@ -14,6 +14,7 @@ import org.signal.core.util.DiskUtil import org.signal.core.util.FontUtil.canRenderEmojiAtFontSize import org.signal.core.util.Util import org.signal.core.util.bytes +import org.signal.core.util.getAnimationScale import org.signal.core.util.roundedString import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.dependencies.AppDependencies @@ -24,7 +25,6 @@ import org.thoughtcrime.securesms.notifications.SlowNotificationHeuristics.isHav import org.thoughtcrime.securesms.recipients.Recipient.Companion.self import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil.telecomSupported import org.thoughtcrime.securesms.util.AppSignatureUtil -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.DeviceProperties import org.thoughtcrime.securesms.util.NetworkUtil import org.thoughtcrime.securesms.util.PowerManagerCompat @@ -52,7 +52,7 @@ class LogSectionSystemInfo : LogSection { Screen : ${getScreenResolution(context)}, ${ScreenDensity.get(context)}, ${getScreenRefreshRate(context)} WindowSizeClass : ${context.resources.getWindowSizeClass()} Font Scale : ${context.resources.configuration.fontScale} - Animation Scale : ${ContextUtil.getAnimationScale(context)} + Animation Scale : ${context.getAnimationScale()} Android : ${Build.VERSION.RELEASE}, API ${Build.VERSION.SDK_INT} (${Build.VERSION.INCREMENTAL}, ${Build.DISPLAY}) ABIs : ${Build.SUPPORTED_ABIS.joinToString(separator = ", ")} Memory : ${getMemoryUsage()} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt index c83b9ec812..bde0aa8f6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -47,6 +47,7 @@ import org.signal.core.ui.logging.LoggingFragment import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.addTo import org.signal.core.util.logging.Log +import org.signal.core.util.requireDrawable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.attachments.AttachmentSaver import org.thoughtcrime.securesms.attachments.DatabaseAttachment @@ -70,7 +71,6 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.sharing.v2.ShareActivity -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.Debouncer import org.thoughtcrime.securesms.util.FullscreenHelper @@ -489,7 +489,7 @@ class MediaPreviewV2Fragment : val builder = SpannableStringBuilder(text) val onSurfaceColor = ContextCompat.getColor(requireContext(), CoreUiR.color.signal_colorOnSurface) - val chevron = ContextUtil.requireDrawable(requireContext(), R.drawable.ic_chevron_end_24) + val chevron = requireContext().requireDrawable(R.drawable.ic_chevron_end_24) chevron.colorFilter = PorterDuffColorFilter(onSurfaceColor, PorterDuff.Mode.SRC_IN) SpanUtil.appendCenteredImageSpan(builder, chevron, 10, 10) diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt index 57b4ae68b9..f9b2f02e8d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt @@ -17,6 +17,7 @@ import org.signal.core.util.UuidUtil import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank +import org.signal.core.util.requireDrawable import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar @@ -50,7 +51,6 @@ import org.thoughtcrime.securesms.phonenumbers.NumberUtil import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient.Companion.external import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.RemoteConfig import org.thoughtcrime.securesms.util.SignalE164Util import org.thoughtcrime.securesms.util.SpanUtil @@ -679,7 +679,7 @@ class Recipient( append(name) if (showVerified) { - val verifiedBadge = ContextUtil.requireDrawable(context, R.drawable.ic_official_28) + val verifiedBadge = context.requireDrawable(R.drawable.ic_official_28) SpanUtil.appendSpacer(this, 8) SpanUtil.appendCenteredImageSpanWithoutSpace(this, verifiedBadge, 28, 28) } else if (isSystemContact) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.kt index ada144d2fd..1492d1d77c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.kt @@ -25,6 +25,7 @@ import kotlinx.coroutines.launch import org.signal.core.ui.BottomSheetUtil import org.signal.core.ui.FixedRoundedCornerBottomSheetDialogFragment import org.signal.core.util.logging.Log +import org.signal.core.util.requireDrawable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.avatar.view.AvatarView import org.thoughtcrime.securesms.badges.BadgeImageView @@ -42,7 +43,6 @@ import org.thoughtcrime.securesms.recipients.RecipientExporter import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientUtil import org.thoughtcrime.securesms.recipients.ui.about.AboutSheet -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.WindowUtil import org.thoughtcrime.securesms.util.visible @@ -258,7 +258,7 @@ class RecipientBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFr val buttonStripModel = ButtonStripPreference.Model( state = buttonStripState, - background = DSLSettingsIcon.from(ContextUtil.requireDrawable(requireContext(), R.drawable.selectable_recipient_bottom_sheet_icon_button)), + background = DSLSettingsIcon.from(requireContext().requireDrawable(R.drawable.selectable_recipient_bottom_sheet_icon_button)), enabled = !viewModel.isDeprecatedOrUnregistered, onMessageClick = { callback?.onMessageClicked() diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java index 6334bd889e..826d45082d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java @@ -18,24 +18,20 @@ import com.pnikosis.materialishprogress.ProgressWheel; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import org.signal.core.util.ContextUtil; import org.signal.core.util.ByteSize; -import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.mms.Slide; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MessageRecordUtil; -import org.signal.core.util.Util; public class ViewOnceMessageView extends LinearLayout { - private static final String TAG = Log.tag(ViewOnceMessageView.class); - private AppCompatImageView icon; private ProgressWheel progress; private TextView text; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryFirstTimeNavigationView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryFirstTimeNavigationView.kt index c886a410fa..571a0ea989 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryFirstTimeNavigationView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryFirstTimeNavigationView.kt @@ -18,8 +18,8 @@ import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target import org.signal.blurhash.BlurHash +import org.signal.core.util.getAnimationScale import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.visible class StoryFirstTimeNavigationView @JvmOverloads constructor( @@ -119,7 +119,7 @@ class StoryFirstTimeNavigationView @JvmOverloads constructor( } private fun startLottieAnimations() { - if (ContextUtil.getAnimationScale(context) == 0f) { + if (context.getAnimationScale() == 0f) { return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingItem.kt index ca271ab0fa..c7f27e82ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingItem.kt @@ -14,6 +14,7 @@ import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target import org.signal.core.util.logging.Log +import org.signal.core.util.requireDrawable import org.signal.glide.decryptableuri.DecryptableUri import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.avatar.view.AvatarView @@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.stories.StoryTextPostModel import org.thoughtcrime.securesms.stories.dialogs.StoryContextMenu -import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.SpanUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory @@ -297,7 +297,7 @@ object StoriesLandingItem { } private fun getReleaseNotesPresentation(model: Model): CharSequence { - val official = ContextUtil.requireDrawable(context, R.drawable.ic_official_20) + val official = context.requireDrawable(R.drawable.ic_official_20) val name = SpannableStringBuilder(model.data.storyRecipient.getDisplayName(context)) SpanUtil.appendCenteredImageSpan(name, official, 20, 20) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ContextUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ContextUtil.java deleted file mode 100644 index 47e2f3eb35..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ContextUtil.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.thoughtcrime.securesms.util; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.provider.Settings; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.appcompat.content.res.AppCompatResources; - -import java.util.Objects; - -public final class ContextUtil { - private ContextUtil() {} - - public static @NonNull Drawable requireDrawable(@NonNull Context context, @DrawableRes int drawable) { - return Objects.requireNonNull(AppCompatResources.getDrawable(context, drawable)); - } - - /** - * Implementation "borrowed" from com.airbnb.lottie.utils.DebugLogViewer#getAnimationScale(android.content.Context) - */ - public static float getAnimationScale(Context context) { - return Settings.Global.getFloat(context.getContentResolver(), Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f); - } -} diff --git a/core/util/src/main/java/org/signal/core/util/ContextExtensions.kt b/core/util/src/main/java/org/signal/core/util/ContextExtensions.kt index 6a62bf8703..3f35fbda3a 100644 --- a/core/util/src/main/java/org/signal/core/util/ContextExtensions.kt +++ b/core/util/src/main/java/org/signal/core/util/ContextExtensions.kt @@ -1,3 +1,5 @@ +@file:JvmName("ContextUtil") + /* * Copyright 2023 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only @@ -9,6 +11,10 @@ import android.app.DownloadManager import android.content.BroadcastReceiver import android.content.Context import android.content.ContextWrapper +import android.graphics.drawable.Drawable +import android.provider.Settings +import androidx.annotation.DrawableRes +import androidx.appcompat.content.res.AppCompatResources import androidx.fragment.app.FragmentActivity fun Context.getDownloadManager(): DownloadManager { @@ -41,3 +47,16 @@ fun Context.resolveFragmentActivity(): FragmentActivity? { else -> null } } + +fun Context.requireDrawable(@DrawableRes drawableResId: Int): Drawable { + return AppCompatResources.getDrawable(this, drawableResId)!! +} + +/** + * Gets the system animator duration scale from Settings.Global, defaulting to 1.0 when unavailable. + * + * Implementation "borrowed" from com.airbnb.lottie.utils.DebugLogViewer#getAnimationScale(android.content.Context). + */ +fun Context.getAnimationScale(): Float { + return Settings.Global.getFloat(contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f) +}