From f9b14d7801e7963ad41e98f80796f354f6983005 Mon Sep 17 00:00:00 2001 From: Daniel Kao Date: Tue, 12 Dec 2023 02:39:30 +0800 Subject: [PATCH] feat: add UI to show highlights. --- app/src/main/AndroidManifest.xml | 5 +- .../einkbro/activity/HighlightsActivity.kt | 199 ++++++++++++++++++ .../einkbro/activity/SettingActivity.kt | 4 +- .../einkbro/database/BookmarkDao.kt | 20 +- .../plateaukao/einkbro/unit/IntentUnit.kt | 7 + .../view/dialog/compose/MenuDialogFragment.kt | 3 +- .../view/handlers/MenuActionHandler.kt | 1 + app/src/main/res/values-af/strings.xml | 3 + app/src/main/res/values-ar/strings.xml | 3 + app/src/main/res/values-ca/strings.xml | 3 + app/src/main/res/values-cs/strings.xml | 3 + app/src/main/res/values-da/strings.xml | 3 + app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values-el/strings.xml | 3 + app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-fi/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-he/strings.xml | 3 + app/src/main/res/values-hu/strings.xml | 3 + app/src/main/res/values-in/strings.xml | 3 + app/src/main/res/values-it/strings.xml | 3 + app/src/main/res/values-ja/strings.xml | 3 + app/src/main/res/values-ko/strings.xml | 3 + app/src/main/res/values-night/strings.xml | 3 + app/src/main/res/values-nl/strings.xml | 3 + app/src/main/res/values-no/strings.xml | 3 + app/src/main/res/values-pl/strings.xml | 3 + app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values-ro/strings.xml | 3 + app/src/main/res/values-ru/strings.xml | 3 + app/src/main/res/values-sat/strings.xml | 3 + app/src/main/res/values-sr/strings.xml | 3 + app/src/main/res/values-sv/strings.xml | 3 + app/src/main/res/values-tr/strings.xml | 3 + app/src/main/res/values-uk/strings.xml | 3 + app/src/main/res/values-vi/strings.xml | 3 + app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 39 files changed, 323 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/info/plateaukao/einkbro/activity/HighlightsActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 74cf34a3e..0033466c5 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -197,8 +197,9 @@ - + + + + NavHost( + navController = navController, + startDestination = HighlightsRoute.RouteArticles.name, + modifier = Modifier.padding(innerPadding) + ) { + composable(HighlightsRoute.RouteArticles.name) { + ArticlesScreen(navController, bookmarkManager) + } + composable("${HighlightsRoute.RouteHighlights.name}/{articleId}") { backStackEntry -> + HighlightsScreen(backStackEntry.arguments?.getString("articleId") + ?.toInt() ?: 0, + modifier = Modifier.padding(10.dp), + bookmarkManager, + deleteHighlight = {} + ) + } + } + } + } + } + } + + companion object { + fun createIntent(context: Context) = Intent( + context, + HighlightsActivity::class.java + ) + } +} + +enum class HighlightsRoute(@StringRes val titleId: Int) { + RouteArticles(R.string.articles), + RouteHighlights(R.string.highlights), +} + +@Composable +fun ArticlesScreen( + navHostController: NavHostController, + bookmarkManager: BookmarkManager +) { + val articles by bookmarkManager.getAllArticles().collectAsState(emptyList()) + LazyColumn( + modifier = Modifier.padding(10.dp), + reverseLayout = true + ) { + items(articles.size) { index -> + val article = articles[index] + ArticleItem( + modifier = Modifier.padding(bottom = 10.dp) + .clickable { + navHostController.navigate("${HighlightsRoute.RouteHighlights.name}/${articles[index].id}") + }, + article = article, + deleteArticle = {} // { a -> bookmarkManager.deleteArticle(a) } + ) + } + } +} + +@Composable +fun ArticleItem( + modifier: Modifier, + article: Article, + deleteArticle: (Article) -> Unit +) { + Text( + modifier = modifier, + text = article.title + ) +} + +@Composable +fun HighlightsScreen( + articleId: Int, + modifier: Modifier = Modifier, + bookmarkManager: BookmarkManager, + deleteHighlight: (Highlight) -> Unit, +) { + val highlights by bookmarkManager.getHighlightsForArticle(articleId).collectAsState(emptyList()) + LazyColumn( + modifier = modifier.padding(10.dp), + ) { + items(highlights.size) { index -> + HighlightItem( + highlight = highlights[index], + deleteHighlight = deleteHighlight, + ) + } + } +} + +@Composable +fun HighlightItem( + highlight: Highlight, + deleteHighlight: (Highlight) -> Unit +) { + Text( + modifier = Modifier.padding(bottom = 10.dp), + text = highlight.content + ) +} + +@Composable +fun HighlightsBar( + currentScreen: HighlightsRoute, + navigateUp: () -> Unit, +) { + TopAppBar( + title = { + Text( + stringResource(currentScreen.titleId), + color = MaterialTheme.colors.onPrimary + ) + }, + navigationIcon = { + IconButton(onClick = navigateUp) { + Icon( + tint = MaterialTheme.colors.onPrimary, + imageVector = Icons.Filled.ArrowBack, + contentDescription = stringResource(R.string.back) + ) + } + } + ) +} diff --git a/app/src/main/java/info/plateaukao/einkbro/activity/SettingActivity.kt b/app/src/main/java/info/plateaukao/einkbro/activity/SettingActivity.kt index 250f76e2c..232daa173 100644 --- a/app/src/main/java/info/plateaukao/einkbro/activity/SettingActivity.kt +++ b/app/src/main/java/info/plateaukao/einkbro/activity/SettingActivity.kt @@ -96,7 +96,7 @@ class SettingActivity : ComponentActivity(), KoinComponent { testTagsAsResourceId = true }, topBar = { - EinkBroAppBar( + SettingBar( currentScreen = currentScreen, navigateUp = { if (navController.previousBackStackEntry != null) navController.navigateUp() @@ -926,7 +926,7 @@ enum class SettingRoute(@StringRes val titleId: Int) { } @Composable -fun EinkBroAppBar( +fun SettingBar( currentScreen: SettingRoute, navigateUp: () -> Unit, ) { diff --git a/app/src/main/java/info/plateaukao/einkbro/database/BookmarkDao.kt b/app/src/main/java/info/plateaukao/einkbro/database/BookmarkDao.kt index 67d778ac1..af5bdc194 100644 --- a/app/src/main/java/info/plateaukao/einkbro/database/BookmarkDao.kt +++ b/app/src/main/java/info/plateaukao/einkbro/database/BookmarkDao.kt @@ -57,11 +57,10 @@ val MIGRATION_2_3: Migration = object : Migration(2, 3) { @Dao interface ArticleDao { @Query("SELECT * FROM articles") - suspend fun getAllArticles(): List
+ fun getAllArticles(): Flow> @Query("SELECT * FROM articles WHERE url = :url") - suspend fun getArticleByUrl(url: String): Article? = - getAllArticles().firstOrNull { it.url == url } + suspend fun getArticleByUrl(url: String): Article? @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(article: Article): Long @@ -86,12 +85,13 @@ interface ArticleDao { @Dao interface HighlightDao { @Query("SELECT * FROM highlights") - suspend fun getAllHighlights(): List + fun getAllHighlights(): Flow> @Query("SELECT * FROM highlights WHERE articleId = :articleId") - suspend fun getHighlightsForArticle(articleId: Int): List + fun getHighlightsForArticle(articleId: Int): Flow> - suspend fun getHighlightsForArticle(article: Article): List = + + fun getHighlightsForArticle(article: Article): Flow> = getHighlightsForArticle(article.id) @Insert(onConflict = OnConflictStrategy.REPLACE) @@ -191,7 +191,13 @@ class BookmarkManager(context: Context) : KoinComponent { suspend fun deleteArticle(article: Article) = articleDao.delete(article) - suspend fun getAllArticles(): List
= articleDao.getAllArticles() + fun getAllArticles(): Flow> = articleDao.getAllArticles() + + fun getHighlightsForArticle(article: Article): Flow> = + highlightDao.getHighlightsForArticle(article) + + fun getHighlightsForArticle(articleId: Int): Flow> = + highlightDao.getHighlightsForArticle(articleId) suspend fun getArticleByUrl(url: String): Article? = articleDao.getArticleByUrl(url) diff --git a/app/src/main/java/info/plateaukao/einkbro/unit/IntentUnit.kt b/app/src/main/java/info/plateaukao/einkbro/unit/IntentUnit.kt index e5725962b..23916248e 100755 --- a/app/src/main/java/info/plateaukao/einkbro/unit/IntentUnit.kt +++ b/app/src/main/java/info/plateaukao/einkbro/unit/IntentUnit.kt @@ -16,6 +16,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import info.plateaukao.einkbro.R import info.plateaukao.einkbro.activity.ExtraBrowserActivity +import info.plateaukao.einkbro.activity.HighlightsActivity import info.plateaukao.einkbro.activity.SettingActivity import info.plateaukao.einkbro.view.NinjaToast import info.plateaukao.einkbro.view.dialog.DialogManager @@ -69,6 +70,12 @@ object IntentUnit { }) } + fun gotoHighlights(activity: Activity) { + activity.startActivity(HighlightsActivity.createIntent(activity).apply { + addFlags(FLAG_ACTIVITY_NO_ANIMATION) + }) + } + fun launchNewBrowser(activity: Activity, url: String) { val intent = Intent(activity, ExtraBrowserActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) diff --git a/app/src/main/java/info/plateaukao/einkbro/view/dialog/compose/MenuDialogFragment.kt b/app/src/main/java/info/plateaukao/einkbro/view/dialog/compose/MenuDialogFragment.kt index 6f2606c0e..5f886a114 100644 --- a/app/src/main/java/info/plateaukao/einkbro/view/dialog/compose/MenuDialogFragment.kt +++ b/app/src/main/java/info/plateaukao/einkbro/view/dialog/compose/MenuDialogFragment.kt @@ -81,7 +81,7 @@ enum class MenuItemType { ReceiveData, SendLink, ShareLink, OpenWith, CopyLink, Shortcut, SetHome, SaveBookmark, OpenEpub, SaveEpub, SavePdf, FontSize, WhiteBknd, BoldFont, Search, Download, Settings, BlackFont, - SaveArchive, AddToPocket + SaveArchive, AddToPocket, Highlights } @Composable @@ -111,6 +111,7 @@ private fun MenuItems( .horizontalScroll(rememberScrollState()), horizontalArrangement = Arrangement.SpaceBetween, ) { + MenuItem(R.string.menu_highlights, R.drawable.icon_edit) { onClicked(MenuItemType.Highlights) } MenuItem(R.string.menu_fav, R.drawable.ic_home_set) { onClicked(MenuItemType.SetHome) } MenuItem(R.string.menu_openFav, R.drawable.ic_home) { onClicked(OpenHome) } MenuItem(R.string.menu_closeTab, R.drawable.icon_close) { onClicked(CloseTab) } diff --git a/app/src/main/java/info/plateaukao/einkbro/view/handlers/MenuActionHandler.kt b/app/src/main/java/info/plateaukao/einkbro/view/handlers/MenuActionHandler.kt index 53d06b191..0e224a6a7 100644 --- a/app/src/main/java/info/plateaukao/einkbro/view/handlers/MenuActionHandler.kt +++ b/app/src/main/java/info/plateaukao/einkbro/view/handlers/MenuActionHandler.kt @@ -80,6 +80,7 @@ class MenuActionHandler( ninjaWebView.favicon ) + MenuItemType.Highlights -> IntentUnit.gotoHighlights(activity) MenuItemType.SetHome -> config.favoriteUrl = ninjaWebView.url.orEmpty() MenuItemType.SaveBookmark -> browserController.saveBookmark() MenuItemType.OpenEpub -> openSavedEpub() diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 5dccdfd53..fece9d604 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index db78e7ef9..2faeb5525 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -184,6 +184,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5da383843..f3f05b832 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -177,6 +177,9 @@ Dies zu deaktivieren ist sicherer, schneller und spart Datenvolumen. Manche Inha Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5741a3b1c..89993331c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -176,6 +176,9 @@ Si desinstala la aplicación, el mismo será eliminado. Por tanto se recomienda Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 591946605..1c5c75b57 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 1bc59df48..53d81cc0b 100755 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -433,4 +433,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 271386e75..799af4412 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -179,6 +179,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f0c897b72..8b44a125b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -218,6 +218,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-night/strings.xml b/app/src/main/res/values-night/strings.xml index 5d157e811..f1ffa771e 100644 --- a/app/src/main/res/values-night/strings.xml +++ b/app/src/main/res/values-night/strings.xml @@ -10,4 +10,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6cc779aef..529d8b935 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -187,6 +187,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 603fe7dce..8a2dfd7c2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -180,6 +180,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index ff3c9ed18..ecc42aa27 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -176,6 +176,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index b04f30aa5..d25ff16b1 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 884d9b98b..1445de1cb 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -496,4 +496,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index 1ba7cd7a8..27d2ea2c8 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -491,4 +491,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights \ No newline at end of file diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 678f2ed79..868acab25 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5c937770c..64173729d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -179,6 +179,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 89146ffd3..147a06bdd 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -188,6 +188,9 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bdc21a39a..9d87eaa1b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -494,4 +494,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content 高亮 + Highlights + Articles + Highlights diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a8c7cb51b..a3ef7eca1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -421,4 +421,7 @@ 使用 OpenAI TTS API 使用 OpenAI 服務朗讀內容 劃重點 + Highlights + Articles + Highlights diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dcdea27c8..cf0fb79e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -503,4 +503,7 @@ Use OpenAI TTS Api Use OpenAI API to read web content Highlight + Highlights + Articles + Highlights