diff --git a/app/src/main/java/im/angry/openeuicc/util/Partner.kt b/app/src/main/java/im/angry/openeuicc/util/Partner.kt index 4a58985..43ecc18 100644 --- a/app/src/main/java/im/angry/openeuicc/util/Partner.kt +++ b/app/src/main/java/im/angry/openeuicc/util/Partner.kt @@ -11,23 +11,28 @@ class Partner { companion object { private const val ACTION = "com.google.android.euicc.action.PARTNER_CUSTOMIZATION" - fun getInstance(context: Context, action: String = ACTION): Partner? { - var flags = if (BuildConfig.DEBUG) - PackageManager.MATCH_UNINSTALLED_PACKAGES else - PackageManager.MATCH_SYSTEM_ONLY - flags = flags or PackageManager.MATCH_DISABLED_COMPONENTS - val apps = context.packageManager - .queryBroadcastReceivers(Intent(action), flags) - .mapNotNull { it.activityInfo?.applicationInfo } - for (app in apps) { - try { - val resources = context.packageManager.getResourcesForApplication(app) - return Partner(resources) - } catch (_: PackageManager.NameNotFoundException) { - continue - } + private val instances = mutableMapOf() + + private val packageFlags: Int + get() { + val flags = if (BuildConfig.DEBUG) + PackageManager.MATCH_UNINSTALLED_PACKAGES else + PackageManager.MATCH_SYSTEM_ONLY + return flags or PackageManager.MATCH_DISABLED_COMPONENTS } - return null + + fun getInstance(context: Context, action: String = ACTION) = instances.getOrPut(action) { + context.packageManager + .queryBroadcastReceivers(Intent(action), packageFlags) + .mapNotNull { it.activityInfo?.applicationInfo } + .firstNotNullOfOrNull { + try { + context.packageManager.getResourcesForApplication(it) + } catch (_: PackageManager.NameNotFoundException) { + null + } + } + ?.let(::Partner) } }