Merge pull request #3979 from vitorpamplona/claude/remove-ai-helper-post-zicyj2

feat: remove the AI writing helper from the post composer
This commit is contained in:
Vitor Pamplona
2026-08-25 11:09:30 -04:00
committed by GitHub
72 changed files with 7 additions and 1559 deletions
-5
View File
@@ -531,11 +531,6 @@ dependencies {
// Google services model the translate text
"playImplementation"(libs.google.mlkit.translate)
// On-device AI writing assistance (Gemini Nano via AICore)
"playImplementation"(libs.google.mlkit.genai.proofreading)
"playImplementation"(libs.google.mlkit.genai.prompt)
"playImplementation"(libs.google.mlkit.genai.rewriting)
// On-device alt-text suggestions: genai image description (preferred, descriptive sentences)
// with image-labeling as a keyword-join fallback for devices without AICore.
"playImplementation"(libs.google.mlkit.genai.image.description)
@@ -1,32 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
class NoOpWritingAssistant : WritingAssistant {
override suspend fun checkAvailability(): WritingAssistantStatus = WritingAssistantStatus.Unavailable
override suspend fun transform(
text: String,
tone: WritingTone,
): WritingResult = WritingResult(text, text, tone)
override fun close() {}
}
@@ -1,28 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
import android.content.Context
object WritingAssistantFactory {
@Suppress("UNUSED_PARAMETER")
fun create(context: Context): WritingAssistant = NoOpWritingAssistant()
}
@@ -39,7 +39,6 @@ data class UiSettings(
val dontAskForNotificationPermissions: Boolean = false,
val featureSet: FeatureSetType = FeatureSetType.SIMPLIFIED,
val gallerySet: ProfileGalleryType = ProfileGalleryType.CLASSIC,
val automaticallyProposeAiImprovements: BooleanType = BooleanType.ALWAYS,
val useTrackedBroadcasts: BooleanType = BooleanType.ALWAYS,
val automaticallyCreateDrafts: BooleanType = BooleanType.ALWAYS,
val showHomeNewThreadsTab: Boolean = true,
@@ -39,7 +39,6 @@ class UiSettingsFlow(
val dontAskForNotificationPermissions: MutableStateFlow<Boolean> = MutableStateFlow(false),
val featureSet: MutableStateFlow<FeatureSetType> = MutableStateFlow(FeatureSetType.SIMPLIFIED),
val gallerySet: MutableStateFlow<ProfileGalleryType> = MutableStateFlow(ProfileGalleryType.CLASSIC),
val automaticallyProposeAiImprovements: MutableStateFlow<BooleanType> = MutableStateFlow(BooleanType.ALWAYS),
val useTrackedBroadcasts: MutableStateFlow<BooleanType> = MutableStateFlow(BooleanType.ALWAYS),
val automaticallyCreateDrafts: MutableStateFlow<BooleanType> = MutableStateFlow(BooleanType.ALWAYS),
val showHomeNewThreadsTab: MutableStateFlow<Boolean> = MutableStateFlow(true),
@@ -71,7 +70,6 @@ class UiSettingsFlow(
dontAskForNotificationPermissions,
featureSet,
gallerySet,
automaticallyProposeAiImprovements,
useTrackedBroadcasts,
automaticallyCreateDrafts,
showHomeNewThreadsTab,
@@ -109,7 +107,7 @@ class UiSettingsFlow(
flows[11] as ProfileGalleryType,
flows[12] as BooleanType,
flows[13] as BooleanType,
flows[14] as BooleanType,
flows[14] as Boolean,
flows[15] as Boolean,
flows[16] as Boolean,
flows[17] as Boolean,
@@ -117,13 +115,12 @@ class UiSettingsFlow(
flows[19] as Boolean,
flows[20] as Boolean,
flows[21] as Boolean,
flows[22] as Boolean,
flows[23] as BooleanType,
flows[24] as AccentColorType,
flows[25] as FontFamilyType,
flows[26] as FontSizeType,
flows[27] as String,
flows[28] as Boolean,
flows[22] as BooleanType,
flows[23] as AccentColorType,
flows[24] as FontFamilyType,
flows[25] as FontSizeType,
flows[26] as String,
flows[27] as Boolean,
)
}
@@ -141,7 +138,6 @@ class UiSettingsFlow(
dontAskForNotificationPermissions.value,
featureSet.value,
gallerySet.value,
automaticallyProposeAiImprovements.value,
useTrackedBroadcasts.value,
automaticallyCreateDrafts.value,
showHomeNewThreadsTab.value,
@@ -211,10 +207,6 @@ class UiSettingsFlow(
gallerySet.tryEmit(torSettings.gallerySet)
any = true
}
if (automaticallyProposeAiImprovements.value != torSettings.automaticallyProposeAiImprovements) {
automaticallyProposeAiImprovements.tryEmit(torSettings.automaticallyProposeAiImprovements)
any = true
}
if (useTrackedBroadcasts.value != torSettings.useTrackedBroadcasts) {
useTrackedBroadcasts.tryEmit(torSettings.useTrackedBroadcasts)
any = true
@@ -316,7 +308,6 @@ class UiSettingsFlow(
MutableStateFlow(uiSettings.dontAskForNotificationPermissions),
MutableStateFlow(uiSettings.featureSet),
MutableStateFlow(uiSettings.gallerySet),
MutableStateFlow(uiSettings.automaticallyProposeAiImprovements),
MutableStateFlow(uiSettings.useTrackedBroadcasts),
MutableStateFlow(uiSettings.automaticallyCreateDrafts),
MutableStateFlow(uiSettings.showHomeNewThreadsTab),
@@ -130,7 +130,6 @@ class UiSharedPreferences(
val UI_DONT_ASK_FOR_NOTIFICATION_PERMISSIONS = booleanPreferencesKey("ui.dont_ask_for_notification_permissions")
val UI_FEATURE_SET = stringPreferencesKey("ui.feature_set")
val UI_GALLERY_SET = stringPreferencesKey("ui.gallery_set")
val UI_PROPOSE_AI_IMPROVEMENTS = stringPreferencesKey("ui.propose_ai_improvements")
val UI_USE_TRACKED_BROADCASTS = stringPreferencesKey("ui.use_tracked_broadcasts")
val UI_AUTOMATICALLY_CREATE_DRAFTS = stringPreferencesKey("ui.automatically_create_drafts")
val UI_SHOW_HOME_NEW_THREADS_TAB = booleanPreferencesKey("ui.show_home_new_threads_tab")
@@ -168,7 +167,6 @@ class UiSharedPreferences(
dontAskForNotificationPermissions = preferences[UI_DONT_ASK_FOR_NOTIFICATION_PERMISSIONS] ?: false,
featureSet = featureSet,
gallerySet = preferences[UI_GALLERY_SET]?.let { ProfileGalleryType.valueOf(it) } ?: ProfileGalleryType.CLASSIC,
automaticallyProposeAiImprovements = preferences[UI_PROPOSE_AI_IMPROVEMENTS]?.let { BooleanType.valueOf(it) } ?: BooleanType.ALWAYS,
useTrackedBroadcasts =
preferences[UI_USE_TRACKED_BROADCASTS]?.let { BooleanType.valueOf(it) }
?: if (featureSet == FeatureSetType.COMPLETE) BooleanType.ALWAYS else BooleanType.NEVER,
@@ -224,7 +222,6 @@ class UiSharedPreferences(
preferences[UI_DONT_ASK_FOR_NOTIFICATION_PERMISSIONS] = sharedSettings.dontAskForNotificationPermissions
preferences[UI_FEATURE_SET] = sharedSettings.featureSet.name
preferences[UI_GALLERY_SET] = sharedSettings.gallerySet.name
preferences[UI_PROPOSE_AI_IMPROVEMENTS] = sharedSettings.automaticallyProposeAiImprovements.name
preferences[UI_USE_TRACKED_BROADCASTS] = sharedSettings.useTrackedBroadcasts.name
preferences[UI_AUTOMATICALLY_CREATE_DRAFTS] = sharedSettings.automaticallyCreateDrafts.name
preferences[UI_SHOW_HOME_NEW_THREADS_TAB] = sharedSettings.showHomeNewThreadsTab
@@ -1,99 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
import kotlinx.coroutines.delay
/**
* TODO: Remove before shipping. Debug-only mock for testing the AI writing help UI
* on devices without Gemini Nano / AICore support.
*/
class MockWritingAssistant : WritingAssistant {
override suspend fun checkAvailability(): WritingAssistantStatus = WritingAssistantStatus.Available
override suspend fun transform(
text: String,
tone: WritingTone,
): WritingResult {
delay(800)
val transformed =
when (tone) {
WritingTone.CORRECT -> {
correctMock(text)
}
WritingTone.REPHRASE -> {
"Here's another way to put it: $text"
}
WritingTone.SHORTER -> {
text
.split(".")
.firstOrNull()
?.trim()
?.plus(".") ?: text
}
WritingTone.ELABORATE -> {
"$text Furthermore, this point deserves deeper consideration and nuance."
}
WritingTone.FRIENDLY -> {
"Hey! $text Hope that makes sense! :)"
}
WritingTone.PROFESSIONAL -> {
"I would like to bring to your attention the following: $text"
}
WritingTone.MORE_DIRECT -> {
text.replace("I think ", "").replace("maybe ", "").replace("perhaps ", "")
}
WritingTone.PUNCHY -> {
text.uppercase().replace(".", "!")
}
WritingTone.EMOJIFY -> {
"$text \uD83D\uDE80\uD83D\uDD25\u2728"
}
}
return WritingResult(
originalText = text,
transformedText = transformed,
tone = tone,
)
}
private fun correctMock(text: String): String =
text
.replace("teh ", "the ")
.replace("dont ", "don't ")
.replace("cant ", "can't ")
.replace("wont ", "won't ")
.replace("i ", "I ")
override fun close() {
// no-op: mock holds no native handles or background workers to release.
}
}
@@ -1,61 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
import androidx.compose.runtime.Immutable
interface WritingAssistant {
suspend fun checkAvailability(): WritingAssistantStatus
suspend fun transform(
text: String,
tone: WritingTone,
): WritingResult
fun close()
}
enum class WritingTone {
CORRECT,
REPHRASE,
SHORTER,
ELABORATE,
FRIENDLY,
PROFESSIONAL,
MORE_DIRECT,
PUNCHY,
EMOJIFY,
}
sealed class WritingAssistantStatus {
data object Available : WritingAssistantStatus()
data object Unavailable : WritingAssistantStatus()
data object Downloading : WritingAssistantStatus()
}
@Immutable
data class WritingResult(
val originalText: String,
val transformedText: String,
val tone: WritingTone,
)
@@ -1,54 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.ui.note.creators.aihelp
import androidx.compose.foundation.layout.height
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.ui.stringRes
@Composable
fun AiWritingHelpButton(
isActive: Boolean,
onClick: () -> Unit,
) {
IconButton(
onClick = { onClick() },
) {
Icon(
symbol = MaterialSymbols.AutoAwesome,
contentDescription = stringRes(R.string.ai_writing_help),
modifier = Modifier.height(22.dp),
tint =
if (isActive) {
MaterialTheme.colorScheme.primary
} else {
MaterialTheme.colorScheme.onBackground
},
)
}
}
@@ -1,169 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.ui.note.creators.aihelp
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.background
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.FilterChip
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.service.ai.WritingResult
import com.vitorpamplona.amethyst.service.ai.WritingTone
import com.vitorpamplona.amethyst.ui.stringRes
@Composable
fun AiWritingHelpPanel(
isVisible: Boolean,
readyResults: Map<WritingTone, WritingResult>,
selectedResult: WritingResult?,
onToneSelected: (WritingTone) -> Unit,
onApply: () -> Unit,
onDismiss: () -> Unit,
) {
AnimatedVisibility(
visible = isVisible,
enter = expandVertically(),
exit = shrinkVertically(),
) {
Column(
modifier =
Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp),
) {
selectedResult?.let {
AiResultCard(
result = it,
onApply = onApply,
onDismiss = onDismiss,
)
}
ToneChipRow(
readyTones = readyResults.keys,
selectedTone = selectedResult?.tone,
onToneSelected = onToneSelected,
)
}
}
}
@Composable
private fun AiResultCard(
result: WritingResult,
onApply: () -> Unit,
onDismiss: () -> Unit,
) {
Column(
modifier =
Modifier
.fillMaxWidth()
.padding(vertical = 4.dp)
.clip(RoundedCornerShape(12.dp))
.background(MaterialTheme.colorScheme.surfaceVariant)
.padding(12.dp),
) {
Text(
text = result.transformedText,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier =
Modifier
.fillMaxWidth()
.heightIn(max = 150.dp)
.verticalScroll(rememberScrollState()),
)
Row(
modifier =
Modifier
.fillMaxWidth()
.padding(top = 8.dp),
horizontalArrangement = Arrangement.End,
) {
TextButton(onClick = onDismiss) {
Text(stringRes(R.string.ai_writing_dismiss))
}
OutlinedButton(onClick = onApply) {
Text(stringRes(R.string.ai_writing_use_this))
}
}
}
}
@Composable
private fun ToneChipRow(
readyTones: Set<WritingTone>,
selectedTone: WritingTone?,
onToneSelected: (WritingTone) -> Unit,
) {
val scrollState = rememberScrollState()
Row(
modifier =
Modifier
.horizontalScroll(scrollState)
.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(6.dp),
) {
WritingTone.entries.forEach { tone ->
if (tone in readyTones) {
FilterChip(
selected = tone == selectedTone,
onClick = { onToneSelected(tone) },
label = { Text(toneDisplayName(tone)) },
)
}
}
}
}
@Composable
private fun toneDisplayName(tone: WritingTone): String =
when (tone) {
WritingTone.CORRECT -> stringRes(R.string.ai_tone_correct)
WritingTone.REPHRASE -> stringRes(R.string.ai_tone_rephrase)
WritingTone.SHORTER -> stringRes(R.string.ai_tone_shorter)
WritingTone.ELABORATE -> stringRes(R.string.ai_tone_elaborate)
WritingTone.FRIENDLY -> stringRes(R.string.ai_tone_friendly)
WritingTone.PROFESSIONAL -> stringRes(R.string.ai_tone_professional)
WritingTone.MORE_DIRECT -> stringRes(R.string.ai_tone_more_direct)
WritingTone.PUNCHY -> stringRes(R.string.ai_tone_punchy)
WritingTone.EMOJIFY -> stringRes(R.string.ai_tone_emojify)
}
@@ -103,7 +103,6 @@ import com.vitorpamplona.amethyst.ui.navigation.routes.Route
import com.vitorpamplona.amethyst.ui.navigation.topbars.PostingTopBar
import com.vitorpamplona.amethyst.ui.note.BaseUserPicture
import com.vitorpamplona.amethyst.ui.note.NoteCompose
import com.vitorpamplona.amethyst.ui.note.creators.aihelp.AiWritingHelpPanel
import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.ContentSensitivityExplainer
import com.vitorpamplona.amethyst.ui.note.creators.contentWarning.MarkAsSensitiveButton
import com.vitorpamplona.amethyst.ui.note.creators.emojiSuggestions.WatchAndLoadMyEmojiList
@@ -180,10 +179,6 @@ fun ShortNotePostScreen(
val activity = context.getActivity()
val scope = rememberCoroutineScope()
LaunchedEffect(Unit) {
postViewModel.initWritingAssistant(context)
}
LaunchedEffect(postViewModel, accountViewModel) {
val baseReplyTo = baseReplyToId?.let { accountViewModel.getNoteIfExists(it) }
val quote = quoteId?.let { accountViewModel.getNoteIfExists(it) }
@@ -714,15 +709,6 @@ private fun NewPostScreenBody(
)
}
AiWritingHelpPanel(
isVisible = postViewModel.showAiPanel,
readyResults = postViewModel.aiResults,
selectedResult = postViewModel.aiSelectedResult,
onToneSelected = postViewModel::selectAiResult,
onApply = postViewModel::applyAiResult,
onDismiss = postViewModel::dismissAiResult,
)
val alwaysOnEnabled by accountViewModel.account.settings.alwaysOnNotificationService
.collectAsStateWithLifecycle()
var showAlwaysOnPrompt by remember { mutableStateOf(false) }
@@ -46,17 +46,10 @@ import com.vitorpamplona.amethyst.commons.ui.text.replaceCurrentWord
import com.vitorpamplona.amethyst.commons.ui.text.setTextAndPlaceCursorAtBeginning
import com.vitorpamplona.amethyst.model.Account
import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.BooleanType
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.model.accountsCache.AccountCacheState
import com.vitorpamplona.amethyst.service.ai.MockWritingAssistant
import com.vitorpamplona.amethyst.service.ai.WritingAssistant
import com.vitorpamplona.amethyst.service.ai.WritingAssistantFactory
import com.vitorpamplona.amethyst.service.ai.WritingAssistantStatus
import com.vitorpamplona.amethyst.service.ai.WritingResult
import com.vitorpamplona.amethyst.service.ai.WritingTone
import com.vitorpamplona.amethyst.service.location.LocationState
import com.vitorpamplona.amethyst.service.uploads.CompressorQuality
import com.vitorpamplona.amethyst.service.uploads.MediaCompressor
@@ -165,13 +158,7 @@ import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.RandomInstance
import com.vitorpamplona.quartz.utils.TimeUtils
import kotlinx.collections.immutable.ImmutableList
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -423,96 +410,6 @@ open class ShortNotePostViewModel :
return accountViewModel.account.powDifficultyFor(anticipatedPowKind())
}
// AI Writing Help for testing
private val useMockAi = false
var aiResults by mutableStateOf<Map<WritingTone, WritingResult>>(emptyMap())
var aiSelectedResult by mutableStateOf<WritingResult?>(null)
var aiStatus by mutableStateOf<WritingAssistantStatus>(WritingAssistantStatus.Unavailable)
private var writingAssistant: WritingAssistant? = null
private var aiComputeJob: Job? = null
private var lastComputedText: String = ""
val showAiPanel: Boolean
get() {
val prefEnabled =
accountViewModel.settings.uiSettingsFlow.automaticallyProposeAiImprovements.value ==
BooleanType.ALWAYS
return prefEnabled && aiStatus is WritingAssistantStatus.Available && aiResults.isNotEmpty()
}
fun initWritingAssistant(context: android.content.Context) {
if (writingAssistant == null) {
writingAssistant =
if (useMockAi) {
MockWritingAssistant()
} else {
WritingAssistantFactory.create(context)
}
viewModelScope.launch(Dispatchers.IO) {
aiStatus = writingAssistant?.checkAvailability() ?: WritingAssistantStatus.Unavailable
}
}
}
fun precomputeAiResults() {
val assistant = writingAssistant ?: return
if (aiStatus !is WritingAssistantStatus.Available) return
val prefEnabled =
accountViewModel.settings.uiSettingsFlow.automaticallyProposeAiImprovements.value ==
BooleanType.ALWAYS
if (!prefEnabled) return
val text = message.text.toString().trim()
if (text.isBlank() || text == lastComputedText) return
aiComputeJob?.cancel()
aiResults = emptyMap()
aiSelectedResult = null
aiComputeJob =
viewModelScope.launch(Dispatchers.IO) {
delay(1000)
lastComputedText = text
val results =
coroutineScope {
WritingTone.entries
.map { tone ->
async {
try {
assistant.transform(text, tone)
} catch (e: Exception) {
if (e is CancellationException) throw e
null
}
}
}.awaitAll()
.filterNotNull()
.associateBy { it.tone }
}
aiResults = results
}
}
fun selectAiResult(tone: WritingTone) {
aiSelectedResult = aiResults[tone]
}
fun applyAiResult() {
aiSelectedResult?.let {
message.setTextAndPlaceCursorAtEnd(it.transformedText)
aiSelectedResult = null
aiResults = emptyMap()
lastComputedText = ""
draftTag.newVersion()
}
}
fun dismissAiResult() {
aiSelectedResult = null
}
fun lnAddress(): String? = account.userProfile().lnAddress()
fun hasLnAddress(): Boolean = account.userProfile().lnAddress() != null
@@ -1635,7 +1532,6 @@ open class ShortNotePostViewModel :
emojiSuggestions?.processCurrentWord(lastWord)
}
precomputeAiResults()
draftTag.newVersion()
}
@@ -1874,8 +1770,6 @@ open class ShortNotePostViewModel :
override fun onCleared() {
super.onCleared()
writingAssistant?.close()
writingAssistant = null
Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" }
}
@@ -102,13 +102,6 @@ fun ComposeSettingsContent(
description = R.string.auto_create_drafts_setting_description,
)
SettingsDivider()
BooleanSwitchTile(
flow = sharedPrefs.automaticallyProposeAiImprovements,
icon = MaterialSymbols.AutoAwesome,
title = R.string.ai_writing_setting_title,
description = R.string.ai_writing_setting_description,
)
SettingsDivider()
BooleanSwitchTile(
flow = sharedPrefs.useTrackedBroadcasts,
icon = MaterialSymbols.CellTower,
@@ -3034,9 +3034,6 @@
<string name="relay_members_removed">تمت إزالة %1$d أعضاء من الـ relay</string>
<string name="relay_join_request">طلب الانضمام إلى relay</string>
<string name="relay_leave_request">طلب مغادرة relay</string>
<string name="ai_writing_help">مساعدة الذكاء الاصطناعي في الكتابة</string>
<string name="ai_writing_setting_title">اقتراح تحسينات النص</string>
<string name="ai_writing_setting_description">يستخدم نموذج ذكاء اصطناعي على الجهاز لاقتراح تصحيحات نصية وتغييرات في النبرة.</string>
<string name="tracked_broadcasts_setting_title">البث المتتبَّع</string>
<string name="tracked_broadcasts_setting_description">استخدم المذيع المتتبَّع عند إرسال الأحداث. يعرض تقدمًا مباشرًا وحالة كل relay أثناء البث.</string>
<string name="suggest_workouts_setting_title">اقتراح تمارين للمشاركة</string>
@@ -3044,17 +3041,6 @@
<string name="compose_settings">إعدادات الكتابة</string>
<string name="auto_create_drafts_setting_title">إنشاء مسودات تلقائياً</string>
<string name="auto_create_drafts_setting_description">يحفظ حدثاً كمسودة تلقائياً عند الكتابة أو مغادرة محرر النص بنص غير مُرسل، ويرسله إلى relay صناديق الصادر الخاصة.</string>
<string name="ai_writing_use_this">استخدام هذا</string>
<string name="ai_writing_dismiss">رفض</string>
<string name="ai_tone_correct">تصحيح</string>
<string name="ai_tone_rephrase">إعادة صياغة</string>
<string name="ai_tone_shorter">أقصر</string>
<string name="ai_tone_elaborate">توسيع</string>
<string name="ai_tone_friendly">ودّي</string>
<string name="ai_tone_professional">احترافي</string>
<string name="ai_tone_more_direct">أكثر مباشرة</string>
<string name="ai_tone_punchy">قوي ومؤثر</string>
<string name="ai_tone_emojify">+ إيموجي</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">حزم الإيموجي</string>
<string name="emoji_pack_management_title">إضافة إلى قائمة الإيموجي</string>
@@ -2918,9 +2918,6 @@
<string name="relay_members_removed">Relay থেকে %1$d জন সদস্য সরানো হয়েছে</string>
<string name="relay_join_request">Relay যোগ দেওয়ার অনুরোধ</string>
<string name="relay_leave_request">Relay ছেড়ে যাওয়ার অনুরোধ</string>
<string name="ai_writing_help">AI লেখার সহায়তা</string>
<string name="ai_writing_setting_title">পাঠ্য উন্নতির প্রস্তাব দিন</string>
<string name="ai_writing_setting_description">পাঠ্য সংশোধন এবং সুরের পরিবর্তন প্রস্তাব করতে ডিভাইসে AI মডেল ব্যবহার করে।</string>
<string name="tracked_broadcasts_setting_title">ট্র্যাকড সম্প্রচার</string>
<string name="tracked_broadcasts_setting_description">ইভেন্ট পাঠানোর সময় ট্র্যাকড ব্রডকাস্টার ব্যবহার করুন। সম্প্রচার করার সময় লাইভ অগ্রগতি এবং প্রতি-relay অবস্থা দেখায়।</string>
<string name="suggest_workouts_setting_title">শেয়ার করার জন্য ওয়ার্কআউট সুপারিশ করুন</string>
@@ -2928,17 +2925,6 @@
<string name="compose_settings">কম্পোজ সেটিংস</string>
<string name="auto_create_drafts_setting_title">স্বয়ংক্রিয়ভাবে খসড়া তৈরি করুন</string>
<string name="auto_create_drafts_setting_description">আপনি টাইপ করলে বা না-পাঠানো পাঠ্য সহ কম্পোজার ছেড়ে গেলে স্বয়ংক্রিয়ভাবে একটি খসড়া ইভেন্ট সংরক্ষণ করে এবং আপনার ব্যক্তিগত আউটবক্স relay-গুলোতে পাঠায়।</string>
<string name="ai_writing_use_this">এটি ব্যবহার করুন</string>
<string name="ai_writing_dismiss">বাতিল করুন</string>
<string name="ai_tone_correct">সংশোধন</string>
<string name="ai_tone_rephrase">পুনরায় বলুন</string>
<string name="ai_tone_shorter">সংক্ষিপ্ত</string>
<string name="ai_tone_elaborate">বিস্তারিত</string>
<string name="ai_tone_friendly">বন্ধুত্বপূর্ণ</string>
<string name="ai_tone_professional">পেশাদার</string>
<string name="ai_tone_more_direct">আরো সরাসরি</string>
<string name="ai_tone_punchy">প্রভাবশালী</string>
<string name="ai_tone_emojify">+ ইমোজি</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">ইমোজি প্যাক</string>
<string name="emoji_pack_management_title">ইমোজি তালিকায় যোগ করুন</string>
@@ -4712,9 +4712,6 @@
<string name="relay_members_removed">%1$d členů odebráno z relé</string>
<string name="relay_join_request">Žádost o připojení k relé</string>
<string name="relay_leave_request">Žádost o opuštění relé</string>
<string name="ai_writing_help">Asistent psaní s AI</string>
<string name="ai_writing_setting_title">Navrhovat vylepšení textu</string>
<string name="ai_writing_setting_description">Používá AI model běžící v zařízení k navrhování oprav textu a změn tónu.</string>
<string name="tracked_broadcasts_setting_title">Sledovaná vysílání</string>
<string name="tracked_broadcasts_setting_description">Použít sledovaného vysílače při odesílání událostí. Zobrazuje živý průběh a stav jednotlivých relayů během vysílání.</string>
<string name="suggest_workouts_setting_title">Navrhovat tréninky ke sdílení</string>
@@ -4827,17 +4824,6 @@
<string name="pow_publish_failed_retry">Váš %1$s dokončil těžbu, ale nepodařilo se jej publikovat. Bude to zkuseno znovu při příštím spuštění aplikace.</string>
<string name="pow_kind_chat_message">Chatová zpráva</string>
<string name="pow_kind_report">Nahlášení</string>
<string name="ai_writing_use_this">Použít toto</string>
<string name="ai_writing_dismiss">Zavřít</string>
<string name="ai_tone_correct">Opravit</string>
<string name="ai_tone_rephrase">Přeformulovat</string>
<string name="ai_tone_shorter">Kratší</string>
<string name="ai_tone_elaborate">Rozvést</string>
<string name="ai_tone_friendly">Přátelský</string>
<string name="ai_tone_professional">Profesionální</string>
<string name="ai_tone_more_direct">Přímější</string>
<string name="ai_tone_punchy">Úderný</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji balíčky</string>
<string name="emoji_pack_management_title">Přidat do seznamu emoji</string>
@@ -4524,9 +4524,6 @@
<string name="relay_members_removed">%1$d Mitglieder aus Relay entfernt</string>
<string name="relay_join_request">Relay-Beitrittsanfrage</string>
<string name="relay_leave_request">Relay-Austrittsanfrage</string>
<string name="ai_writing_help">KI-Schreibhilfe</string>
<string name="ai_writing_setting_title">Textverbesserungen vorschlagen</string>
<string name="ai_writing_setting_description">Verwendet ein KI-Modell auf dem Gerät, um Textkorrekturen und Tonänderungen vorzuschlagen.</string>
<string name="tracked_broadcasts_setting_title">Verfolgte Übertragungen</string>
<string name="tracked_broadcasts_setting_description">Verwende den verfolgten Broadcaster beim Senden von Ereignissen. Zeigt Live-Fortschritt und Status pro Relay während der Übertragung.</string>
<string name="suggest_workouts_setting_title">Workouts zum Teilen vorschlagen</string>
@@ -4621,17 +4618,6 @@
<string name="pow_publish_failed_retry">Dein %1$s wurde fertig geschürft, konnte aber nicht veröffentlicht werden. Es wird beim nächsten Start der App erneut versucht.</string>
<string name="pow_kind_chat_message">Chat-Nachricht</string>
<string name="pow_kind_report">Meldung</string>
<string name="ai_writing_use_this">Verwenden</string>
<string name="ai_writing_dismiss">Schließen</string>
<string name="ai_tone_correct">Korrigieren</string>
<string name="ai_tone_rephrase">Umformulieren</string>
<string name="ai_tone_shorter">Kürzer</string>
<string name="ai_tone_elaborate">Ausführen</string>
<string name="ai_tone_friendly">Freundlich</string>
<string name="ai_tone_professional">Professionell</string>
<string name="ai_tone_more_direct">Direkter</string>
<string name="ai_tone_punchy">Prägnant</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji-Pakete</string>
<string name="emoji_pack_management_title">Zur Emoji-Liste hinzufügen</string>
@@ -4600,11 +4600,8 @@ anz der Bedingungen ist erforderlich</string>
<string name="relay_leave_request">Relay-Austrittsanfrage</string>
<string name="ai_writing_help">KI-Schreibhilfe</string>
<string name="ai_writing_setting_title">Textverbesserungen vorschlagen</string>
<string name="ai_writing_setting_description">Verwendet ein KI-Modell auf dem Gerät, um Textkorrekturen und Tonänderungen vorzuschlagen.</string>
<string name="tracked_broadcasts_setting_title">Verfolgte Übertragungen</string>
@@ -4620,27 +4617,16 @@ anz der Bedingungen ist erforderlich</string>
<string name="auto_create_drafts_setting_description">Speichert automatisch ein Entwurfsereignis, wenn du tippst oder den Editor mit ungesendetem Text verlässt, und sendet es an deine privaten ausgehenden Relays.</string>
<string name="ai_writing_use_this">Verwenden</string>
<string name="ai_writing_dismiss">Schließen</string>
<string name="ai_tone_correct">Korrigieren</string>
<string name="ai_tone_rephrase">Umformulieren</string>
<string name="ai_tone_shorter">Kürzer</string>
<string name="ai_tone_elaborate">Ausführen</string>
<string name="ai_tone_friendly">Freundlich</string>
<string name="ai_tone_professional">Professionell</string>
<string name="ai_tone_more_direct">Direkter</string>
<string name="ai_tone_punchy">Prägnant</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Emoji-Pakete</string>
@@ -2862,9 +2862,6 @@
<string name="relay_members_removed">%1$d μέλη αφαιρέθηκαν από το relay</string>
<string name="relay_join_request">Αίτηση συμμετοχής σε relay</string>
<string name="relay_leave_request">Αίτηση αποχώρησης από relay</string>
<string name="ai_writing_help">Βοήθεια Συγγραφής AI</string>
<string name="ai_writing_setting_title">Πρόταση βελτιώσεων κειμένου</string>
<string name="ai_writing_setting_description">Χρησιμοποιεί ένα τοπικό μοντέλο AI για να προτείνει διορθώσεις κειμένου και αλλαγές τόνου.</string>
<string name="tracked_broadcasts_setting_title">Παρακολουθούμενες μεταδόσεις</string>
<string name="tracked_broadcasts_setting_description">Χρήση του παρακολουθούμενου αναμεταδότη κατά την αποστολή συμβάντων. Εμφανίζει ζωντανή πρόοδο και κατάσταση ανά relay κατά τη μετάδοση.</string>
<string name="suggest_workouts_setting_title">Πρόταση προπονήσεων για κοινοποίηση</string>
@@ -2872,16 +2869,6 @@
<string name="compose_settings">Ρυθμίσεις Σύνταξης</string>
<string name="auto_create_drafts_setting_title">Αυτόματη δημιουργία προχείρων</string>
<string name="auto_create_drafts_setting_description">Αποθηκεύει αυτόματα ένα προχείρο συμβάν όταν πληκτρολογείτε ή εγκαταλείπετε ένα παράθυρο σύνταξης με μη αποσταλμένο κείμενο και το αποστέλλει στα ιδιωτικά outbox relay σας.</string>
<string name="ai_writing_use_this">Χρήση Αυτού</string>
<string name="ai_writing_dismiss">Απόρριψη</string>
<string name="ai_tone_correct">Διόρθωση</string>
<string name="ai_tone_rephrase">Αναδιατύπωση</string>
<string name="ai_tone_shorter">Συντομότερο</string>
<string name="ai_tone_elaborate">Επεξεργασία</string>
<string name="ai_tone_friendly">Φιλικό</string>
<string name="ai_tone_professional">Επαγγελματικό</string>
<string name="ai_tone_more_direct">Πιο Άμεσο</string>
<string name="ai_tone_punchy">Δυναμικό</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Πακέτα Emoji</string>
<string name="emoji_pack_management_title">Προσθήκη στη Λίστα Emoji</string>
@@ -2921,9 +2921,6 @@
<string name="relay_members_removed">%1$d membroj forigitaj el relay</string>
<string name="relay_join_request">Peto pri aliĝo al relay</string>
<string name="relay_leave_request">Peto pri foriro el relay</string>
<string name="ai_writing_help">Helpo pri AI-Skribado</string>
<string name="ai_writing_setting_title">Proponi tekstajn plibonigojn</string>
<string name="ai_writing_setting_description">Uzas aparatan AI-modelon por proponi tekstajn korektojn kaj tondoŝanĝojn.</string>
<string name="tracked_broadcasts_setting_title">Spurataj dissendoj</string>
<string name="tracked_broadcasts_setting_description">Uzu la spuratan dissendanton kiam vi sendas eventojn. Montras vivan progreson kaj relay-specifan staton dum dissendado.</string>
<string name="suggest_workouts_setting_title">Sugesti trejnadojn por dividi</string>
@@ -2931,17 +2928,6 @@
<string name="compose_settings">Agordoj de Verkado</string>
<string name="auto_create_drafts_setting_title">Aŭtomate krei skizojn</string>
<string name="auto_create_drafts_setting_description">Konservas skizon aŭtomate kiam vi tajpas aŭ forlasas verkiston kun nesendita teksto kaj sendas al viaj privataj eligaj relay-oj.</string>
<string name="ai_writing_use_this">Uzi Ĉi Tion</string>
<string name="ai_writing_dismiss">Ignori</string>
<string name="ai_tone_correct">Korekti</string>
<string name="ai_tone_rephrase">Reformuligi</string>
<string name="ai_tone_shorter">Pli Mallonga</string>
<string name="ai_tone_elaborate">Plidetali</string>
<string name="ai_tone_friendly">Amika</string>
<string name="ai_tone_professional">Profesia</string>
<string name="ai_tone_more_direct">Pli Rekta</string>
<string name="ai_tone_punchy">Trafa</string>
<string name="ai_tone_emojify">+ Emodžio</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emodžio-Pakaj</string>
<string name="emoji_pack_management_title">Aldoni al Emodžio-Listo</string>
@@ -2727,9 +2727,6 @@
<string name="relay_members_removed">%1$d membroj forigitaj el relay</string>
<string name="relay_join_request">Peto pri aliĝo al relay</string>
<string name="relay_leave_request">Peto pri foriro el relay</string>
<string name="ai_writing_help">Helpo pri AI-Skribado</string>
<string name="ai_writing_setting_title">Proponi tekstajn plibonigojn</string>
<string name="ai_writing_setting_description">Uzas aparatan AI-modelon por proponi tekstajn korektojn kaj tondoŝanĝojn.</string>
<string name="tracked_broadcasts_setting_title">Spurataj dissendoj</string>
<string name="tracked_broadcasts_setting_description">Uzu la spuratan dissendanton kiam vi sendas eventojn. Montras vivan progreson kaj relay-specifan staton dum dissendado.</string>
<string name="suggest_workouts_setting_title">Sugesti trejnadojn por dividi</string>
@@ -2737,17 +2734,6 @@
<string name="compose_settings">Agordoj de Verkado</string>
<string name="auto_create_drafts_setting_title">Aŭtomate krei skizojn</string>
<string name="auto_create_drafts_setting_description">Konservas skizon aŭtomate kiam vi tajpas aŭ forlasas verkiston kun nesendita teksto kaj sendas al viaj privataj eligaj relay-oj.</string>
<string name="ai_writing_use_this">Uzi Ĉi Tion</string>
<string name="ai_writing_dismiss">Ignori</string>
<string name="ai_tone_correct">Korekti</string>
<string name="ai_tone_rephrase">Reformuligi</string>
<string name="ai_tone_shorter">Pli Mallonga</string>
<string name="ai_tone_elaborate">Plidetali</string>
<string name="ai_tone_friendly">Amika</string>
<string name="ai_tone_professional">Profesia</string>
<string name="ai_tone_more_direct">Pli Rekta</string>
<string name="ai_tone_punchy">Trafa</string>
<string name="ai_tone_emojify">+ Emodžio</string>
<string name="emoji_packs_title">Emodžio-Pakaj</string>
<string name="emoji_pack_management_title">Aldoni al Emodžio-Listo</string>
<string name="add_to_emoji_list">Aldoni al mia emodžio-listo</string>
@@ -2982,9 +2982,6 @@
<string name="relay_members_removed">%1$d miembros eliminados del relay</string>
<string name="relay_join_request">Solicitud de unión al relay</string>
<string name="relay_leave_request">Solicitud de salida del relay</string>
<string name="ai_writing_help">Ayuda de escritura IA</string>
<string name="ai_writing_setting_title">Proponer mejoras de texto</string>
<string name="ai_writing_setting_description">Usa un modelo de IA en el dispositivo para proponer correcciones de texto y cambios de tono.</string>
<string name="tracked_broadcasts_setting_title">Difusiones rastreadas</string>
<string name="tracked_broadcasts_setting_description">Usa el emisor rastreado al enviar eventos. Muestra el progreso en tiempo real y el estado por relay durante la difusión.</string>
<string name="suggest_workouts_setting_title">Sugerir entrenamientos para compartir</string>
@@ -2992,16 +2989,6 @@
<string name="compose_settings">Ajustes de composición</string>
<string name="auto_create_drafts_setting_title">Crear borradores automáticamente</string>
<string name="auto_create_drafts_setting_description">Guarda un borrador automáticamente cuando escribes o abandonas el compositor con texto no enviado, y lo envía a tus relays de bandeja de salida privada.</string>
<string name="ai_writing_use_this">Usar esto</string>
<string name="ai_writing_dismiss">Descartar</string>
<string name="ai_tone_correct">Corregir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Más corto</string>
<string name="ai_tone_elaborate">Ampliar</string>
<string name="ai_tone_friendly">Amigable</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Más directo</string>
<string name="ai_tone_punchy">Contundente</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Paquetes de emojis</string>
<string name="emoji_pack_management_title">Añadir a la lista de emojis</string>
@@ -2973,9 +2973,6 @@
<string name="relay_members_removed">%1$d miembros eliminados del relay</string>
<string name="relay_join_request">Solicitud de unión al relay</string>
<string name="relay_leave_request">Solicitud de salida del relay</string>
<string name="ai_writing_help">Ayuda de escritura IA</string>
<string name="ai_writing_setting_title">Proponer mejoras de texto</string>
<string name="ai_writing_setting_description">Usa un modelo de IA en el dispositivo para proponer correcciones de texto y cambios de tono.</string>
<string name="tracked_broadcasts_setting_title">Difusiones rastreadas</string>
<string name="tracked_broadcasts_setting_description">Usa el emisor rastreado al enviar eventos. Muestra el progreso en tiempo real y el estado por relay durante la difusión.</string>
<string name="suggest_workouts_setting_title">Sugerir entrenamientos para compartir</string>
@@ -2983,16 +2980,6 @@
<string name="compose_settings">Ajustes de composición</string>
<string name="auto_create_drafts_setting_title">Crear borradores automáticamente</string>
<string name="auto_create_drafts_setting_description">Guarda un borrador automáticamente cuando escribes o abandonas el compositor con texto no enviado, y lo envía a tus relays de bandeja de salida privada.</string>
<string name="ai_writing_use_this">Usar esto</string>
<string name="ai_writing_dismiss">Descartar</string>
<string name="ai_tone_correct">Corregir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Más corto</string>
<string name="ai_tone_elaborate">Ampliar</string>
<string name="ai_tone_friendly">Amigable</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Más directo</string>
<string name="ai_tone_punchy">Contundente</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Paquetes de emojis</string>
<string name="emoji_pack_management_title">Añadir a la lista de emojis</string>
@@ -2973,9 +2973,6 @@
<string name="relay_members_removed">%1$d miembros eliminados del relay</string>
<string name="relay_join_request">Solicitud de unión al relay</string>
<string name="relay_leave_request">Solicitud de salida del relay</string>
<string name="ai_writing_help">Ayuda de escritura IA</string>
<string name="ai_writing_setting_title">Proponer mejoras de texto</string>
<string name="ai_writing_setting_description">Usa un modelo de IA en el dispositivo para proponer correcciones de texto y cambios de tono.</string>
<string name="tracked_broadcasts_setting_title">Difusiones rastreadas</string>
<string name="tracked_broadcasts_setting_description">Usa el emisor rastreado al enviar eventos. Muestra el progreso en tiempo real y el estado por relay durante la difusión.</string>
<string name="suggest_workouts_setting_title">Sugerir entrenamientos para compartir</string>
@@ -2983,16 +2980,6 @@
<string name="compose_settings">Ajustes de composición</string>
<string name="auto_create_drafts_setting_title">Crear borradores automáticamente</string>
<string name="auto_create_drafts_setting_description">Guarda un borrador automáticamente cuando escribes o abandonas el compositor con texto no enviado, y lo envía a tus relays de bandeja de salida privada.</string>
<string name="ai_writing_use_this">Usar esto</string>
<string name="ai_writing_dismiss">Descartar</string>
<string name="ai_tone_correct">Corregir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Más corto</string>
<string name="ai_tone_elaborate">Ampliar</string>
<string name="ai_tone_friendly">Amigable</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Más directo</string>
<string name="ai_tone_punchy">Contundente</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Paquetes de emojis</string>
<string name="emoji_pack_management_title">Añadir a la lista de emojis</string>
@@ -3027,11 +3027,8 @@
<string name="relay_leave_request">Solicitud de salida del relay</string>
<string name="ai_writing_help">Ayuda de escritura IA</string>
<string name="ai_writing_setting_title">Proponer mejoras de texto</string>
<string name="ai_writing_setting_description">Usa un modelo de IA en el dispositivo para proponer correcciones de texto y cambios de tono.</string>
<string name="tracked_broadcasts_setting_title">Difusiones rastreadas</string>
@@ -3047,27 +3044,16 @@
<string name="auto_create_drafts_setting_description">Guarda un borrador automáticamente cuando escribes o abandonas el compositor con texto no enviado, y lo envía a tus relays de bandeja de salida privada.</string>
<string name="ai_writing_use_this">Usar esto</string>
<string name="ai_writing_dismiss">Descartar</string>
<string name="ai_tone_correct">Corregir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Más corto</string>
<string name="ai_tone_elaborate">Ampliar</string>
<string name="ai_tone_friendly">Amigable</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Más directo</string>
<string name="ai_tone_punchy">Contundente</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Paquetes de emojis</string>
@@ -2933,9 +2933,6 @@
<string name="relay_members_removed">%1$d عضو از relay حذف شد</string>
<string name="relay_join_request">درخواست پیوستن به relay</string>
<string name="relay_leave_request">درخواست خروج از relay</string>
<string name="ai_writing_help">کمک نوشتاری هوش مصنوعی</string>
<string name="ai_writing_setting_title">پیشنهاد بهبود متن</string>
<string name="ai_writing_setting_description">از یک مدل هوش مصنوعی روی دستگاه برای پیشنهاد اصلاحات متن و تغییر لحن استفاده می‌کند.</string>
<string name="tracked_broadcasts_setting_title">پخش‌های ردیابی‌شده</string>
<string name="tracked_broadcasts_setting_description">هنگام ارسال رویدادها از پخش‌کننده ردیابی‌شده استفاده کنید. پیشرفت زنده و وضعیت هر relay را در حین پخش نشان می‌دهد.</string>
<string name="suggest_workouts_setting_title">پیشنهاد اشتراک‌گذاری تمرینات</string>
@@ -2943,17 +2940,6 @@
<string name="compose_settings">تنظیمات نوشتن</string>
<string name="auto_create_drafts_setting_title">ایجاد خودکار پیش‌نویس</string>
<string name="auto_create_drafts_setting_description">هنگام تایپ یا خروج از یک ناحیه نوشتن با متن ارسال‌نشده، به‌طور خودکار یک رویداد پیش‌نویس ذخیره می‌کند و آن را به relay‌های صندوق خروجی خصوصی شما ارسال می‌کند.</string>
<string name="ai_writing_use_this">استفاده از این</string>
<string name="ai_writing_dismiss">رد کردن</string>
<string name="ai_tone_correct">تصحیح</string>
<string name="ai_tone_rephrase">بازنویسی</string>
<string name="ai_tone_shorter">کوتاه‌تر</string>
<string name="ai_tone_elaborate">بسط دادن</string>
<string name="ai_tone_friendly">دوستانه</string>
<string name="ai_tone_professional">حرفه‌ای</string>
<string name="ai_tone_more_direct">مستقیم‌تر</string>
<string name="ai_tone_punchy">تأثیرگذار</string>
<string name="ai_tone_emojify">+ ایموجی</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">بسته‌های ایموجی</string>
<string name="emoji_pack_management_title">افزودن به فهرست ایموجی</string>
@@ -3678,11 +3678,8 @@
<string name="relay_leave_request">درخواست خروج از relay</string>
<string name="ai_writing_help">کمک نوشتاری هوش مصنوعی</string>
<string name="ai_writing_setting_title">پیشنهاد بهبود متن</string>
<string name="ai_writing_setting_description">از یک مدل هوش مصنوعی روی دستگاه برای پیشنهاد اصلاحات متن و تغییر لحن استفاده می‌کند.</string>
<string name="tracked_broadcasts_setting_title">پخش‌های ردیابی‌شده</string>
@@ -3698,27 +3695,16 @@
<string name="auto_create_drafts_setting_description">هنگام تایپ یا خروج از یک ناحیه نوشتن با متن ارسال‌نشده، به‌طور خودکار یک رویداد پیش‌نویس ذخیره می‌کند و آن را به relay‌های صندوق خروجی خصوصی شما ارسال می‌کند.</string>
<string name="ai_writing_use_this">استفاده از این</string>
<string name="ai_writing_dismiss">رد کردن</string>
<string name="ai_tone_correct">تصحیح</string>
<string name="ai_tone_rephrase">بازنویسی</string>
<string name="ai_tone_shorter">کوتاه‌تر</string>
<string name="ai_tone_elaborate">بسط دادن</string>
<string name="ai_tone_friendly">دوستانه</string>
<string name="ai_tone_professional">حرفه‌ای</string>
<string name="ai_tone_more_direct">مستقیم‌تر</string>
<string name="ai_tone_punchy">تأثیرگذار</string>
<string name="ai_tone_emojify">+ ایموجی</string>
<string name="emoji_packs_title">بسته‌های ایموجی</string>
@@ -2893,9 +2893,6 @@
<string name="relay_members_removed">%1$d jäsentä poistettu relaylta</string>
<string name="relay_join_request">Relayn liittymispyyntö</string>
<string name="relay_leave_request">Relayn poistumispyyntö</string>
<string name="ai_writing_help">Tekoälyn kirjoitusapu</string>
<string name="ai_writing_setting_title">Ehdota tekstiparannuksia</string>
<string name="ai_writing_setting_description">Käyttää laitteen tekoälymallia ehdottamaan tekstikorjauksia ja sävymuutoksia.</string>
<string name="tracked_broadcasts_setting_title">Seuratut lähetykset</string>
<string name="tracked_broadcasts_setting_description">Käytä seurattua lähetintä tapahtumien lähettämiseen. Näyttää reaaliaikaiset edistymistiedot ja relay-kohtaisen tilan lähetyksen aikana.</string>
<string name="suggest_workouts_setting_title">Ehdota treenejä jaettavaksi</string>
@@ -2903,16 +2900,6 @@
<string name="compose_settings">Kirjoitusasetukset</string>
<string name="auto_create_drafts_setting_title">Luo luonnokset automaattisesti</string>
<string name="auto_create_drafts_setting_description">Tallentaa luonnoksen automaattisesti, kun kirjoitat tai poistut kirjoitusnäkymästä lähettämättömällä tekstillä, ja lähettää sen yksityisiin lähteviin relayihisi.</string>
<string name="ai_writing_use_this">Käytä tätä</string>
<string name="ai_writing_dismiss">Hylkää</string>
<string name="ai_tone_correct">Korjaa</string>
<string name="ai_tone_rephrase">Muotoile uudelleen</string>
<string name="ai_tone_shorter">Lyhyempi</string>
<string name="ai_tone_elaborate">Laajenna</string>
<string name="ai_tone_friendly">Ystävällinen</string>
<string name="ai_tone_professional">Ammattimainen</string>
<string name="ai_tone_more_direct">Suorempi</string>
<string name="ai_tone_punchy">Napakka</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji-paketit</string>
<string name="emoji_pack_management_title">Lisää emoji-listaan</string>
@@ -2817,9 +2817,6 @@
<string name="relay_members_removed">%1$d membres retirés du relais</string>
<string name="relay_join_request">Demande d\'adhésion au relais</string>
<string name="relay_leave_request">Demande de départ du relais</string>
<string name="ai_writing_help">Aide à la rédaction IA</string>
<string name="ai_writing_setting_title">Proposer des améliorations de texte</string>
<string name="ai_writing_setting_description">Utilise un modèle IA embarqué pour proposer des corrections de texte et des changements de ton.</string>
<string name="tracked_broadcasts_setting_title">Diffusions suivies</string>
<string name="tracked_broadcasts_setting_description">Utilise le diffuseur suivi lors de l\'envoi d\'événements. Affiche la progression en direct et l\'état par relais pendant la diffusion.</string>
<string name="suggest_workouts_setting_title">Suggérer des entraînements à partager</string>
@@ -2827,16 +2824,6 @@
<string name="compose_settings">Paramètres de composition</string>
<string name="auto_create_drafts_setting_title">Créer automatiquement des brouillons</string>
<string name="auto_create_drafts_setting_description">Enregistre automatiquement un brouillon lorsque vous tapez ou quittez un compositeur avec du texte non envoyé, et l\'envoie à vos relais de boîte d\'envoi privée.</string>
<string name="ai_writing_use_this">Utiliser ceci</string>
<string name="ai_writing_dismiss">Ignorer</string>
<string name="ai_tone_correct">Corriger</string>
<string name="ai_tone_rephrase">Reformuler</string>
<string name="ai_tone_shorter">Plus court</string>
<string name="ai_tone_elaborate">Développer</string>
<string name="ai_tone_friendly">Amical</string>
<string name="ai_tone_professional">Professionnel</string>
<string name="ai_tone_more_direct">Plus direct</string>
<string name="ai_tone_punchy">Percutant</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Packs d\'emojis</string>
<string name="emoji_pack_management_title">Ajouter à la liste d\'emojis</string>
@@ -3190,9 +3190,6 @@
<string name="relay_members_removed">%1$d membres retirés du relais</string>
<string name="relay_join_request">Demande d\'adhésion au relais</string>
<string name="relay_leave_request">Demande de départ du relais</string>
<string name="ai_writing_help">Aide à la rédaction IA</string>
<string name="ai_writing_setting_title">Proposer des améliorations de texte</string>
<string name="ai_writing_setting_description">Utilise un modèle IA embarqué pour proposer des corrections de texte et des changements de ton.</string>
<string name="tracked_broadcasts_setting_title">Diffusions suivies</string>
<string name="tracked_broadcasts_setting_description">Utilise le diffuseur suivi lors de l\'envoi d\'événements. Affiche la progression en direct et l\'état par relais pendant la diffusion.</string>
<string name="suggest_workouts_setting_title">Suggérer des entraînements à partager</string>
@@ -3213,17 +3210,6 @@
<string name="pow_time_left_soon">à tout moment maintenant</string>
<string name="pow_publish_failed">Votre %1$s a fini de miner mais n\'a pas pu être publié : %2$s</string>
<string name="pow_kind_report">Signaler</string>
<string name="ai_writing_use_this">Utiliser ceci</string>
<string name="ai_writing_dismiss">Ignorer</string>
<string name="ai_tone_correct">Corriger</string>
<string name="ai_tone_rephrase">Reformuler</string>
<string name="ai_tone_shorter">Plus court</string>
<string name="ai_tone_elaborate">Développer</string>
<string name="ai_tone_friendly">Amical</string>
<string name="ai_tone_professional">Professionnel</string>
<string name="ai_tone_more_direct">Plus direct</string>
<string name="ai_tone_punchy">Percutant</string>
<string name="ai_tone_emojify">+ Émoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Packs d\'emojis</string>
<string name="emoji_pack_management_title">Ajouter à la liste d\'emojis</string>
@@ -5004,11 +5004,8 @@
<string name="relay_leave_request">Demande de départ du relais</string>
<string name="ai_writing_help">Aide à la rédaction IA</string>
<string name="ai_writing_setting_title">Proposer des améliorations de texte</string>
<string name="ai_writing_setting_description">Utilise un modèle IA embarqué pour proposer des corrections de texte et des changements de ton.</string>
<string name="tracked_broadcasts_setting_title">Diffusions suivies</string>
@@ -5024,27 +5021,16 @@
<string name="auto_create_drafts_setting_description">Enregistre automatiquement un brouillon lorsque vous tapez ou quittez un compositeur avec du texte non envoyé, et l\'envoie à vos relais de boîte d\'envoi privée.</string>
<string name="ai_writing_use_this">Utiliser ceci</string>
<string name="ai_writing_dismiss">Ignorer</string>
<string name="ai_tone_correct">Corriger</string>
<string name="ai_tone_rephrase">Reformuler</string>
<string name="ai_tone_shorter">Plus court</string>
<string name="ai_tone_elaborate">Développer</string>
<string name="ai_tone_friendly">Amical</string>
<string name="ai_tone_professional">Professionnel</string>
<string name="ai_tone_more_direct">Plus direct</string>
<string name="ai_tone_punchy">Percutant</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Packs d\'emojis</string>
@@ -4525,9 +4525,6 @@
<string name="relay_members_removed">%1$d सदस्य हटाए गए पुनःप्रसारक से</string>
<string name="relay_join_request">पुनःप्रसारक से जुडने का अनुरोध</string>
<string name="relay_leave_request">पुनःप्रसारक से चले जाने का अनुरोध</string>
<string name="ai_writing_help">एआई॰ लेखन सहायता</string>
<string name="ai_writing_setting_title">लेख शोधन प्रस्ताव करें</string>
<string name="ai_writing_setting_description">यन्त्र स्थित एआई॰ प्रतिरूप का प्रयोग करता है लेख सुधार तथा स्वर परिवर्तन प्रस्तावों के लिए।</string>
<string name="tracked_broadcasts_setting_title">पदचिह्न युक्त प्रसारण</string>
<string name="tracked_broadcasts_setting_description">पदचिह्न युक्त प्रसारक का उपयोग करें घटनाओं को भेजते समय। वर्तमान प्रगति दिखाता है तथा प्रत्येक पुनःप्रसारक की स्थिति प्रसारण करते समय।</string>
<string name="suggest_workouts_setting_title">व्यायामों का सुझाव बाँटनें के लिए</string>
@@ -4622,17 +4619,6 @@
<string name="pow_publish_failed_retry">आपका %1$s खनन समाप्त हुआ पर प्रकाशित नहीं हो सका। अगली बार क्रमक आरम्भ होने पर इसका पुनःप्रयास किया जाएगा।</string>
<string name="pow_kind_chat_message">चर्चा सन्देश</string>
<string name="pow_kind_report">वृत्तान्त</string>
<string name="ai_writing_use_this">इसका प्रयोग करें</string>
<string name="ai_writing_dismiss">हटाएँ</string>
<string name="ai_tone_correct">सम्यक</string>
<string name="ai_tone_rephrase">वाक्याम्श पुनः लिखें</string>
<string name="ai_tone_shorter">सूक्ष्मतर</string>
<string name="ai_tone_elaborate">विस्तार</string>
<string name="ai_tone_friendly">मित्रतापूर्ण</string>
<string name="ai_tone_professional">व्यावसायिक</string>
<string name="ai_tone_more_direct">अधिक सीधा</string>
<string name="ai_tone_punchy">आघाती</string>
<string name="ai_tone_emojify">भावचिह्न युक्त</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">भावचिह्न पोटलियाँ</string>
<string name="emoji_pack_management_title">भावचिह्न सूची में जोडें</string>
@@ -4526,9 +4526,6 @@
<string name="relay_members_removed">%1$d tag el lett távolítva az átjátszóról</string>
<string name="relay_join_request">Átjátszóhoz való csatlakozás kérése</string>
<string name="relay_leave_request">Átjátszó elhagyásának kérése</string>
<string name="ai_writing_help">Súgó az LLM-alapú íráshoz</string>
<string name="ai_writing_setting_title">Javaslatok a szöveg javítására</string>
<string name="ai_writing_setting_description">Az eszközön futó LLM-modell segítségével szövegjavításokkal és hangnemváltoztatásokkal kapcsolatos javaslatokat kaphat.</string>
<string name="tracked_broadcasts_setting_title">Nyomon követhető közvetítések</string>
<string name="tracked_broadcasts_setting_description">Nyomon követhető közvetítők használata az események küldesékor. Közvetítés közben megjeleníti a jelenlegi előrehaladást és az egyes átjátszók állapotát.</string>
<string name="suggest_workouts_setting_title">Megosztandó edzések javaslása</string>
@@ -4623,17 +4620,6 @@
<string name="pow_publish_failed_retry">A(z) %1$s bányászata befejeződött, de nem sikerült közzétenni. A következő indításkor az alkalmazás újra megpróbálja.</string>
<string name="pow_kind_chat_message">Csevegési üzenet</string>
<string name="pow_kind_report">Jelentés</string>
<string name="ai_writing_use_this">Ennek használata</string>
<string name="ai_writing_dismiss">Eltüntetés</string>
<string name="ai_tone_correct">Javítás</string>
<string name="ai_tone_rephrase">Újrafogalmazás</string>
<string name="ai_tone_shorter">Rövidebb</string>
<string name="ai_tone_elaborate">Kidolgozott</string>
<string name="ai_tone_friendly">Barátságos</string>
<string name="ai_tone_professional">Szakmai</string>
<string name="ai_tone_more_direct">Közvetlenebb</string>
<string name="ai_tone_punchy">Erőteljes</string>
<string name="ai_tone_emojify">+ Emodzsi</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emodzsicsomagok</string>
<string name="emoji_pack_management_title">Hozzáadás az emodzsilistához</string>
@@ -2822,9 +2822,6 @@ Seharusnya %3$s</string>
<string name="relay_members_removed">%1$d anggota dihapus dari relay</string>
<string name="relay_join_request">Permintaan bergabung relay</string>
<string name="relay_leave_request">Permintaan keluar relay</string>
<string name="ai_writing_help">Bantuan Penulisan AI</string>
<string name="ai_writing_setting_title">Usulkan perbaikan teks</string>
<string name="ai_writing_setting_description">Menggunakan model AI di perangkat untuk mengusulkan koreksi teks dan perubahan nada.</string>
<string name="tracked_broadcasts_setting_title">Siaran terlacak</string>
<string name="tracked_broadcasts_setting_description">Gunakan penyiar terlacak saat mengirim acara. Menampilkan progres langsung dan status per-relay saat menyiarkan.</string>
<string name="suggest_workouts_setting_title">Sarankan latihan untuk dibagikan</string>
@@ -2832,16 +2829,6 @@ Seharusnya %3$s</string>
<string name="compose_settings">Pengaturan Compose</string>
<string name="auto_create_drafts_setting_title">Buat draf secara otomatis</string>
<string name="auto_create_drafts_setting_description">Menyimpan acara draf secara otomatis saat Anda mengetik atau meninggalkan composer dengan teks yang belum dikirim dan mengirimnya ke relay outbox privat Anda.</string>
<string name="ai_writing_use_this">Gunakan Ini</string>
<string name="ai_writing_dismiss">Tutup</string>
<string name="ai_tone_correct">Koreksi</string>
<string name="ai_tone_rephrase">Ungkapkan Ulang</string>
<string name="ai_tone_shorter">Lebih Singkat</string>
<string name="ai_tone_elaborate">Elaborasi</string>
<string name="ai_tone_friendly">Ramah</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Lebih Langsung</string>
<string name="ai_tone_punchy">Tegas</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Paket Emoji</string>
<string name="emoji_pack_management_title">Tambah ke Daftar Emoji</string>
@@ -4004,11 +4004,8 @@
<string name="relay_leave_request">Permintaan keluar relay</string>
<string name="ai_writing_help">Bantuan Penulisan AI</string>
<string name="ai_writing_setting_title">Usulkan perbaikan teks</string>
<string name="ai_writing_setting_description">Menggunakan model AI di perangkat untuk mengusulkan koreksi teks dan perubahan nada.</string>
<string name="tracked_broadcasts_setting_title">Siaran terlacak</string>
@@ -4024,27 +4021,16 @@
<string name="auto_create_drafts_setting_description">Menyimpan acara draf secara otomatis saat Anda mengetik atau meninggalkan composer dengan teks yang belum dikirim dan mengirimnya ke relay outbox privat Anda.</string>
<string name="ai_writing_use_this">Gunakan Ini</string>
<string name="ai_writing_dismiss">Tutup</string>
<string name="ai_tone_correct">Koreksi</string>
<string name="ai_tone_rephrase">Ungkapkan Ulang</string>
<string name="ai_tone_shorter">Lebih Singkat</string>
<string name="ai_tone_elaborate">Elaborasi</string>
<string name="ai_tone_friendly">Ramah</string>
<string name="ai_tone_professional">Profesional</string>
<string name="ai_tone_more_direct">Lebih Langsung</string>
<string name="ai_tone_punchy">Tegas</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Paket Emoji</string>
@@ -2859,9 +2859,6 @@
<string name="relay_members_removed">%1$d membri rimossi dal relay</string>
<string name="relay_join_request">Richiesta di iscrizione al relay</string>
<string name="relay_leave_request">Richiesta di uscita dal relay</string>
<string name="ai_writing_help">Assistenza Scrittura AI</string>
<string name="ai_writing_setting_title">Proponi miglioramenti al testo</string>
<string name="ai_writing_setting_description">Utilizza un modello AI sul dispositivo per proporre correzioni al testo e modifiche al tono.</string>
<string name="tracked_broadcasts_setting_title">Trasmissioni tracciate</string>
<string name="tracked_broadcasts_setting_description">Usa il trasmettitore tracciato per l\'invio degli eventi. Mostra l\'avanzamento in tempo reale e lo stato per ogni relay durante la trasmissione.</string>
<string name="suggest_workouts_setting_title">Suggerisci allenamenti da condividere</string>
@@ -2869,16 +2866,6 @@
<string name="compose_settings">Impostazioni Composizione</string>
<string name="auto_create_drafts_setting_title">Crea bozze automaticamente</string>
<string name="auto_create_drafts_setting_description">Salva automaticamente una bozza dell\'evento quando scrivi o esci da un compositore con testo non inviato, e la invia ai tuoi relay di outbox privati.</string>
<string name="ai_writing_use_this">Usa Questo</string>
<string name="ai_writing_dismiss">Ignora</string>
<string name="ai_tone_correct">Correggi</string>
<string name="ai_tone_rephrase">Riformula</string>
<string name="ai_tone_shorter">Più breve</string>
<string name="ai_tone_elaborate">Approfondisci</string>
<string name="ai_tone_friendly">Amichevole</string>
<string name="ai_tone_professional">Professionale</string>
<string name="ai_tone_more_direct">Più diretto</string>
<string name="ai_tone_punchy">Incisivo</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Pacchetti Emoji</string>
<string name="emoji_pack_management_title">Aggiungi alla Lista Emoji</string>
@@ -2877,9 +2877,6 @@
<string name="relay_members_removed">%1$d 人のメンバーが relay から削除されました</string>
<string name="relay_join_request">Relay 参加リクエスト</string>
<string name="relay_leave_request">Relay 退出リクエスト</string>
<string name="ai_writing_help">AI ライティングサポート</string>
<string name="ai_writing_setting_title">テキストの改善を提案</string>
<string name="ai_writing_setting_description">デバイス上のAIモデルを使用して、テキストの修正やトーンの変更を提案します。</string>
<string name="tracked_broadcasts_setting_title">追跡ブロードキャスト</string>
<string name="tracked_broadcasts_setting_description">イベントの送信時に追跡ブロードキャスターを使用します。ブロードキャスト中にライブの進捗とrelay別のステータスを表示します。</string>
<string name="suggest_workouts_setting_title">ワークアウトの共有を提案する</string>
@@ -2887,17 +2884,6 @@
<string name="compose_settings">作成の設定</string>
<string name="auto_create_drafts_setting_title">自動的に下書きを作成する</string>
<string name="auto_create_drafts_setting_description">入力中または未送信のテキストがある状態でコンポーザーを離れると、下書きイベントを自動的に保存し、プライベートのアウトボックスrelayに送信します。</string>
<string name="ai_writing_use_this">これを使用する</string>
<string name="ai_writing_dismiss">閉じる</string>
<string name="ai_tone_correct">修正する</string>
<string name="ai_tone_rephrase">言い換える</string>
<string name="ai_tone_shorter">短くする</string>
<string name="ai_tone_elaborate">詳しく書く</string>
<string name="ai_tone_friendly">フレンドリーに</string>
<string name="ai_tone_professional">プロフェッショナルに</string>
<string name="ai_tone_more_direct">より直接的に</string>
<string name="ai_tone_punchy">パンチを効かせる</string>
<string name="ai_tone_emojify">+ 絵文字</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">絵文字パック</string>
<string name="emoji_pack_management_title">絵文字リストに追加</string>
@@ -4093,11 +4093,8 @@
<string name="relay_leave_request">Relay 退出リクエスト</string>
<string name="ai_writing_help">AI ライティングサポート</string>
<string name="ai_writing_setting_title">テキストの改善を提案</string>
<string name="ai_writing_setting_description">デバイス上のAIモデルを使用して、テキストの修正やトーンの変更を提案します。</string>
<string name="tracked_broadcasts_setting_title">追跡ブロードキャスト</string>
@@ -4113,27 +4110,16 @@
<string name="auto_create_drafts_setting_description">入力中または未送信のテキストがある状態でコンポーザーを離れると、下書きイベントを自動的に保存し、プライベートのアウトボックスrelayに送信します。</string>
<string name="ai_writing_use_this">これを使用する</string>
<string name="ai_writing_dismiss">閉じる</string>
<string name="ai_tone_correct">修正する</string>
<string name="ai_tone_rephrase">言い換える</string>
<string name="ai_tone_shorter">短くする</string>
<string name="ai_tone_elaborate">詳しく書く</string>
<string name="ai_tone_friendly">フレンドリーに</string>
<string name="ai_tone_professional">プロフェッショナルに</string>
<string name="ai_tone_more_direct">より直接的に</string>
<string name="ai_tone_punchy">パンチを効かせる</string>
<string name="ai_tone_emojify">+ 絵文字</string>
<string name="emoji_packs_title">絵文字パック</string>
@@ -2864,9 +2864,6 @@
<string name="relay_members_removed">Relay에서 %1$d명의 멤버가 제거되었습니다</string>
<string name="relay_join_request">Relay 가입 요청</string>
<string name="relay_leave_request">Relay 탈퇴 요청</string>
<string name="ai_writing_help">AI 작성 도우미</string>
<string name="ai_writing_setting_title">텍스트 개선 제안</string>
<string name="ai_writing_setting_description">기기 내 AI 모델을 사용하여 텍스트 수정 및 톤 변경을 제안합니다.</string>
<string name="tracked_broadcasts_setting_title">추적된 방송</string>
<string name="tracked_broadcasts_setting_description">이벤트를 전송할 때 추적 브로드캐스터를 사용합니다. 방송하는 동안 실시간 진행 상황 및 relay별 상태를 표시합니다.</string>
<string name="suggest_workouts_setting_title">운동 공유 제안</string>
@@ -2874,16 +2871,6 @@
<string name="compose_settings">작성 설정</string>
<string name="auto_create_drafts_setting_title">자동으로 임시 저장</string>
<string name="auto_create_drafts_setting_description">텍스트를 입력하거나 전송하지 않은 텍스트가 있는 작성 화면을 떠날 때 자동으로 임시 저장 이벤트를 저장하고 개인 outbox relay로 전송합니다.</string>
<string name="ai_writing_use_this">이것 사용</string>
<string name="ai_writing_dismiss">닫기</string>
<string name="ai_tone_correct">교정</string>
<string name="ai_tone_rephrase">다시 표현</string>
<string name="ai_tone_shorter">더 짧게</string>
<string name="ai_tone_elaborate">자세히</string>
<string name="ai_tone_friendly">친근하게</string>
<string name="ai_tone_professional">전문적으로</string>
<string name="ai_tone_more_direct">더 직접적으로</string>
<string name="ai_tone_punchy">임팩트 있게</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji 팩</string>
<string name="emoji_pack_management_title">Emoji 목록에 추가</string>
@@ -2947,9 +2947,6 @@
<string name="relay_members_removed">%1$d dalībnieki noņemti no relay servera</string>
<string name="relay_join_request">Relay pievienošanās pieprasījums</string>
<string name="relay_leave_request">Relay aiziešanas pieprasījums</string>
<string name="ai_writing_help">MI rakstīšanas palīdzība</string>
<string name="ai_writing_setting_title">Piedāvāt teksta uzlabojumus</string>
<string name="ai_writing_setting_description">Izmanto ierīcē esošu MI modeli, lai piedāvātu teksta labojumus un toņa izmaiņas.</string>
<string name="tracked_broadcasts_setting_title">Izsekotās pārraides</string>
<string name="tracked_broadcasts_setting_description">Izmantot izsekoto raidītāju, sūtot notikumus. Parāda tiešraides progresu un katra relay statusa informāciju pārraides laikā.</string>
<string name="suggest_workouts_setting_title">Ieteikt kopīgojamas treniņu sesijas</string>
@@ -2957,16 +2954,6 @@
<string name="compose_settings">Rakstīšanas iestatījumi</string>
<string name="auto_create_drafts_setting_title">Automātiski izveidot melnrakstus</string>
<string name="auto_create_drafts_setting_description">Automātiski saglabā melnrakstu, kad rakstāt vai atstājat redaktoru ar nesūtītu tekstu, un nosūta uz jūsu privātajiem izejas relay serveriem.</string>
<string name="ai_writing_use_this">Izmantot šo</string>
<string name="ai_writing_dismiss">Noraidīt</string>
<string name="ai_tone_correct">Labot</string>
<string name="ai_tone_rephrase">Pārfrāzēt</string>
<string name="ai_tone_shorter">Īsāk</string>
<string name="ai_tone_elaborate">Izvērst</string>
<string name="ai_tone_friendly">Draudzīgi</string>
<string name="ai_tone_professional">Profesionāli</string>
<string name="ai_tone_more_direct">Tiešāk</string>
<string name="ai_tone_punchy">Izteiksmīgi</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji pakotnes</string>
<string name="emoji_pack_management_title">Pievienot emoji sarakstam</string>
@@ -5057,11 +5057,8 @@
<string name="relay_leave_request">Relay-opzegverzoek</string>
<string name="ai_writing_help">AI-schrijfassistent</string>
<string name="ai_writing_setting_title">Tekstverbeteringen voorstellen</string>
<string name="ai_writing_setting_description">Gebruikt een on-device AI-model om tekstcorrecties en toonwijzigingen voor te stellen.</string>
<string name="tracked_broadcasts_setting_title">Getrackte uitzendingen</string>
@@ -5077,27 +5074,16 @@
<string name="auto_create_drafts_setting_description">Slaat automatisch een concept op wanneer je typt of de opsteller verlaat met onverzonden tekst en stuurt dit naar je privé outbox-relays.</string>
<string name="ai_writing_use_this">Gebruik dit</string>
<string name="ai_writing_dismiss">Sluiten</string>
<string name="ai_tone_correct">Corrigeren</string>
<string name="ai_tone_rephrase">Herschrijven</string>
<string name="ai_tone_shorter">Korter</string>
<string name="ai_tone_elaborate">Uitbreiden</string>
<string name="ai_tone_friendly">Vriendelijk</string>
<string name="ai_tone_professional">Professioneel</string>
<string name="ai_tone_more_direct">Directer</string>
<string name="ai_tone_punchy">Kort en krachtig</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Emoji-pakketten</string>
@@ -4502,9 +4502,6 @@
<string name="relay_members_removed">%1$d leden verwijderd van relay</string>
<string name="relay_join_request">Relay-lidmaatschapsverzoek</string>
<string name="relay_leave_request">Relay-opzegverzoek</string>
<string name="ai_writing_help">AI-schrijfassistent</string>
<string name="ai_writing_setting_title">Tekstverbeteringen voorstellen</string>
<string name="ai_writing_setting_description">Gebruikt een on-device AI-model om tekstcorrecties en toonwijzigingen voor te stellen.</string>
<string name="tracked_broadcasts_setting_title">Getrackte uitzendingen</string>
<string name="tracked_broadcasts_setting_description">Gebruik de tracked broadcaster bij het verzenden van events. Toont live voortgang en per-relay-status tijdens uitzenden.</string>
<string name="suggest_workouts_setting_title">Workouts voorstellen om te delen</string>
@@ -4599,17 +4596,6 @@
<string name="pow_publish_failed_retry">Je %1$s is klaar met mijnen maar kon niet worden gepubliceerd. Het wordt opnieuw geprobeerd de volgende keer dat de app start.</string>
<string name="pow_kind_chat_message">Chatbericht</string>
<string name="pow_kind_report">Melding</string>
<string name="ai_writing_use_this">Gebruik dit</string>
<string name="ai_writing_dismiss">Sluiten</string>
<string name="ai_tone_correct">Corrigeren</string>
<string name="ai_tone_rephrase">Herschrijven</string>
<string name="ai_tone_shorter">Korter</string>
<string name="ai_tone_elaborate">Uitbreiden</string>
<string name="ai_tone_friendly">Vriendelijk</string>
<string name="ai_tone_professional">Professioneel</string>
<string name="ai_tone_more_direct">Directer</string>
<string name="ai_tone_punchy">Kort en krachtig</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji-pakketten</string>
<string name="emoji_pack_management_title">Toevoegen aan emoji-lijst</string>
@@ -4350,11 +4350,8 @@
<string name="relay_leave_request">Relay-opzegverzoek</string>
<string name="ai_writing_help">AI-schrijfassistent</string>
<string name="ai_writing_setting_title">Tekstverbeteringen voorstellen</string>
<string name="ai_writing_setting_description">Gebruikt een on-device AI-model om tekstcorrecties en toonwijzigingen voor te stellen.</string>
<string name="tracked_broadcasts_setting_title">Getrackte uitzendingen</string>
@@ -4370,27 +4367,16 @@
<string name="auto_create_drafts_setting_description">Slaat automatisch een concept op wanneer je typt of de opsteller verlaat met onverzonden tekst en stuurt dit naar je privé outbox-relays.</string>
<string name="ai_writing_use_this">Gebruik dit</string>
<string name="ai_writing_dismiss">Sluiten</string>
<string name="ai_tone_correct">Corrigeren</string>
<string name="ai_tone_rephrase">Herschrijven</string>
<string name="ai_tone_shorter">Korter</string>
<string name="ai_tone_elaborate">Uitbreiden</string>
<string name="ai_tone_friendly">Vriendelijk</string>
<string name="ai_tone_professional">Professioneel</string>
<string name="ai_tone_more_direct">Directer</string>
<string name="ai_tone_punchy">Kort en krachtig</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Emoji-pakketten</string>
@@ -4714,9 +4714,6 @@ Zaplanowane posty z innych kont nie zostaną opublikowane, dopóki to konto jest
<string name="relay_members_removed">%1$d użytkowników usuniętych z transmitera</string>
<string name="relay_join_request">Prośba o dołączenie do transmitera</string>
<string name="relay_leave_request">Żądanie opuszczenia transmitera</string>
<string name="ai_writing_help">Pomoc w pisaniu z użyciem AI</string>
<string name="ai_writing_setting_title">Zaproponuj poprawki w tekście</string>
<string name="ai_writing_setting_description">Używa modelu sztucznej inteligencji wbudowanego w urządzenie, proponując poprawki tekstu i zmiany tonu wypowiedzi.</string>
<string name="tracked_broadcasts_setting_title">Monitorowane transmisje</string>
<string name="tracked_broadcasts_setting_description">Podczas wysyłania zdarzeń korzystaj z monitora transmisji. Pokazuje postęp na żywo i status transmisji podczas nadawania.</string>
<string name="suggest_workouts_setting_title">Zaproponuj treningi, którymi warto się podzielić</string>
@@ -4829,17 +4826,6 @@ Zaplanowane posty z innych kont nie zostaną opublikowane, dopóki to konto jest
<string name="pow_publish_failed_retry">Twój %1$s zakończył wydobywanie, ale nie udało się go opublikować. Próba zostanie powtórzona przy następnym uruchomieniu aplikacji.</string>
<string name="pow_kind_chat_message">Wiadomość Czatu</string>
<string name="pow_kind_report">Zgłoś</string>
<string name="ai_writing_use_this">Użyj tego</string>
<string name="ai_writing_dismiss">Ignoruj</string>
<string name="ai_tone_correct">Popraw</string>
<string name="ai_tone_rephrase">Przeformułuj</string>
<string name="ai_tone_shorter">Krócej</string>
<string name="ai_tone_elaborate">Rozwiń</string>
<string name="ai_tone_friendly">Przyjazny</string>
<string name="ai_tone_professional">Profesjonalny</string>
<string name="ai_tone_more_direct">Bardziej bezpośredni</string>
<string name="ai_tone_punchy">Mocny</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Pakiety emotikonów</string>
<string name="emoji_pack_management_title">Dodaj do listy emotikonów</string>
@@ -4522,9 +4522,6 @@
<string name="relay_members_removed">%1$d membros removidos do relay</string>
<string name="relay_join_request">Solicitação de entrada no relay</string>
<string name="relay_leave_request">Solicitação de saída do relay</string>
<string name="ai_writing_help">Assistente de escrita com IA</string>
<string name="ai_writing_setting_title">Sugerir melhorias de texto</string>
<string name="ai_writing_setting_description">Usa um modelo de IA no dispositivo para sugerir correções de texto e mudanças de tom.</string>
<string name="tracked_broadcasts_setting_title">Transmissões rastreadas</string>
<string name="tracked_broadcasts_setting_description">Usar o transmissor rastreado ao enviar eventos. Mostra progresso ao vivo e status por relay durante a transmissão.</string>
<string name="suggest_workouts_setting_title">Sugerir treinos para compartilhar</string>
@@ -4619,17 +4616,6 @@
<string name="pow_publish_failed_retry">Seu %1$s terminou de minerar, mas não pôde ser publicado. Uma nova tentativa será feita na próxima vez que o app iniciar.</string>
<string name="pow_kind_chat_message">Mensagem de chat</string>
<string name="pow_kind_report">Denúncia</string>
<string name="ai_writing_use_this">Usar isto</string>
<string name="ai_writing_dismiss">Dispensar</string>
<string name="ai_tone_correct">Corrigir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Mais curto</string>
<string name="ai_tone_elaborate">Elaborar</string>
<string name="ai_tone_friendly">Amigável</string>
<string name="ai_tone_professional">Profissional</string>
<string name="ai_tone_more_direct">Mais direto</string>
<string name="ai_tone_punchy">Impactante</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Pacotes de emojis</string>
<string name="emoji_pack_management_title">Adicionar à lista de emojis</string>
@@ -2881,9 +2881,6 @@
<string name="relay_members_removed">%1$d membros removidos do relay</string>
<string name="relay_join_request">Solicitação de entrada no relay</string>
<string name="relay_leave_request">Solicitação de saída do relay</string>
<string name="ai_writing_help">Assistente de escrita com IA</string>
<string name="ai_writing_setting_title">Sugerir melhorias de texto</string>
<string name="ai_writing_setting_description">Usa um modelo de IA no dispositivo para sugerir correções de texto e mudanças de tom.</string>
<string name="tracked_broadcasts_setting_title">Transmissões rastreadas</string>
<string name="tracked_broadcasts_setting_description">Usar o transmissor rastreado ao enviar eventos. Mostra progresso ao vivo e status por relay durante a transmissão.</string>
<string name="suggest_workouts_setting_title">Sugerir treinos para compartilhar</string>
@@ -2891,16 +2888,6 @@
<string name="compose_settings">Configurações de composição</string>
<string name="auto_create_drafts_setting_title">Criar rascunhos automaticamente</string>
<string name="auto_create_drafts_setting_description">Salva um evento de rascunho automaticamente quando você digita ou sai do compositor com texto não enviado e envia para seus relays de saída privados.</string>
<string name="ai_writing_use_this">Usar isto</string>
<string name="ai_writing_dismiss">Dispensar</string>
<string name="ai_tone_correct">Corrigir</string>
<string name="ai_tone_rephrase">Reformular</string>
<string name="ai_tone_shorter">Mais curto</string>
<string name="ai_tone_elaborate">Elaborar</string>
<string name="ai_tone_friendly">Amigável</string>
<string name="ai_tone_professional">Profissional</string>
<string name="ai_tone_more_direct">Mais direto</string>
<string name="ai_tone_punchy">Impactante</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Pacotes de emojis</string>
<string name="emoji_pack_management_title">Adicionar à lista de emojis</string>
@@ -2955,9 +2955,6 @@
<string name="relay_members_removed">%1$d участников удалено из relay</string>
<string name="relay_join_request">Запрос на вступление в relay</string>
<string name="relay_leave_request">Запрос на выход из relay</string>
<string name="ai_writing_help">Помощь ИИ в написании</string>
<string name="ai_writing_setting_title">Предлагать улучшения текста</string>
<string name="ai_writing_setting_description">Использует модель ИИ на устройстве для предложения исправлений текста и изменения тональности.</string>
<string name="tracked_broadcasts_setting_title">Отслеживаемые трансляции</string>
<string name="tracked_broadcasts_setting_description">Использует отслеживаемый режим при отправке событий. Показывает прогресс в реальном времени и статус по каждому relay.</string>
<string name="suggest_workouts_setting_title">Предлагать публикации тренировок</string>
@@ -2965,17 +2962,6 @@
<string name="compose_settings">Настройки редактора</string>
<string name="auto_create_drafts_setting_title">Автоматически создавать черновики</string>
<string name="auto_create_drafts_setting_description">Автоматически сохраняет черновик при вводе текста или выходе из редактора с неотправленным текстом и отправляет в ваши приватные outbox relay.</string>
<string name="ai_writing_use_this">Использовать</string>
<string name="ai_writing_dismiss">Отклонить</string>
<string name="ai_tone_correct">Исправить</string>
<string name="ai_tone_rephrase">Перефразировать</string>
<string name="ai_tone_shorter">Короче</string>
<string name="ai_tone_elaborate">Подробнее</string>
<string name="ai_tone_friendly">Дружелюбно</string>
<string name="ai_tone_professional">Профессионально</string>
<string name="ai_tone_more_direct">Прямее</string>
<string name="ai_tone_punchy">Энергично</string>
<string name="ai_tone_emojify">+ Эмодзи</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Наборы эмодзи</string>
<string name="emoji_pack_management_title">Добавить в список эмодзи</string>
@@ -2938,9 +2938,6 @@
<string name="relay_members_removed">%1$d участников удалено из relay</string>
<string name="relay_join_request">Запрос на вступление в relay</string>
<string name="relay_leave_request">Запрос на выход из relay</string>
<string name="ai_writing_help">Помощь ИИ в написании</string>
<string name="ai_writing_setting_title">Предлагать улучшения текста</string>
<string name="ai_writing_setting_description">Использует модель ИИ на устройстве для предложения исправлений текста и изменения тональности.</string>
<string name="tracked_broadcasts_setting_title">Отслеживаемые трансляции</string>
<string name="tracked_broadcasts_setting_description">Использует отслеживаемый режим при отправке событий. Показывает прогресс в реальном времени и статус по каждому relay.</string>
<string name="suggest_workouts_setting_title">Предлагать публикации тренировок</string>
@@ -2948,17 +2945,6 @@
<string name="compose_settings">Настройки редактора</string>
<string name="auto_create_drafts_setting_title">Автоматически создавать черновики</string>
<string name="auto_create_drafts_setting_description">Автоматически сохраняет черновик при вводе текста или выходе из редактора с неотправленным текстом и отправляет в ваши приватные outbox relay.</string>
<string name="ai_writing_use_this">Использовать</string>
<string name="ai_writing_dismiss">Отклонить</string>
<string name="ai_tone_correct">Исправить</string>
<string name="ai_tone_rephrase">Перефразировать</string>
<string name="ai_tone_shorter">Короче</string>
<string name="ai_tone_elaborate">Подробнее</string>
<string name="ai_tone_friendly">Дружелюбно</string>
<string name="ai_tone_professional">Профессионально</string>
<string name="ai_tone_more_direct">Прямее</string>
<string name="ai_tone_punchy">Энергично</string>
<string name="ai_tone_emojify">+ Эмодзи</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Наборы эмодзи</string>
<string name="emoji_pack_management_title">Добавить в список эмодзи</string>
@@ -3846,11 +3846,8 @@
<string name="relay_leave_request">Запрос на выход из relay</string>
<string name="ai_writing_help">Помощь ИИ в написании</string>
<string name="ai_writing_setting_title">Предлагать улучшения текста</string>
<string name="ai_writing_setting_description">Использует модель ИИ на устройстве для предложения исправлений текста и изменения тональности.</string>
<string name="tracked_broadcasts_setting_title">Отслеживаемые трансляции</string>
@@ -3866,27 +3863,16 @@
<string name="auto_create_drafts_setting_description">Автоматически сохраняет черновик при вводе текста или выходе из редактора с неотправленным текстом и отправляет в ваши приватные outbox relay.</string>
<string name="ai_writing_use_this">Использовать</string>
<string name="ai_writing_dismiss">Отклонить</string>
<string name="ai_tone_correct">Исправить</string>
<string name="ai_tone_rephrase">Перефразировать</string>
<string name="ai_tone_shorter">Короче</string>
<string name="ai_tone_elaborate">Подробнее</string>
<string name="ai_tone_friendly">Дружелюбно</string>
<string name="ai_tone_professional">Профессионально</string>
<string name="ai_tone_more_direct">Прямее</string>
<string name="ai_tone_punchy">Энергично</string>
<string name="ai_tone_emojify">+ Эмодзи</string>
<string name="emoji_packs_title">Наборы эмодзи</string>
@@ -4727,9 +4727,6 @@ Za podpisovanje se je potrebno prijaviti s privatnim ključem</string>
<string name="relay_members_removed">%1$d članov odstranjenih iz releja</string>
<string name="relay_join_request">Prošnja za dostop do releja</string>
<string name="relay_leave_request">Prošnja za izstop z releja</string>
<string name="ai_writing_help">Pomoč za pisanje z umetno inteligenco</string>
<string name="ai_writing_setting_title">Predlagaj tekstovne izboljšave</string>
<string name="ai_writing_setting_description">Uporablja model umetne inteligence v napravi za predloge popravkov besedila in spremembe tona.</string>
<string name="tracked_broadcasts_setting_title">Sledeni prenosi</string>
<string name="tracked_broadcasts_setting_description">Pri pošiljanju dogodkov uporabi sledilnik oddajanja. V živo prikazuje napredek in stanje posameznih relejev med oddajanjem.</string>
<string name="suggest_workouts_setting_title">Predlagaj vadbo za deljenje</string>
@@ -4842,17 +4839,6 @@ Za podpisovanje se je potrebno prijaviti s privatnim ključem</string>
<string name="pow_publish_failed_retry">Vaš %1$s je končal z rudarjenjem, vendar ga ni bilo mogoče objaviti. Ponovni poskus bo izveden ob naslednjem zagonu aplikacije.</string>
<string name="pow_kind_chat_message">Sporočilo klepeta</string>
<string name="pow_kind_report">Prijavi</string>
<string name="ai_writing_use_this">Uporabi to</string>
<string name="ai_writing_dismiss">Prekliči</string>
<string name="ai_tone_correct">Pravilno</string>
<string name="ai_tone_rephrase">Izrazi drugače</string>
<string name="ai_tone_shorter">Krajše</string>
<string name="ai_tone_elaborate">Razloži podrobneje</string>
<string name="ai_tone_friendly">Prijateljsko</string>
<string name="ai_tone_professional">Profesionalno</string>
<string name="ai_tone_more_direct">Boj direktno</string>
<string name="ai_tone_punchy">Udarno</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji paketi</string>
<string name="emoji_pack_management_title">Dodaj v seznam emojijev</string>
@@ -2918,9 +2918,6 @@
<string name="relay_members_removed">%1$d članova uklonjeno iz relay-a</string>
<string name="relay_join_request">Zahtev za pridruživanje relay-u</string>
<string name="relay_leave_request">Zahtev za napuštanje relay-a</string>
<string name="ai_writing_help">Pomoć AI pri pisanju</string>
<string name="ai_writing_setting_title">Predloži poboljšanja teksta</string>
<string name="ai_writing_setting_description">Koristi AI model na uređaju za predlaganje ispravki teksta i promena tona.</string>
<string name="tracked_broadcasts_setting_title">Praćena emitovanja</string>
<string name="tracked_broadcasts_setting_description">Koristite praćeni emiter pri slanju događaja. Prikazuje uživo napredak i status po relay-u tokom emitovanja.</string>
<string name="suggest_workouts_setting_title">Predloži treninge za deljenje</string>
@@ -2928,16 +2925,6 @@
<string name="compose_settings">Postavke pisanja</string>
<string name="auto_create_drafts_setting_title">Automatski kreiraj nacrte</string>
<string name="auto_create_drafts_setting_description">Automatski čuva nacrt kada kucate ili napustite editor sa neposlat im tekstom i šalje na vaše privatne odlazne relay-e.</string>
<string name="ai_writing_use_this">Koristi ovo</string>
<string name="ai_writing_dismiss">Odbaci</string>
<string name="ai_tone_correct">Ispravi</string>
<string name="ai_tone_rephrase">Preformuliši</string>
<string name="ai_tone_shorter">Kraće</string>
<string name="ai_tone_elaborate">Razradi</string>
<string name="ai_tone_friendly">Prijateljski</string>
<string name="ai_tone_professional">Profesionalno</string>
<string name="ai_tone_more_direct">Direktnije</string>
<string name="ai_tone_punchy">Upečatljivo</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji paketi</string>
<string name="emoji_pack_management_title">Dodaj na emoji listu</string>
@@ -4522,9 +4522,6 @@
<string name="relay_members_removed">%1$d medlemmar borttagna från relä</string>
<string name="relay_join_request">Begäran om att gå med i relä</string>
<string name="relay_leave_request">Begäran om att lämna relä</string>
<string name="ai_writing_help">AI-skrivhjälp</string>
<string name="ai_writing_setting_title">Föreslå textförbättringar</string>
<string name="ai_writing_setting_description">Använder en AI-modell på enheten för att föreslå textkorrigeringar och tonändringar.</string>
<string name="tracked_broadcasts_setting_title">Spårade sändningar</string>
<string name="tracked_broadcasts_setting_description">Använd den spårade sändaren när du skickar händelser. Visar liveförlopp och status per relä under sändning.</string>
<string name="suggest_workouts_setting_title">Föreslå träningspass att dela</string>
@@ -4619,17 +4616,6 @@
<string name="pow_publish_failed_retry">Ditt %1$s slutförde miningen men kunde inte publiceras. Det görs ett nytt försök nästa gång appen startar.</string>
<string name="pow_kind_chat_message">Chattmeddelande</string>
<string name="pow_kind_report">Rapport</string>
<string name="ai_writing_use_this">Använd detta</string>
<string name="ai_writing_dismiss">Avvisa</string>
<string name="ai_tone_correct">Korrigera</string>
<string name="ai_tone_rephrase">Formulera om</string>
<string name="ai_tone_shorter">Kortare</string>
<string name="ai_tone_elaborate">Utveckla</string>
<string name="ai_tone_friendly">Vänlig</string>
<string name="ai_tone_professional">Professionell</string>
<string name="ai_tone_more_direct">Mer direkt</string>
<string name="ai_tone_punchy">Slagkraftig</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji-paket</string>
<string name="emoji_pack_management_title">Lägg till i emoji-lista</string>
@@ -2900,9 +2900,6 @@
<string name="relay_members_removed">%1$d wanachama wameondolewa kutoka relay</string>
<string name="relay_join_request">Ombi la kujiunga na relay</string>
<string name="relay_leave_request">Ombi la kuacha relay</string>
<string name="ai_writing_help">Msaada wa Uandishi wa AI</string>
<string name="ai_writing_setting_title">Pendekeza maboresho ya maandishi</string>
<string name="ai_writing_setting_description">Hutumia mfano wa AI uliopo kwenye kifaa kupendekeza marekebisho ya maandishi na mabadiliko ya sauti.</string>
<string name="tracked_broadcasts_setting_title">Matangazo yanayofuatiliwa</string>
<string name="tracked_broadcasts_setting_description">Tumia mtangazaji anayefuatiliwa wakati wa kutuma matukio. Inaonyesha maendeleo ya moja kwa moja na hali ya kila relay wakati wa kutangaza.</string>
<string name="suggest_workouts_setting_title">Pendekeza mazoezi ya kushiriki</string>
@@ -2910,16 +2907,6 @@
<string name="compose_settings">Mipangilio ya Kutunga</string>
<string name="auto_create_drafts_setting_title">Unda rasimu kiotomatiki</string>
<string name="auto_create_drafts_setting_description">Huhifadhi tukio la rasimu kiotomatiki unapoandika au kuacha kitenzi cha kutunga chenye maandishi ambayo hayajatumwa na kutuma kwa relay zako za kibinafsi za outbox.</string>
<string name="ai_writing_use_this">Tumia Hii</string>
<string name="ai_writing_dismiss">Ondoa</string>
<string name="ai_tone_correct">Sahihisha</string>
<string name="ai_tone_rephrase">Badilisha Maneno</string>
<string name="ai_tone_shorter">Fupisho</string>
<string name="ai_tone_elaborate">Panua</string>
<string name="ai_tone_friendly">Kirafiki</string>
<string name="ai_tone_professional">Kitaalamu</string>
<string name="ai_tone_more_direct">Zaidi ya Moja kwa Moja</string>
<string name="ai_tone_punchy">Chenye Nguvu</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Pakiti za Emoji</string>
<string name="emoji_pack_management_title">Ongeza kwenye Orodha ya Emoji</string>
@@ -2888,9 +2888,6 @@
<string name="relay_members_removed">%1$d உறுப்பினர்கள் relay-லிருந்து நீக்கப்பட்டனர்</string>
<string name="relay_join_request">Relay சேரும் கோரிக்கை</string>
<string name="relay_leave_request">Relay விலகும் கோரிக்கை</string>
<string name="ai_writing_help">AI எழுத்து உதவி</string>
<string name="ai_writing_setting_title">உரை மேம்பாடுகளை பரிந்துரை செய்யவும்</string>
<string name="ai_writing_setting_description">உரை திருத்தங்கள் மற்றும் தொனி மாற்றங்களை பரிந்துரைக்க சாதனத்திலுள்ள AI மாதிரியை பயன்படுத்துகிறது.</string>
<string name="tracked_broadcasts_setting_title">கண்காணிக்கப்பட்ட ஒளிபரப்புகள்</string>
<string name="tracked_broadcasts_setting_description">நிகழ்வுகளை அனுப்பும்போது கண்காணிக்கப்பட்ட ஒளிபரப்பாளரை பயன்படுத்தவும். ஒளிபரப்பும்போது நேரடி முன்னேற்றம் மற்றும் ஒவ்வொரு relay நிலையையும் காட்டுகிறது.</string>
<string name="suggest_workouts_setting_title">பகிர உடற்பயிற்சிகளை பரிந்துரை செய்யவும்</string>
@@ -2898,16 +2895,6 @@
<string name="compose_settings">எழுதும் அமைப்புகள்</string>
<string name="auto_create_drafts_setting_title">தானாக வரைவுகளை உருவாக்கவும்</string>
<string name="auto_create_drafts_setting_description">நீங்கள் தட்டச்சு செய்யும்போது அல்லது அனுப்பப்படாத உரையுடன் ஒரு எழுத்துக் கலைஞரை விட்டு வெளியேறும்போது தானாகவே வரைவு நிகழ்வை சேமித்து உங்கள் தனிப்பட்ட outbox relays-களுக்கு அனுப்புகிறது.</string>
<string name="ai_writing_use_this">இதை பயன்படுத்து</string>
<string name="ai_writing_dismiss">நிராகரி</string>
<string name="ai_tone_correct">சரிசெய்</string>
<string name="ai_tone_rephrase">மீண்டும் வடிவமை</string>
<string name="ai_tone_shorter">குறுகியது</string>
<string name="ai_tone_elaborate">விரிவாக்கு</string>
<string name="ai_tone_friendly">நட்புடன்</string>
<string name="ai_tone_professional">தொழில்முறை</string>
<string name="ai_tone_more_direct">நேரடியாக</string>
<string name="ai_tone_punchy">சுறுசுறுப்பான</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji தொகுப்புகள்</string>
<string name="emoji_pack_management_title">Emoji பட்டியலில் சேர்</string>
@@ -2727,9 +2727,6 @@
<string name="relay_members_removed">%1$d உறுப்பினர்கள் relay-லிருந்து நீக்கப்பட்டனர்</string>
<string name="relay_join_request">Relay சேரும் கோரிக்கை</string>
<string name="relay_leave_request">Relay விலகும் கோரிக்கை</string>
<string name="ai_writing_help">AI எழுத்து உதவி</string>
<string name="ai_writing_setting_title">உரை மேம்பாடுகளை பரிந்துரை செய்யவும்</string>
<string name="ai_writing_setting_description">உரை திருத்தங்கள் மற்றும் தொனி மாற்றங்களை பரிந்துரைக்க சாதனத்திலுள்ள AI மாதிரியை பயன்படுத்துகிறது.</string>
<string name="tracked_broadcasts_setting_title">கண்காணிக்கப்பட்ட ஒளிபரப்புகள்</string>
<string name="tracked_broadcasts_setting_description">நிகழ்வுகளை அனுப்பும்போது கண்காணிக்கப்பட்ட ஒளிபரப்பாளரை பயன்படுத்தவும். ஒளிபரப்பும்போது நேரடி முன்னேற்றம் மற்றும் ஒவ்வொரு relay நிலையையும் காட்டுகிறது.</string>
<string name="suggest_workouts_setting_title">பகிர உடற்பயிற்சிகளை பரிந்துரை செய்யவும்</string>
@@ -2737,17 +2734,6 @@
<string name="compose_settings">எழுதும் அமைப்புகள்</string>
<string name="auto_create_drafts_setting_title">தானாக வரைவுகளை உருவாக்கவும்</string>
<string name="auto_create_drafts_setting_description">நீங்கள் தட்டச்சு செய்யும்போது அல்லது அனுப்பப்படாத உரையுடன் ஒரு எழுத்துக் கலைஞரை விட்டு வெளியேறும்போது தானாகவே வரைவு நிகழ்வை சேமித்து உங்கள் தனிப்பட்ட outbox relays-களுக்கு அனுப்புகிறது.</string>
<string name="ai_writing_use_this">இதை பயன்படுத்து</string>
<string name="ai_writing_dismiss">நிராகரி</string>
<string name="ai_tone_correct">சரிசெய்</string>
<string name="ai_tone_rephrase">மீண்டும் வடிவமை</string>
<string name="ai_tone_shorter">குறுகியது</string>
<string name="ai_tone_elaborate">விரிவாக்கு</string>
<string name="ai_tone_friendly">நட்புடன்</string>
<string name="ai_tone_professional">தொழில்முறை</string>
<string name="ai_tone_more_direct">நேரடியாக</string>
<string name="ai_tone_punchy">சுறுசுறுப்பான</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Emoji தொகுப்புகள்</string>
<string name="emoji_pack_management_title">Emoji பட்டியலில் சேர்</string>
<string name="add_to_emoji_list">என் emoji பட்டியலில் சேர்</string>
@@ -2725,9 +2725,6 @@
<string name="relay_members_removed">ลบ %1$d สมาชิกออกจาก relay แล้ว</string>
<string name="relay_join_request">คำขอเข้าร่วม Relay</string>
<string name="relay_leave_request">คำขอออกจาก Relay</string>
<string name="ai_writing_help">ความช่วยเหลือการเขียนด้วย AI</string>
<string name="ai_writing_setting_title">เสนอการปรับปรุงข้อความ</string>
<string name="ai_writing_setting_description">ใช้โมเดล AI บนอุปกรณ์เพื่อเสนอการแก้ไขข้อความและการเปลี่ยนแปลงโทนเสียง</string>
<string name="tracked_broadcasts_setting_title">การออกอากาศที่ติดตาม</string>
<string name="tracked_broadcasts_setting_description">ใช้ตัวออกอากาศที่ติดตามเมื่อส่งกิจกรรม แสดงความคืบหน้าสดและสถานะต่อ relay ขณะออกอากาศ</string>
<string name="suggest_workouts_setting_title">แนะนำการออกกำลังกายเพื่อแชร์</string>
@@ -2735,16 +2732,6 @@
<string name="compose_settings">การตั้งค่าการแต่ง</string>
<string name="auto_create_drafts_setting_title">สร้างร่างโดยอัตโนมัติ</string>
<string name="auto_create_drafts_setting_description">บันทึกกิจกรรมร่างโดยอัตโนมัติเมื่อคุณพิมพ์หรือออกจากตัวแต่งที่มีข้อความที่ยังไม่ได้ส่ง และส่งไปยัง relay outbox ส่วนตัวของคุณ</string>
<string name="ai_writing_use_this">ใช้สิ่งนี้</string>
<string name="ai_writing_dismiss">ปิด</string>
<string name="ai_tone_correct">แก้ไข</string>
<string name="ai_tone_rephrase">เรียบเรียงใหม่</string>
<string name="ai_tone_shorter">สั้นลง</string>
<string name="ai_tone_elaborate">ขยายความ</string>
<string name="ai_tone_friendly">เป็นกันเอง</string>
<string name="ai_tone_professional">เป็นมืออาชีพ</string>
<string name="ai_tone_more_direct">ตรงไปตรงมามากขึ้น</string>
<string name="ai_tone_punchy">กระชับ</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">แพ็ค Emoji</string>
<string name="emoji_pack_management_title">เพิ่มในรายการ Emoji</string>
@@ -3766,11 +3766,8 @@
<string name="relay_leave_request">คำขอออกจาก Relay</string>
<string name="ai_writing_help">ความช่วยเหลือการเขียนด้วย AI</string>
<string name="ai_writing_setting_title">เสนอการปรับปรุงข้อความ</string>
<string name="ai_writing_setting_description">ใช้โมเดล AI บนอุปกรณ์เพื่อเสนอการแก้ไขข้อความและการเปลี่ยนแปลงโทนเสียง</string>
<string name="tracked_broadcasts_setting_title">การออกอากาศที่ติดตาม</string>
@@ -3786,27 +3783,16 @@
<string name="auto_create_drafts_setting_description">บันทึกกิจกรรมร่างโดยอัตโนมัติเมื่อคุณพิมพ์หรือออกจากตัวแต่งที่มีข้อความที่ยังไม่ได้ส่ง และส่งไปยัง relay outbox ส่วนตัวของคุณ</string>
<string name="ai_writing_use_this">ใช้สิ่งนี้</string>
<string name="ai_writing_dismiss">ปิด</string>
<string name="ai_tone_correct">แก้ไข</string>
<string name="ai_tone_rephrase">เรียบเรียงใหม่</string>
<string name="ai_tone_shorter">สั้นลง</string>
<string name="ai_tone_elaborate">ขยายความ</string>
<string name="ai_tone_friendly">เป็นกันเอง</string>
<string name="ai_tone_professional">เป็นมืออาชีพ</string>
<string name="ai_tone_more_direct">ตรงไปตรงมามากขึ้น</string>
<string name="ai_tone_punchy">กระชับ</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">แพ็ค Emoji</string>
@@ -2901,9 +2901,6 @@
<string name="relay_members_removed">%1$d üye relay\'den kaldırıldı</string>
<string name="relay_join_request">Relay katılım isteği</string>
<string name="relay_leave_request">Relay ayrılma isteği</string>
<string name="ai_writing_help">Yapay Zeka Yazma Yardımı</string>
<string name="ai_writing_setting_title">Metin iyileştirmeleri öner</string>
<string name="ai_writing_setting_description">Metin düzeltmeleri ve ton değişiklikleri önermek için cihaz üzerindeki bir yapay zeka modeli kullanır.</string>
<string name="tracked_broadcasts_setting_title">Takip edilen yayınlar</string>
<string name="tracked_broadcasts_setting_description">Etkinlikler gönderilirken takip edilen yayıncıyı kullan. Yayın sırasında canlı ilerlemeyi ve relay başına durumu gösterir.</string>
<string name="suggest_workouts_setting_title">Paylaşılacak antrenmanlar öner</string>
@@ -2911,16 +2908,6 @@
<string name="compose_settings">Oluşturma Ayarları</string>
<string name="auto_create_drafts_setting_title">Otomatik olarak taslak oluştur</string>
<string name="auto_create_drafts_setting_description">Yazarken veya gönderilmemiş metin içeren bir düzenleyiciden ayrılırken otomatik olarak taslak etkinliği kaydeder ve özel giden kutusu relay\'lerinize gönderir.</string>
<string name="ai_writing_use_this">Bunu Kullan</string>
<string name="ai_writing_dismiss">Kapat</string>
<string name="ai_tone_correct">Düzelt</string>
<string name="ai_tone_rephrase">Yeniden İfade Et</string>
<string name="ai_tone_shorter">Daha Kısa</string>
<string name="ai_tone_elaborate">Detaylandır</string>
<string name="ai_tone_friendly">Samimi</string>
<string name="ai_tone_professional">Profesyonel</string>
<string name="ai_tone_more_direct">Daha Doğrudan</string>
<string name="ai_tone_punchy">Etkili</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji Paketleri</string>
<string name="emoji_pack_management_title">Emoji Listesine Ekle</string>
@@ -4282,11 +4282,8 @@
<string name="relay_leave_request">Relay ayrılma isteği</string>
<string name="ai_writing_help">Yapay Zeka Yazma Yardımı</string>
<string name="ai_writing_setting_title">Metin iyileştirmeleri öner</string>
<string name="ai_writing_setting_description">Metin düzeltmeleri ve ton değişiklikleri önermek için cihaz üzerindeki bir yapay zeka modeli kullanır.</string>
<string name="tracked_broadcasts_setting_title">Takip edilen yayınlar</string>
@@ -4302,27 +4299,16 @@
<string name="auto_create_drafts_setting_description">Yazarken veya gönderilmemiş metin içeren bir düzenleyiciden ayrılırken otomatik olarak taslak etkinliği kaydeder ve özel giden kutusu relay\'lerinize gönderir.</string>
<string name="ai_writing_use_this">Bunu Kullan</string>
<string name="ai_writing_dismiss">Kapat</string>
<string name="ai_tone_correct">Düzelt</string>
<string name="ai_tone_rephrase">Yeniden İfade Et</string>
<string name="ai_tone_shorter">Daha Kısa</string>
<string name="ai_tone_elaborate">Detaylandır</string>
<string name="ai_tone_friendly">Samimi</string>
<string name="ai_tone_professional">Profesyonel</string>
<string name="ai_tone_more_direct">Daha Doğrudan</string>
<string name="ai_tone_punchy">Etkili</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">Emoji Paketleri</string>
@@ -2944,9 +2944,6 @@
<string name="relay_members_removed">%1$d учасників видалено з relay</string>
<string name="relay_join_request">Запит на вступ до relay</string>
<string name="relay_leave_request">Запит на вихід з relay</string>
<string name="ai_writing_help">Допомога AI з написанням</string>
<string name="ai_writing_setting_title">Пропонувати вдосконалення тексту</string>
<string name="ai_writing_setting_description">Використовує AI-модель на пристрої для пропозиції виправлень тексту та зміни тону.</string>
<string name="tracked_broadcasts_setting_title">Відстежувані трансляції</string>
<string name="tracked_broadcasts_setting_description">Використовувати відстежувальний транслятор під час надсилання подій. Відображає живий прогрес та статус по кожному relay під час трансляції.</string>
<string name="suggest_workouts_setting_title">Пропонувати тренування для поширення</string>
@@ -2954,17 +2951,6 @@
<string name="compose_settings">Налаштування редактора</string>
<string name="auto_create_drafts_setting_title">Автоматично створювати чернетки</string>
<string name="auto_create_drafts_setting_description">Автоматично зберігає чернетку події, коли ви друкуєте або залишаєте редактор з ненадісленим текстом, і надсилає до ваших приватних вихідних relay.</string>
<string name="ai_writing_use_this">Використати</string>
<string name="ai_writing_dismiss">Відхилити</string>
<string name="ai_tone_correct">Виправити</string>
<string name="ai_tone_rephrase">Перефразувати</string>
<string name="ai_tone_shorter">Коротше</string>
<string name="ai_tone_elaborate">Розгорнути</string>
<string name="ai_tone_friendly">Дружній</string>
<string name="ai_tone_professional">Професійний</string>
<string name="ai_tone_more_direct">Більш прямий</string>
<string name="ai_tone_punchy">Влучний</string>
<string name="ai_tone_emojify">+ Емодзі</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Пакети емодзі</string>
<string name="emoji_pack_management_title">Додати до списку емодзі</string>
@@ -4091,11 +4091,8 @@
<string name="relay_leave_request">Запит на вихід з relay</string>
<string name="ai_writing_help">Допомога AI з написанням</string>
<string name="ai_writing_setting_title">Пропонувати вдосконалення тексту</string>
<string name="ai_writing_setting_description">Використовує AI-модель на пристрої для пропозиції виправлень тексту та зміни тону.</string>
<string name="tracked_broadcasts_setting_title">Відстежувані трансляції</string>
@@ -4111,27 +4108,16 @@
<string name="auto_create_drafts_setting_description">Автоматично зберігає чернетку події, коли ви друкуєте або залишаєте редактор з ненадісленим текстом, і надсилає до ваших приватних вихідних relay.</string>
<string name="ai_writing_use_this">Використати</string>
<string name="ai_writing_dismiss">Відхилити</string>
<string name="ai_tone_correct">Виправити</string>
<string name="ai_tone_rephrase">Перефразувати</string>
<string name="ai_tone_shorter">Коротше</string>
<string name="ai_tone_elaborate">Розгорнути</string>
<string name="ai_tone_friendly">Дружній</string>
<string name="ai_tone_professional">Професійний</string>
<string name="ai_tone_more_direct">Більш прямий</string>
<string name="ai_tone_punchy">Влучний</string>
<string name="ai_tone_emojify">+ Емодзі</string>
<string name="emoji_packs_title">Пакети емодзі</string>
@@ -2905,9 +2905,6 @@
<string name="relay_members_removed">%1$d a\'zo relay dan chiqarildi</string>
<string name="relay_join_request">Relay ga qo\'shilish so\'rovi</string>
<string name="relay_leave_request">Relay dan chiqish so\'rovi</string>
<string name="ai_writing_help">AI yozish yordami</string>
<string name="ai_writing_setting_title">Matn yaxshilanishlarini taklif qilish</string>
<string name="ai_writing_setting_description">Matn tuzatishlar va ohang o\'zgarishlarini taklif qilish uchun qurilmadagi AI modelidan foydalanadi.</string>
<string name="tracked_broadcasts_setting_title">Kuzatilgan translyatsiyalar</string>
<string name="tracked_broadcasts_setting_description">Hodisalarni yuborishda kuzatilgan translyator dan foydalaning. Translyatsiya vaqtida jonli holat va har bir relay holati ko\'rsatiladi.</string>
<string name="suggest_workouts_setting_title">Ulashish uchun mashg\'ulotlar taklif qilish</string>
@@ -2915,15 +2912,6 @@
<string name="compose_settings">Yozish sozlamalari</string>
<string name="auto_create_drafts_setting_title">Avtomatik qoralamalar yaratish</string>
<string name="auto_create_drafts_setting_description">Yozsangiz yoki yuborilmagan matn bilan kompositordan chiqib ketsangiz qoralama hodisasini avtomatik saqlaydi va shaxsiy chiqish relay laringizga yuboradi.</string>
<string name="ai_writing_use_this">Buni ishlatish</string>
<string name="ai_writing_dismiss">Yopish</string>
<string name="ai_tone_correct">To\'g\'rilash</string>
<string name="ai_tone_rephrase">Qayta ifodalash</string>
<string name="ai_tone_shorter">Qisqaroq</string>
<string name="ai_tone_elaborate">Batafsil</string>
<string name="ai_tone_friendly">Do\'stona</string>
<string name="ai_tone_more_direct">To\'g\'riroq</string>
<string name="ai_tone_punchy">Ifodali</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji to\'plamlari</string>
<string name="emoji_pack_management_title">Emoji ro\'yxatiga qo\'shish</string>
@@ -2846,9 +2846,6 @@
<string name="relay_members_removed">Đã xóa %1$d thành viên khỏi relay</string>
<string name="relay_join_request">Yêu cầu tham gia relay</string>
<string name="relay_leave_request">Yêu cầu rời relay</string>
<string name="ai_writing_help">Trợ lý AI viết văn</string>
<string name="ai_writing_setting_title">Đề xuất cải thiện văn bản</string>
<string name="ai_writing_setting_description">Sử dụng mô hình AI trên thiết bị để đề xuất sửa lỗi văn bản và thay đổi giọng điệu.</string>
<string name="tracked_broadcasts_setting_title">Phát sóng có theo dõi</string>
<string name="tracked_broadcasts_setting_description">Sử dụng trình phát sóng có theo dõi khi gửi sự kiện. Hiển thị tiến trình trực tiếp và trạng thái từng relay trong khi phát sóng.</string>
<string name="suggest_workouts_setting_title">Đề xuất chia sẻ bài tập</string>
@@ -2856,16 +2853,6 @@
<string name="compose_settings">Cài đặt soạn thảo</string>
<string name="auto_create_drafts_setting_title">Tự động tạo bản nháp</string>
<string name="auto_create_drafts_setting_description">Tự động lưu sự kiện nháp khi bạn gõ hoặc rời khỏi trình soạn thảo có văn bản chưa gửi, và gửi đến các relay outbox riêng tư của bạn.</string>
<string name="ai_writing_use_this">Dùng cái này</string>
<string name="ai_writing_dismiss">Đóng</string>
<string name="ai_tone_correct">Sửa lỗi</string>
<string name="ai_tone_rephrase">Diễn đạt lại</string>
<string name="ai_tone_shorter">Ngắn hơn</string>
<string name="ai_tone_elaborate">Mở rộng</string>
<string name="ai_tone_friendly">Thân thiện</string>
<string name="ai_tone_professional">Chuyên nghiệp</string>
<string name="ai_tone_more_direct">Trực tiếp hơn</string>
<string name="ai_tone_punchy">Mạnh mẽ</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Gói Emoji</string>
<string name="emoji_pack_management_title">Thêm vào danh sách Emoji</string>
@@ -3795,9 +3795,6 @@
<string name="relay_members_removed">从中继删除了 %1$d 位成员</string>
<string name="relay_join_request">中继加入请求</string>
<string name="relay_leave_request">中继离开请求</string>
<string name="ai_writing_help">AI 写入帮助</string>
<string name="ai_writing_setting_title">建议文本改进</string>
<string name="ai_writing_setting_description">使用设备上的 AI 模型来提出文本更正和音调更改。</string>
<string name="tracked_broadcasts_setting_title">已跟踪的广播</string>
<string name="tracked_broadcasts_setting_description">在发送事件时使用已跟踪的广播。在广播时显示实时进度和每个中继的状态。</string>
<string name="suggest_workouts_setting_title">推荐要分享的锻炼</string>
@@ -3878,17 +3875,6 @@
<string name="pow_publish_failed_retry">您的 %1$s 完成了挖掘,但无法发布。将在下次应用程序启动时重新尝试。</string>
<string name="pow_kind_chat_message">聊天消息</string>
<string name="pow_kind_report">举报</string>
<string name="ai_writing_use_this">使用它</string>
<string name="ai_writing_dismiss">忽略</string>
<string name="ai_tone_correct">更正</string>
<string name="ai_tone_rephrase">改写</string>
<string name="ai_tone_shorter">较短</string>
<string name="ai_tone_elaborate">详述</string>
<string name="ai_tone_friendly">友好</string>
<string name="ai_tone_professional">专业</string>
<string name="ai_tone_more_direct">更直接</string>
<string name="ai_tone_punchy">强有力</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">表情包</string>
<string name="emoji_pack_management_title">添加到表情列表</string>
@@ -2914,9 +2914,6 @@
<string name="relay_members_removed">从中继删除了 %1$d 位成员</string>
<string name="relay_join_request">中继加入请求</string>
<string name="relay_leave_request">中继离开请求</string>
<string name="ai_writing_help">AI 写入帮助</string>
<string name="ai_writing_setting_title">建议文本改进</string>
<string name="ai_writing_setting_description">使用设备上的 AI 模型来提出文本更正和音调更改。</string>
<string name="tracked_broadcasts_setting_title">已跟踪的广播</string>
<string name="tracked_broadcasts_setting_description">在发送事件时使用已跟踪的广播。在广播时显示实时进度和每个中继的状态。</string>
<string name="suggest_workouts_setting_title">推荐要分享的锻炼</string>
@@ -2924,16 +2921,6 @@
<string name="compose_settings">撰写设置</string>
<string name="auto_create_drafts_setting_title">自动创建草稿</string>
<string name="auto_create_drafts_setting_description">当您输入或在编辑器中有未发送的文本时自动保存草稿事件并发送到您的私人发件箱中继。</string>
<string name="ai_writing_use_this">使用它</string>
<string name="ai_writing_dismiss">忽略</string>
<string name="ai_tone_correct">更正</string>
<string name="ai_tone_rephrase">改写</string>
<string name="ai_tone_shorter">较短</string>
<string name="ai_tone_elaborate">详述</string>
<string name="ai_tone_friendly">友好</string>
<string name="ai_tone_professional">专业</string>
<string name="ai_tone_more_direct">更直接</string>
<string name="ai_tone_punchy">强有力</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">表情包</string>
<string name="emoji_pack_management_title">添加到表情列表</string>
@@ -2914,9 +2914,6 @@
<string name="relay_members_removed">从中继删除了 %1$d 位成员</string>
<string name="relay_join_request">中继加入请求</string>
<string name="relay_leave_request">中继离开请求</string>
<string name="ai_writing_help">AI 写入帮助</string>
<string name="ai_writing_setting_title">建议文本改进</string>
<string name="ai_writing_setting_description">使用设备上的 AI 模型来提出文本更正和音调更改。</string>
<string name="tracked_broadcasts_setting_title">已跟踪的广播</string>
<string name="tracked_broadcasts_setting_description">在发送事件时使用已跟踪的广播。在广播时显示实时进度和每个中继的状态。</string>
<string name="suggest_workouts_setting_title">推荐要分享的锻炼</string>
@@ -2924,16 +2921,6 @@
<string name="compose_settings">撰写设置</string>
<string name="auto_create_drafts_setting_title">自动创建草稿</string>
<string name="auto_create_drafts_setting_description">当您输入或在编辑器中有未发送的文本时自动保存草稿事件并发送到您的私人发件箱中继。</string>
<string name="ai_writing_use_this">使用它</string>
<string name="ai_writing_dismiss">忽略</string>
<string name="ai_tone_correct">更正</string>
<string name="ai_tone_rephrase">改写</string>
<string name="ai_tone_shorter">较短</string>
<string name="ai_tone_elaborate">详述</string>
<string name="ai_tone_friendly">友好</string>
<string name="ai_tone_professional">专业</string>
<string name="ai_tone_more_direct">更直接</string>
<string name="ai_tone_punchy">强有力</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">表情包</string>
<string name="emoji_pack_management_title">添加到表情列表</string>
@@ -2880,9 +2880,6 @@
<string name="relay_members_removed">%1$d 位成員已從 relay 移除</string>
<string name="relay_join_request">Relay 加入申請</string>
<string name="relay_leave_request">Relay 退出申請</string>
<string name="ai_writing_help">AI 寫作輔助</string>
<string name="ai_writing_setting_title">建議文字改進</string>
<string name="ai_writing_setting_description">使用裝置上的 AI 模型提出文字修正和語氣變更建議。</string>
<string name="tracked_broadcasts_setting_title">追蹤廣播</string>
<string name="tracked_broadcasts_setting_description">傳送事件時使用追蹤廣播器。廣播時顯示即時進度和每個 relay 的狀態。</string>
<string name="suggest_workouts_setting_title">建議分享運動紀錄</string>
@@ -2890,16 +2887,6 @@
<string name="compose_settings">撰寫設定</string>
<string name="auto_create_drafts_setting_title">自動建立草稿</string>
<string name="auto_create_drafts_setting_description">當您輸入或離開含有未送出文字的撰寫器時,自動儲存草稿事件並傳送至您的私人發件箱 relay。</string>
<string name="ai_writing_use_this">使用此版本</string>
<string name="ai_writing_dismiss">關閉</string>
<string name="ai_tone_correct">修正</string>
<string name="ai_tone_rephrase">改寫</string>
<string name="ai_tone_shorter">縮短</string>
<string name="ai_tone_elaborate">詳述</string>
<string name="ai_tone_friendly">友善</string>
<string name="ai_tone_professional">專業</string>
<string name="ai_tone_more_direct">更直接</string>
<string name="ai_tone_punchy">有力</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji 包</string>
<string name="emoji_pack_management_title">新增至 Emoji 清單</string>
@@ -5496,11 +5496,8 @@
<string name="relay_leave_request">中继离开请求</string>
<string name="ai_writing_help">AI 写入帮助</string>
<string name="ai_writing_setting_title">建议文本改进</string>
<string name="ai_writing_setting_description">使用设备上的 AI 模型来提出文本更正和音调更改。</string>
<string name="tracked_broadcasts_setting_title">已跟踪的广播</string>
@@ -5516,27 +5513,16 @@
<string name="auto_create_drafts_setting_description">当您输入或在编辑器中有未发送的文本时自动保存草稿事件并发送到您的私人发件箱中继。</string>
<string name="ai_writing_use_this">使用它</string>
<string name="ai_writing_dismiss">忽略</string>
<string name="ai_tone_correct">更正</string>
<string name="ai_tone_rephrase">改写</string>
<string name="ai_tone_shorter">较短</string>
<string name="ai_tone_elaborate">详述</string>
<string name="ai_tone_friendly">友好</string>
<string name="ai_tone_professional">专业</string>
<string name="ai_tone_more_direct">更直接</string>
<string name="ai_tone_punchy">强有力</string>
<string name="ai_tone_emojify">+ Emoji</string>
<string name="emoji_packs_title">表情包</string>
-14
View File
@@ -4903,9 +4903,6 @@
<string name="relay_join_request">Relay join request</string>
<string name="relay_leave_request">Relay leave request</string>
<string name="ai_writing_help">AI Writing Help</string>
<string name="ai_writing_setting_title">Propose text improvements</string>
<string name="ai_writing_setting_description">Uses an on-device AI model to propose text corrections and tone changes.</string>
<string name="tracked_broadcasts_setting_title">Tracked broadcasts</string>
<string name="tracked_broadcasts_setting_description">Use the tracked broadcaster when sending events. Shows live progress and per-relay status while broadcasting.</string>
<string name="suggest_workouts_setting_title">Suggest workouts to share</string>
@@ -5000,17 +4997,6 @@
<string name="pow_publish_failed_retry">Your %1$s finished mining but could not be published. It will be retried the next time the app starts.</string>
<string name="pow_kind_chat_message">Chat message</string>
<string name="pow_kind_report">Report</string>
<string name="ai_writing_use_this">Use This</string>
<string name="ai_writing_dismiss">Dismiss</string>
<string name="ai_tone_correct">Correct</string>
<string name="ai_tone_rephrase">Rephrase</string>
<string name="ai_tone_shorter">Shorter</string>
<string name="ai_tone_elaborate">Elaborate</string>
<string name="ai_tone_friendly">Friendly</string>
<string name="ai_tone_professional">Professional</string>
<string name="ai_tone_more_direct">More Direct</string>
<string name="ai_tone_punchy">Punchy</string>
<string name="ai_tone_emojify">+ Emoji</string>
<!-- Emoji packs -->
<string name="emoji_packs_title">Emoji Packs</string>
@@ -1,169 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
import android.content.Context
import com.google.android.gms.tasks.Tasks
import com.google.mlkit.genai.common.FeatureStatus
import com.google.mlkit.genai.proofreading.Proofreader
import com.google.mlkit.genai.proofreading.ProofreaderOptions
import com.google.mlkit.genai.proofreading.Proofreading
import com.google.mlkit.genai.proofreading.ProofreadingRequest
import com.google.mlkit.genai.rewriting.Rewriter
import com.google.mlkit.genai.rewriting.RewriterOptions
import com.google.mlkit.genai.rewriting.Rewriting
import com.google.mlkit.genai.rewriting.RewritingRequest
import com.vitorpamplona.amethyst.service.lang.LanguageTranslatorService
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class MLKitWritingAssistant(
private val context: Context,
) : WritingAssistant {
private var rewriters = mutableMapOf<Long, Rewriter>()
private var proofreaders = mutableMapOf<Int, Proofreader>()
private fun rewriterCacheKey(
@RewriterOptions.OutputType outputType: Int,
@RewriterOptions.Language language: Int,
): Long = (outputType.toLong() shl 32) or language.toLong()
private fun getRewriter(
@RewriterOptions.OutputType outputType: Int,
@RewriterOptions.Language language: Int,
): Rewriter =
rewriters.getOrPut(rewriterCacheKey(outputType, language)) {
Rewriting.getClient(
RewriterOptions
.builder(context)
.setOutputType(outputType)
.setLanguage(language)
.build(),
)
}
private fun getProofreader(
@ProofreaderOptions.Language language: Int,
): Proofreader =
proofreaders.getOrPut(language) {
Proofreading.getClient(
ProofreaderOptions
.builder(context)
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
.setLanguage(language)
.build(),
)
}
override suspend fun checkAvailability(): WritingAssistantStatus =
withContext(Dispatchers.IO) {
try {
val rewriter = getRewriter(RewriterOptions.OutputType.REPHRASE, RewriterOptions.Language.ENGLISH)
val status = rewriter.checkFeatureStatus().get()
when (status) {
FeatureStatus.AVAILABLE -> WritingAssistantStatus.Available
FeatureStatus.DOWNLOADING -> WritingAssistantStatus.Downloading
else -> WritingAssistantStatus.Unavailable
}
} catch (e: Exception) {
WritingAssistantStatus.Unavailable
}
}
override suspend fun transform(
text: String,
tone: WritingTone,
): WritingResult {
val language = detectLanguage(text)
val transformedText =
when (tone) {
WritingTone.CORRECT -> proofread(text, language)
WritingTone.REPHRASE -> rewrite(text, RewriterOptions.OutputType.REPHRASE, language)
WritingTone.SHORTER -> rewrite(text, RewriterOptions.OutputType.SHORTEN, language)
WritingTone.ELABORATE -> rewrite(text, RewriterOptions.OutputType.ELABORATE, language)
WritingTone.FRIENDLY -> rewrite(text, RewriterOptions.OutputType.FRIENDLY, language)
WritingTone.PROFESSIONAL -> rewrite(text, RewriterOptions.OutputType.PROFESSIONAL, language)
WritingTone.EMOJIFY -> rewrite(text, RewriterOptions.OutputType.EMOJIFY, language)
WritingTone.MORE_DIRECT -> rewrite(text, RewriterOptions.OutputType.PROFESSIONAL, language)
WritingTone.PUNCHY -> rewrite(text, RewriterOptions.OutputType.SHORTEN, language)
}
return WritingResult(
originalText = text,
transformedText = transformedText,
tone = tone,
)
}
private suspend fun detectLanguage(text: String): Int =
withContext(Dispatchers.IO) {
try {
val langTag = Tasks.await(LanguageTranslatorService.identifyLanguage(text))
mapLanguageTag(langTag)
} catch (e: Exception) {
RewriterOptions.Language.ENGLISH
}
}
private suspend fun rewrite(
text: String,
@RewriterOptions.OutputType outputType: Int,
@RewriterOptions.Language language: Int,
): String =
withContext(Dispatchers.IO) {
val rewriter = getRewriter(outputType, language)
val request = RewritingRequest.builder(text).build()
val result = rewriter.runInference(request).get()
result.results.firstOrNull()?.text ?: text
}
private suspend fun proofread(
text: String,
@ProofreaderOptions.Language language: Int,
): String =
withContext(Dispatchers.IO) {
val proofreader = getProofreader(language)
val request = ProofreadingRequest.builder(text).build()
val result = proofreader.runInference(request).get()
result.results.firstOrNull()?.text ?: text
}
override fun close() {
rewriters.values.forEach { it.close() }
rewriters.clear()
proofreaders.values.forEach { it.close() }
proofreaders.clear()
}
companion object {
fun mapLanguageTag(tag: String?): Int =
when (tag?.lowercase()?.take(2)) {
"en" -> RewriterOptions.Language.ENGLISH
"ja" -> RewriterOptions.Language.JAPANESE
"ko" -> RewriterOptions.Language.KOREAN
"de" -> RewriterOptions.Language.GERMAN
"fr" -> RewriterOptions.Language.FRENCH
"it" -> RewriterOptions.Language.ITALIAN
"es" -> RewriterOptions.Language.SPANISH
else -> RewriterOptions.Language.ENGLISH
}
}
}
@@ -1,27 +0,0 @@
/*
* Copyright (c) 2025 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.amethyst.service.ai
import android.content.Context
object WritingAssistantFactory {
fun create(context: Context): WritingAssistant = MLKitWritingAssistant(context)
}
-6
View File
@@ -40,9 +40,6 @@ kotlin = "2.4.10"
kotlinxCollectionsImmutable = "0.5.1"
kotlinxCoroutinesCore = "1.11.0"
kotlinxSerialization = "1.11.0"
genaiProofreading = "1.0.0-beta1"
genaiPrompt = "1.0.0-beta4"
genaiRewriting = "1.0.0-beta1"
genaiImageDescription = "1.0.0-beta1"
languageId = "17.0.6"
lifecycleRuntimeKtx = "2.11.0"
@@ -180,9 +177,6 @@ jetbrains-compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "
jetbrains-compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "jetbrainsCompose" }
jetbrains-compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "jetbrainsCompose" }
jetbrains-compose-ui-test-junit4 = { module = "org.jetbrains.compose.ui:ui-test-junit4", version.ref = "jetbrainsCompose" }
google-mlkit-genai-proofreading = { group = "com.google.mlkit", name = "genai-proofreading", version.ref = "genaiProofreading" }
google-mlkit-genai-prompt = { group = "com.google.mlkit", name = "genai-prompt", version.ref = "genaiPrompt" }
google-mlkit-genai-rewriting = { group = "com.google.mlkit", name = "genai-rewriting", version.ref = "genaiRewriting" }
google-mlkit-genai-image-description = { group = "com.google.mlkit", name = "genai-image-description", version.ref = "genaiImageDescription" }
google-mlkit-language-id = { group = "com.google.mlkit", name = "language-id", version.ref = "languageId" }
google-mlkit-translate = { group = "com.google.mlkit", name = "translate", version.ref = "translate" }