diff --git a/README.md b/README.md index ef58762..ed166a5 100644 --- a/README.md +++ b/README.md @@ -39,3 +39,12 @@ updates.push.domain.tld { 5. In the android app, change server to the autoconnect endpoint (here `push.domain.tld`). [Autopush]: https://github.com/mozilla-services/autopush-rs + +## Developpers + +It is possible to configure a few things with build config: + +| Name | Description | Default | +|------|-------------|---------| +| DEFAULT_API_URL | Define the API Url used by default | `"https://push.services.mozilla.com"` | +| URGENCY | To add support for urgency requirement depending on the battery level | `false` until this is supported by the main server | diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a012315..57adfb5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,6 +23,7 @@ android { // buildConfigField("String", "DEFAULT_API_URL", "\"http://10.0.2.2:8088\"") buildConfigField("String", "DEFAULT_API_URL", "\"https://push.services.mozilla.com\"") + buildConfigField("Boolean", "URGENCY", "false") } buildFeatures { diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/MessageSender.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/MessageSender.kt index 5d3dcf0..1a1246e 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/MessageSender.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/MessageSender.kt @@ -1,9 +1,11 @@ package org.unifiedpush.distributor.sunup.api import android.content.Context +import android.util.Log import okhttp3.WebSocket import org.unifiedpush.distributor.sunup.api.data.ClientMessage import org.unifiedpush.distributor.sunup.services.RestartWorker +import org.unifiedpush.distributor.sunup.utils.TAG object MessageSender { private var websocket: WebSocket? = null @@ -20,6 +22,7 @@ object MessageSender { } fun send(context: Context, message: ClientMessage) { + Log.d(TAG, "Sending ${message.serialize()}") synchronized(this) { websocket?.let { message.send(it) diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt index 58ae852..b4aabef 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt @@ -75,6 +75,9 @@ class ServerConnection(private val context: Context, private val releaseLock: () ServerMessage.Ping -> onPing(ws) is ServerMessage.Register -> onRegister(message) is ServerMessage.Unegister -> onUnregister(message) + is ServerMessage.Urgency -> { + Log.d(TAG, "Urgency status=${message.status}") + } } } diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ClientMessage.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ClientMessage.kt index 586b57c..be7891d 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ClientMessage.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ClientMessage.kt @@ -85,6 +85,25 @@ sealed class ClientMessage { @SerialName("nack") class Nack(val code: UInt?, val version: String) : ClientMessage() + @Serializable + @SerialName("urgency") + class MinUrgency(val min: Urgency) : ClientMessage() + + @Serializable + enum class Urgency { + @SerialName("very-low") + VeryLow, + + @SerialName("low") + Low, + + @SerialName("normal") + Normal, + + @SerialName("high") + High + } + /** * Ping, */ diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ServerMessage.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ServerMessage.kt index 0c1c0be..ad94c01 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ServerMessage.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/data/ServerMessage.kt @@ -25,7 +25,7 @@ sealed class ServerMessage { */ @Serializable @SerialName("hello") - class Hello(val uaid: String?, val status: UInt, val use_webpush: Boolean) : ServerMessage() + data class Hello(val uaid: String?, val status: UInt, val use_webpush: Boolean) : ServerMessage() /** * Register { @@ -38,7 +38,7 @@ sealed class ServerMessage { */ @Serializable @SerialName("register") - class Register(val channelID: String, val status: UInt, val pushEndpoint: String) : ServerMessage() + data class Register(val channelID: String, val status: UInt, val pushEndpoint: String) : ServerMessage() /** * Unregister { @@ -49,7 +49,7 @@ sealed class ServerMessage { */ @Serializable @SerialName("unregister") - class Unegister(val channelID: String, val status: UInt) : ServerMessage() + data class Unegister(val channelID: String, val status: UInt) : ServerMessage() /** * Broadcast { @@ -60,7 +60,7 @@ sealed class ServerMessage { */ @Serializable @SerialName("broadcast") - class Broadcast() : ServerMessage() + data object Broadcast : ServerMessage() /** * pub struct Notification { @@ -93,6 +93,15 @@ sealed class ServerMessage { val headers: HashMap? ) : ServerMessage() + /** + * Urgency { + * status: u32, + * }, + */ + @Serializable + @SerialName("urgency") + data class Urgency(val status: UInt) : ServerMessage() + /** * Ping, */ diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/callback/BatteryCallbackFactory.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/callback/BatteryCallbackFactory.kt index 1d40057..d940f88 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/callback/BatteryCallbackFactory.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/callback/BatteryCallbackFactory.kt @@ -3,21 +3,31 @@ package org.unifiedpush.distributor.sunup.callback import android.content.Context import org.unifiedpush.distributor.callback.BatteryCallback import org.unifiedpush.distributor.callback.CallbackFactory +import org.unifiedpush.distributor.sunup.BuildConfig +import org.unifiedpush.distributor.sunup.api.MessageSender +import org.unifiedpush.distributor.sunup.api.data.ClientMessage object BatteryCallbackFactory : CallbackFactory() { class MainBatteryCallback : BatteryCallback() { override fun onBatteryLow(context: Context) { - // TODO: Subscribe to normal and high urgency messages only + if (BuildConfig.URGENCY) { + MessageSender.send(context, ClientMessage.MinUrgency(ClientMessage.Urgency.Normal)) + } } override fun onBatteryOk(context: Context) { - // TODO: Subscribe back to all messages + if (BuildConfig.URGENCY) { + MessageSender.send(context, ClientMessage.MinUrgency(ClientMessage.Urgency.VeryLow)) + } } } override fun new(context: Context): MainBatteryCallback { + if (BuildConfig.URGENCY) { + MessageSender.send(context, ClientMessage.MinUrgency(ClientMessage.Urgency.VeryLow)) + } return MainBatteryCallback() }