lpac-jni: Fixup channel validity detection

This commit is contained in:
Peter Cai 2024-01-01 20:47:52 -05:00
parent f9e7d0ed8d
commit c5a5701c03
3 changed files with 13 additions and 11 deletions

View file

@ -12,15 +12,7 @@ abstract class EuiccChannel(
abstract val lpa: LocalProfileAssistant
val valid: Boolean
get() {
try {
// Try to ping the eUICC card by reading the EID
lpa.eID
} catch (e: Exception) {
return false
}
return true
}
get() = lpa.valid
fun close() = lpa.close()
}

View file

@ -9,6 +9,16 @@ interface LocalProfileAssistant {
private const val TAG = "LocalProfileAssistant"
}
val valid: Boolean
get() = try {
// If we can read both eID and profiles properly, we are likely looking at
// a valid LocalProfileAssistant
eID
profiles
true
} catch (e: Exception) {
false
}
val profiles: List<LocalProfileInfo>
val notifications: List<LocalProfileNotification>
val eID: String

View file

@ -49,8 +49,8 @@ class LocalProfileAssistantImpl(
apduInterface.connect()
contextHandle = LpacJni.createContext(apduInterface, httpInterface)
check(LpacJni.es10xInit(contextHandle) >= 0) { "Reconnect attempt failed" }
// Validate that we can actually use the APDU channel by trying to read eID
eID
// Validate that we can actually use the APDU channel by trying to read eID and profiles
check(valid) { "Reconnected channel is invalid" }
break
} catch (e: Exception) {
e.printStackTrace()