From 089d8a50b20d15e97ddba49a97fbdef50b4be97a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 24 Mar 2026 09:52:17 -0400 Subject: [PATCH] Promote the new APNG renderer to a normal flag. --- .../settings/app/labs/LabsSettingsEvents.kt | 2 +- .../settings/app/labs/LabsSettingsFragment.kt | 9 --------- .../components/settings/app/labs/LabsSettingsState.kt | 2 +- .../settings/app/labs/LabsSettingsViewModel.kt | 7 ++----- .../securesms/glide/SignalGlideComponents.java | 4 ++-- .../org/thoughtcrime/securesms/keyvalue/LabsValues.kt | 4 +--- .../thoughtcrime/securesms/util/DeviceProperties.java | 4 ++-- .../org/thoughtcrime/securesms/util/RemoteConfig.kt | 11 +++++++++++ 8 files changed, 20 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt index a326d5e4ed..f5a75cbdbd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt @@ -12,6 +12,6 @@ sealed interface LabsSettingsEvents { data class ToggleGroupSuggestionsForMembers(val enabled: Boolean) : LabsSettingsEvents data class ToggleBetterSearch(val enabled: Boolean) : LabsSettingsEvents data class ToggleAutoLowerHand(val enabled: Boolean) : LabsSettingsEvents - data class ToggleNewApngRenderer(val enabled: Boolean) : LabsSettingsEvents + data class ToggleStarredMessages(val enabled: Boolean) : LabsSettingsEvents } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt index 46aad914ae..01fb0915fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt @@ -143,15 +143,6 @@ private fun LabsSettingsContent( ) } - item { - Rows.ToggleRow( - checked = state.newApngRenderer, - text = "New APNG Renderer", - label = "Use the new custom APNG renderer instead of the existing third-party library. Requires an app restart to take effect.", - onCheckChanged = { onEvent(LabsSettingsEvents.ToggleNewApngRenderer(it)) } - ) - } - item { Rows.ToggleRow( checked = state.starredMessages, diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt index e6803d9512..45f836baf3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt @@ -15,6 +15,6 @@ data class LabsSettingsState( val groupSuggestionsForMembers: Boolean = false, val betterSearch: Boolean = false, val autoLowerHand: Boolean = false, - val newApngRenderer: Boolean = false, + val starredMessages: Boolean = false ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt index fefe9dbec8..eebb14a893 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt @@ -41,10 +41,7 @@ class LabsSettingsViewModel : ViewModel() { SignalStore.labs.autoLowerHand = event.enabled _state.value = _state.value.copy(autoLowerHand = event.enabled) } - is LabsSettingsEvents.ToggleNewApngRenderer -> { - SignalStore.labs.newApngRenderer = event.enabled - _state.value = _state.value.copy(newApngRenderer = event.enabled) - } + is LabsSettingsEvents.ToggleStarredMessages -> { SignalStore.labs.starredMessages = event.enabled _state.value = _state.value.copy(starredMessages = event.enabled) @@ -60,7 +57,7 @@ class LabsSettingsViewModel : ViewModel() { groupSuggestionsForMembers = SignalStore.labs.groupSuggestionsForMembers, betterSearch = SignalStore.labs.betterSearch, autoLowerHand = SignalStore.labs.autoLowerHand, - newApngRenderer = SignalStore.labs.newApngRenderer, + starredMessages = SignalStore.labs.starredMessages ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java b/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java index 0c10cc5410..32fe4a4f54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/SignalGlideComponents.java @@ -51,7 +51,7 @@ import org.signal.glide.decryptableuri.DecryptableUri; import org.signal.glide.decryptableuri.DecryptableUriStreamLoader; import org.thoughtcrime.securesms.mms.RegisterGlideComponents; import org.thoughtcrime.securesms.mms.SignalGlideModule; -import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.stickers.StickerRemoteUri; import org.thoughtcrime.securesms.stickers.StickerRemoteUriLoader; import org.thoughtcrime.securesms.stories.StoryTextPostModel; @@ -92,7 +92,7 @@ public class SignalGlideComponents implements RegisterGlideComponents { registry.prepend(BitmapDrawable.class, new BitmapDrawableEncoder(glide.getBitmapPool(), encryptedBitmapResourceEncoder)); - if (SignalStore.labs().getNewApngRenderer()) { + if (RemoteConfig.newApngRenderer()) { registry.prepend(InputStreamFactory.class, ApngDecoder.class, new ApngInputStreamFactoryResourceDecoder()); registry.prepend(ApngDecoder.class, new EncryptedApngResourceEncoder(secret)); registry.prepend(File.class, ApngDecoder.class, new EncryptedApngCacheDecoder(secret)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt index d2b4f41020..0bd9a95290 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt @@ -10,7 +10,7 @@ class LabsValues internal constructor(store: KeyValueStore) : SignalStoreValues( const val GROUP_SUGGESTIONS_FOR_MEMBERS: String = "labs.group_suggestions_for_members" const val BETTER_SEARCH: String = "labs.better_search" const val AUTO_LOWER_HAND: String = "labs.auto_lower_hand" - const val NEW_APNG_RENDERER: String = "labs.new_apng_renderer" + const val STARRED_MESSAGES: String = "labs.starred_messages" } @@ -30,8 +30,6 @@ class LabsValues internal constructor(store: KeyValueStore) : SignalStoreValues( var autoLowerHand by booleanValue(AUTO_LOWER_HAND, true).falseForExternalUsers() - var newApngRenderer by booleanValue(NEW_APNG_RENDERER, true).falseForExternalUsers() - var starredMessages by booleanValue(STARRED_MESSAGES, true).falseForExternalUsers() private fun SignalStoreValueDelegate.falseForExternalUsers(): SignalStoreValueDelegate { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DeviceProperties.java b/app/src/main/java/org/thoughtcrime/securesms/util/DeviceProperties.java index 7cdfde4cd8..bcb4804669 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DeviceProperties.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DeviceProperties.java @@ -12,7 +12,7 @@ import androidx.annotation.RequiresApi; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.AppDependencies; -import org.thoughtcrime.securesms.keyvalue.SignalStore; + /** * Easy access to various properties of the device, typically to make performance-related decisions. @@ -26,7 +26,7 @@ public final class DeviceProperties { * large numbers of APNGs simultaneously. */ public static boolean shouldAllowApngStickerAnimation(@NonNull Context context) { - if (SignalStore.labs().getNewApngRenderer()) { + if (RemoteConfig.newApngRenderer()) { return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt index 51614847d7..b84147d09d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteConfig.kt @@ -1326,5 +1326,16 @@ object RemoteConfig { hotSwappable = true ) + /** + * Whether to use the new custom APNG renderer instead of the existing third-party library. + */ + @JvmStatic + @get:JvmName("newApngRenderer") + val newApngRenderer: Boolean by remoteBoolean( + key = "android.newApngRenderer", + defaultValue = false, + hotSwappable = false + ) + // endregion }