Merge pull request #1 from MarijnS95/master
[ModemConfig] Fix null/empty string issues, show multiple grouped notifications for DSDS configuration
This commit is contained in:
commit
7716856612
7 changed files with 72 additions and 30 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -6,3 +6,5 @@
|
|||
**/.idea
|
||||
**/*.iml
|
||||
**/*.ipr
|
||||
**/lib
|
||||
**/gen
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
<application
|
||||
android:directBootAware="true"
|
||||
android:icon="@drawable/ic_sim_card"
|
||||
android:label="@string/app_name"
|
||||
android:persistent="true">
|
||||
<receiver
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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]")
|
||||
|
||||
|
|
@ -109,7 +111,7 @@ context.resources.getXml(R.xml.service_provider_sim_configs).use {
|
|||
} else if (simConfigId != null) {
|
||||
// If not in a service_provider_sim_config element, and a valid simConfigId
|
||||
// /exists parse all members/subelements:
|
||||
val text = cleanString(xml.nextText())
|
||||
val text = xml.nextText().cleanString()
|
||||
if (currentMap.containsKey(xml.name))
|
||||
throw Exception("Already parsed ${xml.name}!")
|
||||
currentMap[xml.name] = text
|
||||
|
|
@ -125,21 +127,27 @@ context.resources.getXml(R.xml.service_provider_sim_configs).use {
|
|||
return list
|
||||
}
|
||||
|
||||
private fun cleanString(str: String) = str.replace(newlineMatch, "").trim()
|
||||
private fun String.cleanString() = replace(newlineMatch, "").trim()
|
||||
|
||||
private fun findConfigurationName(context: Context, tm: TelephonyManager): String? {
|
||||
val operator = tm.simOperator
|
||||
val mcc = operator.substring(0, 3)
|
||||
val mnc = operator.substring(3)
|
||||
|
||||
val sp = cleanString(tm.simOperatorName)
|
||||
if (operator.isNullOrEmpty()) {
|
||||
Log.d(TAG, "Operator is null or empty")
|
||||
return null
|
||||
}
|
||||
val mcc = operator.take(3)
|
||||
val mnc = operator.drop(3)
|
||||
|
||||
val sp = tm.simOperatorName?.cleanString() ?: ""
|
||||
val gid1 = tm.groupIdLevel1 ?: ""
|
||||
val imsi = tm.subscriberId
|
||||
val gid1 = tm.groupIdLevel1
|
||||
val iccid2 = tm.simSerialNumber
|
||||
if (imsi.isNullOrEmpty()) {
|
||||
Log.d(TAG, "Imsi is null or empty")
|
||||
return null
|
||||
}
|
||||
|
||||
if (VERBOSE) Log.v(TAG, "Matching providers against: $sp $mcc/$mnc, imsi: $imsi" +
|
||||
", gid: $gid1, iccid2: $iccid2")
|
||||
", gid: $gid1")
|
||||
|
||||
val result = getProviders(context).firstOrNull f@{ info ->
|
||||
if (info.mcc != null && info.mcc != mcc)
|
||||
|
|
@ -203,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() {
|
||||
|
|
@ -222,7 +237,7 @@ context.resources.getXml(R.xml.service_provider_sim_configs).use {
|
|||
val channel = NotificationChannel(
|
||||
NOTIFICATION_CHANNEL_ID,
|
||||
resources.getString(R.string.notification_channel_configuration_info),
|
||||
NotificationManager.IMPORTANCE_LOW)
|
||||
NotificationManager.IMPORTANCE_MIN)
|
||||
notificationManager.createNotificationChannel(channel)
|
||||
|
||||
// Our callback is invoked once on .add too; no need to run the contents manually at startup
|
||||
|
|
@ -232,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)
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue