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:
Alin Jerpelea 2020-06-11 14:05:32 +02:00 • committed by GitHub
commit 7716856612
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 72 additions and 30 deletions

2
.gitignore vendored
View file

@ -6,3 +6,5 @@
**/.idea
**/*.iml
**/*.ipr
**/lib
**/gen

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