diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cae19d3..1c7f9a6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,4 +63,9 @@
+
+
+
+
+
diff --git a/app/src/main/java/im/angry/openeuicc/ui/SlotMappingFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/SlotMappingFragment.kt
index e17f60e..89412ab 100644
--- a/app/src/main/java/im/angry/openeuicc/ui/SlotMappingFragment.kt
+++ b/app/src/main/java/im/angry/openeuicc/ui/SlotMappingFragment.kt
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.telephony.TelephonyManager
import android.telephony.UiccSlotMapping
+import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
@@ -45,6 +46,10 @@ class SlotMappingFragment: BaseMaterialDialogFragment(),
private lateinit var adapter: SlotMappingAdapter
private lateinit var helpTextView: TextView
+ private val partner: Partner? by lazy {
+ Partner.getInstance(requireContext())
+ }
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -67,6 +72,12 @@ class SlotMappingFragment: BaseMaterialDialogFragment(),
toolbar.setOnMenuItemClickListener(this)
}
+ override fun onStart() {
+ super.onStart()
+ val mappings = partner?.getString("sim_slot_mappings_json")
+ Log.e(TAG, "sim_slot_mappings_json = $mappings")
+ }
+
override fun onResume() {
super.onResume()
setWidthPercent(85)
diff --git a/app/src/main/java/im/angry/openeuicc/util/Partner.kt b/app/src/main/java/im/angry/openeuicc/util/Partner.kt
new file mode 100644
index 0000000..43ecc18
--- /dev/null
+++ b/app/src/main/java/im/angry/openeuicc/util/Partner.kt
@@ -0,0 +1,51 @@
+package im.angry.openeuicc.util
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.content.res.Resources
+import im.angry.openeuicc.BuildConfig
+
+
+class Partner {
+ companion object {
+ private const val ACTION = "com.google.android.euicc.action.PARTNER_CUSTOMIZATION"
+
+ 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
+ }
+
+ 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)
+ }
+ }
+
+ private val resources: Resources
+
+ private constructor(resources: Resources) {
+ this.resources = resources
+ }
+
+ private fun getIdentifier(name: String) =
+ resources.getIdentifier(name, null, null).takeIf { it != 0 }
+
+ fun getString(name: String) = getIdentifier(name)?.let(resources::getString)
+
+ fun getBoolean(name: String) = getIdentifier(name)?.let(resources::getBoolean)
+}
\ No newline at end of file