From 96071737b83a22f3c1dff77c5866edc31f8de34b Mon Sep 17 00:00:00 2001 From: Jing <42014615+jing332@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:50:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=92=E4=BB=B6=20=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E6=A1=86=E5=8F=AF=E8=87=AA=E5=AE=9A=E4=B9=89=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compose/codeeditor/RemoteSyncSettings.kt | 54 ++++++++++++++----- .../systts/list/edit/BasicInfoEditScreen.kt | 9 ++++ .../systts/list/edit/ui/PluginTtsUI.kt | 6 +-- .../systts/list/edit/ui/PluginTtsViewModel.kt | 5 +- .../model/rhino/tts/TtsPluginUiEngine.kt | 22 ++++++-- app/src/main/res/values-en/strings.xml | 3 +- app/src/main/res/values-fa/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + gradle.properties | 3 +- 13 files changed, 81 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/github/jing332/tts_server_android/compose/codeeditor/RemoteSyncSettings.kt b/app/src/main/java/com/github/jing332/tts_server_android/compose/codeeditor/RemoteSyncSettings.kt index 44d83b14a..c7c669150 100644 --- a/app/src/main/java/com/github/jing332/tts_server_android/compose/codeeditor/RemoteSyncSettings.kt +++ b/app/src/main/java/com/github/jing332/tts_server_android/compose/codeeditor/RemoteSyncSettings.kt @@ -1,13 +1,19 @@ package com.github.jing332.tts_server_android.compose.codeeditor +import android.content.Intent +import android.net.Uri import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.github.jing332.tts_server_android.R @@ -17,21 +23,41 @@ import com.github.jing332.tts_server_android.conf.CodeEditorConfig @Composable internal fun RemoteSyncSettings(onDismissRequest: () -> Unit) { - AppDialog(title = { Text(stringResource(id = R.string.remote_sync_service)) }, content = { - Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text( - stringResource(id = R.string.remote_sync_service_description), - modifier = Modifier.padding(8.dp) - ) + AppDialog( + title = { Text(stringResource(id = R.string.remote_sync_service)) }, + content = { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + stringResource(id = R.string.remote_sync_service_description), + modifier = Modifier.padding(8.dp) + ) - var port by remember { CodeEditorConfig.remoteSyncPort } - DenseOutlinedField(value = port.toString(), onValueChange = { - try { - port = it.toInt() - } catch (_: NumberFormatException) { - } - }) + var port by remember { CodeEditorConfig.remoteSyncPort } + DenseOutlinedField(value = port.toString(), onValueChange = { + try { + port = it.toInt() + } catch (_: NumberFormatException) { + } + }) + } + }, + onDismissRequest = onDismissRequest, + buttons = { + val context = LocalContext.current + Row { + TextButton(onClick = { + context.startActivity(Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse("https://github.com/jing332/tts-server-psc") + }) + }) { + Text(stringResource(id = R.string.learn_more)) + } + Spacer(modifier = Modifier.weight(1f)) + TextButton(onClick = onDismissRequest) { + Text(stringResource(id = R.string.close)) + } + } } - }, onDismissRequest = onDismissRequest) + ) } \ No newline at end of file diff --git a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/BasicInfoEditScreen.kt b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/BasicInfoEditScreen.kt index f83dfb755..2873d73a8 100644 --- a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/BasicInfoEditScreen.kt +++ b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/BasicInfoEditScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.HelpOutline +import androidx.compose.material.icons.filled.Clear import androidx.compose.material.icons.filled.SmartDisplay import androidx.compose.material.icons.filled.Speed import androidx.compose.material3.Checkbox @@ -397,6 +398,14 @@ fun BasicInfoEditScreen( .padding(top = 8.dp), value = systts.displayName ?: "", onValueChange = { onSysttsChange(systts.copy(displayName = it)) + }, + trailingIcon = { + if (systts.displayName?.isNotEmpty() == true) + IconButton(onClick = { + onSysttsChange(systts.copy(displayName = "")) + }) { + Icon(Icons.Default.Clear, stringResource(id = R.string.clear_text_content)) + } } ) } diff --git a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsUI.kt b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsUI.kt index f3cdb9b54..bc7f28c71 100644 --- a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsUI.kt +++ b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsUI.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -40,7 +39,6 @@ import com.github.jing332.tts_server_android.model.speech.tts.BaseAudioFormat import com.github.jing332.tts_server_android.model.speech.tts.PluginTTS import com.github.jing332.tts_server_android.ui.view.AppDialogs.displayErrorDialog import kotlinx.coroutines.launch -import java.util.Locale class PluginTtsUI : TtsUI() { companion object { @@ -239,8 +237,8 @@ class PluginTtsUI : TtsUI() { .padding(top = 4.dp), label = { Text(stringResource(id = R.string.language)) }, value = tts.locale, - values = vm.locales, - entries = vm.locales.map { Locale.forLanguageTag(it).displayName }, + values = vm.locales.map { it.first }, + entries = vm.locales.map { it.second }, onSelectedChange = { locale, _ -> Log.d("PluginTtsUI", "locale onSelectedChange: $locale") if (locale.toString().isBlank()) return@AppSpinner diff --git a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsViewModel.kt b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsViewModel.kt index 0357f8bb9..4e03f71ec 100644 --- a/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsViewModel.kt +++ b/app/src/main/java/com/github/jing332/tts_server_android/compose/systts/list/edit/ui/PluginTtsViewModel.kt @@ -4,6 +4,7 @@ import android.content.Context import android.widget.LinearLayout import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import com.drake.net.utils.withIO @@ -23,7 +24,7 @@ class PluginTtsViewModel : BaseViewModel() { var isLoading by mutableStateOf(true) - val locales = mutableStateListOf() + val locales = mutableStateListOf>() val voices = mutableStateListOf>() suspend fun load(context: Context, tts: PluginTTS, linearLayout: LinearLayout) { @@ -45,7 +46,7 @@ class PluginTtsViewModel : BaseViewModel() { private fun updateLocales() { locales.clear() - locales.addAll(engine.getLocales()) + locales.addAll(engine.getLocales().toList()) } fun updateVoices(locale: String) { diff --git a/app/src/main/java/com/github/jing332/tts_server_android/model/rhino/tts/TtsPluginUiEngine.kt b/app/src/main/java/com/github/jing332/tts_server_android/model/rhino/tts/TtsPluginUiEngine.kt index ae5096342..c0f9badae 100644 --- a/app/src/main/java/com/github/jing332/tts_server_android/model/rhino/tts/TtsPluginUiEngine.kt +++ b/app/src/main/java/com/github/jing332/tts_server_android/model/rhino/tts/TtsPluginUiEngine.kt @@ -5,8 +5,8 @@ import android.widget.LinearLayout import com.github.jing332.tts_server_android.constant.AppConst import com.github.jing332.tts_server_android.model.speech.tts.PluginTTS import com.github.jing332.tts_server_android.utils.dp -import org.mozilla.javascript.NativeMap import org.mozilla.javascript.NativeObject +import java.util.Locale class TtsPluginUiEngine( private val pluginTts: PluginTTS, @@ -72,11 +72,23 @@ class TtsPluginUiEngine( } } - @Suppress("UNCHECKED_CAST") - fun getLocales(): List { + fun getLocales(): Map { return rhino.invokeMethod(editUiJsObject, FUNC_LOCALES).run { - if (this == null) emptyList() - else this as List + when (this) { + is List<*> -> this.associate { + it.toString() to Locale.forLanguageTag(it.toString()).run { + this.getDisplayName(this) + } + } + + is Map<*, *> -> { + this.map { (key, value) -> + key.toString() to value.toString() + }.toMap() + } + + else -> emptyMap() + } } } diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 12649f242..6529a722e 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -431,6 +431,7 @@ Tag data Grant [Read Audio File Permission] Grant [Read Storage File Permission] - 写入插件日志到文件 + Write plugin log to file If that fails, grant the Add Shortcut permission + Clear the text diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 4893ac820..b704abf54 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -444,4 +444,5 @@ اعطا [مجوز خواندن فایل ذخیره‌سازی] لاگ افزونه را در فایل بنویسید اگر ناموفق بود، لطفاً [اضافه کردن مجوز میانبر] را بدهید + 清空文本内容 diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6e4e2628d..9617bdef4 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -431,4 +431,5 @@ 授予【读取存储文件权限】 写入插件日志到文件 如果失败,请授予【添加快捷方式权限】 + 清空文本内容 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 6e4e2628d..9617bdef4 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -431,4 +431,5 @@ 授予【读取存储文件权限】 写入插件日志到文件 如果失败,请授予【添加快捷方式权限】 + 清空文本内容 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9079133a8..530802a64 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -423,4 +423,5 @@ 授予【读取存储文件权限】 写入插件日志到文件 如果失败,请授予【添加快捷方式权限】 + 清空文本内容 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 75ddb0f8c..7664d6c07 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -429,4 +429,5 @@ 授予【读取存储文件权限】 写入插件日志到文件 如果失败,请授予【添加快捷方式权限】 + 清空文本内容 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28c418060..33757f26d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -463,4 +463,5 @@ 授予【读取存储文件权限】 写入插件日志到文件 如果失败,请授予【添加快捷方式权限】 + 清空文本内容 \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 87e41eece..c8292c9c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,8 @@ kotlin.incremental.java=true kotlin.incremental.js=true kotlin.caching.enabled=true kotlin.parallel.tasks.in.project=true -#kotlin.experimental.tryK2=true +kotlin.experimental.tryK2=true +android.lint.useK2Uast=true #kapt.incremental.apt=true #kapt.include.compile.classpath=false