ModemConfig: Show a grouped notification per slot

Otherwise the notifcation for slot 1 would hide the one for slot 0, if
both are available.

Signed-off-by: Marijn Suijten <marijns95@gmail.com>
This commit is contained in:
Marijn Suijten 2020-06-05 23:17:49 +02:00
commit 16b7b8391e
6 changed files with 54 additions and 20 deletions

View file

@ -7,6 +7,7 @@
<application
android:directBootAware="true"
android:icon="@drawable/ic_sim_card"
android:label="@string/app_name"
android:persistent="true">
<receiver

View file

@ -3,6 +3,7 @@
<string name="notification_channel_configuration_info">Konfigurationsinfo</string>
<string name="notification_title_modem_configuration">Modem-Konfiguration</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Benutze Modem-Konfiguration: %1$s\nFirmware-Datei: %2$s</string>
<string name="notification_title_slot_index">Steckplatz %1$s</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Modem-Konfiguration: %1$s\nFirmware-Datei: %2$s</string>
<string name="notification_text_modem_configuration_no_match">Keine passende Modem-Konfiguration gefunden</string>
</resources>
</resources>

View file

@ -3,6 +3,7 @@
<string name="notification_channel_configuration_info">Informations de configuration</string>
<string name="notification_title_modem_configuration">Configuration du modem</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Configuration du modem utilisée : %1$s\nFirmware utilisé: %2$s</string>
<string name="notification_text_modem_configuration_no_match">Aucune configuration de modem trouvée </string>
</resources>
<string name="notification_title_slot_index">Port SIM %1$s</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Configuration du modem utilisée : %1$s\n Chemin d\'accès du firmware : %2$s</string>
<string name="notification_text_modem_configuration_no_match">Aucune configuration modem Trouvée</string>
</resources>

View file

@ -3,6 +3,7 @@
<string name="notification_channel_configuration_info">Informazioni configurazione</string>
<string name="notification_title_modem_configuration">Configurazione Modem</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Uso configurazione modem %1$s\nFile firmware: %2$s</string>
<string name="notification_title_slot_index">Slot %1$s</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Configurazione modem: %1$s\nFile firmware: %2$s</string>
<string name="notification_text_modem_configuration_no_match">Nessuna configurazione modem trovata</string>
</resources>
</resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">ModemConfig</string>
<string name="app_name" translatable="false">Open Devices ModemConfig</string>
<string name="modem_config_path" translatable="false">/oem/modem-config</string>
<string name="modem_config_name" translatable="false">modem.conf</string>
@ -8,6 +8,7 @@
<string name="notification_channel_configuration_info">Configuration info</string>
<string name="notification_title_modem_configuration">Modem configuration</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Using modem configuration: %1$s\nFirmware file: %2$s</string>
<string name="notification_text_modem_configuration_no_match">Found no modem configuration</string>
</resources>
<string name="notification_title_slot_index">Slot %1$s</string>
<string name="notification_text_modem_configuration_resolved_modem_config">Modem configuration: %1$s\nFirmware file: %2$s</string>
<string name="notification_text_modem_configuration_no_match">No modem configuration found</string>
</resources>

View file

@ -36,7 +36,9 @@ import java.nio.file.Paths
private const val TAG = "ModemConfigReceiver"
private const val VERBOSE = false
private const val NOTIFICATION_CHANNEL_ID = "Configuration"
private const val NOTIFICATION_GROUP_KEY_SLOTS = "com.sony.opentelephony.modemconfig.slot_result"
private const val NOTIFICATION_ID = 1
private const val NOTIFICATION_ID_SLOT_BASE = 1000
private val newlineMatch = Regex("[\n\r]")
@ -209,15 +211,22 @@ context.resources.getXml(R.xml.service_provider_sim_configs).use {
resources.getString(R.string.notification_text_modem_configuration_no_match)
}
val notification = Notification.Builder(this, NOTIFICATION_CHANNEL_ID).run {
setSmallIcon(R.drawable.ic_sim_card)
setContentTitle(resources.getString(R.string.notification_title_modem_configuration))
setContentText(notificationText.substringBefore('\n'))
style = Notification.BigTextStyle().bigText(notificationText)
build()
}
val notification = Notification.Builder(this@ModemConfigService,
NOTIFICATION_CHANNEL_ID)
.run {
setSmallIcon(R.drawable.ic_sim_card)
setContentTitle(resources.getString(
R.string.notification_title_slot_index,
sub.simSlotIndex))
setContentText(notificationText.substringBefore('\n'))
setGroup(NOTIFICATION_GROUP_KEY_SLOTS)
setSortKey(sub.simSlotIndex.toString())
style = Notification.BigTextStyle()
.bigText(notificationText)
build()
}
notificationManager.notify(NOTIFICATION_ID, notification)
notificationManager.notify(NOTIFICATION_ID_SLOT_BASE + sub.simSlotIndex, notification)
}
override fun onCreate() {
@ -238,7 +247,27 @@ context.resources.getXml(R.xml.service_provider_sim_configs).use {
// caching at all. The modem-switcher itself makes sure to not needlessly flash
// firmware - let it handle the validation.
override fun onSubscriptionsChanged() {
sm.activeSubscriptionInfoList?.forEach(::handleSubscription)
sm.activeSubscriptionInfoList?.run {
if (any()) {
val summaryNotification = Notification.Builder(
this@ModemConfigService,
NOTIFICATION_CHANNEL_ID)
.run {
setSmallIcon(R.drawable.ic_sim_card)
setContentTitle(resources.getString(
R.string.notification_title_modem_configuration
))
setGroup(NOTIFICATION_GROUP_KEY_SLOTS)
setGroupSummary(true)
build()
}
notificationManager.notify(NOTIFICATION_ID, summaryNotification)
}
forEach(::handleSubscription)
}
}
})
}