diff --git a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccInfo2.kt b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccInfo2.kt index ecaf40d..9cc1ddd 100644 --- a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccInfo2.kt +++ b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/EuiccInfo2.kt @@ -9,7 +9,6 @@ data class EuiccInfo2( val globalPlatformVersion: String, val sasAccreditationNumber: String, val ppVersion: String, - val installedApp: Int, val freeNvram: Int, val freeRam: Int, ) \ No newline at end of file diff --git a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileInfo.kt b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileInfo.kt index b710a3f..5030564 100644 --- a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileInfo.kt +++ b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/LocalProfileInfo.kt @@ -1,7 +1,5 @@ package net.typeblog.lpac_jni -import java.lang.IllegalArgumentException - data class LocalProfileInfo( val iccid: String, val state: State, @@ -13,29 +11,33 @@ data class LocalProfileInfo( ) { enum class State { Enabled, - Disabled + Disabled; + + companion object { + @JvmStatic + fun fromString(str: String?) = + when (str?.lowercase()) { + "enabled" -> Enabled + "disabled" -> Disabled + else -> Disabled + } + } } enum class Clazz { Testing, Provisioning, - Operational - } + Operational; - companion object { - fun stateFromString(state: String?): State = - if (state == "0") { - State.Disabled - } else { - State.Enabled - } - - fun classFromString(clazz: String?): Clazz = - when (clazz) { - "0" -> Clazz.Testing - "1" -> Clazz.Provisioning - "2" -> Clazz.Operational - else -> throw IllegalArgumentException("Unknown profile class $clazz") - } + companion object { + @JvmStatic + fun fromString(str: String?) = + when (str?.lowercase()) { + "testing" -> Testing + "provisioning" -> Provisioning + "operational" -> Operational + else -> Operational + } + } } } \ No newline at end of file diff --git a/libs/lpac-jni/src/main/jni/lpac b/libs/lpac-jni/src/main/jni/lpac index 29984b3..76baec7 160000 --- a/libs/lpac-jni/src/main/jni/lpac +++ b/libs/lpac-jni/src/main/jni/lpac @@ -1 +1 @@ -Subproject commit 29984b34220581ec3779876d964b41bb566851f5 +Subproject commit 76baec728ada6e9a7705bffc2e6bd68482acb839 diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c index 58a84b5..903fadd 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/lpac-jni.c @@ -12,12 +12,11 @@ JavaVM *jvm = NULL; jclass local_profile_info_class; jmethodID local_profile_info_constructor; -jobject local_profile_state_enabled; -jobject local_profile_state_disabled; +jclass local_profile_state_class; +jmethodID local_profile_state_from_string; -jobject local_profile_class_testing; -jobject local_profile_class_provisioning; -jobject local_profile_class_operational; +jclass local_profile_class_class; +jmethodID local_profile_class_from_string; jstring empty_string; @@ -42,28 +41,17 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { local_profile_info_constructor = (*env)->GetMethodID(env, local_profile_info_class, "", "(Ljava/lang/String;Lnet/typeblog/lpac_jni/LocalProfileInfo$State;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lnet/typeblog/lpac_jni/LocalProfileInfo$Clazz;)V"); - jclass local_profile_state_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/LocalProfileInfo$State"); - jfieldID field_enabled = (*env)->GetStaticFieldID(env, local_profile_state_class, "Enabled", "Lnet/typeblog/lpac_jni/LocalProfileInfo$State;"); - local_profile_state_enabled = (*env)->GetStaticObjectField(env, local_profile_state_class, field_enabled); - local_profile_state_enabled = (*env)->NewGlobalRef(env, local_profile_state_enabled); - jfieldID field_disabled = (*env)->GetStaticFieldID(env, local_profile_state_class, "Disabled", "Lnet/typeblog/lpac_jni/LocalProfileInfo$State;"); - local_profile_state_disabled = (*env)->GetStaticObjectField(env, local_profile_state_class, field_disabled); - local_profile_state_disabled = (*env)->NewGlobalRef(env, local_profile_state_disabled); + local_profile_state_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/LocalProfileInfo$State"); + local_profile_state_class = (*env)->NewGlobalRef(env, local_profile_state_class); + local_profile_state_from_string = (*env)->GetStaticMethodID(env, local_profile_state_class, "fromString", "(Ljava/lang/String;)Lnet/typeblog/lpac_jni/LocalProfileInfo$State;"); - jclass local_profile_class_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/LocalProfileInfo$Clazz"); - jfieldID field_testing = (*env)->GetStaticFieldID(env, local_profile_class_class, "Testing", "Lnet/typeblog/lpac_jni/LocalProfileInfo$Clazz;"); - local_profile_class_testing = (*env)->GetStaticObjectField(env, local_profile_class_class, field_testing); - local_profile_class_testing = (*env)->NewGlobalRef(env, local_profile_class_testing); - jfieldID field_provisioning = (*env)->GetStaticFieldID(env, local_profile_class_class, "Provisioning", "Lnet/typeblog/lpac_jni/LocalProfileInfo$Clazz;"); - local_profile_class_provisioning = (*env)->GetStaticObjectField(env, local_profile_class_class, field_provisioning); - local_profile_class_provisioning = (*env)->NewGlobalRef(env, local_profile_class_provisioning); - jfieldID field_operational = (*env)->GetStaticFieldID(env, local_profile_class_class, "Operational", "Lnet/typeblog/lpac_jni/LocalProfileInfo$Clazz;"); - local_profile_class_operational = (*env)->GetStaticObjectField(env, local_profile_class_class, field_operational); - local_profile_class_operational = (*env)->NewGlobalRef(env, local_profile_class_operational); + local_profile_class_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/LocalProfileInfo$Clazz"); + local_profile_class_class = (*env)->NewGlobalRef(env, local_profile_class_class); + local_profile_class_from_string = (*env)->GetStaticMethodID(env, local_profile_class_class, "fromString", "(Ljava/lang/String;)Lnet/typeblog/lpac_jni/LocalProfileInfo$Clazz;"); euicc_info2_class = (*env)->FindClass(env, "net/typeblog/lpac_jni/EuiccInfo2"); euicc_info2_class = (*env)->NewGlobalRef(env, euicc_info2_class); - euicc_info2_constructor = (*env)->GetMethodID(env, euicc_info2_class, "", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;III)V"); + euicc_info2_constructor = (*env)->GetMethodID(env, euicc_info2_class, "", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V"); const char _unused[1]; empty_string = (*env)->NewString(env, _unused, 0); @@ -153,30 +141,15 @@ Java_net_typeblog_lpac_1jni_LpacJni_es10cGetProfilesInfo(JNIEnv *env, jobject th jstring nickName = info[i].profileNickname ? toJString(env, info[i].profileNickname) : (*env)->NewLocalRef(env, empty_string); jstring serviceProvider = info[i].serviceProviderName ? toJString(env, info[i].serviceProviderName) : (*env)->NewLocalRef(env, empty_string); - jobject state; - switch (info[i].profileState) { - case ES10C_PROFILE_INFO_STATE_ENABLED: - state = local_profile_state_enabled; - break; - case ES10C_PROFILE_INFO_STATE_DISABLED: - state = local_profile_state_disabled; - break; - } - state = (*env)->NewLocalRef(env, state); + jobject state = + (*env)->CallStaticObjectMethod(env, local_profile_state_class, + local_profile_state_from_string, + toJString(env, info[i].profileState)); - jobject class; - switch (info[i].profileClass) { - case ES10C_PROFILE_INFO_CLASS_TEST: - class = local_profile_class_testing; - break; - case ES10C_PROFILE_INFO_CLASS_PROVISIONING: - class = local_profile_class_provisioning; - break; - case ES10C_PROFILE_INFO_CLASS_OPERATIONAL: - class = local_profile_class_operational; - break; - } - class = (*env)->NewLocalRef(env, class); + jobject class = + (*env)->CallStaticObjectMethod(env, local_profile_class_class, + local_profile_class_from_string, + toJString(env, info[i].profileClass)); jobject jinfo = (*env)->NewObject(env, local_profile_info_class, local_profile_info_constructor, iccid, state, name, nickName, serviceProvider, isdpAid, class); @@ -266,7 +239,7 @@ Java_net_typeblog_lpac_1jni_LpacJni_es10cexGetEuiccInfo2(JNIEnv *env, jobject th profile_version, sgp22_version, euicc_firmware_version, uicc_firmware_version, global_platform_version, sas_accreditation_number, pp_version, - info.installed_app, info.free_nvram, info.free_ram); + info.free_nvram, info.free_ram); out: (*env)->DeleteLocalRef(env, profile_version);