From cbf31c1116394bd30fa76c43d6a9ed38b520a7d6 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 11 Mar 2025 11:18:58 +0800 Subject: [PATCH 1/2] refactor: make profileManagementOperation nullable and handle unknown operations in NotificationsActivity --- .../angry/openeuicc/ui/NotificationsActivity.kt | 16 ++++++++-------- .../lpac_jni/LocalProfileNotification.kt | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index 02cdac8..099c627 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -164,14 +164,14 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { } - private fun operationToLocalizedText(operation: ProfileManagementOperation) = - root.context.getText( - when (operation) { - ProfileManagementOperation.Install -> R.string.profile_notification_operation_download - ProfileManagementOperation.Delete -> R.string.profile_notification_operation_delete - ProfileManagementOperation.Enable -> R.string.profile_notification_operation_enable - ProfileManagementOperation.Disable -> R.string.profile_notification_operation_disable - }) + private fun operationToLocalizedText(operation: ProfileManagementOperation?) = + root.context.getString(when (operation) { + ProfileManagementOperation.Install -> R.string.profile_notification_operation_download + ProfileManagementOperation.Delete -> R.string.profile_notification_operation_delete + ProfileManagementOperation.Enable -> R.string.profile_notification_operation_enable + ProfileManagementOperation.Disable -> R.string.profile_notification_operation_disable + else -> throw IllegalStateException("Unknown operation: $operation") + }) fun updateNotification(value: LocalProfileNotificationWrapper) { notification = value diff --git a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileNotification.kt b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileNotification.kt index 3ecb65b..2261f6d 100644 --- a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileNotification.kt +++ b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileNotification.kt @@ -2,7 +2,7 @@ package net.typeblog.lpac_jni data class LocalProfileNotification( val seqNumber: Long, - val profileManagementOperation: ProfileManagementOperation, + val profileManagementOperation: ProfileManagementOperation?, val notificationAddress: String, val iccid: String, ) From ea39fa2ca62739455622ae05056f9481fda2a992 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 11 Mar 2025 11:28:39 +0800 Subject: [PATCH 2/2] refactor: convert EuiccConfiguredAddresses to data class and improve address validation logic --- .../lpac_jni/EuiccConfiguredAddresses.kt | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccConfiguredAddresses.kt b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccConfiguredAddresses.kt index 2a622ed..9320de8 100644 --- a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccConfiguredAddresses.kt +++ b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccConfiguredAddresses.kt @@ -9,21 +9,21 @@ private val invalidDPAddresses = setOf( "testrootsmds.example.com", ) -class EuiccConfiguredAddresses(defaultDPAddress: String, rootDSAddress: String) { - val defaultDPAddress = defaultDPAddress.takeUnless(::isInvalidDPAddress) - val rootDSAddress = rootDSAddress.takeUnless(::isInvalidDSAddress) - +data class EuiccConfiguredAddresses( + val defaultDPAddress: String, + val rootDSAddress: String +) { val discoverable: Boolean - get() = !defaultDPAddress.isNullOrBlank() || !rootDSAddress.isNullOrBlank() + get() = isValidDPAddress(defaultDPAddress) || + isValidDSAddress(rootDSAddress) } -private fun isInvalidDPAddress(address: String?): Boolean { - if (address.isNullOrBlank()) return true - return !Patterns.DOMAIN_NAME.matcher(address).matches() +private fun isValidDPAddress(address: String): Boolean { + return address.isNotBlank() && Patterns.DOMAIN_NAME.matcher(address).matches() } -private fun isInvalidDSAddress(address: String?): Boolean { - if (address.isNullOrBlank()) return true - if (address in invalidDPAddresses) return true - return !Patterns.DOMAIN_NAME.matcher(address).matches() +private fun isValidDSAddress(address: String): Boolean { + if (address.isBlank()) return false + if (address in invalidDPAddresses) return false + return Patterns.DOMAIN_NAME.matcher(address).matches() } \ No newline at end of file