From ba6bd6a2d27270860e9dff570522241d02cd44ef Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 23 Jun 2023 11:36:08 -0400 Subject: [PATCH] Making more classes stable for performance reasons. --- .../java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt | 2 ++ .../main/java/com/vitorpamplona/amethyst/model/Channel.kt | 2 +- .../java/com/vitorpamplona/amethyst/model/LocalCache.kt | 2 ++ .../com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt | 2 ++ .../com/vitorpamplona/amethyst/service/BlurHashImage.kt | 2 ++ .../java/com/vitorpamplona/amethyst/service/NIP30Parser.kt | 2 ++ .../amethyst/service/model/ChannelCreateEvent.kt | 3 ++- .../amethyst/service/model/ContactListEvent.kt | 2 ++ .../vitorpamplona/amethyst/service/model/MetadataEvent.kt | 6 ++++-- .../com/vitorpamplona/amethyst/ui/components/Robohash.kt | 2 ++ .../amethyst/ui/screen/loggedIn/NotificationScreen.kt | 4 ++++ 11 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt index cce464c9f..afc8491f7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.model import android.util.Log import android.util.LruCache +import androidx.compose.runtime.Stable import androidx.lifecycle.LiveData import com.vitorpamplona.amethyst.OptOutFromFilters import com.vitorpamplona.amethyst.service.checkNotInMainThread @@ -65,6 +66,7 @@ class AntiSpamFilter { val liveSpam: AntiSpamLiveData = AntiSpamLiveData(this) } +@Stable class AntiSpamLiveData(val cache: AntiSpamFilter) : LiveData(AntiSpamState(cache)) { // Refreshes observers in batches. diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt index 870e1c1dd..64608e1ef 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Channel.kt @@ -33,7 +33,7 @@ class PublicChatChannel(idHex: String) : Channel(idHex) { } override fun profilePicture(): String? { - if (info.picture.isNullOrBlank()) info.picture = null + if (info.picture.isNullOrBlank()) return null return info.picture ?: super.profilePicture() } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index 8a2781771..c7445f785 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -1,6 +1,7 @@ package com.vitorpamplona.amethyst.model import android.util.Log +import androidx.compose.runtime.Stable import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.amethyst.service.model.* @@ -1280,6 +1281,7 @@ object LocalCache { } } +@Stable class LocalCacheLiveData { private val _newEventBundles = MutableSharedFlow>() val newEventBundles = _newEventBundles.asSharedFlow() // read-only public view diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt index 5ea62127c..c06b1694d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/UrlCachedPreviewer.kt @@ -1,12 +1,14 @@ package com.vitorpamplona.amethyst.model import android.util.LruCache +import androidx.compose.runtime.Stable import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.amethyst.service.previews.BahaUrlPreview import com.vitorpamplona.amethyst.service.previews.IUrlPreviewCallback import com.vitorpamplona.amethyst.service.previews.UrlInfoItem import com.vitorpamplona.amethyst.ui.components.UrlPreviewState +@Stable object UrlCachedPreviewer { var cache = LruCache(100) private set diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt index 5f4765b5e..86c4137c2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/BlurHashImage.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.service import android.content.Context import android.net.Uri +import androidx.compose.runtime.Stable import androidx.core.graphics.drawable.toDrawable import coil.ImageLoader import coil.decode.DataSource @@ -14,6 +15,7 @@ import java.net.URLDecoder import java.net.URLEncoder import kotlin.math.roundToInt +@Stable class BlurHashFetcher( private val options: Options, private val data: Uri diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NIP30Parser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NIP30Parser.kt index bfc14cf36..04ce92344 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NIP30Parser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NIP30Parser.kt @@ -1,7 +1,9 @@ package com.vitorpamplona.amethyst.service +import androidx.compose.runtime.Immutable import java.util.regex.Pattern +@Immutable class NIP30Parser { val customEmojiPattern: Pattern = Pattern.compile("\\:([A-Za-z0-9_\\-]+)\\:", Pattern.CASE_INSENSITIVE) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ChannelCreateEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ChannelCreateEvent.kt index 8123144b7..8b237c06d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ChannelCreateEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ChannelCreateEvent.kt @@ -46,5 +46,6 @@ class ChannelCreateEvent( } } - data class ChannelData(var name: String?, var about: String?, var picture: String?) + @Immutable + data class ChannelData(val name: String?, val about: String?, val picture: String?) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ContactListEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ContactListEvent.kt index cbf3c834c..a0ebcc36a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ContactListEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ContactListEvent.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.service.model import android.util.Log import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable import com.google.gson.reflect.TypeToken import com.vitorpamplona.amethyst.model.HexKey import com.vitorpamplona.amethyst.model.decodePublicKey @@ -12,6 +13,7 @@ import java.util.Date @Immutable data class Contact(val pubKeyHex: String, val relayUri: String?) +@Stable class ContactListEvent( id: HexKey, pubKey: HexKey, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/MetadataEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/MetadataEvent.kt index 1fe166cfc..786e1058e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/MetadataEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/MetadataEvent.kt @@ -1,6 +1,7 @@ package com.vitorpamplona.amethyst.service.model import android.util.Log +import androidx.compose.runtime.Stable import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.gson.Gson @@ -12,9 +13,10 @@ import nostr.postr.Utils import java.io.ByteArrayInputStream import java.util.Date +@Stable abstract class IdentityClaim( - var identity: String, - var proof: String + val identity: String, + val proof: String ) { abstract fun toProofUrl(): String abstract fun toIcon(): Int diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt index 1286c0f4e..e2f92c79e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/Robohash.kt @@ -3,6 +3,7 @@ package com.vitorpamplona.amethyst.ui.components import android.content.Context import android.net.Uri import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import coil.ImageLoader @@ -61,6 +62,7 @@ private fun svgString(msg: String): String { """ } +@Stable class HashImageFetcher( private val context: Context, private val data: Uri diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt index 075cf9b0d..7d0c3fd5b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/NotificationScreen.kt @@ -9,6 +9,7 @@ import androidx.compose.material.Divider import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState @@ -189,6 +190,7 @@ fun SummaryBar(model: UserReactionsViewModel) { ) } +@Stable class LabelValueFormatter(val axisLabels: List) : AxisValueFormatter { override fun formatValue( value: Float, @@ -198,6 +200,7 @@ class LabelValueFormatter(val axisLabels: List) : AxisValueFormatter { override fun formatValue( value: Float, @@ -207,6 +210,7 @@ class CountAxisValueFormatter() : AxisValueFormatter { override fun formatValue( value: Float,