Merge branch 'main' into 236-android-action-buttons

This commit is contained in:
Philipp Heckel 2022-06-18 15:01:56 -04:00
commit c480c14055
20 changed files with 296 additions and 55 deletions

View file

@ -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"

View file

@ -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)

View file

@ -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))
}

View file

@ -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"

View file

@ -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

View file

@ -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 {

View file

@ -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);
}
}
}

View file

@ -3,9 +3,9 @@
<string name="channel_notifications_low_name">Notifications (priorité basse)</string>
<string name="channel_notifications_default_name">Notifications (priorité normale)</string>
<string name="channel_subscriber_service_name">Abonnement</string>
<string name="channel_subscriber_notification_instant_text_two">Abonné à deux sujets de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text_four">Abonné à quatre sujets de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text_more">Abonné à %1$d sujets de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text_two">Abonné à deux sujets à réception instantanée</string>
<string name="channel_subscriber_notification_instant_text_four">Abonné à quatre sujets à réception instantanée</string>
<string name="channel_subscriber_notification_instant_text_more">Abonné à %1$d sujets à réception instantanée</string>
<string name="channel_subscriber_notification_noinstant_text">Abonné aux sujets</string>
<string name="channel_subscriber_notification_noinstant_text_one">Abonné à un sujet</string>
<string name="channel_subscriber_notification_noinstant_text_four">Abonné à quatre sujets</string>
@ -53,13 +53,13 @@
<string name="detail_menu_unsubscribe">Désabonner</string>
<string name="detail_action_mode_delete_dialog_permanently_delete">Supprimer définitivement</string>
<string name="detail_action_mode_delete_dialog_message">Supprimer définitivement la ou les notification(s) sélectionnée(s) \?</string>
<string name="channel_subscriber_notification_instant_text_one">Abonné à un sujet de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text_one">Abonné à un sujet à réception instantanée</string>
<string name="channel_notifications_max_name">Notifications (priorité maximale)</string>
<string name="channel_notifications_min_name">Notifications (priorité minimale)</string>
<string name="channel_notifications_high_name">Notifications (priorité élevée)</string>
<string name="channel_subscriber_notification_title">Écoute les notifications entrantes</string>
<string name="channel_subscriber_notification_instant_text">Abonné aux sujets de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text_three">Abonné à trois sujets de livraison instantanée</string>
<string name="channel_subscriber_notification_instant_text">Abonné aux sujets à réception instantanée</string>
<string name="channel_subscriber_notification_instant_text_three">Abonné à trois sujets à réception instantanée</string>
<string name="refresh_message_no_results">Tout est à jour</string>
<string name="main_menu_notifications_disabled_forever">Notifications en sourdine</string>
<string name="channel_subscriber_notification_noinstant_text_two">Abonné à deux sujets</string>
@ -304,4 +304,19 @@
<string name="settings_notifications_channel_prefs_summary">Ignorer Ne pas déranger (DND), sons, etc.</string>
<string name="notification_popup_user_action_failed">%1$s a échoué : %2$s</string>
<string name="settings_notifications_channel_prefs_title">Paramètres du canal</string>
<string name="channel_subscriber_notification_noinstant_text_six">Abonné à six sujets</string>
<string name="detail_settings_notifications_instant_title">Réception instantanée</string>
<string name="channel_subscriber_notification_noinstant_text_five">Abonné à cinq sujets</string>
<string name="detail_settings_notifications_instant_summary_off">Les notifications sont transmises à l\'aide de Firebase. La réception peut être retardée, mais consomme moins de batterie.</string>
<string name="detail_settings_appearance_icon_remove_summary">Icône affichée pour les notifications de ce sujet</string>
<string name="channel_subscriber_notification_instant_text_six">Abonné à six sujets à réception instantanée</string>
<string name="channel_subscriber_notification_instant_text_five">Abonné à cinq sujets à réception instantanée</string>
<string name="detail_settings_appearance_header">Apparence</string>
<string name="detail_settings_appearance_icon_remove_title">Icône de souscription (toucher pour retirer)</string>
<string name="detail_settings_appearance_icon_error_saving">Impossible d\'enregistrer l\'icône : %1$s</string>
<string name="detail_settings_notifications_instant_summary_on">Les notifications sont reçues instantanément. Requiert un service en premier plan et consomme plus de batterie.</string>
<string name="detail_settings_appearance_icon_set_title">Icône d\'abonnement</string>
<string name="detail_settings_appearance_icon_set_summary">Choisir une icône à afficher pour les notifications</string>
<string name="detail_settings_global_setting_title">Utiliser le paramètre global</string>
<string name="detail_settings_global_setting_suffix">utilisation du paramètre global</string>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="channel_subscriber_notification_noinstant_text_more">רשום ל-%1$d נושאים</string>
<string name="refresh_message_result">%1$d התראות התקבלו</string>
<string name="refresh_message_no_results">הכל מעודכן</string>
<string name="refresh_message_error_one">הרענון של הרישום הבא נכשל: %1$s</string>
<string name="main_action_bar_title">רישומים לנושאים</string>
<string name="main_menu_notifications_enabled">התראות פועלות</string>
<string name="main_menu_notifications_disabled_until">ההתראות מושתקות עד %1$s</string>
<string name="main_menu_settings_title">הגדרות</string>
<string name="main_menu_report_bug_title">דווח/י על באג</string>
<string name="main_menu_docs_title">קרא/י את הדוקומנטציה</string>
<string name="main_menu_rate_title">דרג/י את האפליקציה ⭐</string>
<string name="main_action_mode_menu_unsubscribe">הסר/י רישום</string>
<string name="main_action_mode_delete_dialog_permanently_delete">מחק/י לצמיתות</string>
<string name="main_action_mode_delete_dialog_cancel">ביטול</string>
<string name="main_item_status_text_one">התראת %1$d</string>
<string name="main_item_status_text_not_one">התראות %1$d</string>
<string name="main_item_date_yesterday">אתמול</string>
<string name="main_add_button_description">הוספת רישום</string>
<string name="main_no_subscriptions_text">נראה שלא נרשמת לאף נושא עדיין.</string>
<string name="main_banner_battery_text">מיטוב סוללה צריך להיות כבוי עבור האפליקציה כדי להימנע מבעיות בשליחת וקבלת התראות.</string>
<string name="main_banner_battery_button_remind_later">שאל אחר כך</string>
<string name="main_banner_battery_button_dismiss">הסר</string>
<string name="main_banner_battery_button_fix_now">תקן עכשיו</string>
<string name="main_banner_json_stream_button_remind_later">שאל אחר כך</string>
<string name="channel_notifications_min_name">התראות (עדיפות מינימאלית)</string>
<string name="channel_subscriber_service_name">שירות רישום</string>
<string name="channel_subscriber_notification_title">מאזין להתראות נכנסות</string>
<string name="channel_notifications_low_name">התראות (עדיפות נמוכה)</string>
<string name="channel_notifications_default_name">התראות (עדיפות ברירת מחדל)</string>
<string name="channel_notifications_high_name">התראות (עדיפות גבוהה)</string>
<string name="channel_notifications_max_name">התראות (עדיפות מקסימאלית)</string>
<string name="refresh_message_error">הרענון של %1$d רישומים נכשל
\n
\n%2$s</string>
<string name="main_menu_notifications_disabled_forever">התראות מושתקות</string>
<string name="main_action_mode_delete_dialog_message">להסיר את הרישום מהנושא(ים) הנבחר(ים) ולמחוק את כל ההתראות לצמיתות\?</string>
<string name="main_item_status_reconnecting">מתחבר מחדש…</string>
<string name="main_how_to_intro">לחצ\\י על + על מנת ליצור או להירשם אל מול נושא מסוים. לאחר מכן תקבל\\י התראות במכשירך כשתשלח\\י התראות דרך PUT או POST.</string>
<string name="main_how_to_link">הוראות מפורטות זמינות ב-ntfy.sh, ובדוקומנטציה.</string>
<string name="main_banner_json_stream_text">החלפ\\י ל-WebSockets תחת הגדרות \\ ״פרוטוקול חיבור״ עכשיו על מנת לוודא שאת\\ה יכול\\ה לתקשר עם שרת ה-ntfy באחסון עצמי שלך גם לאחר יוני 2022.</string>
</resources>

View file

@ -134,16 +134,16 @@
<string name="detail_item_menu_download">Bestand downloaden</string>
<string name="detail_item_menu_cancel">Download annuleren</string>
<string name="detail_item_menu_copy_contents">Melding kopiëren</string>
<string name="channel_subscriber_notification_title">Aan het luisteren voor binnenkomende notificaties</string>
<string name="channel_subscriber_notification_title">Luisteren naar inkomende meldingen</string>
<string name="add_dialog_foreground_description">Directe levering staat altijd aan voor andere hosts dan %1$s.</string>
<string name="add_dialog_button_subscribe">Abonneer</string>
<string name="add_dialog_error_connection_failed">Verbinding mislukt: %1$s</string>
<string name="add_dialog_login_description">Dit onderwerp vereist dat je inlogt. Gelieve een gebruikersnaam en wachtwoord in te vullen.</string>
<string name="detail_clear_dialog_message">Verwijder alle notificaties in dit onderwerp\?</string>
<string name="add_dialog_instant_delivery">Onmiddellijke levering in \"doze\" modus</string>
<string name="main_banner_json_stream_text">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.</string>
<string name="add_dialog_description_below">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.</string>
<string name="add_dialog_use_another_server_description">Geef de service URLs hieronder om te abboneren aan onderwerpen van andere servers.</string>
<string name="main_banner_json_stream_text">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.</string>
<string name="add_dialog_description_below">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.</string>
<string name="add_dialog_use_another_server_description">Vul server URLS hieronder in om te abonneren op onderwerpen van andere servers.</string>
<string name="main_banner_json_stream_button_learn_more">Leer meer</string>
<string name="add_dialog_instant_delivery_description">Zorgt ervoor dat berichten onmiddellijk worden afgeleverd, zelfs als het toestel inactief is.</string>
<string name="add_dialog_login_error_not_authorized">Login gefaald. Gebruiker %1$s is niet geauthoriseerd.</string>
@ -151,8 +151,8 @@
<string name="detail_how_to_intro">Om een notificatie naar dit onderwerp te sturen, verstuur een simpele PUT of POST naar de URL van dit onderwerp.</string>
<string name="detail_how_to_example">Voorbeeld (door gebruik van curl): <br/><tt> curl -d \"Hallo\"%1$s</tt></string>
<string name="detail_how_to_link">Gedetaileerde instructies zijn ter beschikking op ntfy.sh en in de documentatie.</string>
<string name="detail_delete_dialog_message">Afmelden voor dit onderwerp en alle ontvangen meldingen verwijderen\?</string>
<string name="detail_test_title">Test: Je kunt desgewenst een titel instellen.</string>
<string name="detail_delete_dialog_message">Afmelden voor dit onderwerp en alle notificaties verwijderen\?</string>
<string name="detail_test_title">Test: Je kan een titel aanmaken als je wil.</string>
<string name="detail_instant_delivery_disabled">Directe levering uit</string>
<string name="detail_menu_enable_instant">Directe bezorging inschakelen</string>
<string name="detail_menu_disable_instant">Directe bezorging uitschakelen</string>
@ -209,15 +209,15 @@
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">Oké</string>
<string name="settings_advanced_clear_logs_summary">Verwijder eerder opgenomen logs en begin opnieuw</string>
<string name="user_dialog_description_edit">Je kunt de gebruikersnaam/wachtwoord voor de geselecteerde gebruiker bewerken of verwijderen.</string>
<string name="detail_test_message">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.</string>
<string name="detail_test_message_error">Kan bericht niet verzenden: %1$s</string>
<string name="detail_test_message_error_unauthorized_anon">Kan bericht niet verzenden: Anoniem publiceren niet toegestaan.</string>
<string name="detail_test_message_error_unauthorized_user">Kan bericht niet verzenden: De gebruiker \"%1$s\" is niet geautoriseerd.</string>
<string name="detail_test_message_error_too_large">Kan bericht niet verzenden: De bijlage is te groot.</string>
<string name="detail_test_message">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.</string>
<string name="detail_test_message_error">Kan het bericht niet versturen: %1$s</string>
<string name="detail_test_message_error_unauthorized_anon">Kan bericht niet versturen: Anoniem publiceren niet toegestaan.</string>
<string name="detail_test_message_error_unauthorized_user">Kan bericht niet versturen: De gebruiker \"%1$s\" is niet geautoriseerd.</string>
<string name="detail_test_message_error_too_large">Kan bericht niet versturen: De bijlage is te groot.</string>
<string name="detail_copied_to_clipboard_message">Gekopieerd naar het klembord</string>
<string name="detail_instant_delivery_enabled">Directe levering aan</string>
<string name="detail_item_tags">Tags: %1$s</string>
<string name="detail_item_snack_deleted">Melding verwijderd</string>
<string name="detail_item_snack_deleted">Notificatie verwijderd</string>
<string name="notification_dialog_save">Opslaan</string>
<string name="notification_popup_action_cancel">Annuleren</string>
<string name="notification_popup_file">%1$s
@ -230,4 +230,93 @@
<string name="settings_advanced_record_logs_summary_enabled">Loggen (tot 1,000 vermeldingen) naar apparaat …</string>
<string name="settings_advanced_record_logs_summary_disabled">Schakel loggen in zodat je logs later kunt delen om problemen te diagnosticeren.</string>
<string name="settings_advanced_export_logs_scrub_dialog_empty">Er zijn geen onderwerpen/hostnamen gecensureerd. Misschien heb je geen abonnementen\?</string>
<string name="detail_item_download_info_deleted">verwijderd</string>
<string name="settings_notifications_auto_download_always">Alles automatisch downloaden</string>
<string name="settings_notifications_auto_download_never">Nooit automatisch downloaden</string>
<string name="settings_notifications_auto_download_5m">Als kleiner dan 5 MB</string>
<string name="settings_notifications_auto_delete_summary_three_days">Meldingen automatisch verwijderen na drie dagen</string>
<string name="settings_notifications_auto_delete_never">Nooit</string>
<string name="settings_notifications_auto_delete_one_day">Na één dag</string>
<string name="detail_item_cannot_open_url">URL: %1$s kan niet worden geopend</string>
<string name="detail_item_cannot_open_not_found">Bijlage kan niet worden geopend: Het bestand kan verwijderd zijn, of er geen app aanwezig die het bestand kan openen.</string>
<string name="channel_subscriber_notification_instant_text_five">Geabonneerd op vijf onderwerpen voor directe levering</string>
<string name="detail_item_cannot_open">Bijlage: %1$s kan niet worden geopend</string>
<string name="channel_subscriber_notification_noinstant_text_five">Geabonneerd op vijf onderwerpen</string>
<string name="share_content_image_text">Er is een afbeelding met je gedeeld</string>
<string name="settings_notifications_min_priority_summary_any">Alle notificaties worden weergegeven</string>
<string name="settings_notifications_channel_prefs_title">Kanaal instellingen</string>
<string name="settings_notifications_auto_download_500k">Als kleiner dan 500 kB</string>
<string name="detail_item_download_info_downloading_x_percent">%1$d gedownload</string>
<string name="detail_item_download_info_deleted_expires_x">verwijderd, link vervalt %1$s</string>
<string name="settings_notifications_min_priority_summary_x_or_higher">Toon notificaties als prioriteit is %1$d (%2$s) of hoger</string>
<string name="detail_item_download_info_download_failed_expires_x">download mislukt, link vervalt %1$s</string>
<string name="share_content_text_hint">Voeg content om te delen toe</string>
<string name="share_content_image_error">Afbeelding: %1$s kan niet worden gelezen</string>
<string name="share_content_file_error">Bestandsinformatie van: %1$s kan niet worden gelezen</string>
<string name="settings_notifications_min_priority_max">Alleen maximale prioriteit</string>
<string name="settings_notifications_priority_min">min</string>
<string name="settings_notifications_priority_low">laag</string>
<string name="settings_notifications_auto_download_100k">Als kleiner dan 100 kB</string>
<string name="settings_general_default_base_url_message">Voer de root URL in van je eigen server om deze standaard te gebruiken bij abonneren op nieuwe onderwerpen en/of delen in onderwerpen.</string>
<string name="detail_settings_appearance_icon_error_saving">Kan icoon: %1$s niet bewaren</string>
<string name="settings_general_users_prefs_user_used_by_many">Gebruikt in onderwerpen %1$s</string>
<string name="settings_general_users_prefs_user_not_used">In geen enkel onderwerp in gebruik</string>
<string name="settings_general_users_prefs_user_used_by_one">Gebruikt in onderwerp %1$s</string>
<string name="settings_general_dark_mode_entry_system">Gebruik systeem standaard</string>
<string name="detail_settings_notifications_instant_summary_on">Notificaties worden direct afgeleverd. Dit vereist een service in de voorgrond en verbruikt meer batterij.</string>
<string name="detail_settings_appearance_icon_remove_summary">Icoon wat zal worden weergegeven in notificaties voor dit onderwerp</string>
<string name="detail_settings_global_setting_title">Gebruik globale instelling</string>
<string name="settings_notifications_min_priority_summary_max">Toon notificaties als prioriteit is 5 (max)</string>
<string name="settings_notifications_priority_default">standaard</string>
<string name="settings_notifications_auto_download_summary_never">Bijlages nooit automatisch downloaden</string>
<string name="settings_notifications_auto_download_10m">Als kleiner dan 10 MB</string>
<string name="settings_notifications_auto_delete_summary_never">Meldingen nooit automatisch verwijderen</string>
<string name="settings_notifications_priority_high">hoog</string>
<string name="settings_notifications_channel_prefs_summary">Niet Storen (DND), geluiden, etc.</string>
<string name="settings_notifications_auto_download_title">Bijlages downloaden</string>
<string name="settings_notifications_priority_max">max</string>
<string name="settings_general_dark_mode_title">Donkere modus</string>
<string name="settings_notifications_auto_delete_summary_one_week">Meldingen automatisch verwijderen na één week</string>
<string name="channel_subscriber_notification_instant_text_six">Geabonneerd op zes onderwerpen voor directe levering</string>
<string name="channel_subscriber_notification_noinstant_text_six">Geabonneerd op zes onderwerpen</string>
<string name="detail_item_cannot_download">Bijlage kan niet geopend of gedownload worden. De link is verlopen en een lokaal bestand kan niet worden gevonden.</string>
<string name="detail_item_cannot_save">Bijlage: %1$s kan niet worden bewaard</string>
<string name="detail_item_cannot_delete">Bijlage: %1$s kan niet worden verwijderd</string>
<string name="detail_item_download_failed">Bijlage: %1$s kan niet worden gedownload</string>
<string name="detail_item_download_info_not_downloaded">niet gedownload</string>
<string name="detail_item_download_info_not_downloaded_expired">niet gedownload, link is verlopen</string>
<string name="detail_item_download_info_not_downloaded_expires_x">niet gedownload, verloopt %1$s</string>
<string name="detail_item_download_info_deleted_expired">verwijderd, link is verlopen</string>
<string name="detail_item_download_info_download_failed">download mislukt</string>
<string name="detail_item_download_info_download_failed_expired">download mislukt, link is verlopen</string>
<string name="share_content_file_text">Er is een bestand met je gedeeld</string>
<string name="settings_notifications_min_priority_min">Iedere prioriteit</string>
<string name="settings_notifications_min_priority_low">Lage prioriteit en hoger</string>
<string name="settings_notifications_min_priority_default">Standaard prioriteit en hoger</string>
<string name="settings_notifications_min_priority_high">Hoge prioriteit en hoger</string>
<string name="settings_notifications_auto_download_summary_always">Bijlages automatisch downloaden</string>
<string name="settings_notifications_auto_download_50m">Als kleiner dan 50 MB</string>
<string name="settings_notifications_auto_delete_summary_one_month">Meldingen automatisch verwijderen na één maand</string>
<string name="settings_notifications_auto_delete_summary_three_months">Meldingen automatisch verwijderen na drie maanden</string>
<string name="settings_notifications_auto_delete_one_week">Na één week</string>
<string name="settings_notifications_auto_delete_one_month">Na één maand</string>
<string name="settings_notifications_auto_delete_three_months">Na 3 maanden</string>
<string name="settings_notifications_auto_delete_three_days">Na 3 dagen</string>
<string name="settings_general_default_base_url_default_summary">%1$s (standaard)</string>
<string name="settings_notifications_auto_download_1m">Als kleiner dan 1 MB</string>
<string name="settings_general_users_prefs_title">Gebruikers</string>
<string name="settings_general_users_prefs_user_add">Gebruikers toevoegen</string>
<string name="settings_general_users_prefs_user_add_title">Nieuwe gebruiker toevoegen</string>
<string name="settings_general_users_prefs_user_add_summary">Creëer een nieuwe gebruiker voor een nieuwe server</string>
<string name="settings_general_dark_mode_summary_system">Gebruik de systeem standaard</string>
<string name="settings_general_dark_mode_summary_light">Lichte modus aan</string>
<string name="settings_general_dark_mode_summary_dark">Donkere modus aan. Ben je een vampier\?</string>
<string name="settings_general_dark_mode_entry_light">Lichte modus</string>
<string name="detail_settings_notifications_instant_title">Directe levering</string>
<string name="detail_settings_notifications_instant_summary_off">Notificaties worden afgeleverd via Firebase. Aflevering kan iets vertraagd zijn, maar dit verbruikt minder batterij.</string>
<string name="detail_settings_appearance_header">Weergave</string>
<string name="detail_settings_appearance_icon_set_title">Abonnement icoon</string>
<string name="detail_settings_appearance_icon_set_summary">Stel een icoon in wat zal worden weergegeven in notificaties</string>
<string name="detail_settings_appearance_icon_remove_title">Abonnementen icoon (tap om te verwijderen)</string>
<string name="detail_settings_global_setting_suffix">Gebruikt globale instelling</string>
</resources>

View file

@ -304,4 +304,8 @@
<string name="user_dialog_button_cancel">Отмена</string>
<string name="user_dialog_button_delete">Удалить пользователя</string>
<string name="notification_popup_user_action_failed">%1$s не удалась: %2$s</string>
<string name="channel_subscriber_notification_instant_text_five">Подписан на пять тем с мгновенной доставкой</string>
<string name="channel_subscriber_notification_instant_text_six">Подписан на шесть тем с мгновенной доставкой</string>
<string name="channel_subscriber_notification_noinstant_text_five">Подписан на пять тем</string>
<string name="channel_subscriber_notification_noinstant_text_six">Подписан на шесть тем</string>
</resources>

View file

@ -6,7 +6,7 @@
<string name="refresh_message_no_results">已全部同步</string>
<string name="refresh_message_error_one">订阅刷新失败:%1$s</string>
<string name="main_menu_notifications_enabled">通知已开启</string>
<string name="main_menu_notifications_disabled_forever">通知已关闭</string>
<string name="main_menu_notifications_disabled_forever">通知已暂停</string>
<string name="main_menu_notifications_disabled_until">暂停通知到 %1$s</string>
<string name="main_menu_settings_title">设置</string>
<string name="main_menu_report_bug_title">Bug 报告</string>
@ -18,7 +18,7 @@
<string name="main_action_mode_delete_dialog_cancel">取消</string>
<string name="main_item_status_reconnecting">正在重新连接……</string>
<string name="main_item_date_yesterday">昨天</string>
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
<string name="main_item_status_unified_push">%1$s(统一推送)</string>
<string name="main_how_to_link">详细的说明请见 ntfy.sh 和帮助文档。</string>
<string name="main_unified_push_toast">此通知由 %1$s 通过 UnifiedPush 管理</string>
<string name="main_banner_battery_text">请关闭对本应用的电量优化以避免通知推送问题。</string>
@ -31,7 +31,7 @@
\n
\n%2$s</string>
<string name="main_action_mode_menu_unsubscribe">删除订阅</string>
<string name="main_no_subscriptions_text">前还没有订阅。</string>
<string name="main_no_subscriptions_text">前还没有订阅。</string>
<string name="add_dialog_instant_delivery">低功耗模式下仍实时推送</string>
<string name="add_dialog_instant_delivery_description">确保在用户未使用设备时,消息也能实时送达。</string>
<string name="add_dialog_foreground_description">低功耗模式下仍在除 %1$s 之外的服务器上使用实时推送。</string>
@ -44,23 +44,23 @@
<string name="add_dialog_login_description">此主题需要您登录。请输入用户名和密码。</string>
<string name="add_dialog_login_username_hint">用户名</string>
<string name="add_dialog_login_password_hint">密码</string>
<string name="add_dialog_login_error_not_authorized">登录失败。用户 %1$s 无权访问。</string>
<string name="add_dialog_login_error_not_authorized">登录失败。 %1$s用户无权访问。</string>
<string name="add_dialog_login_new_user">新用户</string>
<string name="detail_no_notifications_text">前还没有关于此主题的通知。</string>
<string name="detail_no_notifications_text">前还没有关于此主题的通知。</string>
<string name="main_banner_json_stream_text">请在“链接协议”中选择 WebSockets 以保证在 2022 年 6 月之后仍能收到来自自建 ntfy 服务器的推送。</string>
<string name="main_banner_json_stream_button_remind_later">稍后再问</string>
<string name="main_banner_json_stream_button_dismiss">暂时不管</string>
<string name="main_banner_json_stream_button_learn_more">详情</string>
<string name="add_dialog_title">订阅主题</string>
<string name="add_dialog_description_below">主题未必有密码保护,因此请选择难以猜测的名称。订阅之后,您可以通知 PUT/POST 请求发送通知。</string>
<string name="add_dialog_topic_name_hint">主题名称,phils_alerts</string>
<string name="add_dialog_topic_name_hint">主题名称,phils_alerts</string>
<string name="detail_how_to_link">详细的说明请见 ntfy.sh 和帮助文档。</string>
<string name="detail_clear_dialog_message">您确认要删除这个主题下的所有通知吗?</string>
<string name="detail_test_message">这是 ntfy 安卓应用发来的测试通知。此通知优先级为 %1$d。如果再发送一条通知通知的样式可能有变化。</string>
<string name="detail_test_message_error_unauthorized_user">无法发送消息:用户 %1$s 无权发布。</string>
<string name="detail_test_message_error_unauthorized_user">无法发送消息: %1$s用户无权发布。</string>
<string name="detail_item_menu_download">下载文件</string>
<string name="detail_item_menu_save_file">保存文件</string>
<string name="detail_how_to_intro">向此主题的 URL 发送 PUT 或者 POST 请求即可发送通知。</string>
<string name="detail_how_to_intro">向此主题的链接地址发送 PUT 或者 POST 请求即可发送通知。</string>
<string name="detail_how_to_example">例子(使用 curl<br/><tt>$ curl -d \"Hi\" %1$s</tt></string>
<string name="detail_clear_dialog_permanently_delete">永久删除</string>
<string name="detail_clear_dialog_cancel">取消</string>
@ -80,8 +80,8 @@
<string name="detail_item_menu_open">打开文件</string>
<string name="detail_item_menu_delete">删除文件</string>
<string name="detail_item_menu_cancel">不再下载</string>
<string name="detail_item_menu_copy_url">复制 URL</string>
<string name="detail_item_menu_copy_url_copied">URL 已复制到剪贴板</string>
<string name="detail_item_menu_copy_url">复制链接地址</string>
<string name="detail_item_menu_copy_url_copied">链接地址已复制到剪贴板</string>
<string name="detail_item_menu_copy_contents">复制通知</string>
<string name="detail_item_saved_successfully">已保存为“下载”目录中的 %1$s</string>
<string name="detail_item_cannot_download">无法打开或下载附件。此链接已过期且未保存到本地。</string>
@ -157,24 +157,24 @@
<string name="channel_subscriber_notification_instant_text_four">已订阅 4 个实时推送主题</string>
<string name="channel_subscriber_notification_instant_text_more">已订阅 %1$d 个实时推送主题</string>
<string name="add_dialog_use_another_server">使用其他服务器</string>
<string name="add_dialog_use_another_server_description">在下方输入服务 URL 以订阅主题。</string>
<string name="add_dialog_use_another_server_description">在下方输入服务链接地址以订阅主题。</string>
<string name="detail_item_download_failed">无法下载附件:%1$s</string>
<string name="detail_item_download_info_not_downloaded">未下载</string>
<string name="detail_item_download_info_not_downloaded_expired">未下载,链接已失效</string>
<string name="detail_item_menu_copy_contents_copied">通知已复制到剪贴板</string>
<string name="detail_item_cannot_open">无法打开附件:%1$s</string>
<string name="detail_item_cannot_open_not_found">无法打开附件:此文件已被删除或无可用打开方式。</string>
<string name="detail_item_cannot_open_url">无法打开 URL: %1$s</string>
<string name="detail_item_cannot_open_url">无法打开链接:%1$s</string>
<string name="detail_item_cannot_save">无法保存附件:%1$s</string>
<string name="detail_item_cannot_delete">无法删除附件:%1$s</string>
<string name="notification_popup_file">%1$s
\n文件: %2$s</string>
<string name="notification_popup_file_download_successful">%1$s
\n文件: %2$s, 已下载</string>
\n文件:已下载%2$s</string>
<string name="settings_title">设置</string>
<string name="settings_notifications_muted_until_title">暂停通知</string>
<string name="settings_notifications_muted_until_show_all">显示所有通知</string>
<string name="settings_notifications_muted_until_forever">已暂停通知至手动恢复</string>
<string name="settings_notifications_muted_until_forever">已暂停通知至手动恢复</string>
<string name="settings_notifications_muted_until_x">已暂停通知至 %1$s</string>
<string name="settings_notifications_min_priority_title">最低优先级</string>
<string name="settings_notifications_min_priority_summary_any">显示所有通知</string>
@ -251,7 +251,7 @@
\n%3$s</string>
<string name="settings_notifications_header">通知</string>
<string name="notification_popup_file_download_failed">%1$s
\n文件: %2$s, 下载失败</string>
\n文件:下载%2$s失败</string>
<string name="settings_backup_restore_backup_failed">备份失败:%1$s</string>
<string name="settings_advanced_export_logs_copied_logs">日志已复制到剪贴板</string>
<string name="settings_advanced_export_logs_entry_upload_scrubbed">上传并复制链接 (屏蔽敏感信息)</string>
@ -259,7 +259,7 @@
<string name="settings_general_users_prefs_user_not_used">未在任何主题使用</string>
<string name="settings_general_dark_mode_entry_light">亮色模式</string>
<string name="settings_general_users_prefs_user_used_by_one">在主题 %1$s 使用</string>
<string name="settings_general_dark_mode_summary_dark">暗色模式已启用。是吸血鬼吗?</string>
<string name="settings_general_dark_mode_summary_dark">暗色模式已启用。是吸血鬼吗?</string>
<string name="settings_general_dark_mode_entry_system">跟随系统默认</string>
<string name="settings_advanced_clear_logs_summary">删除以前的日志并重新来过</string>
<string name="user_dialog_title_add">添加用户</string>
@ -299,4 +299,24 @@
<string name="detail_deep_link_subscribed_toast_message">订阅%1$s 主题</string>
<string name="settings_notifications_priority_min">分钟</string>
<string name="settings_notifications_priority_default">默认</string>
<string name="channel_subscriber_notification_instant_text_five">已订阅 5 个实时推送主题</string>
<string name="channel_subscriber_notification_noinstant_text_six">已订阅 6 个主题</string>
<string name="settings_notifications_channel_prefs_summary">覆盖请勿打扰DND、声音等。</string>
<string name="notification_popup_user_action_failed">%1$s 失败:%2$s</string>
<string name="settings_notifications_priority_low"></string>
<string name="settings_notifications_priority_high"></string>
<string name="settings_notifications_priority_max">最高</string>
<string name="channel_subscriber_notification_instant_text_six">已订阅 6 个实时推送主题</string>
<string name="channel_subscriber_notification_noinstant_text_five">已订阅 5 个主题</string>
<string name="detail_settings_notifications_instant_title">即时交付</string>
<string name="detail_settings_notifications_instant_summary_on">通知会立即发送。需要前台服务,并消耗更多电池。</string>
<string name="detail_settings_notifications_instant_summary_off">通知使用 Firebase 发送。投递可能会延迟,但消耗的电池更少。</string>
<string name="detail_settings_appearance_header">外观</string>
<string name="detail_settings_appearance_icon_set_title">订阅图标</string>
<string name="detail_settings_appearance_icon_set_summary">设置要在通知中显示的图标</string>
<string name="detail_settings_appearance_icon_remove_title">订阅图标(点击可删除)</string>
<string name="detail_settings_appearance_icon_remove_summary">此主题的通知中显示的图标</string>
<string name="detail_settings_appearance_icon_error_saving">无法保存图标:%1$s</string>
<string name="detail_settings_global_setting_title">使用全局设置</string>
<string name="detail_settings_global_setting_suffix">使用全局设置</string>
</resources>

View file

@ -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!

View file

@ -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

View file

@ -0,0 +1 @@
Stuur notificaties naar je telefoon vanaf ieder script m.b.v PUT/POST verzoeken

View file

@ -0,0 +1 @@
ntfy - PUT/POST naar je phone

View file

@ -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

View file

@ -0,0 +1 @@
从任何脚本使用 PUT/POST 请求向您的设备发送通知

View file

@ -0,0 +1 @@
ntfy - PUT/POST 至您的设备