ilabs-flir 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/Flir/build.gradle.kts +14 -27
- package/android/Flir/libs/androidsdk-release.aar +0 -0
- package/android/Flir/libs/thermalsdk-release.aar +0 -0
- package/android/Flir/src/main/java/flir/android/FlirCommands.java +40 -15
- package/android/Flir/src/main/java/flir/android/FlirDownloadManager.kt +26 -46
- package/android/Flir/src/main/java/flir/android/FlirManager.kt +265 -42
- package/android/Flir/src/main/java/flir/android/FlirModule.kt +32 -0
- package/android/Flir/src/main/java/flir/android/FlirSDKLoader.kt +84 -195
- package/android/Flir/src/main/java/flir/android/FlirSdkManager.java +667 -797
- package/package.json +1 -1
- package/sdk-manifest.json +14 -7
- package/src/index.d.ts +21 -1
- package/android/Flir/libs/flir-stubs.jar +0 -0
- package/android/Flir/src/main/java/com/flir/thermalsdk/ErrorCodeException.java +0 -14
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/ImageBuffer.java +0 -11
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/JavaImageBuffer.java +0 -35
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/Palette.java +0 -15
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/PaletteManager.java +0 -16
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/Point.java +0 -11
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/ThermalImage.java +0 -23
- package/android/Flir/src/main/java/com/flir/thermalsdk/image/ThermalValue.java +0 -9
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/CameraType.java +0 -8
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/CommunicationInterface.java +0 -16
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/Identity.java +0 -23
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/IpSettings.java +0 -9
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/connectivity/ConnectionStatusListener.java +0 -7
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/remote/OnReceived.java +0 -5
- package/android/Flir/src/main/java/com/flir/thermalsdk/live/remote/OnRemoteError.java +0 -7
- package/android/Flir/src/main/java/flir/android/CameraHandler.java +0 -224
- package/android/Flir/src/main/java/flir/android/FlirConnectionManager.java +0 -354
- package/android/Flir/src/main/java/flir/android/FlirController.kt +0 -11
- package/android/Flir/src/main/java/flir/android/FlirDiscoveryManager.java +0 -236
- package/android/Flir/src/main/java/flir/android/FrameDataHolder.java +0 -14
|
@@ -1,195 +1,84 @@
|
|
|
1
|
-
package flir.android
|
|
2
|
-
|
|
3
|
-
import android.content.Context
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
object FlirSDKLoader {
|
|
15
|
-
|
|
16
|
-
private const val
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// Download
|
|
87
|
-
URL(downloadUrl).openStream().use { input ->
|
|
88
|
-
FileOutputStream(zipFile).use { output ->
|
|
89
|
-
val buffer = ByteArray(8192)
|
|
90
|
-
var totalRead = 0L
|
|
91
|
-
var bytesRead: Int
|
|
92
|
-
|
|
93
|
-
while (input.read(buffer).also { bytesRead = it } != -1) {
|
|
94
|
-
output.write(buffer, 0, bytesRead)
|
|
95
|
-
totalRead += bytesRead
|
|
96
|
-
withContext(Dispatchers.Main) {
|
|
97
|
-
onProgress(totalRead, totalSize)
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Verify checksum
|
|
104
|
-
val actualHash = sha256(zipFile)
|
|
105
|
-
if (actualHash != expectedHash) {
|
|
106
|
-
zipFile.delete()
|
|
107
|
-
return@withContext Result.failure(SecurityException("Checksum mismatch"))
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Extract
|
|
111
|
-
unzip(zipFile, sdkDir)
|
|
112
|
-
zipFile.delete()
|
|
113
|
-
|
|
114
|
-
Result.success(Unit)
|
|
115
|
-
} catch (e: Exception) {
|
|
116
|
-
Result.failure(e)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
fun deleteSDK(context: Context): Boolean {
|
|
121
|
-
splitInstallManager?.deferredUninstall(listOf(FEATURE_MODULE))
|
|
122
|
-
return getSDKDirectory(context).deleteRecursively()
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
private fun loadManifest(context: Context): SDKManifest? {
|
|
126
|
-
return try {
|
|
127
|
-
val json = context.assets.open("sdk-manifest.json").bufferedReader().readText()
|
|
128
|
-
SDKManifest.fromJson(json)
|
|
129
|
-
} catch (e: Exception) { null }
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
private fun sha256(file: File): String {
|
|
133
|
-
val digest = MessageDigest.getInstance("SHA-256")
|
|
134
|
-
file.inputStream().use { input ->
|
|
135
|
-
val buffer = ByteArray(8192)
|
|
136
|
-
var bytesRead: Int
|
|
137
|
-
while (input.read(buffer).also { bytesRead = it } != -1) {
|
|
138
|
-
digest.update(buffer, 0, bytesRead)
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return digest.digest().joinToString("") { "%02x".format(it) }
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
private fun unzip(source: File, destination: File) {
|
|
145
|
-
ZipInputStream(source.inputStream()).use { zip ->
|
|
146
|
-
var entry = zip.nextEntry
|
|
147
|
-
while (entry != null) {
|
|
148
|
-
val file = File(destination, entry.name)
|
|
149
|
-
if (entry.isDirectory) {
|
|
150
|
-
file.mkdirs()
|
|
151
|
-
} else {
|
|
152
|
-
file.parentFile?.mkdirs()
|
|
153
|
-
file.outputStream().use { zip.copyTo(it) }
|
|
154
|
-
}
|
|
155
|
-
entry = zip.nextEntry
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
data class SDKManifest(
|
|
162
|
-
val version: String,
|
|
163
|
-
val android: AndroidManifest
|
|
164
|
-
) {
|
|
165
|
-
data class AndroidManifest(
|
|
166
|
-
val playFeatureModule: String,
|
|
167
|
-
val directDownload: DirectDownload
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
data class DirectDownload(
|
|
171
|
-
val downloadUrl: String,
|
|
172
|
-
val sha256: String,
|
|
173
|
-
val sizeBytes: Long
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
companion object {
|
|
177
|
-
fun fromJson(json: String): SDKManifest {
|
|
178
|
-
val root = JSONObject(json)
|
|
179
|
-
val android = root.getJSONObject("android")
|
|
180
|
-
val direct = android.getJSONObject("directDownload")
|
|
181
|
-
|
|
182
|
-
return SDKManifest(
|
|
183
|
-
version = root.getString("version"),
|
|
184
|
-
android = AndroidManifest(
|
|
185
|
-
playFeatureModule = android.getString("playFeatureModule"),
|
|
186
|
-
directDownload = DirectDownload(
|
|
187
|
-
downloadUrl = direct.getString("downloadUrl"),
|
|
188
|
-
sha256 = direct.getString("sha256"),
|
|
189
|
-
sizeBytes = direct.getLong("sizeBytes")
|
|
190
|
-
)
|
|
191
|
-
)
|
|
192
|
-
)
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
1
|
+
package flir.android
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.os.Build
|
|
5
|
+
import android.util.Log
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* FlirSDKLoader - SDK availability checker
|
|
9
|
+
*
|
|
10
|
+
* Since the SDK is now bundled via AAR files, this class simply reports
|
|
11
|
+
* that the SDK is always available. The AAR files include native .so libraries
|
|
12
|
+
* for all supported architectures, which Android handles automatically.
|
|
13
|
+
*/
|
|
14
|
+
object FlirSDKLoader {
|
|
15
|
+
|
|
16
|
+
private const val TAG = "FlirSDKLoader"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get the primary ABI for this device
|
|
20
|
+
*/
|
|
21
|
+
fun getDeviceArch(): String {
|
|
22
|
+
val supportedAbis = Build.SUPPORTED_ABIS
|
|
23
|
+
Log.d(TAG, "Device supported ABIs: ${supportedAbis.joinToString()}")
|
|
24
|
+
|
|
25
|
+
val knownArchs = setOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86")
|
|
26
|
+
for (abi in supportedAbis) {
|
|
27
|
+
if (abi in knownArchs) {
|
|
28
|
+
Log.d(TAG, "Selected ABI: $abi")
|
|
29
|
+
return abi
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return "arm64-v8a"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Check if SDK is available - always true since bundled in AAR
|
|
37
|
+
*/
|
|
38
|
+
fun isSDKAvailable(context: Context): Boolean {
|
|
39
|
+
Log.d(TAG, "SDK is bundled in AAR - always available")
|
|
40
|
+
return true
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* No download needed - SDK is bundled
|
|
45
|
+
*/
|
|
46
|
+
suspend fun downloadSDK(
|
|
47
|
+
context: Context,
|
|
48
|
+
onProgress: ((progress: Int, bytesDownloaded: Long, totalBytes: Long) -> Unit)? = null
|
|
49
|
+
): Boolean {
|
|
50
|
+
Log.d(TAG, "SDK is bundled - no download needed")
|
|
51
|
+
onProgress?.invoke(100, 0, 0)
|
|
52
|
+
return true
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get SDK status
|
|
57
|
+
*/
|
|
58
|
+
fun getSDKStatus(context: Context): Map<String, Any> {
|
|
59
|
+
return mapOf(
|
|
60
|
+
"available" to true,
|
|
61
|
+
"bundled" to true,
|
|
62
|
+
"arch" to getDeviceArch(),
|
|
63
|
+
"version" to "4.16.0" // SDK version from AAR
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get DEX path - not applicable when bundled via AAR
|
|
69
|
+
* Returns null since SDK is bundled in AAR, no separate DEX needed
|
|
70
|
+
*/
|
|
71
|
+
fun getDexPath(context: Context): java.io.File? {
|
|
72
|
+
// SDK is bundled in AAR - no separate DEX file
|
|
73
|
+
return null
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get native library directory - not applicable when bundled via AAR
|
|
78
|
+
* Returns null since native libs are included in AAR and handled by Android
|
|
79
|
+
*/
|
|
80
|
+
fun getNativeLibDir(context: Context): java.io.File? {
|
|
81
|
+
// SDK native libs are bundled in AAR and extracted automatically by Android
|
|
82
|
+
return null
|
|
83
|
+
}
|
|
84
|
+
}
|