mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 03:38:23 +00:00
Merge branch 'main' into main
This commit is contained in:
@@ -15,8 +15,8 @@ android {
|
||||
applicationId "com.vitorpamplona.amethyst"
|
||||
minSdk libs.versions.android.minSdk.get().toInteger()
|
||||
targetSdk libs.versions.android.targetSdk.get().toInteger()
|
||||
versionCode 388
|
||||
versionName "0.89.2"
|
||||
versionCode 392
|
||||
versionName "0.89.6"
|
||||
buildConfigField "String", "RELEASE_NOTES_ID", "\"1130badb252bdf62aaf93cb65bfa2bb09e7600c7d6764894f2954555b3b73018\""
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.util.Log
|
||||
import androidx.security.crypto.EncryptedSharedPreferences
|
||||
import coil.ImageLoader
|
||||
import coil.disk.DiskCache
|
||||
import coil.memory.MemoryCache
|
||||
import com.vitorpamplona.amethyst.service.ots.OkHttpBlockstreamExplorer
|
||||
import com.vitorpamplona.amethyst.service.ots.OkHttpCalendarBuilder
|
||||
import com.vitorpamplona.amethyst.service.playback.VideoCache
|
||||
@@ -66,7 +67,14 @@ class Amethyst : Application() {
|
||||
.Builder()
|
||||
.directory(applicationContext.safeCacheDir.resolve("image_cache"))
|
||||
.maxSizePercent(0.2)
|
||||
.maximumMaxSizeBytes(500L * 1024 * 1024) // 250MB
|
||||
.maximumMaxSizeBytes(1024 * 1024 * 1024) // 1GB
|
||||
.build()
|
||||
}
|
||||
|
||||
val coilMemCache: MemoryCache by lazy {
|
||||
MemoryCache
|
||||
.Builder(this)
|
||||
.maxSizePercent(0.40) // memory heavy app due to profile pics and videos.
|
||||
.build()
|
||||
}
|
||||
|
||||
@@ -106,7 +114,7 @@ class Amethyst : Application() {
|
||||
}
|
||||
}
|
||||
|
||||
fun imageLoaderBuilder(): ImageLoader.Builder = ImageLoader.Builder(applicationContext).diskCache { coilCache }
|
||||
fun imageLoaderBuilder(): ImageLoader.Builder = ImageLoader.Builder(this).diskCache { coilCache }.memoryCache { coilMemCache }
|
||||
|
||||
fun encryptedStorage(npub: String? = null): EncryptedSharedPreferences = EncryptedStorage.preferences(instance, npub)
|
||||
|
||||
|
||||
@@ -2761,19 +2761,22 @@ class Account(
|
||||
// Takes a User's relay list and adds the types of feeds they are active for.
|
||||
fun activeRelays(): Array<RelaySetupInfo>? {
|
||||
val usersRelayList =
|
||||
userProfile().latestContactList?.relays()?.map {
|
||||
val url = RelayUrlFormatter.normalize(it.key)
|
||||
userProfile()
|
||||
.latestContactList
|
||||
?.relays()
|
||||
?.map {
|
||||
val url = RelayUrlFormatter.normalize(it.key)
|
||||
|
||||
val localFeedTypes =
|
||||
localRelays.firstOrNull { localRelay -> RelayUrlFormatter.normalize(localRelay.url) == url }?.feedTypes?.minus(setOf(FeedType.SEARCH, FeedType.WALLET_CONNECT))
|
||||
?: Constants.defaultRelays
|
||||
.filter { defaultRelay -> defaultRelay.url == url }
|
||||
.firstOrNull()
|
||||
?.feedTypes
|
||||
?: Constants.activeTypesGlobalChats
|
||||
val localFeedTypes =
|
||||
localRelays.firstOrNull { localRelay -> RelayUrlFormatter.normalize(localRelay.url) == url }?.feedTypes?.minus(setOf(FeedType.SEARCH, FeedType.WALLET_CONNECT))
|
||||
?: Constants.defaultRelays
|
||||
.filter { defaultRelay -> defaultRelay.url == url }
|
||||
.firstOrNull()
|
||||
?.feedTypes
|
||||
?: Constants.activeTypesGlobalChats
|
||||
|
||||
RelaySetupInfo(url, it.value.read, it.value.write, localFeedTypes)
|
||||
} ?: return null
|
||||
RelaySetupInfo(url, it.value.read, it.value.write, localFeedTypes)
|
||||
}?.ifEmpty { null } ?: return null
|
||||
|
||||
return usersRelayList.toTypedArray()
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ object NostrHomeDataSource : AmethystNostrDataSource("HomeFeed") {
|
||||
|
||||
fun createFollowMetadataAndReleaseFilter(): TypedFilter? {
|
||||
val follows = account.liveHomeFollowLists.value?.users
|
||||
val followSet = follows?.plus(account.userProfile().pubkeyHex)?.toList()?.ifEmpty { null }
|
||||
val followSet = follows?.plus(account.userProfile().pubkeyHex)?.shuffled()?.ifEmpty { null }
|
||||
|
||||
return if (followSet != null) {
|
||||
TypedFilter(
|
||||
@@ -124,7 +124,7 @@ object NostrHomeDataSource : AmethystNostrDataSource("HomeFeed") {
|
||||
MetadataEvent.KIND,
|
||||
AdvertisedRelayListEvent.KIND,
|
||||
),
|
||||
authors = followSet,
|
||||
authors = followSet.take(500),
|
||||
since =
|
||||
latestEOSEs.users[account.userProfile()]
|
||||
?.followList
|
||||
|
||||
@@ -54,9 +54,9 @@ fun stringRes(
|
||||
String
|
||||
.format(
|
||||
LocalConfiguration.current.locales.get(0),
|
||||
resourceCache.get(id) ?: stringResource(id),
|
||||
resourceCache.get(id) ?: stringResource(id).also { resourceCache.put(id, it) },
|
||||
*args,
|
||||
).also { resourceCache.put(id, it) }
|
||||
)
|
||||
|
||||
fun stringRes(
|
||||
ctx: Context,
|
||||
|
||||
@@ -27,6 +27,7 @@ import androidx.compose.foundation.Canvas
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
@@ -135,6 +136,7 @@ private fun RenderBottomMenu(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.windowInsetsPadding(windowInsets)
|
||||
.consumeWindowInsets(windowInsets)
|
||||
.height(50.dp),
|
||||
) {
|
||||
HorizontalDivider(
|
||||
|
||||
@@ -100,7 +100,7 @@ fun AppNavigation(
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
val nav =
|
||||
remember {
|
||||
remember(navController) {
|
||||
{ route: String ->
|
||||
scope.launch {
|
||||
if (getRouteWithArguments(navController) != route) {
|
||||
@@ -114,8 +114,8 @@ fun AppNavigation(
|
||||
NavHost(
|
||||
navController,
|
||||
startDestination = Route.Home.route,
|
||||
enterTransition = { fadeIn(animationSpec = tween(400)) },
|
||||
exitTransition = { fadeOut(animationSpec = tween(400)) },
|
||||
enterTransition = { fadeIn(animationSpec = tween(200)) },
|
||||
exitTransition = { fadeOut(animationSpec = tween(200)) },
|
||||
) {
|
||||
Route.Home.let { route ->
|
||||
composable(
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.ui.navigation
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.content.Context
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.os.Debug
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -66,6 +68,7 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
@@ -1034,6 +1037,14 @@ fun debugState(context: Context) {
|
||||
|
||||
Log.d("STATE DUMP", "Total Native Heap Allocated: " + nativeHeap + " MB")
|
||||
|
||||
val activityManager: ActivityManager? = context.getSystemService()
|
||||
if (activityManager != null) {
|
||||
val isLargeHeap = (context.applicationInfo.flags and ApplicationInfo.FLAG_LARGE_HEAP) != 0
|
||||
val memClass = if (isLargeHeap) activityManager.largeMemoryClass else activityManager.memoryClass
|
||||
|
||||
Log.d("STATE DUMP", "Memory Class " + memClass + " MB (largeHeap $isLargeHeap)")
|
||||
}
|
||||
|
||||
Log.d("STATE DUMP", "Connected Relays: " + RelayPool.connectedRelays())
|
||||
|
||||
val imageLoader = Coil.imageLoader(context)
|
||||
@@ -1092,6 +1103,13 @@ fun debugState(context: Context) {
|
||||
LocalCache.observablesByKindAndAuthor.size,
|
||||
)
|
||||
|
||||
Log.d(
|
||||
"STATE DUMP",
|
||||
"Spam: " +
|
||||
LocalCache.antiSpam.recentMessages.size() +
|
||||
" / " + LocalCache.antiSpam.spamMessages.size(),
|
||||
)
|
||||
|
||||
Log.d(
|
||||
"STATE DUMP",
|
||||
"Memory used by Events: " +
|
||||
|
||||
@@ -34,10 +34,12 @@ import androidx.compose.animation.slideOutVertically
|
||||
import androidx.compose.animation.togetherWith
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.consumeWindowInsets
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
import androidx.compose.foundation.layout.imePadding
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.statusBarsPadding
|
||||
import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.material3.DrawerValue
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
@@ -486,7 +488,14 @@ private fun MainScaffold(
|
||||
}
|
||||
},
|
||||
) {
|
||||
Column(modifier = Modifier.padding(it).imePadding()) {
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.padding(it)
|
||||
.consumeWindowInsets(it)
|
||||
.systemBarsPadding()
|
||||
.imePadding(),
|
||||
) {
|
||||
AppNavigation(
|
||||
homeFeedViewModel = homeFeedViewModel,
|
||||
repliesFeedViewModel = repliesFeedViewModel,
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<string name="post_was_hidden">Esta publicación se ocultó porque menciona tus usuarios o palabras ocultas</string>
|
||||
<string name="post_was_flagged_as_inappropriate_by">Post marcado como inapropiado por</string>
|
||||
<string name="post_not_found">El evento se está cargando o no se puede encontrar en la lista de relés</string>
|
||||
<string name="post_not_found_short">👀</string>
|
||||
<string name="channel_image">Imagen del canal</string>
|
||||
<string name="referenced_event_not_found">Evento referenciado no encontrado</string>
|
||||
<string name="could_not_decrypt_the_message">No se pudo desencriptar el mensaje</string>
|
||||
@@ -132,6 +133,7 @@
|
||||
<string name="conversations">Conversaciones</string>
|
||||
<string name="notes">Notas</string>
|
||||
<string name="replies">Respuestas</string>
|
||||
<string name="gallery">Galería</string>
|
||||
<string name="follows">"Siguiendo"</string>
|
||||
<string name="reports">"Reportes"</string>
|
||||
<string name="more_options">Más opciones</string>
|
||||
@@ -255,6 +257,8 @@
|
||||
<string name="quick_action_delete">Eliminar</string>
|
||||
<string name="quick_action_unfollow">Dejar de seguir</string>
|
||||
<string name="quick_action_follow">Seguir</string>
|
||||
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
|
||||
<string name="quick_action_request_deletion_gallery_alert_body">Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego.</string>
|
||||
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
|
||||
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine su nota de los relays a los que está conectado actualmente. No hay garantía de que su nota se elimine permanentemente de esos relays, o de otros relays donde pueda almacenarse.</string>
|
||||
<string name="quick_action_block_dialog_btn">Bloquear</string>
|
||||
@@ -517,6 +521,7 @@
|
||||
<string name="share_or_save">Compartir o guardar</string>
|
||||
<string name="copy_url_to_clipboard">Copiar URL al portapapeles</string>
|
||||
<string name="copy_the_note_id_to_the_clipboard">Copiar ID de la nota al portapapeles</string>
|
||||
<string name="add_media_to_gallery">Agregar contenido multimedia a la galería</string>
|
||||
<string name="created_at">Creado</string>
|
||||
<string name="rules">Reglas</string>
|
||||
<string name="login_with_external_signer">Iniciar sesión con Amber</string>
|
||||
@@ -720,6 +725,8 @@
|
||||
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
|
||||
<string name="kind_3_section">Relés generales</string>
|
||||
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
|
||||
<string name="kind_3_recommended_section">Relés recomendados</string>
|
||||
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
|
||||
<string name="search_section">Relés de búsqueda</string>
|
||||
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
|
||||
<string name="local_section">Relés locales</string>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<string name="post_was_hidden">Esta publicación se ocultó porque menciona tus usuarios o palabras ocultas</string>
|
||||
<string name="post_was_flagged_as_inappropriate_by">La publicación fue reportada por</string>
|
||||
<string name="post_not_found">El evento se está cargando o no se puede encontrar en la lista de relés</string>
|
||||
<string name="post_not_found_short">👀</string>
|
||||
<string name="channel_image">Imagen del canal</string>
|
||||
<string name="referenced_event_not_found">No se encontró el evento referenciado</string>
|
||||
<string name="could_not_decrypt_the_message">No se pudo desencriptar el mensaje</string>
|
||||
@@ -132,6 +133,7 @@
|
||||
<string name="conversations">Conversaciones</string>
|
||||
<string name="notes">Notas</string>
|
||||
<string name="replies">Respuestas</string>
|
||||
<string name="gallery">Galería</string>
|
||||
<string name="follows">"Seguidos"</string>
|
||||
<string name="reports">"Reportes"</string>
|
||||
<string name="more_options">Más opciones</string>
|
||||
@@ -255,6 +257,8 @@
|
||||
<string name="quick_action_delete">Eliminar</string>
|
||||
<string name="quick_action_unfollow">Dejar de seguir</string>
|
||||
<string name="quick_action_follow">Seguir</string>
|
||||
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
|
||||
<string name="quick_action_request_deletion_gallery_alert_body">Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego.</string>
|
||||
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
|
||||
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine la nota de los relés con los que tienes conexión actualmente. No hay garantía de que la nota se elimine permanentemente de esos relés o de otros donde pueda estar guardada.</string>
|
||||
<string name="quick_action_block_dialog_btn">Bloquear</string>
|
||||
@@ -517,6 +521,7 @@
|
||||
<string name="share_or_save">Compartir o guardar</string>
|
||||
<string name="copy_url_to_clipboard">Copiar URL al portapapeles</string>
|
||||
<string name="copy_the_note_id_to_the_clipboard">Copiar ID de la nota al portapapeles</string>
|
||||
<string name="add_media_to_gallery">Agregar contenido multimedia a la galería</string>
|
||||
<string name="created_at">Creado</string>
|
||||
<string name="rules">Reglas</string>
|
||||
<string name="login_with_external_signer">Iniciar sesión con Amber</string>
|
||||
@@ -720,6 +725,8 @@
|
||||
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
|
||||
<string name="kind_3_section">Relés generales</string>
|
||||
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
|
||||
<string name="kind_3_recommended_section">Relés recomendados</string>
|
||||
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
|
||||
<string name="search_section">Relés de búsqueda</string>
|
||||
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
|
||||
<string name="local_section">Relés locales</string>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<string name="post_was_hidden">Esta publicación se ocultó porque menciona tus usuarios o palabras ocultas</string>
|
||||
<string name="post_was_flagged_as_inappropriate_by">La publicación fue reportada por</string>
|
||||
<string name="post_not_found">El evento se está cargando o no se puede encontrar en la lista de relés</string>
|
||||
<string name="post_not_found_short">👀</string>
|
||||
<string name="channel_image">Imagen del canal</string>
|
||||
<string name="referenced_event_not_found">No se encontró el evento referenciado</string>
|
||||
<string name="could_not_decrypt_the_message">No se pudo desencriptar el mensaje</string>
|
||||
@@ -132,6 +133,7 @@
|
||||
<string name="conversations">Conversaciones</string>
|
||||
<string name="notes">Notas</string>
|
||||
<string name="replies">Respuestas</string>
|
||||
<string name="gallery">Galería</string>
|
||||
<string name="follows">"Seguidos"</string>
|
||||
<string name="reports">"Reportes"</string>
|
||||
<string name="more_options">Más opciones</string>
|
||||
@@ -255,6 +257,8 @@
|
||||
<string name="quick_action_delete">Eliminar</string>
|
||||
<string name="quick_action_unfollow">Dejar de seguir</string>
|
||||
<string name="quick_action_follow">Seguir</string>
|
||||
<string name="quick_action_request_deletion_gallery_title">Eliminar de la galería</string>
|
||||
<string name="quick_action_request_deletion_gallery_alert_body">Elimina este contenido multimedia de la galería, aunque puedes volver a agregarlo luego.</string>
|
||||
<string name="quick_action_request_deletion_alert_title">Solicitar eliminación</string>
|
||||
<string name="quick_action_request_deletion_alert_body">Amethyst solicitará que se elimine la nota de los relés con los que tienes conexión actualmente. No hay garantía de que la nota se elimine permanentemente de esos relés o de otros donde pueda estar guardada.</string>
|
||||
<string name="quick_action_block_dialog_btn">Bloquear</string>
|
||||
@@ -517,6 +521,7 @@
|
||||
<string name="share_or_save">Compartir o guardar</string>
|
||||
<string name="copy_url_to_clipboard">Copiar URL al portapapeles</string>
|
||||
<string name="copy_the_note_id_to_the_clipboard">Copiar ID de la nota al portapapeles</string>
|
||||
<string name="add_media_to_gallery">Agregar contenido multimedia a la galería</string>
|
||||
<string name="created_at">Creado</string>
|
||||
<string name="rules">Reglas</string>
|
||||
<string name="login_with_external_signer">Iniciar sesión con Amber</string>
|
||||
@@ -720,6 +725,8 @@
|
||||
<string name="private_outbox_section_explainer">Inserta entre 1 y 3 relés para almacenar eventos que nadie más pueda ver, como los borradores o la configuración de la app. Lo ideal es que estos relés sean locales o requieran autenticación antes de descargar el contenido de cada usuario.</string>
|
||||
<string name="kind_3_section">Relés generales</string>
|
||||
<string name="kind_3_section_description">Amethyst usa estos relés para descargar publicaciones por ti.</string>
|
||||
<string name="kind_3_recommended_section">Relés recomendados</string>
|
||||
<string name="kind_3_recommended_section_description">Agrega los siguientes relés a la lista de relés generales para recibir publicaciones de los usuarios de la lista.</string>
|
||||
<string name="search_section">Relés de búsqueda</string>
|
||||
<string name="search_section_explainer">Lista de relés que se usarán al buscar contenido o usuarios. El etiquetado y la búsqueda no funcionarán si no hay opciones disponibles. Asegúrate de que implementen NIP-50.</string>
|
||||
<string name="local_section">Relés locales</string>
|
||||
|
||||
@@ -725,6 +725,8 @@
|
||||
<string name="private_outbox_section_explainer">१ - ३ पुनःप्रसारकों को जोडें उन घटनाओं को रखने के लिए जो कोई अन्य नहीं देख सकता जैसे कि पाण्डुलिपियाँ अथवा क्रमक के स्थापना विकल्प। आदर्शतः ये पुनःप्रसारक स्थानीय होने चाहिए अथवा प्रत्येक उपयोगकर्ता के विषयवस्तु अवरोहण के पूर्व परिचय प्रमाणीकरण अनिवार्य होना चाहिए।</string>
|
||||
<string name="kind_3_section">सामान्य पुनःप्रसारक</string>
|
||||
<string name="kind_3_section_description">अमेथिस्ट इन पुनःप्रसारकों का प्रयोग करता है आपके पत्रों का अवरोहण करने के लिए।</string>
|
||||
<string name="kind_3_recommended_section">पुनःशंसित पुनःप्रसारक</string>
|
||||
<string name="kind_3_recommended_section_description">सूचित उपयोगकर्ताओं के पत्र प्राप्त करने के लिए निम्नलिखित पुनःप्रसारकों को अपने सामान्य पुनःप्रसारक सूची में जोडें।</string>
|
||||
<string name="search_section">खोज पुनःप्रसारक</string>
|
||||
<string name="search_section_explainer">पुनःप्रसारकों की सूची जिनको किसी विषयवस्तु अथवा उपयोगकर्ताओं को खोजने में प्रयोग करना चाहिए। कोई विकल्प नहीं तो उपयोगकर्ता सूचक जोडना तथा खोज निष्क्रिय होंगे। सुनिश्चित करें कि वे निप॰-५० को कार्यान्वित किये हैं।</string>
|
||||
<string name="local_section">स्थानीय पुनःप्रसारक</string>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<style name="Theme.Amethyst" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
|
||||
<style name="Theme.Amethyst" parent="Theme.AppCompat.DayNight.NoActionBar">
|
||||
<item name="android:statusBarColor">@color/purple_700</item>
|
||||
<item name="android:windowBackground">@color/black</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi">shortEdges</item>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<string name="impersonation">Podszywanie się</string>
|
||||
<string name="illegal_behavior">Antyspołeczne zachowanie</string>
|
||||
<string name="other">Inne</string>
|
||||
<string name="unknown">Nieznany</string>
|
||||
<string name="unknown">Nieznani</string>
|
||||
<string name="relay_icon">Ikona transmitera</string>
|
||||
<string name="unknown_author">Autor nieznany</string>
|
||||
<string name="copy_text">Skopiuj tekst</string>
|
||||
@@ -126,7 +126,7 @@
|
||||
<string name="copy_channel_id_note_to_the_clipboard">Kopiuj ID kanału (wpisu) do schowka</string>
|
||||
<string name="edits_the_channel_metadata">Edytuje metadane kanału</string>
|
||||
<string name="join">Dołącz</string>
|
||||
<string name="known">Popularne</string>
|
||||
<string name="known">Znajomi</string>
|
||||
<string name="new_requests">Nowe Prośby</string>
|
||||
<string name="blocked_users">Zablokowani użytkownicy</string>
|
||||
<string name="new_threads">Nowe Wpisy</string>
|
||||
@@ -725,6 +725,8 @@
|
||||
<string name="private_outbox_section_explainer">Wstaw od 1 do 3 transmiterów przechowujących dane zdarzeń, których nikt inny nie widzi, takich jak Wersje robocze i/lub ustawienia aplikacji. Idealnie byłoby, gdyby te transmitery były lokalne lub wymagały uwierzytelnienia przed pobraniem treści każdego użytkownika.</string>
|
||||
<string name="kind_3_section">Transmitery ogólne</string>
|
||||
<string name="kind_3_section_description">Amethyst używa tych przekaźników, aby pobrać dla Ciebie posty.</string>
|
||||
<string name="kind_3_recommended_section">Polecane Transmitery</string>
|
||||
<string name="kind_3_recommended_section_description">Dodaj te transmitery do głównej listy, aby otrzymywać wiadomości od wymienionych użytkowników.</string>
|
||||
<string name="search_section">Transmitery wyszukujące</string>
|
||||
<string name="search_section_explainer">Lista transmiterów używanych podczas wyszukiwania treści lub użytkowników. Tagowanie i wyszukiwanie nie będą działać, jeśli nie będą dostępne żadne opcje. Upewnij się, że zaimplementowano NIP-50.</string>
|
||||
<string name="local_section">Lokalne Transmitery</string>
|
||||
|
||||
Reference in New Issue
Block a user