Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Sources/JNICore+JavaCoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ var ArrayListClassname = "java/util/ArrayList"
let HashMapClassname = "java/util/HashMap"
let SetClassname = "java/util/Set"
let UriClassname = "android/net/Uri"
let UuidClassname = "java/util/UUID"
let DateClassname = "java/util/Date"
let HashSetClassname = "java/util/HashSet"
let ByteBufferClassname = "java/nio/ByteBuffer"
Expand All @@ -38,6 +39,7 @@ var BooleanClass = try! JNI.getJavaClass("java/lang/Boolean")
var StringClass = try! JNI.getJavaClass("java/lang/String")
let ExceptionClass = try! JNI.getJavaClass("java/lang/Exception")
let UriClass = try! JNI.getJavaClass("android/net/Uri")
let UuidClass = try! JNI.getJavaClass("java/util/UUID")
let DateClass = try! JNI.getJavaClass("java/util/Date")
let VMDebugClass = try! JNI.getJavaClass("dalvik/system/VMDebug")
let HashSetClass = try! JNI.getJavaClass("java/util/HashSet")
Expand All @@ -47,6 +49,7 @@ let DoubleClass = try! JNI.getJavaClass("java/lang/Double")

// MARK: Java methods
let UriConstructor = JNI.api.GetStaticMethodID(JNI.env, UriClass, "parse", "(Ljava/lang/String;)Landroid/net/Uri;")
let UuidConstructor = JNI.api.GetStaticMethodID(JNI.env, UuidClass, "fromString", "(Ljava/lang/String;)Ljava/util/UUID;")
let DateConstructor = try! JNI.getJavaMethod(forClass: "java/util/Date", method: "<init>", sig: "(J)V")
let IntegerConstructor = try! JNI.getJavaMethod(forClass: IntegerClassname, method: "<init>", sig: "(I)V")
let ByteConstructor = try! JNI.getJavaMethod(forClass: ByteClassname, method: "<init>", sig: "(B)V")
Expand Down
16 changes: 15 additions & 1 deletion Sources/JavaCoderConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,20 @@ public struct JavaCoderConfig {
return URL(string: String(javaObject: pathString))
})

JavaCoderConfig.RegisterType(type: UUID.self, javaClassname: UuidClassname, encodableClosure: {
var locals = [jobject]()
let javaString = ($0 as! UUID).uuidString.localJavaObject(&locals)
let args = [jvalue(l: javaString)]
JNI.SaveFatalErrorMessage("UuidConstructor")
defer {
JNI.RemoveFatalErrorMessage()
}
return JNI.check(JNI.CallStaticObjectMethod(UuidClass, methodID: UuidConstructor!, args: args)!, &locals)
}, decodableClosure: {
let pathString = JNI.api.CallObjectMethodA(JNI.env, $0, ObjectToStringMethod, nil)
return UUID(uuidString: String(javaObject: pathString))
})

RegisterType(type: Data.self, javaClassname: ByteBufferClassname, encodableClosure: {
let valueData = $0 as! Data
let byteArray = JNI.api.NewByteArray(JNI.env, jint(valueData.count))
Expand Down Expand Up @@ -213,4 +227,4 @@ public struct JavaCoderConfig {
})
}

}
}
3 changes: 2 additions & 1 deletion doc/JNITypes.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@
OptionSet // custom type with rawValue field and valueOf() static method

URL // android/net/Uri
Date // java/util/Date
UUID // java/util/UUID
Date // java/util/Date