diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip05Verifier.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip05Verifier.kt index 2a0ee3240..fd86dc1eb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip05Verifier.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip05Verifier.kt @@ -12,9 +12,10 @@ import okhttp3.Callback import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response +import java.net.Proxy -class Nip05Verifier { - val client = OkHttpClient.Builder().build() +class Nip05Verifier(proxy: Proxy?) { + val client = OkHttpClient.Builder().proxy(proxy).build() fun assembleUrl(nip05address: String): String? { val parts = nip05address.trim().split("@") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt index a9459b21c..26e68d205 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt @@ -14,10 +14,11 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import java.math.BigDecimal +import java.net.Proxy import java.net.URLEncoder -class LightningAddressResolver { - val client = OkHttpClient.Builder().build() +class LightningAddressResolver(proxy: Proxy?) { + val client = OkHttpClient.Builder().proxy(proxy).build() fun assembleUrl(lnaddress: String): String? { val parts = lnaddress.split("@") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt index 485f21062..ca8727c1d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageSaver.kt @@ -14,6 +14,7 @@ import okio.BufferedSource import okio.IOException import okio.sink import java.io.File +import java.net.Proxy object ImageSaver { /** @@ -26,9 +27,10 @@ object ImageSaver { url: String, context: Context, onSuccess: () -> Any?, - onError: (Throwable) -> Any? + onError: (Throwable) -> Any?, + proxy: Proxy? ) { - val client = OkHttpClient.Builder().build() + val client = OkHttpClient.Builder().proxy(proxy).build() val request = Request.Builder() .header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageUploader.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageUploader.kt index 574fef2b1..6ecddfeb0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageUploader.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/ImageUploader.kt @@ -9,6 +9,7 @@ import okhttp3.MediaType.Companion.toMediaType import okio.BufferedSink import okio.source import java.io.IOException +import java.net.Proxy import java.util.* object ImageUploader { @@ -16,14 +17,15 @@ object ImageUploader { uri: Uri, contentResolver: ContentResolver, onSuccess: (String) -> Unit, - onError: (Throwable) -> Unit + onError: (Throwable) -> Unit, + proxy: Proxy? ) { val contentType = contentResolver.getType(uri) val category = contentType?.toMediaType()?.toString()?.split("/")?.get(0) ?: "image" val url = if (category == "image") "https://api.imgur.com/3/image" else "https://api.imgur.com/3/upload" - val client = OkHttpClient.Builder().build() + val client = OkHttpClient.Builder().proxy(proxy).build() val requestBody: RequestBody = MultipartBody.Builder() .setType(MultipartBody.FORM) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 8be28a491..97ed777a1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -124,7 +124,8 @@ open class NewPostViewModel : ViewModel() { viewModelScope.launch { imageUploadingError.emit("Failed to upload the image / video") } - } + }, + account!!.proxy ) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt index e6a9bf2e0..7fd7a25af 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt @@ -180,7 +180,8 @@ class NewUserMetadataViewModel : ViewModel() { viewModelScope.launch { imageUploadingError.emit("Failed to upload the image / video") } - } + }, + account.proxy ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SaveToGallery.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SaveToGallery.kt index e8dbca2cf..a757506bc 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SaveToGallery.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SaveToGallery.kt @@ -18,6 +18,7 @@ import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberPermissionState import com.vitorpamplona.amethyst.R import kotlinx.coroutines.launch +import java.net.Proxy /** * A button to save the remote image to the gallery. @@ -27,7 +28,7 @@ import kotlinx.coroutines.launch */ @OptIn(ExperimentalPermissionsApi::class) @Composable -fun SaveToGallery(url: String) { +fun SaveToGallery(url: String, proxy: Proxy?) { val localContext = LocalContext.current val scope = rememberCoroutineScope() @@ -54,7 +55,8 @@ fun SaveToGallery(url: String) { ) .show() } - } + }, + proxy = proxy ) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ExpandableRichTextViewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ExpandableRichTextViewer.kt index 3b62e83bd..37c4689bf 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ExpandableRichTextViewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ExpandableRichTextViewer.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import java.net.Proxy const val SHORT_TEXT_LENGTH = 350 @@ -38,7 +39,8 @@ fun ExpandableRichTextViewer( tags: List>?, backgroundColor: Color, accountViewModel: AccountViewModel, - navController: NavController + navController: NavController, + proxy: Proxy? ) { var showFullText by remember { mutableStateOf(false) } @@ -62,7 +64,8 @@ fun ExpandableRichTextViewer( tags, backgroundColor, accountViewModel, - navController + navController, + proxy ) if (content.length > whereToCut && !showFullText) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoiceRequest.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoiceRequest.kt index 06e38c773..13bb71069 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoiceRequest.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/InvoiceRequest.kt @@ -138,7 +138,7 @@ fun InvoiceRequest( onClick = { val zapRequest = account.createZapRequestFor(toUserPubKeyHex, message, LnZapEvent.ZapType.PUBLIC) - LightningAddressResolver().lnAddressInvoice( + LightningAddressResolver(account.proxy).lnAddressInvoice( lud16, amount * 1000, message, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index 474a1fea7..edc78229c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -43,6 +43,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.net.MalformedURLException +import java.net.Proxy import java.net.URISyntaxException import java.net.URL import java.util.regex.Pattern @@ -80,7 +81,8 @@ fun RichTextViewer( tags: List>?, backgroundColor: Color, accountViewModel: AccountViewModel, - navController: NavController + navController: NavController, + proxy: Proxy? ) { Column(modifier = modifier) { if (content.startsWith("# ") || @@ -159,9 +161,9 @@ fun RichTextViewer( if (isValidURL(word)) { val removedParamsFromUrl = word.split("?")[0].lowercase() if (imageExtensions.any { removedParamsFromUrl.endsWith(it) }) { - ZoomableImageView(word, imagesForPager) + ZoomableImageView(word, imagesForPager, proxy) } else if (videoExtensions.any { removedParamsFromUrl.endsWith(it) }) { - ZoomableImageView(word, imagesForPager) + ZoomableImageView(word, imagesForPager, proxy) } else { UrlPreview(word, "$word ") } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt index e547da6bd..2fa6a5c14 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt @@ -46,10 +46,11 @@ import com.vitorpamplona.amethyst.ui.actions.LoadingAnimation import com.vitorpamplona.amethyst.ui.actions.SaveToGallery import net.engawapg.lib.zoomable.rememberZoomState import net.engawapg.lib.zoomable.zoomable +import java.net.Proxy @Composable @OptIn(ExperimentalFoundationApi::class) -fun ZoomableImageView(word: String, images: List = listOf(word)) { +fun ZoomableImageView(word: String, images: List = listOf(word), proxy: Proxy?) { val clipboardManager = LocalClipboardManager.current // store the dialog open or close state @@ -126,13 +127,13 @@ fun ZoomableImageView(word: String, images: List = listOf(word)) { } if (dialogOpen) { - ZoomableImageDialog(word, images, onDismiss = { dialogOpen = false }) + ZoomableImageDialog(word, images, onDismiss = { dialogOpen = false }, proxy) } } @OptIn(ExperimentalPagerApi::class) @Composable -fun ZoomableImageDialog(imageUrl: String, allImages: List = listOf(imageUrl), onDismiss: () -> Unit) { +fun ZoomableImageDialog(imageUrl: String, allImages: List = listOf(imageUrl), onDismiss: () -> Unit, proxy: Proxy?) { Dialog( onDismissRequest = onDismiss, properties = DialogProperties(usePlatformDefaultWidth = false) @@ -150,7 +151,7 @@ fun ZoomableImageDialog(imageUrl: String, allImages: List = listOf(image ) { CloseButton(onCancel = onDismiss) - SaveToGallery(url = allImages[pagerState.currentPage]) + SaveToGallery(url = allImages[pagerState.currentPage], proxy) } if (allImages.size > 1) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt index bee998015..6aa2e5cb5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt @@ -290,7 +290,8 @@ fun ChatroomMessageCompose( note.event?.tags(), backgroundBubbleColor, accountViewModel, - navController + navController, + account.proxy ) } else { TranslatableRichTextViewer( @@ -300,7 +301,8 @@ fun ChatroomMessageCompose( note.event?.tags(), backgroundBubbleColor, accountViewModel, - navController + navController, + account.proxy ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt index cebfe1fdd..bb1342660 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt @@ -35,10 +35,11 @@ import com.vitorpamplona.amethyst.service.Nip05Verifier import com.vitorpamplona.amethyst.ui.theme.Nip05 import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import java.net.Proxy import java.util.Date @Composable -fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State { +fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String, proxy: Proxy?): State { var nip05Verified = remember { mutableStateOf(null) } LaunchedEffect(key1 = user) { @@ -48,7 +49,7 @@ fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State (now - 60 * 60)) { // 1hour nip05Verified.value = user.nip05Verified } else { - Nip05Verifier().verifyNip05( + Nip05Verifier(proxy).verifyNip05( nip05, onSuccess = { // Marks user as verified @@ -77,18 +78,18 @@ fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State if (nip05.split("@").size == 2) { - val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex) + val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex, proxy) Row(verticalAlignment = Alignment.CenterVertically) { if (nip05Verified == null) { Icon( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 8400d174b..ccabb8348 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -353,7 +353,7 @@ fun NoteComposeInner( if (note.author != null && !makeItShort && !isQuotedNote) { Row(verticalAlignment = Alignment.CenterVertically) { - ObserveDisplayNip05Status(note.author!!, Modifier.weight(1f)) + ObserveDisplayNip05Status(note.author!!, Modifier.weight(1f), account.proxy) val baseReward = noteEvent.getReward() if (baseReward != null) { @@ -509,7 +509,8 @@ fun NoteComposeInner( noteEvent.tags(), backgroundColor, accountViewModel, - navController + navController, + account.proxy ) if (!makeItShort) { @@ -539,7 +540,8 @@ fun NoteComposeInner( noteEvent.tags(), backgroundColor, accountViewModel, - navController + navController, + account.proxy ) DisplayUncitedHashtags(noteEvent.hashtags(), eventContent, navController) @@ -551,7 +553,8 @@ fun NoteComposeInner( canPreview = canPreview && !makeItShort, backgroundColor, accountViewModel, - navController + navController, + account.proxy ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt index 26e83cf91..b95afb0d5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/PollNote.kt @@ -37,6 +37,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.BitcoinOrange import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import java.net.Proxy import java.util.* import kotlin.math.roundToInt @@ -46,7 +47,8 @@ fun PollNote( canPreview: Boolean, backgroundColor: Color, accountViewModel: AccountViewModel, - navController: NavController + navController: NavController, + proxy: Proxy? ) { val zapsState by baseNote.live().zaps.observeAsState() val zappedNote = zapsState?.note ?: return @@ -111,7 +113,8 @@ fun PollNote( pollViewModel.pollEvent?.tags(), backgroundColor, accountViewModel, - navController + navController, + proxy ) } } @@ -144,7 +147,8 @@ fun PollNote( pollViewModel.pollEvent?.tags(), backgroundColor, accountViewModel, - navController + navController, + proxy ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt index 26d0448be..e161b2003 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt @@ -282,7 +282,7 @@ fun NoteMaster( } Row(verticalAlignment = Alignment.CenterVertically) { - ObserveDisplayNip05Status(baseNote, Modifier.weight(1f)) + ObserveDisplayNip05Status(baseNote, Modifier.weight(1f), account.proxy) val baseReward = noteEvent.getReward() if (baseReward != null) { @@ -362,7 +362,8 @@ fun NoteMaster( note.event?.tags(), MaterialTheme.colors.background, accountViewModel, - navController + navController, + account.proxy ) DisplayUncitedHashtags(noteEvent.hashtags(), eventContent, navController) @@ -373,7 +374,8 @@ fun NoteMaster( canPreview, backgroundColor, accountViewModel, - navController + navController, + account.proxy ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index c88352b6c..22fffb064 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -72,7 +72,7 @@ class AccountViewModel(private val account: Account) : ViewModel() { onProgress(0.10f) - LightningAddressResolver().lnAddressInvoice( + LightningAddressResolver(account.proxy).lnAddressInvoice( lud16, amount, message, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index 0f26c18bc..a1ac44714 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -59,6 +59,7 @@ import com.vitorpamplona.amethyst.ui.note.UserPicture import com.vitorpamplona.amethyst.ui.note.UsernameDisplay import com.vitorpamplona.amethyst.ui.screen.ChatroomFeedView import com.vitorpamplona.amethyst.ui.screen.NostrChatRoomFeedViewModel +import java.net.Proxy @Composable fun ChatroomScreen(userId: String?, accountViewModel: AccountViewModel, navController: NavController) { @@ -104,7 +105,7 @@ fun ChatroomScreen(userId: String?, accountViewModel: AccountViewModel, navContr Column(Modifier.fillMaxHeight()) { NostrChatroomDataSource.withUser?.let { - ChatroomHeader(it, account.userProfile(), navController = navController) + ChatroomHeader(it, account.userProfile(), navController = navController, account.proxy) } Column( @@ -206,7 +207,7 @@ fun ChatroomScreen(userId: String?, accountViewModel: AccountViewModel, navContr } @Composable -fun ChatroomHeader(baseUser: User, accountUser: User, navController: NavController) { +fun ChatroomHeader(baseUser: User, accountUser: User, navController: NavController, proxy: Proxy?) { Column( modifier = Modifier.clickable( onClick = { navController.navigate("User/${baseUser.pubkeyHex}") } @@ -226,7 +227,7 @@ fun ChatroomHeader(baseUser: User, accountUser: User, navController: NavControll } Row(verticalAlignment = Alignment.CenterVertically) { - ObserveDisplayNip05Status(baseUser) + ObserveDisplayNip05Status(baseUser, proxy = proxy) } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 6c832ceac..46623a0ef 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -1,6 +1,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn import android.content.Intent +import java.net.Proxy import android.net.Uri import androidx.compose.foundation.* import androidx.compose.foundation.gestures.scrollBy @@ -308,7 +309,7 @@ private fun ProfileHeader( val clipboardManager = LocalClipboardManager.current Box { - DrawBanner(baseUser) + DrawBanner(baseUser, account.proxy) Box( modifier = Modifier @@ -410,7 +411,7 @@ private fun ProfileHeader( } if (zoomImageDialogOpen) { - ZoomableImageDialog(baseUser.profilePicture()!!, onDismiss = { zoomImageDialogOpen = false }) + ZoomableImageDialog(baseUser.profilePicture()!!, onDismiss = { zoomImageDialogOpen = false }, proxy = account.proxy) } } @@ -514,7 +515,7 @@ private fun DrawAdditionalInfo(baseUser: User, account: Account, accountViewMode } } - DisplayNip05ProfileStatus(user) + DisplayNip05ProfileStatus(user, account.proxy) val website = user.info?.website if (!website.isNullOrEmpty()) { @@ -616,7 +617,8 @@ private fun DrawAdditionalInfo(baseUser: User, account: Account, accountViewMode tags = null, backgroundColor = MaterialTheme.colors.background, accountViewModel = accountViewModel, - navController = navController + navController = navController, + proxy = account.proxy ) } } @@ -686,7 +688,7 @@ fun BadgeThumb( @OptIn(ExperimentalFoundationApi::class) @Composable -private fun DrawBanner(baseUser: User) { +private fun DrawBanner(baseUser: User, proxy: Proxy?) { val userState by baseUser.live().metadata.observeAsState() val user = userState?.user ?: return @@ -712,7 +714,7 @@ private fun DrawBanner(baseUser: User) { ) if (zoomImageDialogOpen) { - ZoomableImageDialog(imageUrl = banner, onDismiss = { zoomImageDialogOpen = false }) + ZoomableImageDialog(imageUrl = banner, onDismiss = { zoomImageDialogOpen = false }, proxy = proxy) } } else { Image( diff --git a/app/src/play/java/com/vitorpamplona/amethyst/ui/components/TranslatableRichTextViewer.kt b/app/src/play/java/com/vitorpamplona/amethyst/ui/components/TranslatableRichTextViewer.kt index 8100a3e9b..e30a5f41e 100644 --- a/app/src/play/java/com/vitorpamplona/amethyst/ui/components/TranslatableRichTextViewer.kt +++ b/app/src/play/java/com/vitorpamplona/amethyst/ui/components/TranslatableRichTextViewer.kt @@ -35,6 +35,7 @@ import com.vitorpamplona.amethyst.service.lang.ResultOrError import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import java.net.Proxy import java.util.Locale @Composable @@ -45,7 +46,8 @@ fun TranslatableRichTextViewer( tags: List>?, backgroundColor: Color, accountViewModel: AccountViewModel, - navController: NavController + navController: NavController, + proxy: Proxy? ) { val translatedTextState = remember { mutableStateOf(ResultOrError(content, null, null, null)) @@ -87,7 +89,8 @@ fun TranslatableRichTextViewer( tags, backgroundColor, accountViewModel, - navController + navController, + proxy ) val target = translatedTextState.value.targetLang