Compare commits
No commits in common. "3013609ff5a0cbae895dcb1ce843a376a81c8d67" and "eb862301cc64ff9530997cb656698f7f33d456e0" have entirely different histories.
3013609ff5
...
eb862301cc
6 changed files with 8 additions and 40 deletions
|
@ -1,7 +1,6 @@
|
||||||
package im.angry.openeuicc
|
package im.angry.openeuicc
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.telephony.SubscriptionManager
|
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import im.angry.openeuicc.core.EuiccChannelManager
|
import im.angry.openeuicc.core.EuiccChannelManager
|
||||||
import im.angry.openeuicc.util.*
|
import im.angry.openeuicc.util.*
|
||||||
|
@ -16,10 +15,6 @@ class OpenEuiccApplication : Application() {
|
||||||
EuiccChannelManager(this)
|
EuiccChannelManager(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
val subscriptionManager by lazy {
|
|
||||||
getSystemService(SubscriptionManager::class.java)!!
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
// Clean up channels left open in TelephonyManager
|
// Clean up channels left open in TelephonyManager
|
||||||
|
|
|
@ -9,7 +9,6 @@ interface EuiccChannelStateManager {
|
||||||
|
|
||||||
data class EuiccChannel(
|
data class EuiccChannel(
|
||||||
val slotId: Int,
|
val slotId: Int,
|
||||||
val cardId: Int,
|
|
||||||
val name: String,
|
val name: String,
|
||||||
val lpa: LocalProfileAssistant,
|
val lpa: LocalProfileAssistant,
|
||||||
val stateManager: EuiccChannelStateManager
|
val stateManager: EuiccChannelStateManager
|
||||||
|
|
|
@ -56,10 +56,10 @@ class EuiccChannelManager(private val context: Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val (shouldTryTelephonyManager, cardId) =
|
val shouldTryTelephonyManager =
|
||||||
tm.uiccCardsInfo.find { it.slotIndex == slotId }?.let {
|
tm.uiccCardsInfo.find { it.slotIndex == slotId }?.let {
|
||||||
Pair(it.isEuicc && !it.isRemovable, it.cardId)
|
it.isEuicc && !it.isRemovable
|
||||||
} ?: Pair(false, 0)
|
} ?: false
|
||||||
|
|
||||||
var apduChannel: ApduChannel? = null
|
var apduChannel: ApduChannel? = null
|
||||||
var stateManager: EuiccChannelStateManager? = null
|
var stateManager: EuiccChannelStateManager? = null
|
||||||
|
@ -81,11 +81,7 @@ class EuiccChannelManager(private val context: Context) {
|
||||||
} ?: return null
|
} ?: return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val channel = EuiccChannel(
|
val channel = EuiccChannel(slotId, "SIM $slotId", LocalProfileAssistantImpl(apduChannel), stateManager!!)
|
||||||
slotId, cardId,
|
|
||||||
"SIM $slotId",
|
|
||||||
LocalProfileAssistantImpl(apduChannel),
|
|
||||||
stateManager!!)
|
|
||||||
channels.add(channel)
|
channels.add(channel)
|
||||||
return channel
|
return channel
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,6 @@ import com.truphone.lpad.progress.Progress
|
||||||
import im.angry.openeuicc.R
|
import im.angry.openeuicc.R
|
||||||
import im.angry.openeuicc.databinding.EuiccProfileBinding
|
import im.angry.openeuicc.databinding.EuiccProfileBinding
|
||||||
import im.angry.openeuicc.databinding.FragmentEuiccBinding
|
import im.angry.openeuicc.databinding.FragmentEuiccBinding
|
||||||
import im.angry.openeuicc.util.openEuiccApplication
|
|
||||||
import im.angry.openeuicc.util.tryRefreshCachedEuiccInfo
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -76,7 +74,6 @@ class EuiccManagementFragment : Fragment(), EuiccFragmentMarker, EuiccProfilesCh
|
||||||
|
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
val profiles = withContext(Dispatchers.IO) {
|
val profiles = withContext(Dispatchers.IO) {
|
||||||
openEuiccApplication.subscriptionManager.tryRefreshCachedEuiccInfo(channel.cardId)
|
|
||||||
channel.lpa.profiles
|
channel.lpa.profiles
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,9 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import im.angry.openeuicc.R
|
import im.angry.openeuicc.R
|
||||||
import im.angry.openeuicc.core.EuiccChannelManager
|
import im.angry.openeuicc.core.EuiccChannelManager
|
||||||
import im.angry.openeuicc.databinding.ActivityMainBinding
|
import im.angry.openeuicc.databinding.ActivityMainBinding
|
||||||
import im.angry.openeuicc.util.*
|
import im.angry.openeuicc.util.dsdsEnabled
|
||||||
|
import im.angry.openeuicc.util.openEuiccApplication
|
||||||
|
import im.angry.openeuicc.util.supportsDSDS
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -97,7 +99,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
manager.knownChannels.forEach {
|
manager.knownChannels.forEach {
|
||||||
Log.d(TAG, it.name)
|
Log.d(TAG, it.name)
|
||||||
Log.d(TAG, it.lpa.eid)
|
Log.d(TAG, it.lpa.eid)
|
||||||
openEuiccApplication.subscriptionManager.tryRefreshCachedEuiccInfo(it.cardId)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package im.angry.openeuicc.util
|
package im.angry.openeuicc.util
|
||||||
|
|
||||||
import android.telephony.IccOpenLogicalChannelResponse
|
import android.telephony.IccOpenLogicalChannelResponse
|
||||||
import android.telephony.SubscriptionManager
|
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import java.lang.Exception
|
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
val TelephonyManager.supportsDSDS: Boolean
|
val TelephonyManager.supportsDSDS: Boolean
|
||||||
|
@ -15,16 +13,6 @@ var TelephonyManager.dsdsEnabled: Boolean
|
||||||
switchMultiSimConfig(if (value) { 2 } else {1})
|
switchMultiSimConfig(if (value) { 2 } else {1})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun SubscriptionManager.tryRefreshCachedEuiccInfo(cardId: Int) {
|
|
||||||
if (cardId != 0) {
|
|
||||||
try {
|
|
||||||
requestEmbeddedSubscriptionInfoListRefresh(cardId)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hidden APIs via reflection to enable building without AOSP source tree
|
// Hidden APIs via reflection to enable building without AOSP source tree
|
||||||
private val iccOpenLogicalChannelBySlot: Method by lazy {
|
private val iccOpenLogicalChannelBySlot: Method by lazy {
|
||||||
TelephonyManager::class.java.getMethod(
|
TelephonyManager::class.java.getMethod(
|
||||||
|
@ -60,12 +48,4 @@ fun TelephonyManager.iccTransmitApduLogicalChannelBySlot(
|
||||||
): String? =
|
): String? =
|
||||||
iccTransmitApduLogicalChannelBySlot.invoke(
|
iccTransmitApduLogicalChannelBySlot.invoke(
|
||||||
this, slotId, channel, cla, instruction, p1, p2, p3, data
|
this, slotId, channel, cla, instruction, p1, p2, p3, data
|
||||||
) as String?
|
) 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)
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue