diff --git a/app/build.gradle b/app/build.gradle index 7a1f71f..5499b58 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { minSdkVersion 21 targetSdkVersion 31 - versionCode 27 - versionName "1.13.0" + versionCode 28 + versionName "1.14.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -61,9 +61,9 @@ android { dependencies { // AndroidX, The Basics - implementation "androidx.appcompat:appcompat:1.4.1" - implementation "androidx.core:core-ktx:1.7.0" - implementation "androidx.constraintlayout:constraintlayout:2.1.3" + implementation "androidx.appcompat:appcompat:1.4.2" + implementation "androidx.core:core-ktx:1.8.0" + implementation "androidx.constraintlayout:constraintlayout:2.1.4" implementation "androidx.activity:activity-ktx:1.4.0" implementation "androidx.fragment:fragment-ktx:1.4.1" implementation "androidx.work:work-runtime-ktx:2.7.1" @@ -81,7 +81,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3' // Firebase, sigh ... (only Google Play) - playImplementation 'com.google.firebase:firebase-messaging:23.0.4' + playImplementation 'com.google.firebase:firebase-messaging:23.0.5' // RecyclerView implementation "androidx.recyclerview:recyclerview:1.3.0-alpha02" @@ -90,7 +90,7 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' // Material design - implementation "com.google.android.material:material:1.6.0" + implementation "com.google.android.material:material:1.6.1" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" diff --git a/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt b/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt index e5f46fd..6ad65b2 100644 --- a/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt +++ b/app/src/main/java/io/heckel/ntfy/msg/BroadcastService.kt @@ -31,8 +31,14 @@ class BroadcastService(private val ctx: Context) { intent.putExtra("tags", notification.tags) intent.putExtra("tags_map", joinTagsMap(splitTags(notification.tags))) intent.putExtra("priority", notification.priority) + intent.putExtra("click", notification.click) intent.putExtra("muted", muted) intent.putExtra("muted_str", muted.toString()) + intent.putExtra("attachment_name", notification.attachment?.name ?: "") + intent.putExtra("attachment_type", notification.attachment?.type ?: "") + intent.putExtra("attachment_size", notification.attachment?.size ?: 0L) + intent.putExtra("attachment_expires", notification.attachment?.expires ?: 0L) + intent.putExtra("attachment_url", notification.attachment?.url ?: "") Log.d(TAG, "Sending message intent broadcast: ${intent.action} with extras ${intent.extras}") ctx.sendBroadcast(intent) diff --git a/app/src/main/java/io/heckel/ntfy/ui/Colors.kt b/app/src/main/java/io/heckel/ntfy/ui/Colors.kt index cce4db0..816d4b4 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/Colors.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/Colors.kt @@ -14,10 +14,18 @@ class Colors { return if (isDarkThemeOn(context)) R.color.black_800b else R.color.gray_400 } + fun cardBackground(context: Context): Int { + return if (isDarkThemeOn(context)) R.color.black_800b else R.color.white + } + fun cardSelectedBackground(context: Context): Int { return if (isDarkThemeOn(context)) R.color.black_700b else R.color.gray_500 } + fun cardBackgroundColor(context: Context): Int { + return ContextCompat.getColor(context, cardBackground(context)) + } + fun cardSelectedBackgroundColor(context: Context): Int { return ContextCompat.getColor(context, cardSelectedBackground(context)) } diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt index 214d614..7e2621b 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt @@ -636,7 +636,6 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra finishActionMode() } else { actionMode!!.title = adapter.selected.size.toString() - redrawList() } } @@ -717,8 +716,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra private fun beginActionMode(notification: Notification) { actionMode = startActionMode(this) - adapter.selected.add(notification.id) - redrawList() + adapter.toggleSelection(notification.id) // Fade status bar color val fromColor = ContextCompat.getColor(this, Colors.statusBarNormal(this)) @@ -734,7 +732,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra private fun endActionModeAndRedraw() { actionMode = null adapter.selected.clear() - redrawList() + adapter.notifyItemRangeChanged(0, adapter.currentList.size) // Fade status bar color val fromColor = ContextCompat.getColor(this, Colors.statusBarActionMode(this)) @@ -742,10 +740,6 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra fadeStatusBarColor(window, fromColor, toColor) } - private fun redrawList() { - mainList.adapter = adapter // Oh, what a hack ... - } - companion object { const val TAG = "NtfyDetailActivity" const val EXTRA_SUBSCRIPTION_ID = "subscriptionId" diff --git a/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt b/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt index 7203c4f..fbc0b82 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/DetailAdapter.kt @@ -64,6 +64,12 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope: } else { selected.add(notificationId) } + + if (selected.size != 0) { + val listIds = currentList.map { notification -> notification.id } + val notificationPosition = listIds.indexOf(notificationId) + notifyItemChanged(notificationPosition) + } } /* ViewHolder for Topic, takes in the inflated view and the onClick behavior. */ @@ -122,6 +128,8 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope: } if (selected.contains(notification.id)) { cardView.setCardBackgroundColor(Colors.cardSelectedBackgroundColor(context)) + } else { + cardView.setCardBackgroundColor(Colors.cardBackgroundColor(context)) } val attachment = notification.attachment val exists = if (attachment?.contentUri != null) fileExists(context, attachment.contentUri) else false diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt index cd77ed6..6781f98 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt @@ -538,7 +538,6 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc finishActionMode() } else { actionMode!!.title = adapter.selected.size.toString() - redrawList() } } @@ -593,8 +592,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc private fun beginActionMode(subscription: Subscription) { actionMode = startActionMode(this) - adapter.selected.add(subscription.id) - redrawList() + adapter.toggleSelection(subscription.id) // Fade out FAB fab.alpha = 1f @@ -647,9 +645,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc if (!this::mainList.isInitialized) { return } - runOnUiThread { - mainList.adapter = adapter // Oh, what a hack ... - } + adapter.notifyItemRangeChanged(0, adapter.currentList.size) } companion object { diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainAdapter.kt b/app/src/main/java/io/heckel/ntfy/ui/MainAdapter.kt index aebeadc..0ffa4fa 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/MainAdapter.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/MainAdapter.kt @@ -2,6 +2,7 @@ package io.heckel.ntfy.ui import android.content.Context import android.graphics.BitmapFactory +import android.graphics.Color import android.net.Uri import android.view.LayoutInflater import android.view.View @@ -46,6 +47,12 @@ class MainAdapter(private val repository: Repository, private val onClick: (Subs } else { selected.add(subscriptionId) } + + if (selected.size != 0) { + val listIds = currentList.map { subscription -> subscription.id } + val subscriptionPosition = listIds.indexOf(subscriptionId) + notifyItemChanged(subscriptionPosition) + } } /* ViewHolder for Topic, takes in the inflated view and the onClick behavior. */ @@ -111,6 +118,8 @@ class MainAdapter(private val repository: Repository, private val onClick: (Subs itemView.setOnLongClickListener { onLongClick(subscription); true } if (selected.contains(subscription.id)) { itemView.setBackgroundResource(Colors.itemSelectedBackground(context)) + } else { + itemView.setBackgroundColor(Color.TRANSPARENT); } } } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bc961a5..eb9b873 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -3,9 +3,9 @@ Notifications (priorité basse) Notifications (priorité normale) Abonnement - Abonné à deux sujets de livraison instantanée - Abonné à quatre sujets de livraison instantanée - Abonné à %1$d sujets de livraison instantanée + Abonné à deux sujets à réception instantanée + Abonné à quatre sujets à réception instantanée + Abonné à %1$d sujets à réception instantanée Abonné aux sujets Abonné à un sujet Abonné à quatre sujets @@ -53,13 +53,13 @@ Désabonner Supprimer définitivement Supprimer définitivement la ou les notification(s) sélectionnée(s) \? - Abonné à un sujet de livraison instantanée + Abonné à un sujet à réception instantanée Notifications (priorité maximale) Notifications (priorité minimale) Notifications (priorité élevée) Écoute les notifications entrantes - Abonné aux sujets de livraison instantanée - Abonné à trois sujets de livraison instantanée + Abonné aux sujets à réception instantanée + Abonné à trois sujets à réception instantanée Tout est à jour Notifications en sourdine Abonné à deux sujets @@ -304,4 +304,19 @@ Ignorer Ne pas déranger (DND), sons, etc. %1$s a échoué : %2$s Paramètres du canal + Abonné à six sujets + Réception instantanée + Abonné à cinq sujets + Les notifications sont transmises à l\'aide de Firebase. La réception peut être retardée, mais consomme moins de batterie. + Icône affichée pour les notifications de ce sujet + Abonné à six sujets à réception instantanée + Abonné à cinq sujets à réception instantanée + Apparence + Icône de souscription (toucher pour retirer) + Impossible d\'enregistrer l\'icône : %1$s + Les notifications sont reçues instantanément. Requiert un service en premier plan et consomme plus de batterie. + Icône d\'abonnement + Choisir une icône à afficher pour les notifications + Utiliser le paramètre global + utilisation du paramètre global \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml new file mode 100644 index 0000000..3eaa2f7 --- /dev/null +++ b/app/src/main/res/values-iw/strings.xml @@ -0,0 +1,43 @@ + + + רשום ל-%1$d נושאים + %1$d התראות התקבלו + הכל מעודכן + הרענון של הרישום הבא נכשל: %1$s + רישומים לנושאים + התראות פועלות + ההתראות מושתקות עד %1$s + הגדרות + דווח/י על באג + קרא/י את הדוקומנטציה + דרג/י את האפליקציה ⭐ + הסר/י רישום + מחק/י לצמיתות + ביטול + התראת %1$d + התראות %1$d + אתמול + הוספת רישום + נראה שלא נרשמת לאף נושא עדיין. + מיטוב סוללה צריך להיות כבוי עבור האפליקציה כדי להימנע מבעיות בשליחת וקבלת התראות. + שאל אחר כך + הסר + תקן עכשיו + שאל אחר כך + התראות (עדיפות מינימאלית) + שירות רישום + מאזין להתראות נכנסות + התראות (עדיפות נמוכה) + התראות (עדיפות ברירת מחדל) + התראות (עדיפות גבוהה) + התראות (עדיפות מקסימאלית) + הרענון של %1$d רישומים נכשל +\n +\n%2$s + התראות מושתקות + להסיר את הרישום מהנושא(ים) הנבחר(ים) ולמחוק את כל ההתראות לצמיתות\? + מתחבר מחדש… + לחצ\\י על + על מנת ליצור או להירשם אל מול נושא מסוים. לאחר מכן תקבל\\י התראות במכשירך כשתשלח\\י התראות דרך PUT או POST. + הוראות מפורטות זמינות ב-ntfy.sh, ובדוקומנטציה. + החלפ\\י ל-WebSockets תחת הגדרות \\ ״פרוטוקול חיבור״ עכשיו על מנת לוודא שאת\\ה יכול\\ה לתקשר עם שרת ה-ntfy באחסון עצמי שלך גם לאחר יוני 2022. + \ 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 a8a2c0d..44d199b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -134,16 +134,16 @@ Bestand downloaden Download annuleren Melding kopiëren - Aan het luisteren voor binnenkomende notificaties + Luisteren naar inkomende meldingen Directe levering staat altijd aan voor andere hosts dan %1$s. Abonneer Verbinding mislukt: %1$s Dit onderwerp vereist dat je inlogt. Gelieve een gebruikersnaam en wachtwoord in te vullen. Verwijder alle notificaties in dit onderwerp\? Onmiddellijke levering in \"doze\" modus - Schakel nu over naar WebSockets in de Settings / \"Connectie protocol\" om te verzekeren dat je kan communiceren met je zelf gehoste ntfy server na Juni 2022. - Onderwerpen zijn mogelijk niet beveiligd met een wachtwoord, dus kies een naam die moeilijk te raden is. Eenmaal geabonneerd, kunt u PUT/POST-meldingen plaatsen. - Geef de service URLs hieronder om te abboneren aan onderwerpen van andere servers. + Schakel nu over naar WebSockets in Instellingen / \"Verbindingsprotocol\" om er zeker van te zijn dat je kunt communiceren met je zelf gehoste ntfy server na juni 2022. + Onderwerpen zijn mogelijk niet beveiligd met een wachtwoord, dus kies een naam die moeilijk te raden is. Eenmaal geabonneerd, kunt u berichten PUT/POST\'en. + Vul server URLS hieronder in om te abonneren op onderwerpen van andere servers. Leer meer Zorgt ervoor dat berichten onmiddellijk worden afgeleverd, zelfs als het toestel inactief is. Login gefaald. Gebruiker %1$s is niet geauthoriseerd. @@ -151,8 +151,8 @@ Om een notificatie naar dit onderwerp te sturen, verstuur een simpele PUT of POST naar de URL van dit onderwerp. Voorbeeld (door gebruik van curl):
curl -d \"Hallo\"%1$s
Gedetaileerde instructies zijn ter beschikking op ntfy.sh en in de documentatie. - Afmelden voor dit onderwerp en alle ontvangen meldingen verwijderen\? - Test: Je kunt desgewenst een titel instellen. + Afmelden voor dit onderwerp en alle notificaties verwijderen\? + Test: Je kan een titel aanmaken als je wil. Directe levering uit Directe bezorging inschakelen Directe bezorging uitschakelen @@ -209,15 +209,15 @@ Oké Verwijder eerder opgenomen logs en begin opnieuw Je kunt de gebruikersnaam/wachtwoord voor de geselecteerde gebruiker bewerken of verwijderen. - Dit is een testmelding van de ntfy Android app. Het heeft een %1$d prioriteitsniveau. Als je een andere stuurt kan deze er anders uitzien. - Kan bericht niet verzenden: %1$s - Kan bericht niet verzenden: Anoniem publiceren niet toegestaan. - Kan bericht niet verzenden: De gebruiker \"%1$s\" is niet geautoriseerd. - Kan bericht niet verzenden: De bijlage is te groot. + Dit is een testnotificatie van de ntfy Android app. De prioriteit is level %1$d. Als je een andere notificatie stuurt, kan die er anders uit zien. + Kan het bericht niet versturen: %1$s + Kan bericht niet versturen: Anoniem publiceren niet toegestaan. + Kan bericht niet versturen: De gebruiker \"%1$s\" is niet geautoriseerd. + Kan bericht niet versturen: De bijlage is te groot. Gekopieerd naar het klembord Directe levering aan Tags: %1$s - Melding verwijderd + Notificatie verwijderd Opslaan Annuleren %1$s @@ -230,4 +230,93 @@ Loggen (tot 1,000 vermeldingen) naar apparaat … Schakel loggen in zodat je logs later kunt delen om problemen te diagnosticeren. Er zijn geen onderwerpen/hostnamen gecensureerd. Misschien heb je geen abonnementen\? + verwijderd + Alles automatisch downloaden + Nooit automatisch downloaden + Als kleiner dan 5 MB + Meldingen automatisch verwijderen na drie dagen + Nooit + Na één dag + URL: %1$s kan niet worden geopend + Bijlage kan niet worden geopend: Het bestand kan verwijderd zijn, of er geen app aanwezig die het bestand kan openen. + Geabonneerd op vijf onderwerpen voor directe levering + Bijlage: %1$s kan niet worden geopend + Geabonneerd op vijf onderwerpen + Er is een afbeelding met je gedeeld + Alle notificaties worden weergegeven + Kanaal instellingen + Als kleiner dan 500 kB + %1$d gedownload + verwijderd, link vervalt %1$s + Toon notificaties als prioriteit is %1$d (%2$s) of hoger + download mislukt, link vervalt %1$s + Voeg content om te delen toe + Afbeelding: %1$s kan niet worden gelezen + Bestandsinformatie van: %1$s kan niet worden gelezen + Alleen maximale prioriteit + min + laag + Als kleiner dan 100 kB + Voer de root URL in van je eigen server om deze standaard te gebruiken bij abonneren op nieuwe onderwerpen en/of delen in onderwerpen. + Kan icoon: %1$s niet bewaren + Gebruikt in onderwerpen %1$s + In geen enkel onderwerp in gebruik + Gebruikt in onderwerp %1$s + Gebruik systeem standaard + Notificaties worden direct afgeleverd. Dit vereist een service in de voorgrond en verbruikt meer batterij. + Icoon wat zal worden weergegeven in notificaties voor dit onderwerp + Gebruik globale instelling + Toon notificaties als prioriteit is 5 (max) + standaard + Bijlages nooit automatisch downloaden + Als kleiner dan 10 MB + Meldingen nooit automatisch verwijderen + hoog + Niet Storen (DND), geluiden, etc. + Bijlages downloaden + max + Donkere modus + Meldingen automatisch verwijderen na één week + Geabonneerd op zes onderwerpen voor directe levering + Geabonneerd op zes onderwerpen + Bijlage kan niet geopend of gedownload worden. De link is verlopen en een lokaal bestand kan niet worden gevonden. + Bijlage: %1$s kan niet worden bewaard + Bijlage: %1$s kan niet worden verwijderd + Bijlage: %1$s kan niet worden gedownload + niet gedownload + niet gedownload, link is verlopen + niet gedownload, verloopt %1$s + verwijderd, link is verlopen + download mislukt + download mislukt, link is verlopen + Er is een bestand met je gedeeld + Iedere prioriteit + Lage prioriteit en hoger + Standaard prioriteit en hoger + Hoge prioriteit en hoger + Bijlages automatisch downloaden + Als kleiner dan 50 MB + Meldingen automatisch verwijderen na één maand + Meldingen automatisch verwijderen na drie maanden + Na één week + Na één maand + Na 3 maanden + Na 3 dagen + %1$s (standaard) + Als kleiner dan 1 MB + Gebruikers + Gebruikers toevoegen + Nieuwe gebruiker toevoegen + Creëer een nieuwe gebruiker voor een nieuwe server + Gebruik de systeem standaard + Lichte modus aan + Donkere modus aan. Ben je een vampier\? + Lichte modus + Directe levering + Notificaties worden afgeleverd via Firebase. Aflevering kan iets vertraagd zijn, maar dit verbruikt minder batterij. + Weergave + Abonnement icoon + Stel een icoon in wat zal worden weergegeven in notificaties + Abonnementen icoon (tap om te verwijderen) + Gebruikt globale instelling \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f88a5e1..3beb5ba 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -304,4 +304,8 @@ Отмена Удалить пользователя %1$s не удалась: %2$s + Подписан на пять тем с мгновенной доставкой + Подписан на шесть тем с мгновенной доставкой + Подписан на пять тем + Подписан на шесть тем \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 249847b..e3fb3b3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -6,7 +6,7 @@ 已全部同步 订阅刷新失败:%1$s 通知已开启 - 通知已关闭 + 通知已暂停 暂停通知到 %1$s 设置 Bug 报告 @@ -18,7 +18,7 @@ 取消 正在重新连接…… 昨天 - %1$s (UnifiedPush) + %1$s(统一推送) 详细的说明请见 ntfy.sh 和帮助文档。 此通知由 %1$s 通过 UnifiedPush 管理 请关闭对本应用的电量优化以避免通知推送问题。 @@ -31,7 +31,7 @@ \n \n%2$s 删除订阅 - 您目前还没有订阅。 + 您当前还没有订阅。 低功耗模式下仍实时推送 确保在用户未使用设备时,消息也能实时送达。 低功耗模式下仍在除 %1$s 之外的服务器上使用实时推送。 @@ -44,23 +44,23 @@ 此主题需要您登录。请输入用户名和密码。 用户名 密码 - 登录失败。用户 %1$s 无权访问。 + 登录失败。 %1$s用户无权访问。 新用户 - 目前还没有关于此主题的通知。 + 当前还没有关于此主题的通知。 请在“链接协议”中选择 WebSockets 以保证在 2022 年 6 月之后仍能收到来自自建 ntfy 服务器的推送。 稍后再问 暂时不管 详情 订阅主题 主题未必有密码保护,因此请选择难以猜测的名称。订阅之后,您可以通知 PUT/POST 请求发送通知。 - 主题名称,比如:phils_alerts + 主题名称,例如:phils_alerts 详细的说明请见 ntfy.sh 和帮助文档。 您确认要删除这个主题下的所有通知吗? 这是 ntfy 安卓应用发来的测试通知。此通知优先级为 %1$d。如果再发送一条通知,通知的样式可能有变化。 - 无法发送消息:用户 %1$s 无权发布。 + 无法发送消息: %1$s用户无权发布。 下载文件 保存文件 - 向此主题的 URL 发送 PUT 或者 POST 请求即可发送通知。 + 向此主题的链接地址发送 PUT 或者 POST 请求即可发送通知。 例子(使用 curl):
$ curl -d \"Hi\" %1$s
永久删除 取消 @@ -80,8 +80,8 @@ 打开文件 删除文件 不再下载 - 复制 URL - URL 已复制到剪贴板 + 复制链接地址 + 链接地址已复制到剪贴板 复制通知 已保存为“下载”目录中的 %1$s 无法打开或下载附件。此链接已过期且未保存到本地。 @@ -157,24 +157,24 @@ 已订阅 4 个实时推送主题 已订阅 %1$d 个实时推送主题 使用其他服务器 - 在下方输入服务 URL 以订阅主题。 + 在下方输入服务链接地址以订阅主题。 无法下载附件:%1$s 未下载 未下载,链接已失效 通知已复制到剪贴板 无法打开附件:%1$s 无法打开附件:此文件已被删除或无可用打开方式。 - 无法打开 URL: %1$s + 无法打开链接:%1$s 无法保存附件:%1$s 无法删除附件:%1$s %1$s \n文件: %2$s %1$s -\n文件: %2$s, 已下载 +\n文件:已下载%2$s 设置 暂停通知 显示所有通知 - 已暂停通知至手动恢复 + 已暂停通知直至手动恢复 已暂停通知至 %1$s 最低优先级 显示所有通知 @@ -251,7 +251,7 @@ \n%3$s 通知 %1$s -\n文件: %2$s, 下载失败 +\n文件:下载%2$s失败 备份失败:%1$s 日志已复制到剪贴板 上传并复制链接 (屏蔽敏感信息) @@ -259,7 +259,7 @@ 未在任何主题使用 亮色模式 在主题 %1$s 使用 - 暗色模式已启用。你是吸血鬼吗? + 暗色模式已启用。您是吸血鬼吗? 跟随系统默认 删除以前的日志并重新来过 添加用户 @@ -299,4 +299,24 @@ 订阅%1$s 主题 分钟 默认 + 已订阅 5 个实时推送主题 + 已订阅 6 个主题 + 覆盖请勿打扰(DND)、声音等。 + %1$s 失败:%2$s + + + 最高 + 已订阅 6 个实时推送主题 + 已订阅 5 个主题 + 即时交付 + 通知会立即发送。需要前台服务,并消耗更多电池。 + 通知使用 Firebase 发送。投递可能会延迟,但消耗的电池更少。 + 外观 + 订阅图标 + 设置要在通知中显示的图标 + 订阅图标(点击可删除) + 此主题的通知中显示的图标 + 无法保存图标:%1$s + 使用全局设置 + 使用全局设置 \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelog/28.txt b/fastlane/metadata/android/en-US/changelog/28.txt new file mode 100644 index 0000000..42000e0 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelog/28.txt @@ -0,0 +1,9 @@ +Bugs: +* Fixed: Long-click selecting of notifications scrolls to the top (#235, thanks to @wunter8) +* Add attachment and click URL extras to MESSAGE_RECEIVED broadcast (#329, thanks to @wunter8) + +Additional translations: +* Italian (thanks to @Genio2003) +* Dutch (thanks to @SchoNie) + +Thank you to @wunter8 for proactively picking up some Android tickets, and fixing them! You rock! diff --git a/fastlane/metadata/android/nl/full_description.txt b/fastlane/metadata/android/nl/full_description.txt new file mode 100644 index 0000000..a220c97 --- /dev/null +++ b/fastlane/metadata/android/nl/full_description.txt @@ -0,0 +1,17 @@ +Stuur notificaties naar je telefoon vanaf ieder Bash or PowerShell script, of vanaf je eigen app door gebruik te maken van PUT/POST verzoeken, bijv. via curl op Linux of Invoke-WebRequest op Windows. + +ntfy is een Android client voor https://ntfy.sh, een gratis en opensource HTTP gebaseerde pub-sub service. Je kan abonneren op onderwerpen in deze app en berichten publiceren via een simpele HTTP API. + +Gebruik-voorbeelden: +* Notificaties naar jezelf als bepaalde script processen mislukt of afgerond zijn. +* Ping je telefoon bij een mislukte backup. +* Alarmering bij een mislukte login poging. + +Voorbeeld: + +$ curl -d "De backup is succesvol afgerond!" ntfy.sh/mijnonderwerp + +Meer voorbeelden en documenten vindt je hier: +* Website: https://ntfy.sh +* GitHub (server): https://github.com/binwiederhier/ntfy +* GitHub (Android app): https://github.com/binwiederhier/ntfy-android diff --git a/fastlane/metadata/android/nl/short_description.txt b/fastlane/metadata/android/nl/short_description.txt new file mode 100644 index 0000000..59a2e33 --- /dev/null +++ b/fastlane/metadata/android/nl/short_description.txt @@ -0,0 +1 @@ +Stuur notificaties naar je telefoon vanaf ieder script m.b.v PUT/POST verzoeken diff --git a/fastlane/metadata/android/nl/title.txt b/fastlane/metadata/android/nl/title.txt new file mode 100644 index 0000000..510d640 --- /dev/null +++ b/fastlane/metadata/android/nl/title.txt @@ -0,0 +1 @@ +ntfy - PUT/POST naar je phone diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/fastlane/metadata/android/zh-CN/full_description.txt new file mode 100644 index 0000000..1f8bbd6 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/full_description.txt @@ -0,0 +1,17 @@ +从任何 Bash/PowerShell 脚本,或从你自己的应用程序使用 PUT/POST 请求,例如通过 Linux 上的 curl 或 Invoke-WebRequest,向你的设备发送通知。 + +ntfy 是 https://ntfy.sh 的 Android 客户端,这是一个基于 HTTP 的免费开源 pub-sub 服务。您可以订阅此应用程序中的主题,然后通过简单的 HTTP API 发布消息。 + +用途: +* 当一个长期运行的进程完成时通知自己 +* 当备份失败时通知你的手机 +* 当有人登录到你的服务器时发出警报 + +例如: + +$ curl -d "Your backup is done" ntfy.sh/mytopic + +在此处查找更多示例和使用说明: +* 主页:https://ntfy.sh +* GitHub(服务端):https://github.com/binwiederhier/ntfy +* GitHub(安卓端):https://github.com/binwiederhier/ntfy-android diff --git a/fastlane/metadata/android/zh-CN/short_description.txt b/fastlane/metadata/android/zh-CN/short_description.txt new file mode 100644 index 0000000..a221572 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/short_description.txt @@ -0,0 +1 @@ +从任何脚本使用 PUT/POST 请求向您的设备发送通知 diff --git a/fastlane/metadata/android/zh-CN/title.txt b/fastlane/metadata/android/zh-CN/title.txt new file mode 100644 index 0000000..ac762f6 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/title.txt @@ -0,0 +1 @@ +ntfy - PUT/POST 至您的设备