diff --git a/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduInterface.kt b/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduInterface.kt index b3b2089..f06e317 100644 --- a/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduInterface.kt +++ b/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduInterface.kt @@ -69,8 +69,12 @@ class TelephonyManagerApduInterface( override val atr: ByteArray? get() = try { - tm.iccGetATR(port.card.physicalSlotIndex) - } catch (e: Exception) { - null + tm.iccGetAtr(slotIndex)?.decodeHex() + } catch (e: NoSuchMethodException) { + try { + tm.getAtrUsingSlotId(slotIndex) + } catch (e: Exception) { + null + } } } \ No newline at end of file diff --git a/libs/hidden-apis-shim/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt b/libs/hidden-apis-shim/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt index 288742b..0d5d463 100644 --- a/libs/hidden-apis-shim/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt +++ b/libs/hidden-apis-shim/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt @@ -64,12 +64,18 @@ private val getITelephony: Method by lazy { } } -fun TelephonyManager.iccGetATR(slotId: Int): ByteArray? { +fun TelephonyManager.getAtrUsingSlotId(slotId: Int): ByteArray? { val telephony = getITelephony.invoke(this) val getAtrUsingSlotId = telephony.javaClass.getMethod("getAtrUsingSlotId", Int::class.java) return getAtrUsingSlotId.invoke(telephony, slotId) as ByteArray? } +fun TelephonyManager.iccGetAtr(slotId: Int): String? { + val telephony = getITelephony.invoke(this) + val iccGetAtr = telephony.javaClass.getMethod("iccGetAtr", Int::class.java) + return iccGetAtr.invoke(telephony, slotId) as String? +} + fun TelephonyManager.iccOpenLogicalChannelBySlot( slotId: Int, appletId: String?, p2: Int ): IccOpenLogicalChannelResponse = @@ -107,10 +113,15 @@ fun TelephonyManager.iccTransmitApduLogicalChannelByPort( var TelephonyManager.simSlotMapping: Collection get() = getSimSlotMapping.invoke(this) as Collection - set(new) { setSimSlotMapping.invoke(this, new) } + set(new) { + setSimSlotMapping.invoke(this, new) + } private val requestEmbeddedSubscriptionInfoListRefresh: Method by lazy { - SubscriptionManager::class.java.getMethod("requestEmbeddedSubscriptionInfoListRefresh", Int::class.java) + SubscriptionManager::class.java.getMethod( + "requestEmbeddedSubscriptionInfoListRefresh", + Int::class.java + ) } fun SubscriptionManager.requestEmbeddedSubscriptionInfoListRefresh(cardId: Int) {