@mentra/engine 3.4.0-dev.990 → 3.4.0-dev.992

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.
Files changed (39) hide show
  1. package/build/generated/releaseMetadata.js +5 -5
  2. package/build/generated/releaseMetadata.js.map +1 -1
  3. package/build/react/MentraLiveOtaFlow.d.ts.map +1 -1
  4. package/build/react/MentraLiveOtaFlow.js +1 -4
  5. package/build/react/MentraLiveOtaFlow.js.map +1 -1
  6. package/build/react/useMentraLiveOta.js +2 -2
  7. package/build/react/useMentraLiveOta.js.map +1 -1
  8. package/build/services/OtaArtifactDownloader.d.ts +3 -1
  9. package/build/services/OtaArtifactDownloader.d.ts.map +1 -1
  10. package/build/services/OtaArtifactDownloader.js +57 -13
  11. package/build/services/OtaArtifactDownloader.js.map +1 -1
  12. package/build/services/OtaArtifactFailure.d.ts +18 -0
  13. package/build/services/OtaArtifactFailure.d.ts.map +1 -0
  14. package/build/services/OtaArtifactFailure.js +72 -0
  15. package/build/services/OtaArtifactFailure.js.map +1 -0
  16. package/build/services/OtaErrorMapping.d.ts +4 -2
  17. package/build/services/OtaErrorMapping.d.ts.map +1 -1
  18. package/build/services/OtaErrorMapping.js +57 -6
  19. package/build/services/OtaErrorMapping.js.map +1 -1
  20. package/build/services/OtaFailureReportService.d.ts +2 -0
  21. package/build/services/OtaFailureReportService.d.ts.map +1 -1
  22. package/build/services/OtaFailureReportService.js.map +1 -1
  23. package/build/services/OtaInstallCoordinator.d.ts +3 -1
  24. package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
  25. package/build/services/OtaInstallCoordinator.js +15 -26
  26. package/build/services/OtaInstallCoordinator.js.map +1 -1
  27. package/build/services/otaInstallPolicy.d.ts +2 -2
  28. package/build/services/otaInstallPolicy.js +2 -2
  29. package/build/services/otaInstallPolicy.js.map +1 -1
  30. package/package.json +8 -8
  31. package/src/generated/releaseMetadata.ts +5 -5
  32. package/src/react/MentraLiveOtaFlow.tsx +1 -6
  33. package/src/react/useMentraLiveOta.ts +2 -2
  34. package/src/services/OtaArtifactDownloader.ts +62 -15
  35. package/src/services/OtaArtifactFailure.ts +102 -0
  36. package/src/services/OtaErrorMapping.ts +60 -6
  37. package/src/services/OtaFailureReportService.ts +2 -0
  38. package/src/services/OtaInstallCoordinator.ts +17 -28
  39. package/src/services/otaInstallPolicy.ts +2 -2
@@ -1,10 +1,10 @@
1
1
  export const ENGINE_RELEASE_METADATA = Object.freeze({
2
2
  "schemaVersion": 1,
3
3
  "familyBaseVersion": "3.4.0",
4
- "releaseIdentity": "3.4.0-dev.990",
5
- "releaseSetId": "mentra-3.4.0-dev.990",
6
- "sourceCommit": "1e8a712475c14cc287dff714d68128601d82799c",
7
- "otaManifestUrl": "https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.4.0/mentra-live-ota-3.4.0-dev.990.json",
8
- "otaManifestSha256": "b024179ae3dff36b60de1e24033be243dae000b227ecd209b863609e68f45a83"
4
+ "releaseIdentity": "3.4.0-dev.992",
5
+ "releaseSetId": "mentra-3.4.0-dev.992",
6
+ "sourceCommit": "28f0eee5d65ba53303f6ce806ce5c52fff5395e3",
7
+ "otaManifestUrl": "https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.4.0/mentra-live-ota-3.4.0-dev.992.json",
8
+ "otaManifestSha256": "958b967a2531b2b91b19d205982a061306dfdf59c682dc68e3e32fc8c4a5d81b"
9
9
  });
10
10
  //# sourceMappingURL=releaseMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,iIAAiI;IACnJ,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\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 ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.4.0\",\n \"releaseIdentity\": \"3.4.0-dev.990\",\n \"releaseSetId\": \"mentra-3.4.0-dev.990\",\n \"sourceCommit\": \"1e8a712475c14cc287dff714d68128601d82799c\",\n \"otaManifestUrl\": \"https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.4.0/mentra-live-ota-3.4.0-dev.990.json\",\n \"otaManifestSha256\": \"b024179ae3dff36b60de1e24033be243dae000b227ecd209b863609e68f45a83\"\n})\n"]}
1
+ {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/generated/releaseMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,uBAAuB,GAAoC,MAAM,CAAC,MAAM,CAAC;IACpF,eAAe,EAAE,CAAC;IAClB,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,eAAe;IAClC,cAAc,EAAE,sBAAsB;IACtC,cAAc,EAAE,0CAA0C;IAC1D,gBAAgB,EAAE,iIAAiI;IACnJ,mBAAmB,EAAE,kEAAkE;CACxF,CAAC,CAAA","sourcesContent":["/** Generated by release CI. Do not edit in a release checkout. */\nexport interface EngineReleaseMetadata {\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 ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({\n \"schemaVersion\": 1,\n \"familyBaseVersion\": \"3.4.0\",\n \"releaseIdentity\": \"3.4.0-dev.992\",\n \"releaseSetId\": \"mentra-3.4.0-dev.992\",\n \"sourceCommit\": \"28f0eee5d65ba53303f6ce806ce5c52fff5395e3\",\n \"otaManifestUrl\": \"https://artifactscdn.mentraglass.com/Mentra-Community/MentraOS/releases/mentra-builds-v3.4.0/mentra-live-ota-3.4.0-dev.992.json\",\n \"otaManifestSha256\": \"958b967a2531b2b91b19d205982a061306dfdf59c682dc68e3e32fc8c4a5d81b\"\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MentraLiveOtaFlow.d.ts","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgB,MAAM,OAAO,CAAA;AACpC,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAA;AAMrB,OAAO,EAGL,KAAK,uBAAuB,EAE5B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAElG,MAAM,MAAM,sBAAsB,GAAG;IACnC,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,CAAA;IACnF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,0BAA0B,CAAA;IACtC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAC7B,CAAA;AAkHD,wBAAgB,iBAAiB,CAAC,EAChC,YAAwD,EACxD,UAA0B,EAC1B,WAAqB,EACrB,iBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,SAA4B,GAC7B,EAAE,sBAAsB,qBAWxB;AAcD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,UAA0B,EAC1B,KAAK,EACL,SAA4B,GAC7B,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC,GAAG;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAC,qBAoBlG;AAghBD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,GACN,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC1D,MAAM,EAAE,sBAAsB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,4BA8BA"}
1
+ {"version":3,"file":"MentraLiveOtaFlow.d.ts","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgB,MAAM,OAAO,CAAA;AACpC,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAA;AAMrB,OAAO,EAGL,KAAK,uBAAuB,EAE5B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAElG,MAAM,MAAM,sBAAsB,GAAG;IACnC,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,CAAA;IACnF,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,0BAA0B,CAAA;IACtC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAC7B,CAAA;AAkHD,wBAAgB,iBAAiB,CAAC,EAChC,YAAwD,EACxD,UAA0B,EAC1B,WAAqB,EACrB,iBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,SAA4B,GAC7B,EAAE,sBAAsB,qBAWxB;AAcD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,UAA0B,EAC1B,KAAK,EACL,SAA4B,GAC7B,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC,GAAG;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAC,qBAoBlG;AA4gBD,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,MAAM,EACN,KAAK,GACN,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC1D,MAAM,EAAE,sBAAsB,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd,4BA8BA"}
@@ -324,9 +324,7 @@ function OtaFlowContent({ allowDevSkip, colors, controller, deviceName, superMod
324
324
  {state.canOpenWifiSetup ? (<FlowButton colors={colors} label="Change Wi-Fi" onPress={controller.openWifiSetup} secondary/>) : null}
325
325
  </>} colors={colors} icon="alert" title={translate("ota:updateFailed")}>
326
326
  <BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>
327
- {state.error?.glassesCode ? (<Text style={[styles.errorCode, { color: colors.textDim }]} testID="ota-error-code">
328
- {translate("ota:errorCode", { code: state.error.glassesCode })}
329
- </Text>) : null}
327
+
330
328
  </FlowPage>);
331
329
  }
332
330
  return (<FlowPage actions={superMode ? (<FlowButton colors={colors} label="Skip (super)" onPress={controller.discard} secondary/>) : undefined} colors={colors} icon="bluetooth" title="Glasses disconnected">
@@ -502,7 +500,6 @@ const styles = StyleSheet.create({
502
500
  svgIcon: { alignItems: "center", height: 72, justifyContent: "center", width: 72 },
503
501
  title: { fontSize: 20, fontWeight: "600", textAlign: "center" },
504
502
  body: { fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: "center" },
505
- errorCode: { fontSize: 12, fontVariant: ["tabular-nums"], lineHeight: 16, opacity: 0.7, textAlign: "center" },
506
503
  percent: { fontSize: 30, fontVariant: ["tabular-nums"], fontWeight: "700" },
507
504
  progressTrack: { borderRadius: 4, height: 8, maxWidth: 420, overflow: "hidden", width: "100%" },
508
505
  progressFill: { borderRadius: 4, height: 8 },
@@ -1 +1 @@
1
- {"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable react-native/no-raw-text -- BodyText and PercentText are local Text wrappers. */\nimport React, {useMemo} from \"react\"\nimport {\n ActivityIndicator,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\"\nimport {useMarkdown, type MarkedStyles, type useMarkdownHookOptions} from \"react-native-marked\"\nimport {SafeAreaView} from \"react-native-safe-area-context\"\nimport Svg, {Path, Rect} from \"react-native-svg\"\n\nimport {OTA_ERROR_ENGLISH_COPY} from \"../services/OtaErrorMapping\"\nimport {\n MINIMUM_OTA_BATTERY_LEVEL,\n useMentraLiveOta,\n type MentraLiveOtaController,\n type MentraLiveOtaError,\n type MentraLiveOtaFlowPage,\n type MentraLiveOtaState,\n} from \"./useMentraLiveOta\"\n\nexport type {MentraLiveOtaFlowPage} from \"./useMentraLiveOta\"\n\nexport type MentraLiveOtaFlowTheme = {\n background: string\n border: string\n error: string\n foreground: string\n primary: string\n primaryText: string\n textDim: string\n}\n\nexport type MentraLiveOtaFlowTranslate = (key: string, options?: Record<string, string>) => string\n\nexport type MentraLiveOtaFlowProps = {\n /** Display name used in update copy. */\n deviceName?: string\n /** Entry page. `progress` exists for recovery/deep-link compatibility. */\n initialPage?: MentraLiveOtaFlowPage\n /** Start the OTA-only projections. Full Engine hosts should pass false. */\n initializeRuntime?: boolean\n /** Called after the final check or when the user leaves an optional update. */\n onFinished: () => void\n /** Host-owned Wi-Fi setup for glasses that do not support hotspot OTA. */\n onOpenWifiSetup: () => void\n /** Lets a host coordinate its global connection overlay with OTA progress and firmware restarts. */\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n /** Enables the existing developer-only escape hatches. */\n allowDevSkip?: boolean\n /** Enables the existing super-mode interrupted-session escape hatch. */\n superMode?: boolean\n /** Optional host localization. Defaults to the Mentra App English OTA copy. */\n translate?: MentraLiveOtaFlowTranslate\n /** Optional host theme. Both hosts use the same layout and state machine. */\n theme?: Partial<MentraLiveOtaFlowTheme>\n style?: StyleProp<ViewStyle>\n}\n\nconst DEFAULT_THEME: MentraLiveOtaFlowTheme = {\n background: \"#FFFFFF\",\n border: \"#D7DFDA\",\n error: \"#C43131\",\n foreground: \"#0E2C1A\",\n primary: \"#00B869\",\n primaryText: \"#FFFFFF\",\n textDim: \"#66736B\",\n}\n\nconst ENGLISH_COPY: Record<string, string> = {\n \"ota:downloadingToPhone\": \"Downloading update to phone…\",\n \"ota:startingGlassesHotspot\": \"Starting glasses hotspot…\",\n \"ota:connectingPhoneToGlasses\": \"Connecting phone to glasses…\",\n \"ota:startingHotspotUpdate\": \"Starting update…\",\n \"ota:transferringToGlasses\": \"Transferring update to glasses…\",\n \"ota:installingOnGlasses\": \"Installing update on glasses…\",\n \"ota:componentApk\": \"Glasses software\",\n \"ota:componentMtk\": \"System firmware\",\n \"ota:componentBes\": \"Bluetooth firmware\",\n \"ota:updateFile\": \"File {{current}} of {{total}} · {{component}}\",\n \"ota:updatePart\": \"Update {{current}} of {{total}} · {{component}}\",\n \"ota:phoneFileProgress\": \"Each file downloads separately. Progress is for the current file.\",\n\n \"common:continue\": \"Continue\",\n \"common:done\": \"Done\",\n \"ota:checkingForUpdates\": \"Checking for updates\",\n \"ota:checkingForUpdatesMessage\":\n \"Connected devices will perform automatic updates. Automatic updates can be disabled in Device Settings.\",\n \"ota:finishingUpdate\": \"Finishing your update\",\n \"ota:checkingAdditionalUpdates\": \"Checking whether your glasses need any additional updates.\",\n \"ota:updateAvailable\": \"{{deviceName}} Update Available\",\n \"ota:batteryRequiredTitle\": \"Charge {{deviceName}} to Update\",\n \"ota:batteryRequiredMessage\":\n \"{{deviceName}} is currently at {{batteryLevel}}%. Charge it to at least {{minimumBatteryLevel}}% before updating.\",\n \"ota:batteryRequiredLiveUpdate\": \"This screen will update automatically as the battery charges.\",\n \"ota:updateConnectWifi\": \"Connect your {{deviceName}} to Wi-Fi to install the update.\",\n \"ota:wifiRequiredTitle\": \"Wi-Fi Needed for Update\",\n \"ota:updateDescription\":\n \"A new update is available for your glasses. We recommend updating now for the best experience.\",\n \"ota:updateSequenceMessage\":\n \"Your glasses may install more than one update and restart several times. Keep them nearby until finished.\",\n \"ota:releaseTransition\": \"{{fromVersion}} → {{toVersion}}\",\n \"ota:releaseTransitionUnknown\": \"Current version unknown → {{toVersion}}\",\n \"ota:updatedToVersion\": \"Updated to {{version}}\",\n \"ota:downgradeAvailable\": \"{{deviceName}} Version Change Required\",\n \"ota:downgradeDescription\":\n \"This app requires an earlier glasses software version. Your photos and videos will be preserved, but glasses settings will be reset and restored automatically after the change.\",\n \"ota:updateNow\": \"Update Now\",\n \"ota:setupWifi\": \"Set up Wi-Fi\",\n \"ota:updateLater\": \"Later\",\n \"ota:updateComplete\": \"Update complete\",\n \"ota:whatsNew\": \"What's new\",\n \"ota:upToDate\": \"Up to Date\",\n \"ota:devBuild\": \"Development Build\",\n \"ota:devBuildNoOta\":\n \"This mobile app is a development build, so automatic glasses updates are disabled. Use the developer settings manifest override to update them manually.\",\n \"ota:unofficialClient\": \"Updates Blocked\",\n \"ota:unofficialClientNoOta\":\n \"Your glasses are running a sideloaded client, so updates are blocked. Restore the stock client to update them.\",\n \"ota:unofficialClientNoOtaNamed\":\n \"Your glasses are running a sideloaded client ({{packageName}}), so updates are blocked. Restore the stock client to update them.\",\n \"ota:noUpdatesAvailable\": \"Your glasses are running the latest version.\",\n \"ota:checkFailed\": \"Check Failed\",\n \"ota:checkFailedMessage\": \"Couldn't check for updates. Please check your connection and try again.\",\n \"ota:versionInfoFailedMessage\":\n \"Couldn't read the glasses software versions. Keep the glasses connected and try again.\",\n \"ota:updateInfoUnavailable\": \"Update Info Unavailable\",\n \"ota:updateInfoUnavailableMessage\":\n \"Update information for this version of the app is unavailable. Please check the app store for a newer version of the Mentra App.\",\n \"ota:downgradeDuration\":\n \"Changing versions can take several minutes. Keep your glasses nearby while they install and reconnect.\",\n \"ota:versionChangeRestarting\": \"Installing a different version…\",\n \"ota:versionChangeVerifying\": \"Verifying your glasses…\",\n \"ota:versionChangeKeepNearby\": \"Keep your glasses nearby and connected. They will restart on their own.\",\n \"ota:restartingGlasses\": \"Restarting {{deviceName}}…\",\n \"ota:restartingGlassesMessage\":\n \"The update is installed. Keep your glasses nearby and leave this screen open while they finish starting.\",\n \"ota:restartingGlassesAutomatic\": \"We'll continue automatically when they're ready.\",\n \"ota:versionChangeComplete\": \"Version Change Complete\",\n \"ota:versionChangeCompleteMessage\":\n \"Your glasses are now on the required version. Their settings were reset and are being restored automatically.\",\n \"ota:versionChangeFirmwarePassComplete\": \"Firmware updated\",\n \"ota:versionChangeFirmwarePassCompleteMessage\":\n \"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.\",\n \"ota:updateFailed\": \"Update Failed\",\n ...OTA_ERROR_ENGLISH_COPY,\n}\n\nconst componentCopyKey = {\n apk: \"ota:componentApk\",\n mtk: \"ota:componentMtk\",\n bes: \"ota:componentBes\",\n} as const\n\n/**\n * Copy for the failed screen: the translated copy key when the failure maps to one,\n * otherwise the engine's English message (phone-side watchdog and preflight text).\n */\nfunction failureMessage(error: MentraLiveOtaError | null, translate: MentraLiveOtaFlowTranslate): string {\n if (!error) return translate(\"ota:errorGeneric\")\n return error.copyKey ? translate(error.copyKey) : error.message\n}\n\nfunction defaultTranslate(key: string, options?: Record<string, string>): string {\n let value = Object.prototype.hasOwnProperty.call(ENGLISH_COPY, key) ? ENGLISH_COPY[key] : key\n for (const [name, replacement] of Object.entries(options ?? {})) {\n value = value.replaceAll(`{{${name}}}`, replacement)\n }\n return value\n}\n\nexport function MentraLiveOtaFlow({\n allowDevSkip = typeof __DEV__ !== \"undefined\" && __DEV__,\n deviceName = \"Mentra Live\",\n initialPage = \"check\",\n initializeRuntime = true,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n style,\n superMode = false,\n theme,\n translate = defaultTranslate,\n}: MentraLiveOtaFlowProps) {\n const colors = useMemo(() => ({...DEFAULT_THEME, ...theme}), [theme])\n const controller = useMentraLiveOta({\n initialPage,\n initializeRuntime,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n })\n\n return <OtaFlowFrame {...{allowDevSkip, colors, controller, deviceName, style, superMode, translate}} />\n}\n\ntype OtaFlowFrameProps = {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n style?: StyleProp<ViewStyle>\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}\n\nconst previewAction = () => {}\n\n/** Renders the real OTA pages without mounting the runtime hook or performing any actions. */\nexport function MentraLiveOtaPreview({\n state,\n deviceName = \"Mentra Live\",\n theme,\n translate = defaultTranslate,\n}: Pick<MentraLiveOtaFlowProps, \"deviceName\" | \"theme\" | \"translate\"> & {state: MentraLiveOtaState}) {\n return (\n <OtaFlowFrame\n allowDevSkip={false}\n colors={{...DEFAULT_THEME, ...theme}}\n controller={{\n state,\n check: previewAction,\n retryCheck: previewAction,\n install: previewAction,\n retryInstall: previewAction,\n finish: previewAction,\n discard: previewAction,\n openWifiSetup: previewAction,\n }}\n deviceName={deviceName}\n superMode={false}\n translate={translate}\n />\n )\n}\n\nfunction OtaFlowFrame({allowDevSkip, colors, controller, deviceName, style, superMode, translate}: OtaFlowFrameProps) {\n return (\n <SafeAreaView style={[styles.safeArea, {backgroundColor: colors.background}, style]}>\n <View style={styles.header}>\n <View />\n <MentraMark color={colors.primary} />\n </View>\n <OtaFlowContent\n allowDevSkip={allowDevSkip}\n colors={colors}\n controller={controller}\n deviceName={deviceName}\n superMode={superMode}\n translate={translate}\n />\n </SafeAreaView>\n )\n}\n\nfunction OtaFlowContent({\n allowDevSkip,\n colors,\n controller,\n deviceName,\n superMode,\n translate,\n}: {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}) {\n const {state} = controller\n\n if (state.screen === \"initializing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"checking\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingForUpdatesMessage\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"battery_required\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} disabled label={translate(\"ota:updateNow\")} onPress={controller.install} />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:batteryRequiredTitle\", {deviceName})}>\n <BodyText colors={colors}>\n {translate(\"ota:batteryRequiredMessage\", {\n batteryLevel: String(state.batteryLevel),\n deviceName,\n minimumBatteryLevel: String(MINIMUM_OTA_BATTERY_LEVEL),\n })}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:batteryRequiredLiveUpdate\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"finishing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:finishingUpdate\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingAdditionalUpdates\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_available\" || state.screen === \"wifi_required\") {\n const titleKey =\n state.screen === \"wifi_required\"\n ? \"ota:wifiRequiredTitle\"\n : state.versionChange\n ? \"ota:downgradeAvailable\"\n : \"ota:updateAvailable\"\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(titleKey, {deviceName})}\n actions={\n <>\n <FlowButton\n colors={colors}\n disabled={state.screen === \"wifi_required\" ? !state.wifiStatusKnown : !state.canInstall}\n label={translate(state.screen === \"wifi_required\" ? \"ota:setupWifi\" : \"ota:updateNow\")}\n onPress={state.screen === \"wifi_required\" ? controller.openWifiSetup : controller.install}\n />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n {allowDevSkip && state.updateRequired ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {state.releaseTransition.fromVersion\n ? translate(\"ota:releaseTransition\", {\n fromVersion: state.releaseTransition.fromVersion,\n toVersion: state.releaseTransition.toVersion,\n })\n : translate(\"ota:releaseTransitionUnknown\", {toVersion: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <BodyText colors={colors}>\n {state.screen === \"wifi_required\"\n ? translate(\"ota:updateConnectWifi\", {deviceName})\n : translate(state.versionChange ? \"ota:downgradeDescription\" : \"ota:updateDescription\")}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:updateSequenceMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"dev_build\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:devBuild\")}>\n <BodyText colors={colors}>{translate(\"ota:devBuildNoOta\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"unofficial_client\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:unofficialClient\")}>\n <BodyText colors={colors}>\n {state.glassesPackageName\n ? translate(\"ota:unofficialClientNoOtaNamed\", {packageName: state.glassesPackageName})\n : translate(\"ota:unofficialClientNoOta\")}\n </BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"up_to_date\") {\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={translate(state.completedUpdate ? \"common:done\" : \"common:continue\")}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={translate(state.completedUpdate ? \"ota:updateComplete\" : \"ota:upToDate\")}>\n <BodyText colors={colors}>{translate(\"ota:noUpdatesAvailable\")}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_info_unavailable\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateInfoUnavailable\")}>\n <BodyText colors={colors}>{translate(\"ota:updateInfoUnavailableMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"check_failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} label=\"Retry\" onPress={controller.retryCheck} />\n {allowDevSkip ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:checkFailed\")}>\n <BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.versionChangePhase === \"restarting\" || state.versionChangePhase === \"verifying\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(\n state.versionChangePhase === \"verifying\" ? \"ota:versionChangeVerifying\" : \"ota:versionChangeRestarting\",\n )}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:versionChangeKeepNearby\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"starting\" || state.screen === \"preparing_hotspot\") {\n const title = translate(\n state.hotspotPhase === \"downloading\"\n ? \"ota:downloadingToPhone\"\n : state.hotspotPhase === \"starting_hotspot\"\n ? \"ota:startingGlassesHotspot\"\n : state.hotspotPhase === \"joining_hotspot\"\n ? \"ota:connectingPhoneToGlasses\"\n : \"ota:startingHotspotUpdate\",\n )\n const artifact = state.hotspotPhase === \"downloading\" ? state.hotspotArtifact : null\n return (\n <FlowPage colors={colors} icon=\"download\" title={title}>\n {artifact ? (\n <BodyText colors={colors}>\n {translate(\"ota:updateFile\", {\n current: String(artifact.index + 1),\n total: String(artifact.totalCount),\n component: translate(componentCopyKey[artifact.kind]),\n })}\n </BodyText>\n ) : null}\n {state.hotspotPhase === \"downloading\" && state.hotspotArtifactPercent !== null ? (\n <PercentText colors={colors} percent={state.hotspotArtifactPercent} />\n ) : null}\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n {state.hotspotPhase === \"downloading\" ? (\n <BodyText colors={colors}>{translate(\"ota:phoneFileProgress\")}</BodyText>\n ) : null}\n <BodyText colors={colors}>Do not disconnect your glasses.</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"updating\") {\n const hotspot = state.transport === \"hotspot\"\n const title = hotspot\n ? translate(state.phase === \"download\" ? \"ota:transferringToGlasses\" : \"ota:installingOnGlasses\")\n : state.phase === \"download\"\n ? \"Downloading…\"\n : \"Installing…\"\n const component = state.step ? translate(componentCopyKey[state.step]) : null\n const hasStepCount =\n state.currentStep !== null &&\n state.totalSteps !== null &&\n state.currentStep > 0 &&\n state.currentStep <= state.totalSteps\n return (\n <FlowPage colors={colors} icon={state.phase === \"install\" ? \"settings\" : \"download\"} title={title}>\n {hotspot && component ? (\n <BodyText colors={colors}>\n {hasStepCount\n ? translate(\"ota:updatePart\", {\n current: String(state.currentStep),\n total: String(state.totalSteps),\n component,\n })\n : component}\n </BodyText>\n ) : null}\n {state.installingApkOnly ? (\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n ) : (\n <>\n <PercentText colors={colors} percent={state.progress ?? 0} />\n <View style={[styles.progressTrack, {backgroundColor: colors.border}]}>\n <View\n style={[styles.progressFill, {backgroundColor: colors.primary, width: `${state.progress ?? 0}%`}]}\n />\n </View>\n </>\n )}\n <BodyText colors={colors}>Do not disconnect your glasses.</BodyText>\n {state.versionChange && state.phase === \"install\" ? (\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n ) : null}\n </FlowPage>\n )\n }\n\n if (state.screen === \"restarting\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:restartingGlasses\", {deviceName})}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesMessage\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesAutomatic\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"complete\") {\n const title = state.versionChangeConverged\n ? translate(\"ota:versionChangeComplete\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassComplete\")\n : \"Update complete!\"\n const message = state.versionChangeConverged\n ? translate(\"ota:versionChangeCompleteMessage\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassCompleteMessage\")\n : \"Your glasses are up to date.\"\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={state.versionChange && !state.versionChangeConverged ? \"Continue\" : \"Done\"}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={title}>\n <BodyText colors={colors}>{message}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton\n colors={colors}\n label={state.canRetry ? \"Retry\" : \"Done\"}\n onPress={state.canRetry ? controller.retryInstall : controller.finish}\n />\n {state.canOpenWifiSetup ? (\n <FlowButton colors={colors} label=\"Change Wi-Fi\" onPress={controller.openWifiSetup} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateFailed\")}>\n <BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>\n {state.error?.glassesCode ? (\n <Text style={[styles.errorCode, {color: colors.textDim}]} testID=\"ota-error-code\">\n {translate(\"ota:errorCode\", {code: state.error.glassesCode})}\n </Text>\n ) : null}\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n superMode ? (\n <FlowButton colors={colors} label=\"Skip (super)\" onPress={controller.discard} secondary />\n ) : undefined\n }\n colors={colors}\n icon=\"bluetooth\"\n title=\"Glasses disconnected\">\n <BodyText colors={colors}>Reconnecting…</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n}\n\ntype FlowPageProps = {\n actions?: React.ReactNode\n children?: React.ReactNode\n colors: MentraLiveOtaFlowTheme\n contentAlignment?: \"center\" | \"top\"\n icon: \"alert\" | \"bluetooth\" | \"check\" | \"download\" | \"settings\"\n title: string\n}\n\nfunction FlowPage({actions, children, colors, contentAlignment = \"center\", icon, title}: FlowPageProps) {\n return (\n <View style={styles.page} testID=\"mentra-live-ota-flow\">\n <ScrollView\n contentContainerStyle={[styles.centerContent, contentAlignment === \"top\" && styles.topContent]}\n nestedScrollEnabled\n style={styles.contentScroll}\n testID=\"ota-page-scroll\">\n <FlowIcon colors={colors} name={icon} />\n <Text style={[styles.title, {color: colors.foreground}]}>{title}</Text>\n {children}\n </ScrollView>\n {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer} />}\n </View>\n )\n}\n\nfunction BodyText({children, colors}: {children: React.ReactNode; colors: MentraLiveOtaFlowTheme}) {\n return <Text style={[styles.body, {color: colors.textDim}]}>{children}</Text>\n}\n\nfunction PercentText({colors, percent}: {colors: MentraLiveOtaFlowTheme; percent: number}) {\n return <Text style={[styles.percent, {color: colors.primary}]}>{Math.round(percent)}%</Text>\n}\n\nfunction ChangelogMarkdown({colors, markdown}: {colors: MentraLiveOtaFlowTheme; markdown: string}) {\n const markdownStyles = useMemo<MarkedStyles>(\n () => ({\n blockquote: {\n borderLeftColor: colors.primary,\n borderLeftWidth: 3,\n marginVertical: 2,\n opacity: 1,\n paddingLeft: 12,\n },\n code: {\n backgroundColor: colors.background,\n borderColor: colors.border,\n borderRadius: 8,\n borderWidth: 1,\n padding: 12,\n },\n codespan: {\n backgroundColor: colors.border,\n color: colors.foreground,\n fontFamily: \"monospace\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: \"400\",\n },\n em: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n h1: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h2: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h3: {color: colors.foreground, fontSize: 16, fontWeight: \"700\", lineHeight: 22, marginVertical: 0},\n h4: {color: colors.foreground, fontSize: 15, fontWeight: \"700\", lineHeight: 21, marginVertical: 0},\n h5: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20, marginVertical: 0},\n h6: {color: colors.textDim, fontSize: 14, fontWeight: \"600\", lineHeight: 20, marginVertical: 0},\n hr: {borderBottomColor: colors.border, marginVertical: 2},\n image: {borderRadius: 8},\n li: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n link: {\n color: colors.primary,\n fontSize: 14,\n fontStyle: \"normal\",\n lineHeight: 20,\n textDecorationLine: \"underline\",\n },\n paragraph: {paddingVertical: 0},\n strikethrough: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n strong: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20},\n table: {borderColor: colors.border, borderRadius: 8},\n tableCell: {padding: 8},\n text: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n }),\n [colors],\n )\n const markdownTheme = useMemo<NonNullable<useMarkdownHookOptions[\"theme\"]>>(\n () => ({\n colors: {\n background: colors.background,\n border: colors.border,\n code: colors.border,\n link: colors.primary,\n text: colors.textDim,\n },\n }),\n [colors],\n )\n const elements = useMarkdown(markdown, {colorScheme: \"light\", styles: markdownStyles, theme: markdownTheme})\n\n return (\n <View style={styles.changelogMarkdownContent} testID=\"ota-changelog-markdown\">\n {elements}\n </View>\n )\n}\n\nexport function ChangelogList({\n changelogs,\n colors,\n title,\n}: {\n changelogs: MentraLiveOtaController[\"state\"][\"changelogs\"]\n colors: MentraLiveOtaFlowTheme\n title: string\n}) {\n if (changelogs.length === 0) return null\n\n return (\n <View style={[styles.changelogCard, {borderColor: colors.border}]} testID=\"ota-changelog-card\">\n <Text style={[styles.changelogTitle, {color: colors.foreground}]}>{title}</Text>\n <ScrollView\n contentContainerStyle={styles.changelogContent}\n nestedScrollEnabled\n persistentScrollbar\n showsVerticalScrollIndicator\n style={styles.changelogList}\n testID=\"ota-changelog-scroll\">\n {changelogs.map((entry, index) => (\n <View\n key={entry.version}\n style={[\n styles.changelogEntry,\n index > 0 && styles.changelogEntryDivider,\n index > 0 && {borderTopColor: colors.border},\n ]}>\n <Text selectable style={[styles.changelogVersion, {color: colors.foreground}]}>\n {entry.version}\n </Text>\n <ChangelogMarkdown colors={colors} markdown={entry.markdown} />\n </View>\n ))}\n </ScrollView>\n </View>\n )\n}\n\nfunction FlowButton({\n colors,\n disabled = false,\n label,\n onPress,\n secondary = false,\n}: {\n colors: MentraLiveOtaFlowTheme\n disabled?: boolean\n label: string\n onPress: () => void\n secondary?: boolean\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={onPress}\n style={({pressed}) => [\n styles.button,\n {\n backgroundColor: secondary ? colors.background : colors.foreground,\n borderColor: secondary ? colors.border : colors.foreground,\n opacity: disabled ? 0.45 : pressed ? 0.75 : 1,\n },\n ]}\n testID={`button-${label}`}>\n <Text style={[styles.buttonText, {color: secondary ? colors.foreground : colors.background}]}>{label}</Text>\n </Pressable>\n )\n}\n\nfunction MentraMark({color}: {color: string}) {\n return (\n <Svg width={33} height={18} viewBox=\"0 0 50 27\" fill=\"none\">\n <Rect y={14.8072} width={11.8457} height={11.8457} fill={color} />\n <Path d=\"M9.36639 0L30.7163 14.8072V26.6529L9.36639 11.8457V0Z\" fill={color} />\n <Path d=\"M28.6501 0L50 14.8072V26.6529L28.6501 11.8457V0Z\" fill={color} />\n </Svg>\n )\n}\n\nfunction FlowIcon({colors, name}: {colors: MentraLiveOtaFlowTheme; name: FlowPageProps[\"icon\"]}) {\n const color = name === \"alert\" || name === \"bluetooth\" ? colors.error : colors.primary\n if (name === \"download\" || name === \"check\") {\n // Lucide arrow-down-to-line and check; see ./lucide-LICENSE.txt.\n return (\n <View style={styles.svgIcon}>\n <Svg\n width={64}\n height={64}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\">\n {name === \"download\" ? (\n <>\n <Path d=\"M12 17V3\" />\n <Path d=\"m6 11 6 6 6-6\" />\n <Path d=\"M19 21H5\" />\n </>\n ) : (\n <Path d=\"M20 6 9 17l-5-5\" />\n )}\n </Svg>\n </View>\n )\n }\n const glyph = name === \"alert\" ? \"!\" : name === \"settings\" ? \"⚙\" : \"⌁\"\n return <Text style={[styles.icon, {color}]}>{glyph}</Text>\n}\n\nconst styles = StyleSheet.create({\n safeArea: {flex: 1},\n header: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 48,\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n },\n page: {flex: 1, paddingBottom: 24, paddingHorizontal: 24},\n contentScroll: {flex: 1},\n centerContent: {alignItems: \"center\", flexGrow: 1, gap: 16, justifyContent: \"center\"},\n topContent: {justifyContent: \"flex-start\", paddingBottom: 16, paddingTop: 12},\n actionSpacer: {height: 48},\n actions: {gap: 12},\n icon: {fontSize: 64, fontWeight: \"500\", lineHeight: 72, textAlign: \"center\"},\n svgIcon: {alignItems: \"center\", height: 72, justifyContent: \"center\", width: 72},\n title: {fontSize: 20, fontWeight: \"600\", textAlign: \"center\"},\n body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: \"center\"},\n errorCode: {fontSize: 12, fontVariant: [\"tabular-nums\"], lineHeight: 16, opacity: 0.7, textAlign: \"center\"},\n percent: {fontSize: 30, fontVariant: [\"tabular-nums\"], fontWeight: \"700\"},\n progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: \"hidden\", width: \"100%\"},\n progressFill: {borderRadius: 4, height: 8},\n changelogCard: {\n borderRadius: 16,\n borderWidth: 1,\n flexGrow: 1,\n gap: 12,\n maxWidth: 420,\n minHeight: 200,\n padding: 16,\n width: \"100%\",\n },\n changelogTitle: {fontSize: 16, fontWeight: \"700\"},\n // Bound the notes themselves so the card can grow for its title, but not for all of the Markdown.\n changelogList: {flexGrow: 1, height: 120, width: \"100%\"},\n changelogContent: {gap: 20, paddingBottom: 4},\n changelogEntry: {gap: 8},\n changelogEntryDivider: {borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 20},\n changelogVersion: {fontSize: 14, fontWeight: \"600\"},\n changelogMarkdownContent: {gap: 10},\n button: {\n alignItems: \"center\",\n borderRadius: 50,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 44,\n paddingHorizontal: 20,\n },\n buttonText: {fontSize: 14, fontWeight: \"500\"},\n})\n"]}
1
+ {"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable react-native/no-raw-text -- BodyText and PercentText are local Text wrappers. */\nimport React, {useMemo} from \"react\"\nimport {\n ActivityIndicator,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\"\nimport {useMarkdown, type MarkedStyles, type useMarkdownHookOptions} from \"react-native-marked\"\nimport {SafeAreaView} from \"react-native-safe-area-context\"\nimport Svg, {Path, Rect} from \"react-native-svg\"\n\nimport {OTA_ERROR_ENGLISH_COPY} from \"../services/OtaErrorMapping\"\nimport {\n MINIMUM_OTA_BATTERY_LEVEL,\n useMentraLiveOta,\n type MentraLiveOtaController,\n type MentraLiveOtaError,\n type MentraLiveOtaFlowPage,\n type MentraLiveOtaState,\n} from \"./useMentraLiveOta\"\n\nexport type {MentraLiveOtaFlowPage} from \"./useMentraLiveOta\"\n\nexport type MentraLiveOtaFlowTheme = {\n background: string\n border: string\n error: string\n foreground: string\n primary: string\n primaryText: string\n textDim: string\n}\n\nexport type MentraLiveOtaFlowTranslate = (key: string, options?: Record<string, string>) => string\n\nexport type MentraLiveOtaFlowProps = {\n /** Display name used in update copy. */\n deviceName?: string\n /** Entry page. `progress` exists for recovery/deep-link compatibility. */\n initialPage?: MentraLiveOtaFlowPage\n /** Start the OTA-only projections. Full Engine hosts should pass false. */\n initializeRuntime?: boolean\n /** Called after the final check or when the user leaves an optional update. */\n onFinished: () => void\n /** Host-owned Wi-Fi setup for glasses that do not support hotspot OTA. */\n onOpenWifiSetup: () => void\n /** Lets a host coordinate its global connection overlay with OTA progress and firmware restarts. */\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n /** Enables the existing developer-only escape hatches. */\n allowDevSkip?: boolean\n /** Enables the existing super-mode interrupted-session escape hatch. */\n superMode?: boolean\n /** Optional host localization. Defaults to the Mentra App English OTA copy. */\n translate?: MentraLiveOtaFlowTranslate\n /** Optional host theme. Both hosts use the same layout and state machine. */\n theme?: Partial<MentraLiveOtaFlowTheme>\n style?: StyleProp<ViewStyle>\n}\n\nconst DEFAULT_THEME: MentraLiveOtaFlowTheme = {\n background: \"#FFFFFF\",\n border: \"#D7DFDA\",\n error: \"#C43131\",\n foreground: \"#0E2C1A\",\n primary: \"#00B869\",\n primaryText: \"#FFFFFF\",\n textDim: \"#66736B\",\n}\n\nconst ENGLISH_COPY: Record<string, string> = {\n \"ota:downloadingToPhone\": \"Downloading update to phone…\",\n \"ota:startingGlassesHotspot\": \"Starting glasses hotspot…\",\n \"ota:connectingPhoneToGlasses\": \"Connecting phone to glasses…\",\n \"ota:startingHotspotUpdate\": \"Starting update…\",\n \"ota:transferringToGlasses\": \"Transferring update to glasses…\",\n \"ota:installingOnGlasses\": \"Installing update on glasses…\",\n \"ota:componentApk\": \"Glasses software\",\n \"ota:componentMtk\": \"System firmware\",\n \"ota:componentBes\": \"Bluetooth firmware\",\n \"ota:updateFile\": \"File {{current}} of {{total}} · {{component}}\",\n \"ota:updatePart\": \"Update {{current}} of {{total}} · {{component}}\",\n \"ota:phoneFileProgress\": \"Each file downloads separately. Progress is for the current file.\",\n\n \"common:continue\": \"Continue\",\n \"common:done\": \"Done\",\n \"ota:checkingForUpdates\": \"Checking for updates\",\n \"ota:checkingForUpdatesMessage\":\n \"Connected devices will perform automatic updates. Automatic updates can be disabled in Device Settings.\",\n \"ota:finishingUpdate\": \"Finishing your update\",\n \"ota:checkingAdditionalUpdates\": \"Checking whether your glasses need any additional updates.\",\n \"ota:updateAvailable\": \"{{deviceName}} Update Available\",\n \"ota:batteryRequiredTitle\": \"Charge {{deviceName}} to Update\",\n \"ota:batteryRequiredMessage\":\n \"{{deviceName}} is currently at {{batteryLevel}}%. Charge it to at least {{minimumBatteryLevel}}% before updating.\",\n \"ota:batteryRequiredLiveUpdate\": \"This screen will update automatically as the battery charges.\",\n \"ota:updateConnectWifi\": \"Connect your {{deviceName}} to Wi-Fi to install the update.\",\n \"ota:wifiRequiredTitle\": \"Wi-Fi Needed for Update\",\n \"ota:updateDescription\":\n \"A new update is available for your glasses. We recommend updating now for the best experience.\",\n \"ota:updateSequenceMessage\":\n \"Your glasses may install more than one update and restart several times. Keep them nearby until finished.\",\n \"ota:releaseTransition\": \"{{fromVersion}} → {{toVersion}}\",\n \"ota:releaseTransitionUnknown\": \"Current version unknown → {{toVersion}}\",\n \"ota:updatedToVersion\": \"Updated to {{version}}\",\n \"ota:downgradeAvailable\": \"{{deviceName}} Version Change Required\",\n \"ota:downgradeDescription\":\n \"This app requires an earlier glasses software version. Your photos and videos will be preserved, but glasses settings will be reset and restored automatically after the change.\",\n \"ota:updateNow\": \"Update Now\",\n \"ota:setupWifi\": \"Set up Wi-Fi\",\n \"ota:updateLater\": \"Later\",\n \"ota:updateComplete\": \"Update complete\",\n \"ota:whatsNew\": \"What's new\",\n \"ota:upToDate\": \"Up to Date\",\n \"ota:devBuild\": \"Development Build\",\n \"ota:devBuildNoOta\":\n \"This mobile app is a development build, so automatic glasses updates are disabled. Use the developer settings manifest override to update them manually.\",\n \"ota:unofficialClient\": \"Updates Blocked\",\n \"ota:unofficialClientNoOta\":\n \"Your glasses are running a sideloaded client, so updates are blocked. Restore the stock client to update them.\",\n \"ota:unofficialClientNoOtaNamed\":\n \"Your glasses are running a sideloaded client ({{packageName}}), so updates are blocked. Restore the stock client to update them.\",\n \"ota:noUpdatesAvailable\": \"Your glasses are running the latest version.\",\n \"ota:checkFailed\": \"Check Failed\",\n \"ota:checkFailedMessage\": \"Couldn't check for updates. Please check your connection and try again.\",\n \"ota:versionInfoFailedMessage\":\n \"Couldn't read the glasses software versions. Keep the glasses connected and try again.\",\n \"ota:updateInfoUnavailable\": \"Update Info Unavailable\",\n \"ota:updateInfoUnavailableMessage\":\n \"Update information for this version of the app is unavailable. Please check the app store for a newer version of the Mentra App.\",\n \"ota:downgradeDuration\":\n \"Changing versions can take several minutes. Keep your glasses nearby while they install and reconnect.\",\n \"ota:versionChangeRestarting\": \"Installing a different version…\",\n \"ota:versionChangeVerifying\": \"Verifying your glasses…\",\n \"ota:versionChangeKeepNearby\": \"Keep your glasses nearby and connected. They will restart on their own.\",\n \"ota:restartingGlasses\": \"Restarting {{deviceName}}…\",\n \"ota:restartingGlassesMessage\":\n \"The update is installed. Keep your glasses nearby and leave this screen open while they finish starting.\",\n \"ota:restartingGlassesAutomatic\": \"We'll continue automatically when they're ready.\",\n \"ota:versionChangeComplete\": \"Version Change Complete\",\n \"ota:versionChangeCompleteMessage\":\n \"Your glasses are now on the required version. Their settings were reset and are being restored automatically.\",\n \"ota:versionChangeFirmwarePassComplete\": \"Firmware updated\",\n \"ota:versionChangeFirmwarePassCompleteMessage\":\n \"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.\",\n \"ota:updateFailed\": \"Update Failed\",\n ...OTA_ERROR_ENGLISH_COPY,\n}\n\nconst componentCopyKey = {\n apk: \"ota:componentApk\",\n mtk: \"ota:componentMtk\",\n bes: \"ota:componentBes\",\n} as const\n\n/**\n * Copy for the failed screen: the translated copy key when the failure maps to one,\n * otherwise the engine's English message (phone-side watchdog and preflight text).\n */\nfunction failureMessage(error: MentraLiveOtaError | null, translate: MentraLiveOtaFlowTranslate): string {\n if (!error) return translate(\"ota:errorGeneric\")\n return error.copyKey ? translate(error.copyKey) : error.message\n}\n\nfunction defaultTranslate(key: string, options?: Record<string, string>): string {\n let value = Object.prototype.hasOwnProperty.call(ENGLISH_COPY, key) ? ENGLISH_COPY[key] : key\n for (const [name, replacement] of Object.entries(options ?? {})) {\n value = value.replaceAll(`{{${name}}}`, replacement)\n }\n return value\n}\n\nexport function MentraLiveOtaFlow({\n allowDevSkip = typeof __DEV__ !== \"undefined\" && __DEV__,\n deviceName = \"Mentra Live\",\n initialPage = \"check\",\n initializeRuntime = true,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n style,\n superMode = false,\n theme,\n translate = defaultTranslate,\n}: MentraLiveOtaFlowProps) {\n const colors = useMemo(() => ({...DEFAULT_THEME, ...theme}), [theme])\n const controller = useMentraLiveOta({\n initialPage,\n initializeRuntime,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n })\n\n return <OtaFlowFrame {...{allowDevSkip, colors, controller, deviceName, style, superMode, translate}} />\n}\n\ntype OtaFlowFrameProps = {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n style?: StyleProp<ViewStyle>\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}\n\nconst previewAction = () => {}\n\n/** Renders the real OTA pages without mounting the runtime hook or performing any actions. */\nexport function MentraLiveOtaPreview({\n state,\n deviceName = \"Mentra Live\",\n theme,\n translate = defaultTranslate,\n}: Pick<MentraLiveOtaFlowProps, \"deviceName\" | \"theme\" | \"translate\"> & {state: MentraLiveOtaState}) {\n return (\n <OtaFlowFrame\n allowDevSkip={false}\n colors={{...DEFAULT_THEME, ...theme}}\n controller={{\n state,\n check: previewAction,\n retryCheck: previewAction,\n install: previewAction,\n retryInstall: previewAction,\n finish: previewAction,\n discard: previewAction,\n openWifiSetup: previewAction,\n }}\n deviceName={deviceName}\n superMode={false}\n translate={translate}\n />\n )\n}\n\nfunction OtaFlowFrame({allowDevSkip, colors, controller, deviceName, style, superMode, translate}: OtaFlowFrameProps) {\n return (\n <SafeAreaView style={[styles.safeArea, {backgroundColor: colors.background}, style]}>\n <View style={styles.header}>\n <View />\n <MentraMark color={colors.primary} />\n </View>\n <OtaFlowContent\n allowDevSkip={allowDevSkip}\n colors={colors}\n controller={controller}\n deviceName={deviceName}\n superMode={superMode}\n translate={translate}\n />\n </SafeAreaView>\n )\n}\n\nfunction OtaFlowContent({\n allowDevSkip,\n colors,\n controller,\n deviceName,\n superMode,\n translate,\n}: {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n controller: MentraLiveOtaController\n deviceName: string\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}) {\n const {state} = controller\n\n if (state.screen === \"initializing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"checking\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingForUpdatesMessage\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"battery_required\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} disabled label={translate(\"ota:updateNow\")} onPress={controller.install} />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:batteryRequiredTitle\", {deviceName})}>\n <BodyText colors={colors}>\n {translate(\"ota:batteryRequiredMessage\", {\n batteryLevel: String(state.batteryLevel),\n deviceName,\n minimumBatteryLevel: String(MINIMUM_OTA_BATTERY_LEVEL),\n })}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:batteryRequiredLiveUpdate\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"finishing\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:finishingUpdate\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingAdditionalUpdates\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_available\" || state.screen === \"wifi_required\") {\n const titleKey =\n state.screen === \"wifi_required\"\n ? \"ota:wifiRequiredTitle\"\n : state.versionChange\n ? \"ota:downgradeAvailable\"\n : \"ota:updateAvailable\"\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(titleKey, {deviceName})}\n actions={\n <>\n <FlowButton\n colors={colors}\n disabled={state.screen === \"wifi_required\" ? !state.wifiStatusKnown : !state.canInstall}\n label={translate(state.screen === \"wifi_required\" ? \"ota:setupWifi\" : \"ota:updateNow\")}\n onPress={state.screen === \"wifi_required\" ? controller.openWifiSetup : controller.install}\n />\n {state.canDismiss ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={controller.finish} secondary />\n ) : null}\n {allowDevSkip && state.updateRequired ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {state.releaseTransition.fromVersion\n ? translate(\"ota:releaseTransition\", {\n fromVersion: state.releaseTransition.fromVersion,\n toVersion: state.releaseTransition.toVersion,\n })\n : translate(\"ota:releaseTransitionUnknown\", {toVersion: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <BodyText colors={colors}>\n {state.screen === \"wifi_required\"\n ? translate(\"ota:updateConnectWifi\", {deviceName})\n : translate(state.versionChange ? \"ota:downgradeDescription\" : \"ota:updateDescription\")}\n </BodyText>\n <BodyText colors={colors}>{translate(\"ota:updateSequenceMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"dev_build\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:devBuild\")}>\n <BodyText colors={colors}>{translate(\"ota:devBuildNoOta\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"unofficial_client\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:unofficialClient\")}>\n <BodyText colors={colors}>\n {state.glassesPackageName\n ? translate(\"ota:unofficialClientNoOtaNamed\", {packageName: state.glassesPackageName})\n : translate(\"ota:unofficialClientNoOta\")}\n </BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"up_to_date\") {\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={translate(state.completedUpdate ? \"common:done\" : \"common:continue\")}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={translate(state.completedUpdate ? \"ota:updateComplete\" : \"ota:upToDate\")}>\n <BodyText colors={colors}>{translate(\"ota:noUpdatesAvailable\")}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"update_info_unavailable\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={controller.finish} />}\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateInfoUnavailable\")}>\n <BodyText colors={colors}>{translate(\"ota:updateInfoUnavailableMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"check_failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} label=\"Retry\" onPress={controller.retryCheck} />\n {allowDevSkip ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={controller.finish} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:checkFailed\")}>\n <BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.versionChangePhase === \"restarting\" || state.versionChangePhase === \"verifying\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(\n state.versionChangePhase === \"verifying\" ? \"ota:versionChangeVerifying\" : \"ota:versionChangeRestarting\",\n )}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:versionChangeKeepNearby\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"starting\" || state.screen === \"preparing_hotspot\") {\n const title = translate(\n state.hotspotPhase === \"downloading\"\n ? \"ota:downloadingToPhone\"\n : state.hotspotPhase === \"starting_hotspot\"\n ? \"ota:startingGlassesHotspot\"\n : state.hotspotPhase === \"joining_hotspot\"\n ? \"ota:connectingPhoneToGlasses\"\n : \"ota:startingHotspotUpdate\",\n )\n const artifact = state.hotspotPhase === \"downloading\" ? state.hotspotArtifact : null\n return (\n <FlowPage colors={colors} icon=\"download\" title={title}>\n {artifact ? (\n <BodyText colors={colors}>\n {translate(\"ota:updateFile\", {\n current: String(artifact.index + 1),\n total: String(artifact.totalCount),\n component: translate(componentCopyKey[artifact.kind]),\n })}\n </BodyText>\n ) : null}\n {state.hotspotPhase === \"downloading\" && state.hotspotArtifactPercent !== null ? (\n <PercentText colors={colors} percent={state.hotspotArtifactPercent} />\n ) : null}\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n {state.hotspotPhase === \"downloading\" ? (\n <BodyText colors={colors}>{translate(\"ota:phoneFileProgress\")}</BodyText>\n ) : null}\n <BodyText colors={colors}>Do not disconnect your glasses.</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"updating\") {\n const hotspot = state.transport === \"hotspot\"\n const title = hotspot\n ? translate(state.phase === \"download\" ? \"ota:transferringToGlasses\" : \"ota:installingOnGlasses\")\n : state.phase === \"download\"\n ? \"Downloading…\"\n : \"Installing…\"\n const component = state.step ? translate(componentCopyKey[state.step]) : null\n const hasStepCount =\n state.currentStep !== null &&\n state.totalSteps !== null &&\n state.currentStep > 0 &&\n state.currentStep <= state.totalSteps\n return (\n <FlowPage colors={colors} icon={state.phase === \"install\" ? \"settings\" : \"download\"} title={title}>\n {hotspot && component ? (\n <BodyText colors={colors}>\n {hasStepCount\n ? translate(\"ota:updatePart\", {\n current: String(state.currentStep),\n total: String(state.totalSteps),\n component,\n })\n : component}\n </BodyText>\n ) : null}\n {state.installingApkOnly ? (\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n ) : (\n <>\n <PercentText colors={colors} percent={state.progress ?? 0} />\n <View style={[styles.progressTrack, {backgroundColor: colors.border}]}>\n <View\n style={[styles.progressFill, {backgroundColor: colors.primary, width: `${state.progress ?? 0}%`}]}\n />\n </View>\n </>\n )}\n <BodyText colors={colors}>Do not disconnect your glasses.</BodyText>\n {state.versionChange && state.phase === \"install\" ? (\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n ) : null}\n </FlowPage>\n )\n }\n\n if (state.screen === \"restarting\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:restartingGlasses\", {deviceName})}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesMessage\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:restartingGlassesAutomatic\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (state.screen === \"complete\") {\n const title = state.versionChangeConverged\n ? translate(\"ota:versionChangeComplete\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassComplete\")\n : \"Update complete!\"\n const message = state.versionChangeConverged\n ? translate(\"ota:versionChangeCompleteMessage\")\n : state.versionChange\n ? translate(\"ota:versionChangeFirmwarePassCompleteMessage\")\n : \"Your glasses are up to date.\"\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={state.versionChange && !state.versionChangeConverged ? \"Continue\" : \"Done\"}\n onPress={controller.finish}\n />\n }\n colors={colors}\n contentAlignment={state.changelogs.length > 0 ? \"top\" : \"center\"}\n icon=\"check\"\n title={title}>\n <BodyText colors={colors}>{message}</BodyText>\n {state.releaseTransition ? (\n <BodyText colors={colors}>\n {translate(\"ota:updatedToVersion\", {version: state.releaseTransition.toVersion})}\n </BodyText>\n ) : null}\n <ChangelogList changelogs={state.changelogs} colors={colors} title={translate(\"ota:whatsNew\")} />\n </FlowPage>\n )\n }\n\n if (state.screen === \"failed\") {\n return (\n <FlowPage\n actions={\n <>\n <FlowButton\n colors={colors}\n label={state.canRetry ? \"Retry\" : \"Done\"}\n onPress={state.canRetry ? controller.retryInstall : controller.finish}\n />\n {state.canOpenWifiSetup ? (\n <FlowButton colors={colors} label=\"Change Wi-Fi\" onPress={controller.openWifiSetup} secondary />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateFailed\")}>\n <BodyText colors={colors}>{failureMessage(state.error, translate)}</BodyText>\n\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n superMode ? (\n <FlowButton colors={colors} label=\"Skip (super)\" onPress={controller.discard} secondary />\n ) : undefined\n }\n colors={colors}\n icon=\"bluetooth\"\n title=\"Glasses disconnected\">\n <BodyText colors={colors}>Reconnecting…</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n}\n\ntype FlowPageProps = {\n actions?: React.ReactNode\n children?: React.ReactNode\n colors: MentraLiveOtaFlowTheme\n contentAlignment?: \"center\" | \"top\"\n icon: \"alert\" | \"bluetooth\" | \"check\" | \"download\" | \"settings\"\n title: string\n}\n\nfunction FlowPage({actions, children, colors, contentAlignment = \"center\", icon, title}: FlowPageProps) {\n return (\n <View style={styles.page} testID=\"mentra-live-ota-flow\">\n <ScrollView\n contentContainerStyle={[styles.centerContent, contentAlignment === \"top\" && styles.topContent]}\n nestedScrollEnabled\n style={styles.contentScroll}\n testID=\"ota-page-scroll\">\n <FlowIcon colors={colors} name={icon} />\n <Text style={[styles.title, {color: colors.foreground}]}>{title}</Text>\n {children}\n </ScrollView>\n {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer} />}\n </View>\n )\n}\n\nfunction BodyText({children, colors}: {children: React.ReactNode; colors: MentraLiveOtaFlowTheme}) {\n return <Text style={[styles.body, {color: colors.textDim}]}>{children}</Text>\n}\n\nfunction PercentText({colors, percent}: {colors: MentraLiveOtaFlowTheme; percent: number}) {\n return <Text style={[styles.percent, {color: colors.primary}]}>{Math.round(percent)}%</Text>\n}\n\nfunction ChangelogMarkdown({colors, markdown}: {colors: MentraLiveOtaFlowTheme; markdown: string}) {\n const markdownStyles = useMemo<MarkedStyles>(\n () => ({\n blockquote: {\n borderLeftColor: colors.primary,\n borderLeftWidth: 3,\n marginVertical: 2,\n opacity: 1,\n paddingLeft: 12,\n },\n code: {\n backgroundColor: colors.background,\n borderColor: colors.border,\n borderRadius: 8,\n borderWidth: 1,\n padding: 12,\n },\n codespan: {\n backgroundColor: colors.border,\n color: colors.foreground,\n fontFamily: \"monospace\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: \"400\",\n },\n em: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n h1: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 18,\n fontWeight: \"700\",\n lineHeight: 24,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h2: {\n borderBottomWidth: 0,\n color: colors.foreground,\n fontSize: 17,\n fontWeight: \"700\",\n lineHeight: 23,\n marginVertical: 0,\n paddingBottom: 0,\n },\n h3: {color: colors.foreground, fontSize: 16, fontWeight: \"700\", lineHeight: 22, marginVertical: 0},\n h4: {color: colors.foreground, fontSize: 15, fontWeight: \"700\", lineHeight: 21, marginVertical: 0},\n h5: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20, marginVertical: 0},\n h6: {color: colors.textDim, fontSize: 14, fontWeight: \"600\", lineHeight: 20, marginVertical: 0},\n hr: {borderBottomColor: colors.border, marginVertical: 2},\n image: {borderRadius: 8},\n li: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n link: {\n color: colors.primary,\n fontSize: 14,\n fontStyle: \"normal\",\n lineHeight: 20,\n textDecorationLine: \"underline\",\n },\n paragraph: {paddingVertical: 0},\n strikethrough: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n strong: {color: colors.foreground, fontSize: 14, fontWeight: \"700\", lineHeight: 20},\n table: {borderColor: colors.border, borderRadius: 8},\n tableCell: {padding: 8},\n text: {color: colors.textDim, fontSize: 14, lineHeight: 20},\n }),\n [colors],\n )\n const markdownTheme = useMemo<NonNullable<useMarkdownHookOptions[\"theme\"]>>(\n () => ({\n colors: {\n background: colors.background,\n border: colors.border,\n code: colors.border,\n link: colors.primary,\n text: colors.textDim,\n },\n }),\n [colors],\n )\n const elements = useMarkdown(markdown, {colorScheme: \"light\", styles: markdownStyles, theme: markdownTheme})\n\n return (\n <View style={styles.changelogMarkdownContent} testID=\"ota-changelog-markdown\">\n {elements}\n </View>\n )\n}\n\nexport function ChangelogList({\n changelogs,\n colors,\n title,\n}: {\n changelogs: MentraLiveOtaController[\"state\"][\"changelogs\"]\n colors: MentraLiveOtaFlowTheme\n title: string\n}) {\n if (changelogs.length === 0) return null\n\n return (\n <View style={[styles.changelogCard, {borderColor: colors.border}]} testID=\"ota-changelog-card\">\n <Text style={[styles.changelogTitle, {color: colors.foreground}]}>{title}</Text>\n <ScrollView\n contentContainerStyle={styles.changelogContent}\n nestedScrollEnabled\n persistentScrollbar\n showsVerticalScrollIndicator\n style={styles.changelogList}\n testID=\"ota-changelog-scroll\">\n {changelogs.map((entry, index) => (\n <View\n key={entry.version}\n style={[\n styles.changelogEntry,\n index > 0 && styles.changelogEntryDivider,\n index > 0 && {borderTopColor: colors.border},\n ]}>\n <Text selectable style={[styles.changelogVersion, {color: colors.foreground}]}>\n {entry.version}\n </Text>\n <ChangelogMarkdown colors={colors} markdown={entry.markdown} />\n </View>\n ))}\n </ScrollView>\n </View>\n )\n}\n\nfunction FlowButton({\n colors,\n disabled = false,\n label,\n onPress,\n secondary = false,\n}: {\n colors: MentraLiveOtaFlowTheme\n disabled?: boolean\n label: string\n onPress: () => void\n secondary?: boolean\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={onPress}\n style={({pressed}) => [\n styles.button,\n {\n backgroundColor: secondary ? colors.background : colors.foreground,\n borderColor: secondary ? colors.border : colors.foreground,\n opacity: disabled ? 0.45 : pressed ? 0.75 : 1,\n },\n ]}\n testID={`button-${label}`}>\n <Text style={[styles.buttonText, {color: secondary ? colors.foreground : colors.background}]}>{label}</Text>\n </Pressable>\n )\n}\n\nfunction MentraMark({color}: {color: string}) {\n return (\n <Svg width={33} height={18} viewBox=\"0 0 50 27\" fill=\"none\">\n <Rect y={14.8072} width={11.8457} height={11.8457} fill={color} />\n <Path d=\"M9.36639 0L30.7163 14.8072V26.6529L9.36639 11.8457V0Z\" fill={color} />\n <Path d=\"M28.6501 0L50 14.8072V26.6529L28.6501 11.8457V0Z\" fill={color} />\n </Svg>\n )\n}\n\nfunction FlowIcon({colors, name}: {colors: MentraLiveOtaFlowTheme; name: FlowPageProps[\"icon\"]}) {\n const color = name === \"alert\" || name === \"bluetooth\" ? colors.error : colors.primary\n if (name === \"download\" || name === \"check\") {\n // Lucide arrow-down-to-line and check; see ./lucide-LICENSE.txt.\n return (\n <View style={styles.svgIcon}>\n <Svg\n width={64}\n height={64}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\">\n {name === \"download\" ? (\n <>\n <Path d=\"M12 17V3\" />\n <Path d=\"m6 11 6 6 6-6\" />\n <Path d=\"M19 21H5\" />\n </>\n ) : (\n <Path d=\"M20 6 9 17l-5-5\" />\n )}\n </Svg>\n </View>\n )\n }\n const glyph = name === \"alert\" ? \"!\" : name === \"settings\" ? \"⚙\" : \"⌁\"\n return <Text style={[styles.icon, {color}]}>{glyph}</Text>\n}\n\nconst styles = StyleSheet.create({\n safeArea: {flex: 1},\n header: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 48,\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n },\n page: {flex: 1, paddingBottom: 24, paddingHorizontal: 24},\n contentScroll: {flex: 1},\n centerContent: {alignItems: \"center\", flexGrow: 1, gap: 16, justifyContent: \"center\"},\n topContent: {justifyContent: \"flex-start\", paddingBottom: 16, paddingTop: 12},\n actionSpacer: {height: 48},\n actions: {gap: 12},\n icon: {fontSize: 64, fontWeight: \"500\", lineHeight: 72, textAlign: \"center\"},\n svgIcon: {alignItems: \"center\", height: 72, justifyContent: \"center\", width: 72},\n title: {fontSize: 20, fontWeight: \"600\", textAlign: \"center\"},\n body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: \"center\"},\n percent: {fontSize: 30, fontVariant: [\"tabular-nums\"], fontWeight: \"700\"},\n progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: \"hidden\", width: \"100%\"},\n progressFill: {borderRadius: 4, height: 8},\n changelogCard: {\n borderRadius: 16,\n borderWidth: 1,\n flexGrow: 1,\n gap: 12,\n maxWidth: 420,\n minHeight: 200,\n padding: 16,\n width: \"100%\",\n },\n changelogTitle: {fontSize: 16, fontWeight: \"700\"},\n // Bound the notes themselves so the card can grow for its title, but not for all of the Markdown.\n changelogList: {flexGrow: 1, height: 120, width: \"100%\"},\n changelogContent: {gap: 20, paddingBottom: 4},\n changelogEntry: {gap: 8},\n changelogEntryDivider: {borderTopWidth: StyleSheet.hairlineWidth, paddingTop: 20},\n changelogVersion: {fontSize: 14, fontWeight: \"600\"},\n changelogMarkdownContent: {gap: 10},\n button: {\n alignItems: \"center\",\n borderRadius: 50,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 44,\n paddingHorizontal: 20,\n },\n buttonText: {fontSize: 14, fontWeight: \"500\"},\n})\n"]}
@@ -655,7 +655,7 @@ export function useMentraLiveOta(options = {}) {
655
655
  // phone-side copy outranks it. Only a failed ota_status carries a current code.
656
656
  const glassesCode = installSnapshot.otaStatus?.status === "failed" ? installSnapshot.otaStatus.error || null : null;
657
657
  // Precedence mirrors the legacy screen: the BES restart instruction, then a phone-side
658
- // watchdog/preflight message (English-only, no copy key), then the glasses code mapped to
658
+ // watchdog/preflight message (translated when a copy key is available), then the glasses code mapped to
659
659
  // copy (unknown codes get the generic glasses-error copy rather than the raw code).
660
660
  let displayedError;
661
661
  let copyKey;
@@ -665,7 +665,7 @@ export function useMentraLiveOta(options = {}) {
665
665
  }
666
666
  else if (installSnapshot.errorMsg) {
667
667
  displayedError = installSnapshot.errorMsg;
668
- copyKey = null;
668
+ copyKey = installSnapshot.errorCopyKey ?? null;
669
669
  }
670
670
  else {
671
671
  displayedError = getOtaErrorMessage(glassesCode);