浏览代码

Separate TelephonyManager hidden API reflections to a standalone file

This file can then simply be excluded when (potentially) building
against AOSP.
Peter Cai 3 年之前
父节点
当前提交
125ebde954

+ 53 - 0
app/src/main/java/im/angry/openeuicc/util/TelephonyManagerHiddenApi.kt

@@ -0,0 +1,53 @@
+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)
+}

+ 0 - 47
app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt

@@ -1,10 +1,8 @@
 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
@@ -23,49 +21,4 @@ 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)
 }