Skip to content

Commit f967d87

Browse files
committed
Add AssetManager.withNDK()
1 parent 6d6ff57 commit f967d87

2 files changed

Lines changed: 57 additions & 0 deletions

File tree

‎Package.swift‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ var package = Package(
297297
"AndroidJava",
298298
"AndroidUtil",
299299
"AndroidOS",
300+
"AndroidNDK",
301+
"AndroidFileManager",
300302
],
301303
exclude: ["swift-java.config"],
302304
swiftSettings: [
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//
2+
// AssetManagerNDK.swift
3+
// SwiftAndroid
4+
//
5+
// Created by Alsey Coleman Miller on 2/27/26.
6+
//
7+
8+
#if canImport(Android)
9+
import Android
10+
import AndroidNDK
11+
#endif
12+
import SwiftJava
13+
import CSwiftJavaJNI
14+
import AndroidFileManager
15+
16+
// MARK: - NDK Asset Manager
17+
18+
public extension AssetManager {
19+
20+
/// Equivalent NDK type.
21+
typealias NDK = AndroidFileManager.AssetManager
22+
23+
/// Create a temporary NDK object and perform operations on it.
24+
func withNDK<E, Result>(_ body: (borrowing NDK) throws(E) -> Result) throws(E) -> Result where E: Error {
25+
let ndk = NDK.fromJava(javaThis, environment: javaEnvironment)
26+
return try body(ndk)
27+
}
28+
}
29+
30+
internal extension AndroidFileManager.AssetManager {
31+
32+
/**
33+
* Converts an android.content.res.AssetManager object into an AAssetManager* object.
34+
*
35+
* If the asset manager is null, null is returned.
36+
*
37+
* Available since API level 24.
38+
*
39+
* \param env Java environment. Must not be null.
40+
* \param assetManager android.content.res.AssetManager java object.
41+
*
42+
* \return an AAssetManager object representing the Java AssetManager object. If either parameter
43+
* is null, this will return null.
44+
*/
45+
static func fromJava(_ javaObject: jobject, environment: JNIEnvironment) -> AndroidFileManager.AssetManager {
46+
guard let pointer = AAssetManager_fromJava(environment, javaObject) else {
47+
fatalError("Unable to initialize from Java object")
48+
}
49+
return AndroidFileManager.AssetManager(pointer)
50+
}
51+
}
52+
53+
#if !os(Android)
54+
func AAssetManager_fromJava(_ environment: JNIEnvironment?, _ javaObject: jobject) -> OpaquePointer? { fatalError("stub") }
55+
#endif

0 commit comments

Comments
 (0)