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