Add support for min urgency

This commit is contained in:
sim 2024-12-30 18:26:12 +00:00
parent 9a599ac7d9
commit 1845b608be
7 changed files with 60 additions and 6 deletions

View file

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

View file

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

View file

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

View file

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

View file

@ -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,
*/

View file

@ -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<String, String>?
) : ServerMessage()
/**
* Urgency {
* status: u32,
* },
*/
@Serializable
@SerialName("urgency")
data class Urgency(val status: UInt) : ServerMessage()
/**
* Ping,
*/

View file

@ -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<BatteryCallbackFactory.MainBatteryCallback>() {
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()
}