Merge branch 'main' into disable-up
This commit is contained in:
commit
f1ae432156
6 changed files with 72 additions and 11 deletions
|
|
@ -17,8 +17,8 @@ android {
|
|||
minSdkVersion 26
|
||||
targetSdkVersion 36
|
||||
|
||||
versionCode 60
|
||||
versionName "1.24.0"
|
||||
versionCode 61
|
||||
versionName "1.25.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import io.heckel.ntfy.util.Log
|
|||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class Application : Application() {
|
||||
val ioScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
|
|
@ -34,11 +35,28 @@ class Application : Application() {
|
|||
val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||
connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
|
||||
override fun onAvailable(network: Network) {
|
||||
// Force reconnect of all WebSocket/JSON connections so they're rebound to the new
|
||||
// default network. This catches Wi-Fi <-> cellular handoffs and similar transitions
|
||||
// where the underlying socket is bound to a network that's no longer the default.
|
||||
// Without this, broken connections would only be detected via the (potentially
|
||||
// long) ping/pong timeout.
|
||||
Log.i(TAG, "Default network available ($network); forcing reconnect of all connections")
|
||||
ioScope.launch {
|
||||
repository.getSubscriptions()
|
||||
.map { it.baseUrl }
|
||||
.distinct()
|
||||
.forEach { repository.incrementConnectionForceReconnectVersion(it) }
|
||||
SubscriberServiceManager.refresh(this@Application)
|
||||
}
|
||||
}
|
||||
override fun onLost(network: Network) {
|
||||
Log.i(TAG, "Default network lost ($network); refreshing subscriber service")
|
||||
SubscriberServiceManager.refresh(this@Application)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "NtfyApplication"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,12 +46,24 @@ object HttpUtil {
|
|||
|
||||
/**
|
||||
* Client for WebSocket connections.
|
||||
* No read timeout, 1 minute ping interval, 10s connect timeout.
|
||||
* No read timeout, 5 minute ping interval, 10s connect timeout.
|
||||
*
|
||||
* Dead connections are normally caught by one of two faster mechanisms:
|
||||
* 1. Device-side network changes (Wi-Fi <-> cellular, network drop/return) are
|
||||
* detected instantly by Application.registerNetworkCallback's onAvailable
|
||||
* handler, which bumps connectionForceReconnectVersion to force a reconnect.
|
||||
* 2. Server-side failures (crash, restart, server's own pong timeout) surface as
|
||||
* TCP FIN/RST and are detected instantly via OkHttp's onClosed/onFailure.
|
||||
*
|
||||
* The 5-minute client ping is only a fallback for the rare case where neither of
|
||||
* the above fires: silent server hangs, NAT eviction, asymmetric routing breaks, etc.
|
||||
* We use a long interval so the modem can fully power down between pings, which is
|
||||
* the dominant battery factor for the foreground service.
|
||||
*/
|
||||
suspend fun wsClient(context: Context, baseUrl: String): OkHttpClient {
|
||||
return emptyClientBuilder(context, baseUrl)
|
||||
.readTimeout(0, TimeUnit.MILLISECONDS)
|
||||
.pingInterval(1, TimeUnit.MINUTES) // Technically not necessary, the server also pings us
|
||||
.pingInterval(5, TimeUnit.MINUTES)
|
||||
.connectTimeout(10, TimeUnit.SECONDS)
|
||||
.build()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
<string name="channel_subscriber_notification_title">Kuulame saabuvaid teavitusi</string>
|
||||
<string name="main_item_status_reconnecting">loome uuesti ühendust …</string>
|
||||
<string name="main_banner_battery_button_fix_now">Tee korda</string>
|
||||
<string name="channel_subscriber_service_name">Tellimuste teenus</string>
|
||||
<string name="channel_subscriber_service_name">Taustateenus</string>
|
||||
<string name="main_banner_battery_button_remind_later">Küsi hiljem</string>
|
||||
<string name="main_banner_battery_button_dismiss">Katkesta</string>
|
||||
<string name="refresh_message_error_one">Tellimuse andmete uuendamine ei õnnestunud: %1$s</string>
|
||||
|
|
@ -462,8 +462,23 @@
|
|||
<string name="common_button_reset_to_default">Taasta algväärtused</string>
|
||||
<string name="default_server_dialog_url_error_invalid">Sisesta korrektne teenuse võrguaadress, nt https://ntfy.toredomeen.com</string>
|
||||
<string name="connection_alert_title">Ühendus on katkenud</string>
|
||||
<string name="connection_alert_text_one">Ühendus %1$s teenusega toimib vaid %2$d minuti(t)</string>
|
||||
<string name="connection_alert_text_multiple">Ühendus %1$d serveriga toimib vaid %2$d minuti(t)</string>
|
||||
<string name="connection_alert_text_one">Ühendus %1$s teenusega toimib vaid %2$d minuti(t). Palun kontrolli seadme võrguühenduse toimimist.</string>
|
||||
<string name="connection_alert_text_multiple">Ühendus %1$d serveriga toimib vaid %2$d minuti(t). Palun kontrolli seadme võrguühenduse toimimist.</string>
|
||||
<string name="connection_alert_action_snooze">Tukasta %1$dt</string>
|
||||
<string name="connection_alert_action_never">Ära näita iialgi</string>
|
||||
<string name="channel_connection_alert_name">Ühenduse hoiatused</string>
|
||||
<string name="main_banner_no_network_text">Sa pole võrgus :(</string>
|
||||
<string name="settings_advanced_connection_alert_title">Hoiata ühenduse katkemisel</string>
|
||||
<string name="settings_advanced_connection_alert_summary_never">Ära iialgi hoiata, kui ntfy server pole leitav</string>
|
||||
<string name="settings_advanced_connection_alert_summary_five_minutes">Hoiata, kui ntfy server pole leitav enam, kui 5 minuti jooksul</string>
|
||||
<string name="settings_advanced_connection_alert_summary_fifteen_minutes">Hoiata, kui ntfy server pole leitav enam, kui 15 minuti jooksul</string>
|
||||
<string name="settings_advanced_connection_alert_summary_one_hour">Hoiata, kui ntfy server pole leitav enam, kui 1 tunni jooksul</string>
|
||||
<string name="settings_advanced_connection_alert_summary_three_hours">Hoiata, kui ntfy server pole leitav enam, kui 3 tunni jooksul</string>
|
||||
<string name="settings_advanced_connection_alert_summary_twelve_hours">Hoiata, kui ntfy server pole leitav enam, kui 12 tunni jooksul</string>
|
||||
<string name="settings_advanced_connection_alert_never">Mitte kunagi</string>
|
||||
<string name="settings_advanced_connection_alert_five_minutes">5 minuti möödumisel</string>
|
||||
<string name="settings_advanced_connection_alert_fifteen_minutes">15 minuti möödumisel</string>
|
||||
<string name="settings_advanced_connection_alert_one_hour">1 tunni möödumisel</string>
|
||||
<string name="settings_advanced_connection_alert_three_hours">3 tunni möödumisel</string>
|
||||
<string name="settings_advanced_connection_alert_twelve_hours">12 tunni möödumisel</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<string name="main_item_status_reconnecting">reconectando …</string>
|
||||
<string name="common_priority_high_name">Prioridade alta</string>
|
||||
<string name="common_priority_max_name">Prioridade máxima</string>
|
||||
<string name="channel_subscriber_service_name">Serviço de Inscrição</string>
|
||||
<string name="channel_subscriber_service_name">Inscrição em background</string>
|
||||
<string name="channel_subscriber_notification_title">Aguardando recepção de notificações</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Inscrito em tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Inscrito em um tópico de entrega instantânea</string>
|
||||
|
|
@ -354,8 +354,8 @@
|
|||
<string name="common_certificate_added_toast">Certificado adicionado</string>
|
||||
<string name="common_certificate_deleted_toast">Certificado removido</string>
|
||||
<string name="connection_alert_title">Notificação de alerta de conexão</string>
|
||||
<string name="connection_alert_text_one">Não foi possível conectar à %1$s por mais de %2$d minutos</string>
|
||||
<string name="connection_alert_text_multiple">Não foi possível conectar aos servidores %1$d por mais de %2$d minutos</string>
|
||||
<string name="connection_alert_text_one">Não foi possível conectar à %1$s por mais de %2$d minutos. Verifique sua conexão de rede.</string>
|
||||
<string name="connection_alert_text_multiple">Não foi possível conectar aos servidores %1$d por mais de %2$d minutos. Verifique sua conexão de rede.</string>
|
||||
<string name="connection_alert_action_snooze">Adiar %1$dh</string>
|
||||
<string name="connection_alert_action_never">Nunca mostrar</string>
|
||||
<string name="main_menu_connection_error">Erro de conexão</string>
|
||||
|
|
@ -472,4 +472,19 @@
|
|||
<string name="trusted_certificate_dialog_not_yet_valid_warning">Alerta: Este certificado ainda não é válido.</string>
|
||||
<string name="trusted_certificate_dialog_error_invalid_url">URL inválida</string>
|
||||
<string name="trusted_certificate_dialog_error_parse">Não foi possível carregar certificado: %1$s</string>
|
||||
<string name="channel_connection_alert_name">Alertas de conexão</string>
|
||||
<string name="main_banner_no_network_text">Você está offline</string>
|
||||
<string name="settings_advanced_connection_alert_title">Alertar quando desconectado</string>
|
||||
<string name="settings_advanced_connection_alert_summary_never">Nunca notificar quando o servidor ntfy não puder ser atingido</string>
|
||||
<string name="settings_advanced_connection_alert_summary_five_minutes">Notificar se o servidor ntfy não puder ser atingido por mais que 5 minutos</string>
|
||||
<string name="settings_advanced_connection_alert_summary_fifteen_minutes">Notificar se o servidor ntfy não puder ser atingido por mais que 15 minutos</string>
|
||||
<string name="settings_advanced_connection_alert_summary_one_hour">Notificar se o servidor ntfy não puder ser atingido por mais que 1 hora</string>
|
||||
<string name="settings_advanced_connection_alert_summary_three_hours">Notificar se o servidor ntfy não puder ser atingido por mais que 3 horas</string>
|
||||
<string name="settings_advanced_connection_alert_summary_twelve_hours">Notificar se o servidor ntfy não puder ser atingido por mais que 12 horas</string>
|
||||
<string name="settings_advanced_connection_alert_never">Nunca</string>
|
||||
<string name="settings_advanced_connection_alert_five_minutes">Depois de 5 minutos</string>
|
||||
<string name="settings_advanced_connection_alert_fifteen_minutes">Depois de 15 minutos</string>
|
||||
<string name="settings_advanced_connection_alert_one_hour">Depois de 1 hora</string>
|
||||
<string name="settings_advanced_connection_alert_three_hours">Depois de 3 horas</string>
|
||||
<string name="settings_advanced_connection_alert_twelve_hours">Depois de 12 horas</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
Features:
|
||||
* Add configurable "Alert when connection is lost" setting (#1665, #1662, #1652, #1655, thanks to @tintamarre, @sjozs, @TheRealOne78, and @DAE51D for reporting)
|
||||
* Suppress connection alerts and stop foreground service when there is no network (ntfy-android#165, thanks to @tintamarre for the contribution)
|
||||
* Improve battery life by increasing WebSocket client ping interval from 1 min to 5 min, and reconnect instantly on Wi-Fi/cellular/VPN transitions (ntfy-android#113, thanks to @ftilde for the investigation)
|
||||
|
||||
Bug fixes + maintenance:
|
||||
* Undo automatic phone number linking for numbers in message body (ntfy-android#170, thanks to @acortelyou for the contribution)
|
||||
Loading…
Add table
Reference in a new issue