diff --git a/.idea/compiler.xml b/.idea/compiler.xml index e87380b..59d8ad0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -4,8 +4,6 @@ - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d06202a..d051337 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,10 +13,11 @@ + diff --git a/app/build.gradle b/app/build.gradle index 3476b70..bf861c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,7 +36,7 @@ android { } dependencies { - compileOnly project(':libs:hidden-apis-stub') + compileOnly project(":libs:hidden-apis") implementation project(":libs:lpad-sm-dp-plus-connector") implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' diff --git a/app/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt b/app/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt deleted file mode 100644 index 1bc0121..0000000 --- a/app/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt +++ /dev/null @@ -1,53 +0,0 @@ -package im.angry.openeuicc.util - -import android.telephony.IccOpenLogicalChannelResponse -import android.telephony.SubscriptionManager -import android.telephony.TelephonyManager -import java.lang.reflect.Method - -// Hidden APIs via reflection to enable building without AOSP source tree -// When building against AOSP, this file can be simply excluded to resolve -// calls to AOSP hidden APIs -private val iccOpenLogicalChannelBySlot: Method by lazy { - TelephonyManager::class.java.getMethod( - "iccOpenLogicalChannelBySlot", - Int::class.java, String::class.java, Int::class.java - ) -} -private val iccCloseLogicalChannelBySlot: Method by lazy { - TelephonyManager::class.java.getMethod( - "iccCloseLogicalChannelBySlot", - Int::class.java, Int::class.java - ) -} -private val iccTransmitApduLogicalChannelBySlot: Method by lazy { - TelephonyManager::class.java.getMethod( - "iccTransmitApduLogicalChannelBySlot", - Int::class.java, Int::class.java, Int::class.java, Int::class.java, - Int::class.java, Int::class.java, Int::class.java, String::class.java - ) -} - -fun TelephonyManager.iccOpenLogicalChannelBySlot( - slotId: Int, appletId: String, p2: Int -): IccOpenLogicalChannelResponse = - iccOpenLogicalChannelBySlot.invoke(this, slotId, appletId, p2) as IccOpenLogicalChannelResponse - -fun TelephonyManager.iccCloseLogicalChannelBySlot(slotId: Int, channel: Int): Boolean = - iccCloseLogicalChannelBySlot.invoke(this, slotId, channel) as Boolean - -fun TelephonyManager.iccTransmitApduLogicalChannelBySlot( - slotId: Int, channel: Int, cla: Int, instruction: Int, - p1: Int, p2: Int, p3: Int, data: String? -): String? = - iccTransmitApduLogicalChannelBySlot.invoke( - this, slotId, channel, cla, instruction, p1, p2, p3, data - ) as String? - -private val requestEmbeddedSubscriptionInfoListRefresh: Method by lazy { - SubscriptionManager::class.java.getMethod("requestEmbeddedSubscriptionInfoListRefresh", Int::class.java) -} - -fun SubscriptionManager.requestEmbeddedSubscriptionInfoListRefresh(cardId: Int): Unit { - requestEmbeddedSubscriptionInfoListRefresh.invoke(this, cardId) -} \ No newline at end of file diff --git a/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt b/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt index 28b9623..05c31e7 100644 --- a/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt +++ b/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt @@ -1,8 +1,10 @@ package im.angry.openeuicc.util +import android.telephony.IccOpenLogicalChannelResponse import android.telephony.SubscriptionManager import android.telephony.TelephonyManager import java.lang.Exception +import java.lang.reflect.Method val TelephonyManager.supportsDSDS: Boolean get() = supportedModemCount == 2 @@ -21,4 +23,49 @@ fun SubscriptionManager.tryRefreshCachedEuiccInfo(cardId: Int) { // Ignore } } +} + +// Hidden APIs via reflection to enable building without AOSP source tree +private val iccOpenLogicalChannelBySlot: Method by lazy { + TelephonyManager::class.java.getMethod( + "iccOpenLogicalChannelBySlot", + Int::class.java, String::class.java, Int::class.java + ) +} +private val iccCloseLogicalChannelBySlot: Method by lazy { + TelephonyManager::class.java.getMethod( + "iccCloseLogicalChannelBySlot", + Int::class.java, Int::class.java + ) +} +private val iccTransmitApduLogicalChannelBySlot: Method by lazy { + TelephonyManager::class.java.getMethod( + "iccTransmitApduLogicalChannelBySlot", + Int::class.java, Int::class.java, Int::class.java, Int::class.java, + Int::class.java, Int::class.java, Int::class.java, String::class.java + ) +} + +fun TelephonyManager.iccOpenLogicalChannelBySlot( + slotId: Int, appletId: String, p2: Int +): IccOpenLogicalChannelResponse = + iccOpenLogicalChannelBySlot.invoke(this, slotId, appletId, p2) as IccOpenLogicalChannelResponse + +fun TelephonyManager.iccCloseLogicalChannelBySlot(slotId: Int, channel: Int): Boolean = + iccCloseLogicalChannelBySlot.invoke(this, slotId, channel) as Boolean + +fun TelephonyManager.iccTransmitApduLogicalChannelBySlot( + slotId: Int, channel: Int, cla: Int, instruction: Int, + p1: Int, p2: Int, p3: Int, data: String? +): String? = + iccTransmitApduLogicalChannelBySlot.invoke( + this, slotId, channel, cla, instruction, p1, p2, p3, data + ) as String? + +private val requestEmbeddedSubscriptionInfoListRefresh: Method by lazy { + SubscriptionManager::class.java.getMethod("requestEmbeddedSubscriptionInfoListRefresh", Int::class.java) +} + +fun SubscriptionManager.requestEmbeddedSubscriptionInfoListRefresh(cardId: Int): Unit { + requestEmbeddedSubscriptionInfoListRefresh.invoke(this, cardId) } \ No newline at end of file diff --git a/libs/hidden-apis-stub/.gitignore b/libs/hidden-apis/.gitignore similarity index 100% rename from libs/hidden-apis-stub/.gitignore rename to libs/hidden-apis/.gitignore diff --git a/libs/hidden-apis-stub/build.gradle b/libs/hidden-apis/build.gradle similarity index 100% rename from libs/hidden-apis-stub/build.gradle rename to libs/hidden-apis/build.gradle diff --git a/libs/hidden-apis-stub/src/main/AndroidManifest.xml b/libs/hidden-apis/src/main/AndroidManifest.xml similarity index 100% rename from libs/hidden-apis-stub/src/main/AndroidManifest.xml rename to libs/hidden-apis/src/main/AndroidManifest.xml diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/DownloadSubscriptionResult.java b/libs/hidden-apis/src/main/java/android/service/euicc/DownloadSubscriptionResult.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/DownloadSubscriptionResult.java rename to libs/hidden-apis/src/main/java/android/service/euicc/DownloadSubscriptionResult.java diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/EuiccProfileInfo.java b/libs/hidden-apis/src/main/java/android/service/euicc/EuiccProfileInfo.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/EuiccProfileInfo.java rename to libs/hidden-apis/src/main/java/android/service/euicc/EuiccProfileInfo.java diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/EuiccService.java b/libs/hidden-apis/src/main/java/android/service/euicc/EuiccService.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/EuiccService.java rename to libs/hidden-apis/src/main/java/android/service/euicc/EuiccService.java diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java b/libs/hidden-apis/src/main/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java rename to libs/hidden-apis/src/main/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java b/libs/hidden-apis/src/main/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java rename to libs/hidden-apis/src/main/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java diff --git a/libs/hidden-apis-stub/src/main/java/android/service/euicc/GetEuiccProfileInfoListResult.java b/libs/hidden-apis/src/main/java/android/service/euicc/GetEuiccProfileInfoListResult.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/service/euicc/GetEuiccProfileInfoListResult.java rename to libs/hidden-apis/src/main/java/android/service/euicc/GetEuiccProfileInfoListResult.java diff --git a/libs/hidden-apis-stub/src/main/java/android/telephony/UiccAccessRule.java b/libs/hidden-apis/src/main/java/android/telephony/UiccAccessRule.java similarity index 100% rename from libs/hidden-apis-stub/src/main/java/android/telephony/UiccAccessRule.java rename to libs/hidden-apis/src/main/java/android/telephony/UiccAccessRule.java diff --git a/settings.gradle b/settings.gradle index 661e47c..ce3d71f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,4 @@ dependencyResolutionManagement { } rootProject.name = "OpenEUICC" include ':app', ':libs:lpad-sm-dp-plus-connector' -include ':libs:hidden-apis-stub' +include ':libs:hidden-apis'