Compare commits
1 commit
45e443a622
...
6cdbcca741
Author | SHA1 | Date | |
---|---|---|---|
6cdbcca741 |
1 changed files with 26 additions and 23 deletions
|
@ -9,40 +9,43 @@ import im.angry.openeuicc.BuildConfig
|
|||
|
||||
class Partner {
|
||||
companion object {
|
||||
private val intent = Intent("com.google.android.euicc.action.PARTNER_CUSTOMIZATION")
|
||||
private const val ACTION = "com.google.android.euicc.action.PARTNER_CUSTOMIZATION"
|
||||
|
||||
fun getInstance(context: Context): Partner? {
|
||||
var flags = if (BuildConfig.DEBUG)
|
||||
private val instances = mutableMapOf<String, Partner?>()
|
||||
|
||||
private val packageFlags: Int
|
||||
get() {
|
||||
val 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, flags)
|
||||
return flags or PackageManager.MATCH_DISABLED_COMPONENTS
|
||||
}
|
||||
|
||||
fun getInstance(context: Context, action: String = ACTION) = instances.getOrPut(action) {
|
||||
context.packageManager
|
||||
.queryBroadcastReceivers(Intent(action), packageFlags)
|
||||
.mapNotNull { it.activityInfo?.applicationInfo }
|
||||
for (app in apps) {
|
||||
.firstNotNullOfOrNull {
|
||||
try {
|
||||
val resources = context.packageManager.getResourcesForApplication(app)
|
||||
return Partner(resources)
|
||||
context.packageManager.getResourcesForApplication(it)
|
||||
} catch (_: PackageManager.NameNotFoundException) {
|
||||
continue
|
||||
null
|
||||
}
|
||||
}
|
||||
return null
|
||||
?.let(::Partner)
|
||||
}
|
||||
}
|
||||
|
||||
private val resources: Resources
|
||||
private val ids = mutableMapOf<String, Int>()
|
||||
|
||||
private constructor(resources: Resources) {
|
||||
this.resources = resources
|
||||
}
|
||||
|
||||
private fun getIdentifier(name: String) = ids.getOrPut(name) {
|
||||
resources.getIdentifier(name, null, null)
|
||||
}
|
||||
private fun getIdentifier(name: String) =
|
||||
resources.getIdentifier(name, null, null).takeIf { it != 0 }
|
||||
|
||||
fun getString(name: String) = getIdentifier(name).let(resources::getString)
|
||||
fun getString(name: String) = getIdentifier(name)?.let(resources::getString)
|
||||
|
||||
fun getBoolean(name: String) = getIdentifier(name).let(resources::getBoolean)
|
||||
fun getBoolean(name: String) = getIdentifier(name)?.let(resources::getBoolean)
|
||||
}
|
Loading…
Add table
Reference in a new issue