@glassly/bluetooth-sdk 0.3.1-dev.493 → 0.3.1-dev.496
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/src/main/java/com/glassly/bluetoothsdk/GeneratedReleaseMetadata.kt +3 -3
- package/android/src/main/java/com/glassly/bluetoothsdk/sgcs/G1TextSanitizer.kt +9 -13
- package/android/src/test/java/com/glassly/bluetoothsdk/sgcs/G1TextSanitizerTest.kt +15 -9
- package/build/generated/releaseMetadata.js +3 -3
- package/build/generated/releaseMetadata.js.map +1 -1
- package/ios/Source/BluetoothSdkDefaults.swift +1 -1
- package/ios/Source/GeneratedReleaseMetadata.swift +3 -3
- package/ios/Source/utils/G1Text.swift +13 -15
- package/package.json +1 -1
- package/src/generated/releaseMetadata.ts +3 -3
|
@@ -3,9 +3,9 @@ package com.glassly.bluetoothsdk
|
|
|
3
3
|
/** Generated by release CI. Do not edit in a release checkout. */
|
|
4
4
|
internal object GeneratedReleaseMetadata {
|
|
5
5
|
const val FAMILY_BASE_VERSION: String = "0.3.1"
|
|
6
|
-
const val RELEASE_IDENTITY: String = "0.3.1-dev.
|
|
7
|
-
const val RELEASE_SET_ID: String = "glassly-0.3.1-dev.
|
|
8
|
-
const val SOURCE_COMMIT: String = "
|
|
6
|
+
const val RELEASE_IDENTITY: String = "0.3.1-dev.496"
|
|
7
|
+
const val RELEASE_SET_ID: String = "glassly-0.3.1-dev.496"
|
|
8
|
+
const val SOURCE_COMMIT: String = "77c2bb7e91ed12c414e1eaa54c786a324f232c66"
|
|
9
9
|
const val OTA_MANIFEST_URL: String = ""
|
|
10
10
|
const val OTA_MANIFEST_SHA256: String = ""
|
|
11
11
|
}
|
|
@@ -3,36 +3,32 @@ package com.glassly.bluetoothsdk.sgcs
|
|
|
3
3
|
import java.text.Normalizer
|
|
4
4
|
|
|
5
5
|
private val G1_COMBINING_MARKS = Regex("\\p{M}+")
|
|
6
|
+
private val G1_NON_LATIN1_RUN = Regex("[^\\u00C0-\\u00FF]+")
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
|
-
* Converts text to the
|
|
9
|
+
* Converts text to the Latin glyphs available in the Even Realities G1 firmware.
|
|
9
10
|
*
|
|
10
|
-
* G1
|
|
11
|
+
* G1 renders precomposed Latin-1 letters (ä, ö, ü, ß, é, ñ, ...) but has no glyphs for
|
|
12
|
+
* combining diacritics or letters beyond Latin-1. Normalize at the device boundary so
|
|
11
13
|
* miniapps can retain the real text everywhere else and newer glasses receive it unchanged.
|
|
12
14
|
*/
|
|
13
15
|
internal fun sanitizeG1DisplayText(text: String): String {
|
|
14
16
|
val expanded = buildString(text.length) {
|
|
15
17
|
text.forEach { character ->
|
|
16
18
|
when (character) {
|
|
17
|
-
'Đ'
|
|
18
|
-
'đ'
|
|
19
|
+
'Đ' -> append('D')
|
|
20
|
+
'đ' -> append('d')
|
|
19
21
|
'Ł' -> append('L')
|
|
20
22
|
'ł' -> append('l')
|
|
21
|
-
'Ø' -> append('O')
|
|
22
|
-
'ø' -> append('o')
|
|
23
|
-
'Æ' -> append("AE")
|
|
24
|
-
'æ' -> append("ae")
|
|
25
23
|
'Œ' -> append("OE")
|
|
26
24
|
'œ' -> append("oe")
|
|
27
25
|
'ẞ' -> append("SS")
|
|
28
|
-
'ß' -> append("ss")
|
|
29
|
-
'Þ' -> append("TH")
|
|
30
|
-
'þ' -> append("th")
|
|
31
26
|
else -> append(character)
|
|
32
27
|
}
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
|
|
36
|
-
return Normalizer.normalize(expanded, Normalizer.Form.
|
|
37
|
-
.replace(G1_COMBINING_MARKS, "")
|
|
31
|
+
return G1_NON_LATIN1_RUN.replace(Normalizer.normalize(expanded, Normalizer.Form.NFC)) { run ->
|
|
32
|
+
Normalizer.normalize(run.value, Normalizer.Form.NFD).replace(G1_COMBINING_MARKS, "")
|
|
33
|
+
}
|
|
38
34
|
}
|
|
@@ -6,21 +6,27 @@ import org.junit.Test
|
|
|
6
6
|
class G1TextSanitizerTest {
|
|
7
7
|
|
|
8
8
|
@Test
|
|
9
|
-
fun `
|
|
10
|
-
assertThat(sanitizeG1DisplayText("
|
|
11
|
-
.isEqualTo("
|
|
9
|
+
fun `keeps Latin-1 letters G1 can render`() {
|
|
10
|
+
assertThat(sanitizeG1DisplayText("Äpfel, Öl, Übung, Straße, café, niño, Øresund, Æsir"))
|
|
11
|
+
.isEqualTo("Äpfel, Öl, Übung, Straße, café, niño, Øresund, Æsir")
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
@Test
|
|
15
|
-
fun `
|
|
16
|
-
assertThat(sanitizeG1DisplayText("
|
|
17
|
-
.isEqualTo("
|
|
15
|
+
fun `composes decomposed Latin-1 letters`() {
|
|
16
|
+
assertThat(sanitizeG1DisplayText("scho\u0308n\nCafe\u0301"))
|
|
17
|
+
.isEqualTo("schön\nCafé")
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
@Test
|
|
21
|
-
fun `
|
|
22
|
-
assertThat(sanitizeG1DisplayText("
|
|
23
|
-
.isEqualTo("
|
|
21
|
+
fun `strips diacritics beyond Latin-1`() {
|
|
22
|
+
assertThat(sanitizeG1DisplayText("Tiếng Việt: Đặng, Nguyễn, phở\nĐa Nang"))
|
|
23
|
+
.isEqualTo("Tieng Viet: Dang, Nguyen, pho\nDa Nang")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Test
|
|
27
|
+
fun `expands letters beyond Latin-1 that do not decompose`() {
|
|
28
|
+
assertThat(sanitizeG1DisplayText("Łódź Œuvre œil STRAẞE"))
|
|
29
|
+
.isEqualTo("Lódz OEuvre oeil STRASSE")
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
@Test
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export const BLUETOOTH_SDK_RELEASE_METADATA = Object.freeze({
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"familyBaseVersion": "0.3.1",
|
|
4
|
-
"releaseIdentity": "0.3.1-dev.
|
|
5
|
-
"releaseSetId": "glassly-0.3.1-dev.
|
|
6
|
-
"sourceCommit": "
|
|
4
|
+
"releaseIdentity": "0.3.1-dev.496",
|
|
5
|
+
"releaseSetId": "glassly-0.3.1-dev.496",
|
|
6
|
+
"sourceCommit": "77c2bb7e91ed12c414e1eaa54c786a324f232c66",
|
|
7
7
|
"otaManifestUrl": null,
|
|
8
8
|
"otaManifestSha256": null
|
|
9
9
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,8BAA8B,GAA0C,MAAM,CAAC,MAAM,CAAC;IACjG,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;CAC1B,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface BluetoothSdkReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"0.3.1\",\n \"releaseIdentity\": \"0.3.1-dev.
|
|
1
|
+
{"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,8BAA8B,GAA0C,MAAM,CAAC,MAAM,CAAC;IACjG,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;CAC1B,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface BluetoothSdkReleaseMetadata {\n schemaVersion: 1\n familyBaseVersion: string | null\n releaseIdentity: string | null\n releaseSetId: string | null\n sourceCommit: string | null\n otaManifestUrl: string | null\n otaManifestSha256: string | null\n}\n\nexport const BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"0.3.1\",\n \"releaseIdentity\": \"0.3.1-dev.496\",\n \"releaseSetId\": \"glassly-0.3.1-dev.496\",\n \"sourceCommit\": \"77c2bb7e91ed12c414e1eaa54c786a324f232c66\",\n \"otaManifestUrl\": null,\n \"otaManifestSha256\": null\n})\n"]}
|
|
@@ -11,7 +11,7 @@ enum BluetoothSdkDefaults {
|
|
|
11
11
|
static let voiceActivityDetectionEnabled = false
|
|
12
12
|
static let loudnessGateEnabled = true
|
|
13
13
|
private static let infoSdkVersionKey = "BluetoothSdkVersion"
|
|
14
|
-
private static let swiftPackageSdkVersion = "0.3.1-dev.
|
|
14
|
+
private static let swiftPackageSdkVersion = "0.3.1-dev.496"
|
|
15
15
|
private static let swiftPackageSdkVersionPlaceholder = "__GLASSLY" + "_BLUETOOTH_SDK_VERSION__"
|
|
16
16
|
|
|
17
17
|
private static func normalizedSdkVersion(_ value: String?) -> String? {
|
|
@@ -3,9 +3,9 @@ import Foundation
|
|
|
3
3
|
/// Generated by release CI. Do not edit in a release checkout.
|
|
4
4
|
enum GeneratedReleaseMetadata {
|
|
5
5
|
static let familyBaseVersion = "0.3.1"
|
|
6
|
-
static let releaseIdentity = "0.3.1-dev.
|
|
7
|
-
static let releaseSetId = "glassly-0.3.1-dev.
|
|
8
|
-
static let sourceCommit = "
|
|
6
|
+
static let releaseIdentity = "0.3.1-dev.496"
|
|
7
|
+
static let releaseSetId = "glassly-0.3.1-dev.496"
|
|
8
|
+
static let sourceCommit = "77c2bb7e91ed12c414e1eaa54c786a324f232c66"
|
|
9
9
|
static let otaManifestUrl = ""
|
|
10
10
|
static let otaManifestSha256 = ""
|
|
11
11
|
}
|
|
@@ -23,31 +23,29 @@ class G1Text {
|
|
|
23
23
|
|
|
24
24
|
init() {}
|
|
25
25
|
|
|
26
|
-
/// Converts text to the
|
|
26
|
+
/// Converts text to the Latin glyphs available in G1 firmware: precomposed Latin-1
|
|
27
|
+
/// letters (ä, ö, ü, ß, é, ñ, ...) pass through, anything beyond is folded to base Latin.
|
|
27
28
|
/// Newer glasses bypass this G1-only transport and keep the original text.
|
|
28
29
|
static func sanitizeForDisplay(_ text: String) -> String {
|
|
29
|
-
let
|
|
30
|
+
let foldLocale = Locale(identifier: "en_US_POSIX")
|
|
31
|
+
return text.precomposedStringWithCanonicalMapping.reduce(into: "") { result, character in
|
|
30
32
|
switch character {
|
|
31
|
-
case "Đ"
|
|
32
|
-
case "đ"
|
|
33
|
+
case "Đ": result.append("D")
|
|
34
|
+
case "đ": result.append("d")
|
|
33
35
|
case "Ł": result.append("L")
|
|
34
36
|
case "ł": result.append("l")
|
|
35
|
-
case "Ø": result.append("O")
|
|
36
|
-
case "ø": result.append("o")
|
|
37
|
-
case "Æ": result.append("AE")
|
|
38
|
-
case "æ": result.append("ae")
|
|
39
37
|
case "Œ": result.append("OE")
|
|
40
38
|
case "œ": result.append("oe")
|
|
41
39
|
case "ẞ": result.append("SS")
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
default:
|
|
41
|
+
let scalars = character.unicodeScalars
|
|
42
|
+
if scalars.count == 1, let scalar = scalars.first, (0xC0 ... 0xFF).contains(scalar.value) {
|
|
43
|
+
result.append(character)
|
|
44
|
+
} else {
|
|
45
|
+
result.append(String(character).folding(options: .diacriticInsensitive, locale: foldLocale))
|
|
46
|
+
}
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
return expanded
|
|
50
|
-
.folding(options: .diacriticInsensitive, locale: Locale(identifier: "en_US_POSIX"))
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
// MARK: - Text Wall Methods
|
package/package.json
CHANGED
|
@@ -12,9 +12,9 @@ export interface BluetoothSdkReleaseMetadata {
|
|
|
12
12
|
export const BLUETOOTH_SDK_RELEASE_METADATA: Readonly<BluetoothSdkReleaseMetadata> = Object.freeze({
|
|
13
13
|
"schemaVersion": 1,
|
|
14
14
|
"familyBaseVersion": "0.3.1",
|
|
15
|
-
"releaseIdentity": "0.3.1-dev.
|
|
16
|
-
"releaseSetId": "glassly-0.3.1-dev.
|
|
17
|
-
"sourceCommit": "
|
|
15
|
+
"releaseIdentity": "0.3.1-dev.496",
|
|
16
|
+
"releaseSetId": "glassly-0.3.1-dev.496",
|
|
17
|
+
"sourceCommit": "77c2bb7e91ed12c414e1eaa54c786a324f232c66",
|
|
18
18
|
"otaManifestUrl": null,
|
|
19
19
|
"otaManifestSha256": null
|
|
20
20
|
})
|