From 9a63011036c19d94fd68b47db00592a148614b16 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 11 Mar 2025 10:07:13 +0800 Subject: [PATCH 1/2] feat: add iconType and icon fields to LocalProfileInfo and update JNI methods --- .../net/typeblog/lpac_jni/LocalProfileInfo.kt | 4 ++- .../lpac-jni/src/main/jni/lpac-jni/lpac-jni.c | 6 +++- libs/lpac-jni/src/main/jni/lpac-jni/utils.c | 33 ++++++++++--------- libs/lpac-jni/src/main/jni/lpac-jni/utils.h | 6 ++-- 4 files changed, 29 insertions(+), 20 deletions(-) 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 96e16ef..b9b4aa1 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 @@ -7,7 +7,9 @@ data class LocalProfileInfo( val nickName: String, val providerName: String, val isdpAID: String, - val profileClass: ProfileClass + val profileClass: ProfileClass, + val iconType: String, + val icon: String, ) enum class ProfileState { Enabled, Disabled } 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 d4fddd0..078428c 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 @@ -147,6 +147,8 @@ Java_net_typeblog_lpac_1jni_LpacJni_es10cGetProfilesInfo( "Ljava/lang/String;" // provider name "Ljava/lang/String;" // ISD-P AID "Lnet/typeblog/lpac_jni/ProfileClass;" + "Ljava/lang/String;" // icon type + "Ljava/lang/String;" // icon ")" "V" // (returns) void ); @@ -164,7 +166,9 @@ Java_net_typeblog_lpac_1jni_LpacJni_es10cGetProfilesInfo( toJString(env, info->profileNickname), toJString(env, info->serviceProviderName), toJString(env, info->isdpAid), - to_profile_class(info->profileClass) + to_profile_class(info->profileClass), + to_icon_type(env, info->iconType), + toJString(env, info->icon) ); (*env)->CallBooleanMethod(env, profile_list, add_profile, element); info = info->next; diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/utils.c b/libs/lpac-jni/src/main/jni/lpac-jni/utils.c index 5a19f35..8494398 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/utils.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/utils.c @@ -116,6 +116,21 @@ jobject to_profile_class(enum es10c_profile_class profile_class) { } } +jobject to_profile_management_operation(enum es10b_profile_management_operation operation) { + switch (operation) { + case ES10B_PROFILE_MANAGEMENT_OPERATION_INSTALL: + return profile_management_operation_install; + case ES10B_PROFILE_MANAGEMENT_OPERATION_DELETE: + return profile_management_operation_delete; + case ES10B_PROFILE_MANAGEMENT_OPERATION_ENABLE: + return profile_management_operation_enable; + case ES10B_PROFILE_MANAGEMENT_OPERATION_DISABLE: + return profile_management_operation_disable; + default: + return NULL; + } +} + jstring to_icon_type(JNIEnv *env, enum es10c_icon_type icon_type) { switch (icon_type) { case ES10C_ICON_TYPE_JPEG: @@ -182,25 +197,11 @@ jobject build_profile_metadata(JNIEnv *env, struct es8p_metadata *metadata) { toJString(env, metadata->profileName), to_icon_type(env, metadata->iconType), toJString(env, metadata->icon), - to_profile_class(metadata->profileClass) + to_profile_class(metadata->profileClass + ) ); } -jobject to_profile_management_operation(enum es10b_profile_management_operation operation) { - switch (operation) { - case ES10B_PROFILE_MANAGEMENT_OPERATION_INSTALL: - return profile_management_operation_install; - case ES10B_PROFILE_MANAGEMENT_OPERATION_DELETE: - return profile_management_operation_delete; - case ES10B_PROFILE_MANAGEMENT_OPERATION_ENABLE: - return profile_management_operation_enable; - case ES10B_PROFILE_MANAGEMENT_OPERATION_DISABLE: - return profile_management_operation_disable; - default: - return NULL; - } -} - jobject new_array_list(JNIEnv *env) { jclass array_list_class = (*env)->FindClass(env, ARRAY_LIST_CLASS); jmethodID array_list_constructor = (*env)->GetMethodID(env, array_list_class, "", "()V"); diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/utils.h b/libs/lpac-jni/src/main/jni/lpac-jni/utils.h index 617f5f4..7f502f6 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/utils.h +++ b/libs/lpac-jni/src/main/jni/lpac-jni/utils.h @@ -27,6 +27,10 @@ jobject to_profile_state(enum es10c_profile_state profile_state); jobject to_profile_class(enum es10c_profile_class profile_class); +jobject to_profile_management_operation(enum es10b_profile_management_operation operation); + +jstring to_icon_type(JNIEnv *env, enum es10c_icon_type icon_type); + jobject to_version(JNIEnv *env, const char *version); jobject to_string_set(JNIEnv *env, char **values); @@ -35,6 +39,4 @@ jobject to_string_list(JNIEnv *env, char **values); jobject build_profile_metadata(JNIEnv *env, struct es8p_metadata *metadata); -jobject to_profile_management_operation(enum es10b_profile_management_operation operation); - jobject new_array_list(JNIEnv *env); From ebfca5b309007ff541621afb37933d04c20c191a Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 11 Mar 2025 10:11:52 +0800 Subject: [PATCH 2/2] refactor: extract version class initialization into a separate function in utils.c --- libs/lpac-jni/src/main/jni/lpac-jni/utils.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libs/lpac-jni/src/main/jni/lpac-jni/utils.c b/libs/lpac-jni/src/main/jni/lpac-jni/utils.c index 8494398..696a74f 100644 --- a/libs/lpac-jni/src/main/jni/lpac-jni/utils.c +++ b/libs/lpac-jni/src/main/jni/lpac-jni/utils.c @@ -45,27 +45,26 @@ static void init_string_class(JNIEnv *env) { empty_string = (*env)->NewGlobalRef(env, empty_string); } -void lpac_convertor_init(JNIEnv *env) { - init_string_class(env); - +static void init_version_class(JNIEnv *env) { version_class = (*env)->FindClass(env, VERSION_CLASS); version_class = (*env)->NewGlobalRef(env, version_class); - version_constructor = (*env)->GetMethodID( - env, version_class, "", "(Ljava/lang/String;)V"); + version_constructor = (*env)->GetMethodID(env, version_class, "", "(Ljava/lang/String;)V"); +} - jclass profile_state_class = (*env)->FindClass( - env, PROFILE_STATE_CLASS); +void lpac_convertor_init(JNIEnv *env) { + init_string_class(env); + init_version_class(env); + + jclass profile_state_class = (*env)->FindClass(env, PROFILE_STATE_CLASS); BIND_PROFILE_STATE_STATIC_FIELD(enabled, "Enabled"); BIND_PROFILE_STATE_STATIC_FIELD(disabled, "Disabled"); - jclass profile_class_class = (*env)->FindClass( - env, PROFILE_CLASS_CLASS); + jclass profile_class_class = (*env)->FindClass(env, PROFILE_CLASS_CLASS); BIND_PROFILE_CLASS_STATIC_FIELD(operational, "Operational"); BIND_PROFILE_CLASS_STATIC_FIELD(provisioning, "Provisioning"); BIND_PROFILE_CLASS_STATIC_FIELD(testing, "Testing"); - jclass profile_management_operation_class = (*env)->FindClass( - env, PROFILE_MANAGEMENT_OPERATION_CLASS); + jclass profile_management_operation_class = (*env)->FindClass(env, PROFILE_MANAGEMENT_OPERATION_CLASS); BIND_NOTIFICATION_OPERATION_FIELD(install, "Install"); BIND_NOTIFICATION_OPERATION_FIELD(delete, "Delete"); BIND_NOTIFICATION_OPERATION_FIELD(enable, "Enable");