The open source OpenXR runtime

add getPackageName() for Context, add getSignature() for PackageInfo

authored by

zhislv and committed by
Rylie Pavlik
0387e8f1 39fb50bf

+95 -1
+2
src/external/android-jni-wrap/wrap/android.content.cpp
··· 12 12 WINDOW_SERVICE(classRef(), "WINDOW_SERVICE"), 13 13 getPackageManager(classRef().getMethod( 14 14 "getPackageManager", "()Landroid/content/pm/PackageManager;")), 15 + getPackageName(classRef().getMethod( 16 + "getPackageName", "()Ljava/lang/String;")), 15 17 getContentResolver(classRef().getMethod( 16 18 "getContentResolver", "()Landroid/content/ContentResolver;")), 17 19 getApplicationContext(classRef().getMethod(
+12
src/external/android-jni-wrap/wrap/android.content.h
··· 93 93 pm::PackageManager getPackageManager(); 94 94 95 95 /*! 96 + * Wrapper for the getPackageName method 97 + * 98 + * Java prototype: 99 + * `public abstract android.content.Context getPackageName();` 100 + * 101 + * JNI signature: ()Ljava/lang/String; 102 + * 103 + */ 104 + std::string getPackageName(); 105 + 106 + /*! 96 107 * Wrapper for the getContentResolver method 97 108 * 98 109 * Java prototype: ··· 207 218 impl::StaticFieldId<std::string> DISPLAY_SERVICE; 208 219 impl::StaticFieldId<std::string> WINDOW_SERVICE; 209 220 jni::method_t getPackageManager; 221 + jni::method_t getPackageName; 210 222 jni::method_t getContentResolver; 211 223 jni::method_t getApplicationContext; 212 224 jni::method_t getClassLoader;
+6
src/external/android-jni-wrap/wrap/android.content.impl.h
··· 36 36 object().call<jni::Object>(Meta::data().getPackageManager)); 37 37 } 38 38 39 + inline std::string Context::getPackageName() { 40 + assert(!isNull()); 41 + return std::string( 42 + object().call<std::string>(Meta::data().getPackageName)); 43 + } 44 + 39 45 inline ContentResolver Context::getContentResolver() const { 40 46 assert(!isNull()); 41 47 return ContentResolver(
+9 -1
src/external/android-jni-wrap/wrap/android.content.pm.cpp
··· 12 12 packageName(classRef(), "packageName") { 13 13 MetaBaseDroppable::dropClassRef(); 14 14 } 15 + Signature::Meta::Meta() 16 + : MetaBaseDroppable(Signature::getTypeName()), 17 + toCharsString(classRef().getMethod( 18 + "toCharsString", "()Ljava/lang/String;")) { 19 + MetaBaseDroppable::dropClassRef(); 20 + } 15 21 ComponentInfo::Meta::Meta() 16 22 : MetaBaseDroppable(ComponentInfo::getTypeName()), 17 23 applicationInfo(classRef(), "applicationInfo") { ··· 29 35 PackageInfo::Meta::Meta() 30 36 : MetaBaseDroppable(PackageInfo::getTypeName()), 31 37 applicationInfo(classRef(), "applicationInfo"), 32 - packageName(classRef(), "packageName") { 38 + packageName(classRef(), "packageName"), 39 + signaturesId(classRef().getField("signatures", 40 + "[Landroid/content/pm/Signature;")) { 33 41 MetaBaseDroppable::dropClassRef(); 34 42 } 35 43 ResolveInfo::Meta::Meta()
+53
src/external/android-jni-wrap/wrap/android.content.pm.h
··· 17 17 class ApplicationInfo; 18 18 class PackageInfo; 19 19 class ServiceInfo; 20 + class Signature; 20 21 } // namespace android::content::pm 21 22 22 23 namespace android::os { ··· 216 217 }; 217 218 218 219 /*! 220 + * Wrapper for android.content.pm.Signature objects. 221 + */ 222 + class Signature : public ObjectWrapperBase { 223 + public: 224 + using ObjectWrapperBase::ObjectWrapperBase; 225 + static constexpr const char *getTypeName() noexcept { 226 + return "android/content/pm/Signature"; 227 + } 228 + 229 + /*! 230 + * Wrapper for the toCharsString method 231 + * 232 + * Java prototype: 233 + * `public abstract android.content.pm.Signature toCharsString();` 234 + * 235 + * JNI signature: Ljava/lang/String; 236 + * 237 + */ 238 + std::string toCharsString() const; 239 + 240 + /*! 241 + * Class metadata 242 + */ 243 + struct Meta : public MetaBaseDroppable { 244 + jni::method_t toCharsString; 245 + 246 + /*! 247 + * Singleton accessor 248 + */ 249 + static Meta &data() { 250 + static Meta instance{}; 251 + return instance; 252 + } 253 + 254 + private: 255 + Meta(); 256 + }; 257 + }; 258 + 259 + /*! 219 260 * Wrapper for android.content.pm.PackageInfo objects. 220 261 */ 221 262 class PackageInfo : public ObjectWrapperBase { ··· 248 289 std::string getPackageName() const; 249 290 250 291 /*! 292 + * Getter for the packageName field value 293 + * 294 + * Java prototype: 295 + * `public android.content.pm.Signature signatures;` 296 + * 297 + * JNI signature: [Landroid/content/pm/Signature; 298 + * 299 + */ 300 + Signature getSignature() const; 301 + 302 + /*! 251 303 * Class metadata 252 304 */ 253 305 struct Meta : public MetaBaseDroppable { 254 306 impl::WrappedFieldId<ApplicationInfo> applicationInfo; 255 307 impl::FieldId<std::string> packageName; 308 + jni::field_t signaturesId; 256 309 257 310 /*! 258 311 * Singleton accessor
+13
src/external/android-jni-wrap/wrap/android.content.pm.impl.h
··· 51 51 return get(Meta::data().packageName, object()); 52 52 } 53 53 54 + inline std::string Signature::toCharsString() const { 55 + assert(!isNull()); 56 + return object().call<std::string>(Meta::data().toCharsString); 57 + } 58 + 59 + inline Signature PackageInfo::getSignature() const { 60 + assert(!isNull()); 61 + jobject signatures_obj = jni::env()->GetObjectField(object().getHandle(), Meta::data().signaturesId); 62 + jobjectArray signatures_array = reinterpret_cast<jobjectArray>(signatures_obj); 63 + jobject signature_obj = jni::env()->GetObjectArrayElement(signatures_array, 0); 64 + return Signature(signature_obj); 65 + } 66 + 54 67 inline ServiceInfo ResolveInfo::getServiceInfo() const { 55 68 assert(!isNull()); 56 69 return get(Meta::data().serviceInfo, object());