@glassly/engine 0.1.0-dev.0
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/README.md +96 -0
- package/build/devtools.d.ts +11 -0
- package/build/devtools.d.ts.map +1 -0
- package/build/devtools.js +13 -0
- package/build/devtools.js.map +1 -0
- package/build/engine.d.ts +336 -0
- package/build/engine.d.ts.map +1 -0
- package/build/engine.js +198 -0
- package/build/engine.js.map +1 -0
- package/build/facades/dev.d.ts +69 -0
- package/build/facades/dev.d.ts.map +1 -0
- package/build/facades/dev.js +204 -0
- package/build/facades/dev.js.map +1 -0
- package/build/facades/display.d.ts +21 -0
- package/build/facades/display.d.ts.map +1 -0
- package/build/facades/display.js +17 -0
- package/build/facades/display.js.map +1 -0
- package/build/facades/displayMirror.d.ts +15 -0
- package/build/facades/displayMirror.d.ts.map +1 -0
- package/build/facades/displayMirror.js +29 -0
- package/build/facades/displayMirror.js.map +1 -0
- package/build/facades/gallery.d.ts +62 -0
- package/build/facades/gallery.d.ts.map +1 -0
- package/build/facades/gallery.js +61 -0
- package/build/facades/gallery.js.map +1 -0
- package/build/facades/glasses.d.ts +142 -0
- package/build/facades/glasses.d.ts.map +1 -0
- package/build/facades/glasses.js +214 -0
- package/build/facades/glasses.js.map +1 -0
- package/build/facades/glassesSettings.d.ts +13 -0
- package/build/facades/glassesSettings.d.ts.map +1 -0
- package/build/facades/glassesSettings.js +55 -0
- package/build/facades/glassesSettings.js.map +1 -0
- package/build/facades/glassesWifi.d.ts +25 -0
- package/build/facades/glassesWifi.d.ts.map +1 -0
- package/build/facades/glassesWifi.js +57 -0
- package/build/facades/glassesWifi.js.map +1 -0
- package/build/facades/maps.d.ts +18 -0
- package/build/facades/maps.d.ts.map +1 -0
- package/build/facades/maps.js +13 -0
- package/build/facades/maps.js.map +1 -0
- package/build/facades/memory.d.ts +38 -0
- package/build/facades/memory.d.ts.map +1 -0
- package/build/facades/memory.js +33 -0
- package/build/facades/memory.js.map +1 -0
- package/build/facades/miniapps.d.ts +47 -0
- package/build/facades/miniapps.d.ts.map +1 -0
- package/build/facades/miniapps.js +54 -0
- package/build/facades/miniapps.js.map +1 -0
- package/build/facades/notifications.d.ts +13 -0
- package/build/facades/notifications.d.ts.map +1 -0
- package/build/facades/notifications.js +12 -0
- package/build/facades/notifications.js.map +1 -0
- package/build/facades/ota.d.ts +106 -0
- package/build/facades/ota.d.ts.map +1 -0
- package/build/facades/ota.js +159 -0
- package/build/facades/ota.js.map +1 -0
- package/build/facades/pairing.d.ts +115 -0
- package/build/facades/pairing.d.ts.map +1 -0
- package/build/facades/pairing.js +275 -0
- package/build/facades/pairing.js.map +1 -0
- package/build/facades/permissions.d.ts +33 -0
- package/build/facades/permissions.d.ts.map +1 -0
- package/build/facades/permissions.js +155 -0
- package/build/facades/permissions.js.map +1 -0
- package/build/facades/phoneNotifications.d.ts +17 -0
- package/build/facades/phoneNotifications.d.ts.map +1 -0
- package/build/facades/phoneNotifications.js +41 -0
- package/build/facades/phoneNotifications.js.map +1 -0
- package/build/facades/providerKeys.d.ts +26 -0
- package/build/facades/providerKeys.d.ts.map +1 -0
- package/build/facades/providerKeys.js +26 -0
- package/build/facades/providerKeys.js.map +1 -0
- package/build/facades/reports.d.ts +36 -0
- package/build/facades/reports.d.ts.map +1 -0
- package/build/facades/reports.js +134 -0
- package/build/facades/reports.js.map +1 -0
- package/build/facades/session.d.ts +21 -0
- package/build/facades/session.d.ts.map +1 -0
- package/build/facades/session.js +52 -0
- package/build/facades/session.js.map +1 -0
- package/build/facades/settings.d.ts +37 -0
- package/build/facades/settings.d.ts.map +1 -0
- package/build/facades/settings.js +55 -0
- package/build/facades/settings.js.map +1 -0
- package/build/facades/speakers.d.ts +41 -0
- package/build/facades/speakers.d.ts.map +1 -0
- package/build/facades/speakers.js +139 -0
- package/build/facades/speakers.js.map +1 -0
- package/build/facades/speech.d.ts +44 -0
- package/build/facades/speech.d.ts.map +1 -0
- package/build/facades/speech.js +46 -0
- package/build/facades/speech.js.map +1 -0
- package/build/index.d.ts +48 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +49 -0
- package/build/index.js.map +1 -0
- package/build/internal.d.ts +67 -0
- package/build/internal.d.ts.map +1 -0
- package/build/internal.js +90 -0
- package/build/internal.js.map +1 -0
- package/build/runtime/bootstrap.d.ts +115 -0
- package/build/runtime/bootstrap.d.ts.map +1 -0
- package/build/runtime/bootstrap.js +73 -0
- package/build/runtime/bootstrap.js.map +1 -0
- package/build/runtime/config.d.ts +152 -0
- package/build/runtime/config.d.ts.map +1 -0
- package/build/runtime/config.js +19 -0
- package/build/runtime/config.js.map +1 -0
- package/build/runtime/scanQrSeam.d.ts +7 -0
- package/build/runtime/scanQrSeam.d.ts.map +1 -0
- package/build/runtime/scanQrSeam.js +16 -0
- package/build/runtime/scanQrSeam.js.map +1 -0
- package/build/runtime/streamConfig.d.ts +4 -0
- package/build/runtime/streamConfig.d.ts.map +1 -0
- package/build/runtime/streamConfig.js +38 -0
- package/build/runtime/streamConfig.js.map +1 -0
- package/build/services/AiTierResolution.d.ts +61 -0
- package/build/services/AiTierResolution.d.ts.map +1 -0
- package/build/services/AiTierResolution.js +83 -0
- package/build/services/AiTierResolution.js.map +1 -0
- package/build/services/AppRegistry.d.ts +303 -0
- package/build/services/AppRegistry.d.ts.map +1 -0
- package/build/services/AppRegistry.js +1108 -0
- package/build/services/AppRegistry.js.map +1 -0
- package/build/services/AudioCloudUplink.d.ts +15 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -0
- package/build/services/AudioCloudUplink.js +54 -0
- package/build/services/AudioCloudUplink.js.map +1 -0
- package/build/services/AudioPlaybackService.d.ts +183 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -0
- package/build/services/AudioPlaybackService.js +750 -0
- package/build/services/AudioPlaybackService.js.map +1 -0
- package/build/services/AutomaticReportResult.d.ts +20 -0
- package/build/services/AutomaticReportResult.d.ts.map +1 -0
- package/build/services/AutomaticReportResult.js +29 -0
- package/build/services/AutomaticReportResult.js.map +1 -0
- package/build/services/BlobStore.d.ts +106 -0
- package/build/services/BlobStore.d.ts.map +1 -0
- package/build/services/BlobStore.js +741 -0
- package/build/services/BlobStore.js.map +1 -0
- package/build/services/CaptionsTesterReportService.d.ts +4 -0
- package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
- package/build/services/CaptionsTesterReportService.js +80 -0
- package/build/services/CaptionsTesterReportService.js.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.js +51 -0
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
- package/build/services/CloudClientService.d.ts +293 -0
- package/build/services/CloudClientService.d.ts.map +1 -0
- package/build/services/CloudClientService.js +965 -0
- package/build/services/CloudClientService.js.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.js +24 -0
- package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
- package/build/services/ConnectionCoordinator.d.ts +51 -0
- package/build/services/ConnectionCoordinator.d.ts.map +1 -0
- package/build/services/ConnectionCoordinator.js +34 -0
- package/build/services/ConnectionCoordinator.js.map +1 -0
- package/build/services/DevServerBridge.d.ts +63 -0
- package/build/services/DevServerBridge.d.ts.map +1 -0
- package/build/services/DevServerBridge.js +296 -0
- package/build/services/DevServerBridge.js.map +1 -0
- package/build/services/DeviceEventRouter.d.ts +3 -0
- package/build/services/DeviceEventRouter.d.ts.map +1 -0
- package/build/services/DeviceEventRouter.js +214 -0
- package/build/services/DeviceEventRouter.js.map +1 -0
- package/build/services/DeviceStoreHydration.d.ts +38 -0
- package/build/services/DeviceStoreHydration.d.ts.map +1 -0
- package/build/services/DeviceStoreHydration.js +124 -0
- package/build/services/DeviceStoreHydration.js.map +1 -0
- package/build/services/DisplayProcessor.d.ts +223 -0
- package/build/services/DisplayProcessor.d.ts.map +1 -0
- package/build/services/DisplayProcessor.js +552 -0
- package/build/services/DisplayProcessor.js.map +1 -0
- package/build/services/ForegroundLocationPermission.d.ts +13 -0
- package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
- package/build/services/ForegroundLocationPermission.js +12 -0
- package/build/services/ForegroundLocationPermission.js.map +1 -0
- package/build/services/GlassesReadiness.d.ts +41 -0
- package/build/services/GlassesReadiness.d.ts.map +1 -0
- package/build/services/GlassesReadiness.js +82 -0
- package/build/services/GlassesReadiness.js.map +1 -0
- package/build/services/GlassesSettingsSync.d.ts +33 -0
- package/build/services/GlassesSettingsSync.d.ts.map +1 -0
- package/build/services/GlassesSettingsSync.js +127 -0
- package/build/services/GlassesSettingsSync.js.map +1 -0
- package/build/services/GlassesStatusProjection.d.ts +3 -0
- package/build/services/GlassesStatusProjection.d.ts.map +1 -0
- package/build/services/GlassesStatusProjection.js +65 -0
- package/build/services/GlassesStatusProjection.js.map +1 -0
- package/build/services/HeadingService.d.ts +33 -0
- package/build/services/HeadingService.d.ts.map +1 -0
- package/build/services/HeadingService.js +123 -0
- package/build/services/HeadingService.js.map +1 -0
- package/build/services/HotspotOtaTransport.d.ts +29 -0
- package/build/services/HotspotOtaTransport.d.ts.map +1 -0
- package/build/services/HotspotOtaTransport.js +146 -0
- package/build/services/HotspotOtaTransport.js.map +1 -0
- package/build/services/HotspotShutdown.d.ts +17 -0
- package/build/services/HotspotShutdown.d.ts.map +1 -0
- package/build/services/HotspotShutdown.js +29 -0
- package/build/services/HotspotShutdown.js.map +1 -0
- package/build/services/JSCrashController.d.ts +97 -0
- package/build/services/JSCrashController.d.ts.map +1 -0
- package/build/services/JSCrashController.js +138 -0
- package/build/services/JSCrashController.js.map +1 -0
- package/build/services/JSCrashloopReportService.d.ts +9 -0
- package/build/services/JSCrashloopReportService.d.ts.map +1 -0
- package/build/services/JSCrashloopReportService.js +54 -0
- package/build/services/JSCrashloopReportService.js.map +1 -0
- package/build/services/JSLogPipeline.d.ts +87 -0
- package/build/services/JSLogPipeline.d.ts.map +1 -0
- package/build/services/JSLogPipeline.js +137 -0
- package/build/services/JSLogPipeline.js.map +1 -0
- package/build/services/JSRouter.d.ts +203 -0
- package/build/services/JSRouter.d.ts.map +1 -0
- package/build/services/JSRouter.js +482 -0
- package/build/services/JSRouter.js.map +1 -0
- package/build/services/LocalDisplayManager.d.ts +162 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -0
- package/build/services/LocalDisplayManager.js +687 -0
- package/build/services/LocalDisplayManager.js.map +1 -0
- package/build/services/LocalMiniappDataMigration.d.ts +46 -0
- package/build/services/LocalMiniappDataMigration.d.ts.map +1 -0
- package/build/services/LocalMiniappDataMigration.js +78 -0
- package/build/services/LocalMiniappDataMigration.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +677 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
- package/build/services/LocalMiniappRuntime.js +5068 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -0
- package/build/services/LocalMiniappStorage.d.ts +32 -0
- package/build/services/LocalMiniappStorage.d.ts.map +1 -0
- package/build/services/LocalMiniappStorage.js +66 -0
- package/build/services/LocalMiniappStorage.js.map +1 -0
- package/build/services/LocalMiniappUserIdentity.d.ts +41 -0
- package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
- package/build/services/LocalMiniappUserIdentity.js +73 -0
- package/build/services/LocalMiniappUserIdentity.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +101 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.js +210 -0
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
- package/build/services/MapboxTokenService.d.ts +33 -0
- package/build/services/MapboxTokenService.d.ts.map +1 -0
- package/build/services/MapboxTokenService.js +115 -0
- package/build/services/MapboxTokenService.js.map +1 -0
- package/build/services/MemoryCapture.d.ts +40 -0
- package/build/services/MemoryCapture.d.ts.map +1 -0
- package/build/services/MemoryCapture.js +42 -0
- package/build/services/MemoryCapture.js.map +1 -0
- package/build/services/MemoryStore.d.ts +184 -0
- package/build/services/MemoryStore.d.ts.map +1 -0
- package/build/services/MemoryStore.js +541 -0
- package/build/services/MemoryStore.js.map +1 -0
- package/build/services/MicStateCoordinator.d.ts +78 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -0
- package/build/services/MicStateCoordinator.js +219 -0
- package/build/services/MicStateCoordinator.js.map +1 -0
- package/build/services/MiniappEngine.d.ts +31 -0
- package/build/services/MiniappEngine.d.ts.map +1 -0
- package/build/services/MiniappEngine.js +119 -0
- package/build/services/MiniappEngine.js.map +1 -0
- package/build/services/MiniappLauncher.d.ts +127 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -0
- package/build/services/MiniappLauncher.js +309 -0
- package/build/services/MiniappLauncher.js.map +1 -0
- package/build/services/MiniappLiveness.d.ts +12 -0
- package/build/services/MiniappLiveness.d.ts.map +1 -0
- package/build/services/MiniappLiveness.js +16 -0
- package/build/services/MiniappLiveness.js.map +1 -0
- package/build/services/MiniappRunningRegistry.d.ts +24 -0
- package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
- package/build/services/MiniappRunningRegistry.js +52 -0
- package/build/services/MiniappRunningRegistry.js.map +1 -0
- package/build/services/NativeHttpResponse.d.ts +3 -0
- package/build/services/NativeHttpResponse.d.ts.map +1 -0
- package/build/services/NativeHttpResponse.js +6 -0
- package/build/services/NativeHttpResponse.js.map +1 -0
- package/build/services/NativeNavigationService.d.ts +51 -0
- package/build/services/NativeNavigationService.d.ts.map +1 -0
- package/build/services/NativeNavigationService.js +154 -0
- package/build/services/NativeNavigationService.js.map +1 -0
- package/build/services/NavigationHandlers.d.ts +107 -0
- package/build/services/NavigationHandlers.d.ts.map +1 -0
- package/build/services/NavigationHandlers.js +479 -0
- package/build/services/NavigationHandlers.js.map +1 -0
- package/build/services/NavigationService.d.ts +283 -0
- package/build/services/NavigationService.d.ts.map +1 -0
- package/build/services/NavigationService.js +696 -0
- package/build/services/NavigationService.js.map +1 -0
- package/build/services/NotificationsEmitter.d.ts +28 -0
- package/build/services/NotificationsEmitter.d.ts.map +1 -0
- package/build/services/NotificationsEmitter.js +22 -0
- package/build/services/NotificationsEmitter.js.map +1 -0
- package/build/services/OfflineSpeechModelService.d.ts +33 -0
- package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
- package/build/services/OfflineSpeechModelService.js +136 -0
- package/build/services/OfflineSpeechModelService.js.map +1 -0
- package/build/services/OtaArtifactDownloader.d.ts +65 -0
- package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
- package/build/services/OtaArtifactDownloader.js +226 -0
- package/build/services/OtaArtifactDownloader.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +275 -0
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
- package/build/services/OtaInstallCoordinator.js +1491 -0
- package/build/services/OtaInstallCoordinator.js.map +1 -0
- package/build/services/OtaService.d.ts +3 -0
- package/build/services/OtaService.d.ts.map +1 -0
- package/build/services/OtaService.js +72 -0
- package/build/services/OtaService.js.map +1 -0
- package/build/services/OtaUpdateCheckService.d.ts +100 -0
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
- package/build/services/OtaUpdateCheckService.js +380 -0
- package/build/services/OtaUpdateCheckService.js.map +1 -0
- package/build/services/PairingIdentity.d.ts +80 -0
- package/build/services/PairingIdentity.d.ts.map +1 -0
- package/build/services/PairingIdentity.js +145 -0
- package/build/services/PairingIdentity.js.map +1 -0
- package/build/services/PhoneCalendarHelpers.d.ts +32 -0
- package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
- package/build/services/PhoneCalendarHelpers.js +157 -0
- package/build/services/PhoneCalendarHelpers.js.map +1 -0
- package/build/services/PhoneCalendarService.d.ts +5 -0
- package/build/services/PhoneCalendarService.d.ts.map +1 -0
- package/build/services/PhoneCalendarService.js +45 -0
- package/build/services/PhoneCalendarService.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts +30 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.js +194 -0
- package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
- package/build/services/PhoneLocationService.d.ts +36 -0
- package/build/services/PhoneLocationService.d.ts.map +1 -0
- package/build/services/PhoneLocationService.js +115 -0
- package/build/services/PhoneLocationService.js.map +1 -0
- package/build/services/PhoneNotificationsSync.d.ts +3 -0
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
- package/build/services/PhoneNotificationsSync.js +37 -0
- package/build/services/PhoneNotificationsSync.js.map +1 -0
- package/build/services/PhonePhotoCoordinator.d.ts +110 -0
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
- package/build/services/PhonePhotoCoordinator.js +344 -0
- package/build/services/PhonePhotoCoordinator.js.map +1 -0
- package/build/services/PhoneStreamCoordinator.d.ts +175 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
- package/build/services/PhoneStreamCoordinator.js +740 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -0
- package/build/services/PhoneVideoCoordinator.d.ts +52 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
- package/build/services/PhoneVideoCoordinator.js +157 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -0
- package/build/services/ProviderKeyValidation.d.ts +27 -0
- package/build/services/ProviderKeyValidation.d.ts.map +1 -0
- package/build/services/ProviderKeyValidation.js +42 -0
- package/build/services/ProviderKeyValidation.js.map +1 -0
- package/build/services/STTModelManager.d.ts +65 -0
- package/build/services/STTModelManager.d.ts.map +1 -0
- package/build/services/STTModelManager.js +366 -0
- package/build/services/STTModelManager.js.map +1 -0
- package/build/services/SceneRenderer.d.ts +90 -0
- package/build/services/SceneRenderer.d.ts.map +1 -0
- package/build/services/SceneRenderer.js +274 -0
- package/build/services/SceneRenderer.js.map +1 -0
- package/build/services/SentenceTtsPipeline.d.ts +31 -0
- package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
- package/build/services/SentenceTtsPipeline.js +67 -0
- package/build/services/SentenceTtsPipeline.js.map +1 -0
- package/build/services/SpeakerIdModelManager.d.ts +36 -0
- package/build/services/SpeakerIdModelManager.d.ts.map +1 -0
- package/build/services/SpeakerIdModelManager.js +132 -0
- package/build/services/SpeakerIdModelManager.js.map +1 -0
- package/build/services/SpeakerIdSync.d.ts +14 -0
- package/build/services/SpeakerIdSync.d.ts.map +1 -0
- package/build/services/SpeakerIdSync.js +62 -0
- package/build/services/SpeakerIdSync.js.map +1 -0
- package/build/services/SpeakerLabelResolver.d.ts +80 -0
- package/build/services/SpeakerLabelResolver.d.ts.map +1 -0
- package/build/services/SpeakerLabelResolver.js +108 -0
- package/build/services/SpeakerLabelResolver.js.map +1 -0
- package/build/services/SpeakerProfileStore.d.ts +90 -0
- package/build/services/SpeakerProfileStore.d.ts.map +1 -0
- package/build/services/SpeakerProfileStore.js +213 -0
- package/build/services/SpeakerProfileStore.js.map +1 -0
- package/build/services/SpeakerSegmentResolver.d.ts +87 -0
- package/build/services/SpeakerSegmentResolver.d.ts.map +1 -0
- package/build/services/SpeakerSegmentResolver.js +137 -0
- package/build/services/SpeakerSegmentResolver.js.map +1 -0
- package/build/services/StreamLifecycleController.d.ts +63 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -0
- package/build/services/StreamLifecycleController.js +148 -0
- package/build/services/StreamLifecycleController.js.map +1 -0
- package/build/services/SupportProfileSync.d.ts +22 -0
- package/build/services/SupportProfileSync.d.ts.map +1 -0
- package/build/services/SupportProfileSync.js +213 -0
- package/build/services/SupportProfileSync.js.map +1 -0
- package/build/services/TTSModelManager.d.ts +90 -0
- package/build/services/TTSModelManager.d.ts.map +1 -0
- package/build/services/TTSModelManager.js +366 -0
- package/build/services/TTSModelManager.js.map +1 -0
- package/build/services/TranscriptionRouting.d.ts +22 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +34 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/TtsTextSanitizer.d.ts +5 -0
- package/build/services/TtsTextSanitizer.d.ts.map +1 -0
- package/build/services/TtsTextSanitizer.js +61 -0
- package/build/services/TtsTextSanitizer.js.map +1 -0
- package/build/services/UIRouter.d.ts +137 -0
- package/build/services/UIRouter.d.ts.map +1 -0
- package/build/services/UIRouter.js +210 -0
- package/build/services/UIRouter.js.map +1 -0
- package/build/services/WebviewBridge.d.ts +22 -0
- package/build/services/WebviewBridge.d.ts.map +1 -0
- package/build/services/WebviewBridge.js +47 -0
- package/build/services/WebviewBridge.js.map +1 -0
- package/build/services/WifiAdbRequest.d.ts +17 -0
- package/build/services/WifiAdbRequest.d.ts.map +1 -0
- package/build/services/WifiAdbRequest.js +35 -0
- package/build/services/WifiAdbRequest.js.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
- package/build/services/asg/asgCameraApi.d.ts +208 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -0
- package/build/services/asg/asgCameraApi.js +1480 -0
- package/build/services/asg/asgCameraApi.js.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.js +618 -0
- package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
- package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
- package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportLedger.js +78 -0
- package/build/services/asg/cameraRollExportLedger.js.map +1 -0
- package/build/services/asg/galleryMediaValidation.d.ts +29 -0
- package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
- package/build/services/asg/galleryMediaValidation.js +149 -0
- package/build/services/asg/galleryMediaValidation.js.map +1 -0
- package/build/services/asg/galleryNotices.d.ts +33 -0
- package/build/services/asg/galleryNotices.d.ts.map +1 -0
- package/build/services/asg/galleryNotices.js +29 -0
- package/build/services/asg/galleryNotices.js.map +1 -0
- package/build/services/asg/galleryPathMigration.d.ts +3 -0
- package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
- package/build/services/asg/galleryPathMigration.js +26 -0
- package/build/services/asg/galleryPathMigration.js.map +1 -0
- package/build/services/asg/gallerySettingsService.d.ts +20 -0
- package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
- package/build/services/asg/gallerySettingsService.js +53 -0
- package/build/services/asg/gallerySettingsService.js.map +1 -0
- package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
- package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
- package/build/services/asg/gallerySyncNotifications.js +198 -0
- package/build/services/asg/gallerySyncNotifications.js.map +1 -0
- package/build/services/asg/gallerySyncService.d.ts +137 -0
- package/build/services/asg/gallerySyncService.d.ts.map +1 -0
- package/build/services/asg/gallerySyncService.js +1945 -0
- package/build/services/asg/gallerySyncService.js.map +1 -0
- package/build/services/asg/galleryTransferLedger.d.ts +58 -0
- package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
- package/build/services/asg/galleryTransferLedger.js +225 -0
- package/build/services/asg/galleryTransferLedger.js.map +1 -0
- package/build/services/asg/localNetworkTransport.d.ts +15 -0
- package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
- package/build/services/asg/localNetworkTransport.js +144 -0
- package/build/services/asg/localNetworkTransport.js.map +1 -0
- package/build/services/asg/localStorageService.d.ts +146 -0
- package/build/services/asg/localStorageService.d.ts.map +1 -0
- package/build/services/asg/localStorageService.js +572 -0
- package/build/services/asg/localStorageService.js.map +1 -0
- package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
- package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
- package/build/services/asg/mediaProcessingQueue.js +451 -0
- package/build/services/asg/mediaProcessingQueue.js.map +1 -0
- package/build/services/audioPlaybackAssets.d.ts +8 -0
- package/build/services/audioPlaybackAssets.d.ts.map +1 -0
- package/build/services/audioPlaybackAssets.js +7 -0
- package/build/services/audioPlaybackAssets.js.map +1 -0
- package/build/services/blobPaths.d.ts +31 -0
- package/build/services/blobPaths.d.ts.map +1 -0
- package/build/services/blobPaths.js +86 -0
- package/build/services/blobPaths.js.map +1 -0
- package/build/services/cloudStreamApi.d.ts +59 -0
- package/build/services/cloudStreamApi.d.ts.map +1 -0
- package/build/services/cloudStreamApi.js +81 -0
- package/build/services/cloudStreamApi.js.map +1 -0
- package/build/services/effectiveCapabilities.d.ts +8 -0
- package/build/services/effectiveCapabilities.d.ts.map +1 -0
- package/build/services/effectiveCapabilities.js +23 -0
- package/build/services/effectiveCapabilities.js.map +1 -0
- package/build/services/gallerySyncClock.d.ts +17 -0
- package/build/services/gallerySyncClock.d.ts.map +1 -0
- package/build/services/gallerySyncClock.js +21 -0
- package/build/services/gallerySyncClock.js.map +1 -0
- package/build/services/glassesClockSync.d.ts +20 -0
- package/build/services/glassesClockSync.d.ts.map +1 -0
- package/build/services/glassesClockSync.js +97 -0
- package/build/services/glassesClockSync.js.map +1 -0
- package/build/services/manifestActions.d.ts +31 -0
- package/build/services/manifestActions.d.ts.map +1 -0
- package/build/services/manifestActions.js +54 -0
- package/build/services/manifestActions.js.map +1 -0
- package/build/services/manifestVersionGate.d.ts +28 -0
- package/build/services/manifestVersionGate.d.ts.map +1 -0
- package/build/services/manifestVersionGate.js +41 -0
- package/build/services/manifestVersionGate.js.map +1 -0
- package/build/services/memoryStoreInstance.d.ts +19 -0
- package/build/services/memoryStoreInstance.d.ts.map +1 -0
- package/build/services/memoryStoreInstance.js +65 -0
- package/build/services/memoryStoreInstance.js.map +1 -0
- package/build/services/navigation/roadNameResolver.d.ts +67 -0
- package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
- package/build/services/navigation/roadNameResolver.js +87 -0
- package/build/services/navigation/roadNameResolver.js.map +1 -0
- package/build/services/navigation/routesApiCodec.d.ts +38 -0
- package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
- package/build/services/navigation/routesApiCodec.js +68 -0
- package/build/services/navigation/routesApiCodec.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +53 -0
- package/build/services/otaDisplayState.d.ts.map +1 -0
- package/build/services/otaDisplayState.js +114 -0
- package/build/services/otaDisplayState.js.map +1 -0
- package/build/services/otaInstallPolicy.d.ts +93 -0
- package/build/services/otaInstallPolicy.d.ts.map +1 -0
- package/build/services/otaInstallPolicy.js +117 -0
- package/build/services/otaInstallPolicy.js.map +1 -0
- package/build/services/otaLegacyMapping.d.ts +22 -0
- package/build/services/otaLegacyMapping.d.ts.map +1 -0
- package/build/services/otaLegacyMapping.js +56 -0
- package/build/services/otaLegacyMapping.js.map +1 -0
- package/build/services/otaManifestUrl.d.ts +2 -0
- package/build/services/otaManifestUrl.d.ts.map +1 -0
- package/build/services/otaManifestUrl.js +46 -0
- package/build/services/otaManifestUrl.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +18 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -0
- package/build/services/slimStreamStatus.js +36 -0
- package/build/services/slimStreamStatus.js.map +1 -0
- package/build/services/soniox/SonioxDirectService.d.ts +109 -0
- package/build/services/soniox/SonioxDirectService.d.ts.map +1 -0
- package/build/services/soniox/SonioxDirectService.js +449 -0
- package/build/services/soniox/SonioxDirectService.js.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts +121 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.js +301 -0
- package/build/services/soniox/SonioxRealtimeClient.js.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts +98 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.js +394 -0
- package/build/services/soniox/SonioxTokenAssembler.js.map +1 -0
- package/build/services/speakerProfileStoreInstance.d.ts +8 -0
- package/build/services/speakerProfileStoreInstance.d.ts.map +1 -0
- package/build/services/speakerProfileStoreInstance.js +24 -0
- package/build/services/speakerProfileStoreInstance.js.map +1 -0
- package/build/services/uiShim.d.ts +38 -0
- package/build/services/uiShim.d.ts.map +1 -0
- package/build/services/uiShim.js +369 -0
- package/build/services/uiShim.js.map +1 -0
- package/build/stores/apps.d.ts +104 -0
- package/build/stores/apps.d.ts.map +1 -0
- package/build/stores/apps.js +503 -0
- package/build/stores/apps.js.map +1 -0
- package/build/stores/bluetoothSettingKeys.d.ts +4 -0
- package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
- package/build/stores/bluetoothSettingKeys.js +33 -0
- package/build/stores/bluetoothSettingKeys.js.map +1 -0
- package/build/stores/cloudClientStatus.d.ts +9 -0
- package/build/stores/cloudClientStatus.d.ts.map +1 -0
- package/build/stores/cloudClientStatus.js +24 -0
- package/build/stores/cloudClientStatus.js.map +1 -0
- package/build/stores/connection.d.ts +22 -0
- package/build/stores/connection.d.ts.map +1 -0
- package/build/stores/connection.js +43 -0
- package/build/stores/connection.js.map +1 -0
- package/build/stores/core.d.ts +15 -0
- package/build/stores/core.d.ts.map +1 -0
- package/build/stores/core.js +21 -0
- package/build/stores/core.js.map +1 -0
- package/build/stores/display.d.ts +24 -0
- package/build/stores/display.d.ts.map +1 -0
- package/build/stores/display.js +96 -0
- package/build/stores/display.js.map +1 -0
- package/build/stores/gallerySync.d.ts +103 -0
- package/build/stores/gallerySync.d.ts.map +1 -0
- package/build/stores/gallerySync.js +219 -0
- package/build/stores/gallerySync.js.map +1 -0
- package/build/stores/glasses.d.ts +62 -0
- package/build/stores/glasses.d.ts.map +1 -0
- package/build/stores/glasses.js +208 -0
- package/build/stores/glasses.js.map +1 -0
- package/build/stores/settings.d.ts +54 -0
- package/build/stores/settings.d.ts.map +1 -0
- package/build/stores/settings.js +1200 -0
- package/build/stores/settings.js.map +1 -0
- package/build/stores/transcriptionDebug.d.ts +25 -0
- package/build/stores/transcriptionDebug.d.ts.map +1 -0
- package/build/stores/transcriptionDebug.js +0 -0
- package/build/stores/transcriptionDebug.js.map +1 -0
- package/build/types/applet.d.ts +101 -0
- package/build/types/applet.d.ts.map +1 -0
- package/build/types/applet.js +5 -0
- package/build/types/applet.js.map +1 -0
- package/build/types/asg.d.ts +53 -0
- package/build/types/asg.d.ts.map +1 -0
- package/build/types/asg.js +2 -0
- package/build/types/asg.js.map +1 -0
- package/build/types/capabilities/even-realities-g1.d.ts +12 -0
- package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g1.js +57 -0
- package/build/types/capabilities/even-realities-g1.js.map +1 -0
- package/build/types/capabilities/even-realities-g2.d.ts +12 -0
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g2.js +83 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -0
- package/build/types/capabilities/mentra-display.d.ts +12 -0
- package/build/types/capabilities/mentra-display.d.ts.map +1 -0
- package/build/types/capabilities/mentra-display.js +65 -0
- package/build/types/capabilities/mentra-display.js.map +1 -0
- package/build/types/capabilities/mentra-live.d.ts +12 -0
- package/build/types/capabilities/mentra-live.d.ts.map +1 -0
- package/build/types/capabilities/mentra-live.js +94 -0
- package/build/types/capabilities/mentra-live.js.map +1 -0
- package/build/types/capabilities/nimo.d.ts +13 -0
- package/build/types/capabilities/nimo.d.ts.map +1 -0
- package/build/types/capabilities/nimo.js +72 -0
- package/build/types/capabilities/nimo.js.map +1 -0
- package/build/types/capabilities/none.d.ts +13 -0
- package/build/types/capabilities/none.d.ts.map +1 -0
- package/build/types/capabilities/none.js +67 -0
- package/build/types/capabilities/none.js.map +1 -0
- package/build/types/capabilities/simulated-glasses.d.ts +13 -0
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
- package/build/types/capabilities/simulated-glasses.js +82 -0
- package/build/types/capabilities/simulated-glasses.js.map +1 -0
- package/build/types/capabilities/vuzix-z100.d.ts +12 -0
- package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
- package/build/types/capabilities/vuzix-z100.js +54 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -0
- package/build/types/enums.d.ts +22 -0
- package/build/types/enums.d.ts.map +1 -0
- package/build/types/enums.js +27 -0
- package/build/types/enums.js.map +1 -0
- package/build/types/hardware.d.ts +155 -0
- package/build/types/hardware.d.ts.map +1 -0
- package/build/types/hardware.js +52 -0
- package/build/types/hardware.js.map +1 -0
- package/build/types/index.d.ts +11 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +10 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/GlobalEventEmitter.d.ts +11 -0
- package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
- package/build/utils/GlobalEventEmitter.js +14 -0
- package/build/utils/GlobalEventEmitter.js.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
- package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.js +26 -0
- package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
- package/build/utils/configuredDevHost.d.ts +6 -0
- package/build/utils/configuredDevHost.d.ts.map +1 -0
- package/build/utils/configuredDevHost.js +19 -0
- package/build/utils/configuredDevHost.js.map +1 -0
- package/build/utils/debouncedPatch.d.ts +6 -0
- package/build/utils/debouncedPatch.d.ts.map +1 -0
- package/build/utils/debouncedPatch.js +25 -0
- package/build/utils/debouncedPatch.js.map +1 -0
- package/build/utils/devLogging.d.ts +26 -0
- package/build/utils/devLogging.d.ts.map +1 -0
- package/build/utils/devLogging.js +116 -0
- package/build/utils/devLogging.js.map +1 -0
- package/build/utils/devMiniappLaunch.d.ts +55 -0
- package/build/utils/devMiniappLaunch.d.ts.map +1 -0
- package/build/utils/devMiniappLaunch.js +175 -0
- package/build/utils/devMiniappLaunch.js.map +1 -0
- package/build/utils/diagnosticContext.d.ts +3 -0
- package/build/utils/diagnosticContext.d.ts.map +1 -0
- package/build/utils/diagnosticContext.js +122 -0
- package/build/utils/diagnosticContext.js.map +1 -0
- package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
- package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
- package/build/utils/display/composer/ColumnComposer.js +204 -0
- package/build/utils/display/composer/ColumnComposer.js.map +1 -0
- package/build/utils/display/composer/index.d.ts +9 -0
- package/build/utils/display/composer/index.d.ts.map +1 -0
- package/build/utils/display/composer/index.js +9 -0
- package/build/utils/display/composer/index.js.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.js +312 -0
- package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
- package/build/utils/display/helpers/ScrollView.d.ts +183 -0
- package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
- package/build/utils/display/helpers/ScrollView.js +257 -0
- package/build/utils/display/helpers/ScrollView.js.map +1 -0
- package/build/utils/display/helpers/index.d.ts +11 -0
- package/build/utils/display/helpers/index.d.ts.map +1 -0
- package/build/utils/display/helpers/index.js +10 -0
- package/build/utils/display/helpers/index.js.map +1 -0
- package/build/utils/display/index.d.ts +174 -0
- package/build/utils/display/index.d.ts.map +1 -0
- package/build/utils/display/index.js +188 -0
- package/build/utils/display/index.js.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.js +273 -0
- package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
- package/build/utils/display/measurer/index.d.ts +10 -0
- package/build/utils/display/measurer/index.d.ts.map +1 -0
- package/build/utils/display/measurer/index.js +11 -0
- package/build/utils/display/measurer/index.js.map +1 -0
- package/build/utils/display/measurer/script-detection.d.ts +53 -0
- package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
- package/build/utils/display/measurer/script-detection.js +184 -0
- package/build/utils/display/measurer/script-detection.js.map +1 -0
- package/build/utils/display/profiles/g1.d.ts +33 -0
- package/build/utils/display/profiles/g1.d.ts.map +1 -0
- package/build/utils/display/profiles/g1.js +213 -0
- package/build/utils/display/profiles/g1.js.map +1 -0
- package/build/utils/display/profiles/g2.d.ts +13 -0
- package/build/utils/display/profiles/g2.d.ts.map +1 -0
- package/build/utils/display/profiles/g2.js +34 -0
- package/build/utils/display/profiles/g2.js.map +1 -0
- package/build/utils/display/profiles/index.d.ts +12 -0
- package/build/utils/display/profiles/index.d.ts.map +1 -0
- package/build/utils/display/profiles/index.js +15 -0
- package/build/utils/display/profiles/index.js.map +1 -0
- package/build/utils/display/profiles/nex.d.ts +10 -0
- package/build/utils/display/profiles/nex.d.ts.map +1 -0
- package/build/utils/display/profiles/nex.js +150 -0
- package/build/utils/display/profiles/nex.js.map +1 -0
- package/build/utils/display/profiles/types.d.ts +103 -0
- package/build/utils/display/profiles/types.d.ts.map +1 -0
- package/build/utils/display/profiles/types.js +2 -0
- package/build/utils/display/profiles/types.js.map +1 -0
- package/build/utils/display/profiles/z100.d.ts +33 -0
- package/build/utils/display/profiles/z100.d.ts.map +1 -0
- package/build/utils/display/profiles/z100.js +182 -0
- package/build/utils/display/profiles/z100.js.map +1 -0
- package/build/utils/display/scene/anchor.d.ts +17 -0
- package/build/utils/display/scene/anchor.d.ts.map +1 -0
- package/build/utils/display/scene/anchor.js +33 -0
- package/build/utils/display/scene/anchor.js.map +1 -0
- package/build/utils/display/scene/degrade.d.ts +25 -0
- package/build/utils/display/scene/degrade.d.ts.map +1 -0
- package/build/utils/display/scene/degrade.js +64 -0
- package/build/utils/display/scene/degrade.js.map +1 -0
- package/build/utils/display/scene/differ.d.ts +38 -0
- package/build/utils/display/scene/differ.d.ts.map +1 -0
- package/build/utils/display/scene/differ.js +107 -0
- package/build/utils/display/scene/differ.js.map +1 -0
- package/build/utils/display/scene/index.d.ts +11 -0
- package/build/utils/display/scene/index.d.ts.map +1 -0
- package/build/utils/display/scene/index.js +7 -0
- package/build/utils/display/scene/index.js.map +1 -0
- package/build/utils/display/scene/process.d.ts +35 -0
- package/build/utils/display/scene/process.d.ts.map +1 -0
- package/build/utils/display/scene/process.js +201 -0
- package/build/utils/display/scene/process.js.map +1 -0
- package/build/utils/display/scene/store.d.ts +48 -0
- package/build/utils/display/scene/store.d.ts.map +1 -0
- package/build/utils/display/scene/store.js +0 -0
- package/build/utils/display/scene/store.js.map +1 -0
- package/build/utils/display/scene/types.d.ts +139 -0
- package/build/utils/display/scene/types.d.ts.map +1 -0
- package/build/utils/display/scene/types.js +0 -0
- package/build/utils/display/scene/types.js.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.js +471 -0
- package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
- package/build/utils/display/wrapper/index.d.ts +12 -0
- package/build/utils/display/wrapper/index.d.ts.map +1 -0
- package/build/utils/display/wrapper/index.js +12 -0
- package/build/utils/display/wrapper/index.js.map +1 -0
- package/build/utils/display/wrapper/types.d.ts +75 -0
- package/build/utils/display/wrapper/types.d.ts.map +1 -0
- package/build/utils/display/wrapper/types.js +11 -0
- package/build/utils/display/wrapper/types.js.map +1 -0
- package/build/utils/e2eMetrics.d.ts +6 -0
- package/build/utils/e2eMetrics.d.ts.map +1 -0
- package/build/utils/e2eMetrics.js +27 -0
- package/build/utils/e2eMetrics.js.map +1 -0
- package/build/utils/hardware/hardware.d.ts +42 -0
- package/build/utils/hardware/hardware.d.ts.map +1 -0
- package/build/utils/hardware/hardware.js +131 -0
- package/build/utils/hardware/hardware.js.map +1 -0
- package/build/utils/hardware/index.d.ts +2 -0
- package/build/utils/hardware/index.d.ts.map +1 -0
- package/build/utils/hardware/index.js +2 -0
- package/build/utils/hardware/index.js.map +1 -0
- package/build/utils/memory/search.d.ts +72 -0
- package/build/utils/memory/search.d.ts.map +1 -0
- package/build/utils/memory/search.js +178 -0
- package/build/utils/memory/search.js.map +1 -0
- package/build/utils/miniappDiagnostics.d.ts +64 -0
- package/build/utils/miniappDiagnostics.d.ts.map +1 -0
- package/build/utils/miniappDiagnostics.js +173 -0
- package/build/utils/miniappDiagnostics.js.map +1 -0
- package/build/utils/miniappGlobals.d.ts +59 -0
- package/build/utils/miniappGlobals.d.ts.map +1 -0
- package/build/utils/miniappGlobals.js +223 -0
- package/build/utils/miniappGlobals.js.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
- package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
- package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
- package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
- package/build/utils/permissions/galleryDisplayName.js +25 -0
- package/build/utils/permissions/galleryDisplayName.js.map +1 -0
- package/build/utils/speakerEmbedding.d.ts +8 -0
- package/build/utils/speakerEmbedding.d.ts.map +1 -0
- package/build/utils/speakerEmbedding.js +63 -0
- package/build/utils/speakerEmbedding.js.map +1 -0
- package/build/utils/storage/index.d.ts +3 -0
- package/build/utils/storage/index.d.ts.map +1 -0
- package/build/utils/storage/index.js +3 -0
- package/build/utils/storage/index.js.map +1 -0
- package/build/utils/storage/storage.d.ts +24 -0
- package/build/utils/storage/storage.d.ts.map +1 -0
- package/build/utils/storage/storage.js +85 -0
- package/build/utils/storage/storage.js.map +1 -0
- package/build/utils/storage/zip.d.ts +3 -0
- package/build/utils/storage/zip.d.ts.map +1 -0
- package/build/utils/storage/zip.js +14 -0
- package/build/utils/storage/zip.js.map +1 -0
- package/build/utils/timers/index.d.ts +3 -0
- package/build/utils/timers/index.d.ts.map +1 -0
- package/build/utils/timers/index.js +3 -0
- package/build/utils/timers/index.js.map +1 -0
- package/build/utils/timers/timers.d.ts +9 -0
- package/build/utils/timers/timers.d.ts.map +1 -0
- package/build/utils/timers/timers.js +142 -0
- package/build/utils/timers/timers.js.map +1 -0
- package/package.json +122 -0
- package/src/assets/silence.wav +0 -0
- package/src/devtools.ts +13 -0
- package/src/engine.ts +198 -0
- package/src/facades/dev.ts +213 -0
- package/src/facades/display.ts +17 -0
- package/src/facades/displayMirror.ts +33 -0
- package/src/facades/gallery.ts +69 -0
- package/src/facades/glasses.ts +219 -0
- package/src/facades/glassesSettings.ts +57 -0
- package/src/facades/glassesWifi.ts +68 -0
- package/src/facades/maps.ts +13 -0
- package/src/facades/memory.ts +46 -0
- package/src/facades/miniapps.ts +62 -0
- package/src/facades/notifications.ts +14 -0
- package/src/facades/ota.ts +177 -0
- package/src/facades/pairing.ts +329 -0
- package/src/facades/permissions.ts +165 -0
- package/src/facades/phoneNotifications.ts +41 -0
- package/src/facades/providerKeys.ts +31 -0
- package/src/facades/reports.ts +180 -0
- package/src/facades/session.ts +54 -0
- package/src/facades/settings.ts +57 -0
- package/src/facades/speakers.ts +152 -0
- package/src/facades/speech.ts +49 -0
- package/src/index.ts +214 -0
- package/src/internal.ts +155 -0
- package/src/runtime/bootstrap.ts +159 -0
- package/src/runtime/config.ts +155 -0
- package/src/runtime/scanQrSeam.ts +20 -0
- package/src/runtime/streamConfig.ts +34 -0
- package/src/services/AiTierResolution.ts +106 -0
- package/src/services/AppRegistry.ts +1245 -0
- package/src/services/AudioCloudUplink.ts +56 -0
- package/src/services/AudioPlaybackService.ts +873 -0
- package/src/services/AutomaticReportResult.ts +50 -0
- package/src/services/BlobStore.ts +823 -0
- package/src/services/CaptionsTesterReportService.ts +107 -0
- package/src/services/CloudAudioSubscriptionSync.ts +53 -0
- package/src/services/CloudClientService.ts +1031 -0
- package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
- package/src/services/ConnectionCoordinator.ts +65 -0
- package/src/services/DevServerBridge.ts +334 -0
- package/src/services/DeviceEventRouter.ts +266 -0
- package/src/services/DeviceStoreHydration.ts +130 -0
- package/src/services/DisplayProcessor.ts +775 -0
- package/src/services/ForegroundLocationPermission.ts +24 -0
- package/src/services/GlassesReadiness.ts +103 -0
- package/src/services/GlassesSettingsSync.ts +140 -0
- package/src/services/GlassesStatusProjection.ts +73 -0
- package/src/services/HeadingService.ts +122 -0
- package/src/services/HotspotOtaTransport.ts +184 -0
- package/src/services/HotspotShutdown.ts +41 -0
- package/src/services/JSCrashController.ts +189 -0
- package/src/services/JSCrashloopReportService.ts +66 -0
- package/src/services/JSLogPipeline.ts +166 -0
- package/src/services/JSRouter.ts +555 -0
- package/src/services/LocalDisplayManager.ts +815 -0
- package/src/services/LocalMiniappDataMigration.ts +102 -0
- package/src/services/LocalMiniappRuntime.ts +5747 -0
- package/src/services/LocalMiniappStorage.ts +82 -0
- package/src/services/LocalMiniappUserIdentity.ts +79 -0
- package/src/services/LocalSttFallbackCoordinator.ts +247 -0
- package/src/services/MapboxTokenService.ts +118 -0
- package/src/services/MemoryCapture.ts +61 -0
- package/src/services/MemoryStore.ts +633 -0
- package/src/services/MicStateCoordinator.ts +259 -0
- package/src/services/MiniappEngine.ts +143 -0
- package/src/services/MiniappLauncher.ts +365 -0
- package/src/services/MiniappLiveness.ts +24 -0
- package/src/services/MiniappRunningRegistry.ts +57 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/NativeNavigationService.ts +176 -0
- package/src/services/NavigationHandlers.ts +527 -0
- package/src/services/NavigationService.ts +926 -0
- package/src/services/NotificationsEmitter.ts +49 -0
- package/src/services/OfflineSpeechModelService.ts +168 -0
- package/src/services/OtaArtifactDownloader.ts +312 -0
- package/src/services/OtaInstallCoordinator.ts +1707 -0
- package/src/services/OtaService.ts +89 -0
- package/src/services/OtaUpdateCheckService.ts +550 -0
- package/src/services/PairingIdentity.ts +154 -0
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +61 -0
- package/src/services/PhoneCameraFovCoordinator.ts +210 -0
- package/src/services/PhoneLocationService.ts +120 -0
- package/src/services/PhoneNotificationsSync.ts +46 -0
- package/src/services/PhonePhotoCoordinator.ts +435 -0
- package/src/services/PhoneStreamCoordinator.ts +874 -0
- package/src/services/PhoneVideoCoordinator.ts +203 -0
- package/src/services/ProviderKeyValidation.ts +57 -0
- package/src/services/STTModelManager.ts +434 -0
- package/src/services/SceneRenderer.ts +320 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/SpeakerIdModelManager.ts +151 -0
- package/src/services/SpeakerIdSync.ts +79 -0
- package/src/services/SpeakerLabelResolver.ts +140 -0
- package/src/services/SpeakerProfileStore.ts +265 -0
- package/src/services/SpeakerSegmentResolver.ts +194 -0
- package/src/services/StreamLifecycleController.ts +203 -0
- package/src/services/SupportProfileSync.ts +218 -0
- package/src/services/TTSModelManager.ts +466 -0
- package/src/services/TranscriptionRouting.ts +47 -0
- package/src/services/TtsTextSanitizer.ts +66 -0
- package/src/services/UIRouter.ts +250 -0
- package/src/services/WebviewBridge.ts +50 -0
- package/src/services/WifiAdbRequest.ts +53 -0
- package/src/services/asg/GalleryMediaIntegrityReportService.ts +72 -0
- package/src/services/asg/asgCameraApi.ts +1786 -0
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryMediaValidation.ts +185 -0
- package/src/services/asg/galleryNotices.ts +61 -0
- package/src/services/asg/galleryPathMigration.ts +22 -0
- package/src/services/asg/gallerySettingsService.ts +68 -0
- package/src/services/asg/gallerySyncNotifications.ts +235 -0
- package/src/services/asg/gallerySyncService.ts +2278 -0
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +169 -0
- package/src/services/asg/localStorageService.ts +652 -0
- package/src/services/asg/mediaProcessingQueue.ts +518 -0
- package/src/services/audioPlaybackAssets.ts +8 -0
- package/src/services/blobPaths.ts +86 -0
- package/src/services/cloudStreamApi.ts +142 -0
- package/src/services/effectiveCapabilities.ts +27 -0
- package/src/services/gallerySyncClock.ts +39 -0
- package/src/services/glassesClockSync.ts +115 -0
- package/src/services/manifestActions.ts +80 -0
- package/src/services/manifestVersionGate.ts +43 -0
- package/src/services/memoryStoreInstance.ts +70 -0
- package/src/services/navigation/roadNameResolver.ts +103 -0
- package/src/services/navigation/routesApiCodec.ts +69 -0
- package/src/services/otaDisplayState.ts +156 -0
- package/src/services/otaInstallPolicy.ts +132 -0
- package/src/services/otaLegacyMapping.ts +71 -0
- package/src/services/otaManifestUrl.ts +53 -0
- package/src/services/slimStreamStatus.ts +39 -0
- package/src/services/soniox/SonioxDirectService.ts +517 -0
- package/src/services/soniox/SonioxRealtimeClient.ts +349 -0
- package/src/services/soniox/SonioxTokenAssembler.ts +451 -0
- package/src/services/speakerProfileStoreInstance.ts +25 -0
- package/src/services/uiShim.ts +375 -0
- package/src/stores/apps.ts +626 -0
- package/src/stores/bluetoothSettingKeys.ts +35 -0
- package/src/stores/cloudClientStatus.ts +37 -0
- package/src/stores/connection.ts +69 -0
- package/src/stores/core.ts +32 -0
- package/src/stores/display.ts +121 -0
- package/src/stores/gallerySync.ts +384 -0
- package/src/stores/glasses.ts +314 -0
- package/src/stores/settings.ts +1299 -0
- package/src/stores/transcriptionDebug.ts +0 -0
- package/src/types/applet.ts +121 -0
- package/src/types/asg.ts +58 -0
- package/src/types/capabilities/even-realities-g1.ts +70 -0
- package/src/types/capabilities/even-realities-g2.ts +98 -0
- package/src/types/capabilities/mentra-display.ts +78 -0
- package/src/types/capabilities/mentra-live.ts +106 -0
- package/src/types/capabilities/nimo.ts +84 -0
- package/src/types/capabilities/none.ts +79 -0
- package/src/types/capabilities/simulated-glasses.ts +95 -0
- package/src/types/capabilities/vuzix-z100.ts +67 -0
- package/src/types/enums.ts +27 -0
- package/src/types/hardware.ts +220 -0
- package/src/types/index.ts +38 -0
- package/src/utils/GlobalEventEmitter.ts +15 -0
- package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
- package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
- package/src/utils/configuredDevHost.ts +17 -0
- package/src/utils/debouncedPatch.ts +28 -0
- package/src/utils/devLogging.ts +140 -0
- package/src/utils/devMiniappLaunch.ts +196 -0
- package/src/utils/diagnosticContext.ts +159 -0
- package/src/utils/display/composer/ColumnComposer.ts +285 -0
- package/src/utils/display/composer/index.ts +15 -0
- package/src/utils/display/helpers/DisplayHelpers.ts +409 -0
- package/src/utils/display/helpers/ScrollView.ts +326 -0
- package/src/utils/display/helpers/index.ts +14 -0
- package/src/utils/display/index.ts +273 -0
- package/src/utils/display/measurer/TextMeasurer.ts +346 -0
- package/src/utils/display/measurer/index.ts +21 -0
- package/src/utils/display/measurer/script-detection.ts +218 -0
- package/src/utils/display/profiles/g1.ts +236 -0
- package/src/utils/display/profiles/g2.ts +39 -0
- package/src/utils/display/profiles/index.ts +28 -0
- package/src/utils/display/profiles/nex.ts +166 -0
- package/src/utils/display/profiles/types.ts +132 -0
- package/src/utils/display/profiles/z100.ts +198 -0
- package/src/utils/display/scene/anchor.ts +39 -0
- package/src/utils/display/scene/degrade.ts +80 -0
- package/src/utils/display/scene/differ.ts +128 -0
- package/src/utils/display/scene/index.ts +24 -0
- package/src/utils/display/scene/process.ts +228 -0
- package/src/utils/display/scene/store.ts +0 -0
- package/src/utils/display/scene/types.ts +0 -0
- package/src/utils/display/wrapper/TextWrapper.ts +546 -0
- package/src/utils/display/wrapper/index.ts +15 -0
- package/src/utils/display/wrapper/types.ts +102 -0
- package/src/utils/e2eMetrics.ts +30 -0
- package/src/utils/hardware/hardware.ts +171 -0
- package/src/utils/hardware/index.ts +1 -0
- package/src/utils/memory/search.ts +204 -0
- package/src/utils/miniappDiagnostics.ts +226 -0
- package/src/utils/miniappGlobals.ts +259 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
- package/src/utils/permissions/galleryDisplayName.ts +28 -0
- package/src/utils/speakerEmbedding.ts +58 -0
- package/src/utils/storage/index.ts +2 -0
- package/src/utils/storage/storage.ts +101 -0
- package/src/utils/storage/zip.ts +13 -0
- package/src/utils/timers/index.ts +2 -0
- package/src/utils/timers/timers.ts +175 -0
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalDisplayManager
|
|
3
|
+
*
|
|
4
|
+
* Phone-side arbiter for display requests originating from LOCAL miniapps
|
|
5
|
+
* (the @glassly/miniapp SDK). Mirrors the user-facing behavior of the cloud
|
|
6
|
+
* DisplayManager for the features that matter on the phone:
|
|
7
|
+
*
|
|
8
|
+
* - boot message ("Starting <AppName>…") with a bounded window
|
|
9
|
+
* - durationMs auto-clear
|
|
10
|
+
* - core-app vs background-app arbitration with a background lock
|
|
11
|
+
*
|
|
12
|
+
* Scope is deliberately local-only. Cloud-originated displays are untouched
|
|
13
|
+
* and may race with local displays during dev; that's acceptable per plan
|
|
14
|
+
* (agents/local-display-manager-plan.md).
|
|
15
|
+
*
|
|
16
|
+
* Display pacing is NOT done here. A JS-side ~300ms throttle used to live in
|
|
17
|
+
* this class, but JS timers (and therefore the throttle's trailing flush) do
|
|
18
|
+
* not fire on schedule while the iOS app is suspended in the background — so
|
|
19
|
+
* under streaming captions, updates accumulated and then flushed in a burst on
|
|
20
|
+
* the next wake. Pacing + last-wins coalescing now live in the native per-device
|
|
21
|
+
* queue (e.g. G2's event-driven EvenHub queue), which drains off the same BLE
|
|
22
|
+
* events that wake the process. This class forwards every request straight
|
|
23
|
+
* through; the native layer collapses redundant frames per display target.
|
|
24
|
+
*
|
|
25
|
+
* The remaining BgTimer use (boot window, durationMs expiry) is timing that
|
|
26
|
+
* does not need sub-second background fidelity.
|
|
27
|
+
*/
|
|
28
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk/internal";
|
|
29
|
+
import displayProcessor from "./DisplayProcessor";
|
|
30
|
+
import { useDisplayStore } from "../stores/display";
|
|
31
|
+
import sceneRenderer from "./SceneRenderer";
|
|
32
|
+
import { isGlassesConnected } from "./GlassesReadiness";
|
|
33
|
+
import { useGlassesStore } from "../stores/glasses";
|
|
34
|
+
import { BgTimer } from "../utils/timers";
|
|
35
|
+
// =============================================================================
|
|
36
|
+
// Constants
|
|
37
|
+
// =============================================================================
|
|
38
|
+
const LOG_TAG = "LOCAL_DISPLAY";
|
|
39
|
+
const BOOT_DURATION_MS = 1500;
|
|
40
|
+
// Mirrors cloud lease for a bg app holding the display. The bg app has to
|
|
41
|
+
// keep driving the display to hold the lock; if it goes quiet and the core
|
|
42
|
+
// app wants the screen, we release.
|
|
43
|
+
const BACKGROUND_LOCK_TIMEOUT_MS = 10_000;
|
|
44
|
+
// Sentinel package name used as the "source" of the system boot message.
|
|
45
|
+
const SYSTEM_BOOT_PKG = "system.boot";
|
|
46
|
+
// Sentinel package for transient OS notices (quota exhausted, etc.).
|
|
47
|
+
const SYSTEM_NOTICE_PKG = "system.notice";
|
|
48
|
+
const SYSTEM_NOTICE_DURATION_MS = 6_000;
|
|
49
|
+
/** "Render nothing" — an empty scene or an explicit clear_view layout. */
|
|
50
|
+
function isClearPayload(payload) {
|
|
51
|
+
if (payload.scene)
|
|
52
|
+
return payload.scene.length === 0;
|
|
53
|
+
return payload.layout?.layoutType === "clear_view";
|
|
54
|
+
}
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// LocalDisplayManager
|
|
57
|
+
// =============================================================================
|
|
58
|
+
class LocalDisplayManager {
|
|
59
|
+
static instance = null;
|
|
60
|
+
coreApp = null;
|
|
61
|
+
coreAppDisplay = null;
|
|
62
|
+
currentDisplay = null;
|
|
63
|
+
backgroundLock = null;
|
|
64
|
+
bootingApp = null;
|
|
65
|
+
bootQueue = new Map();
|
|
66
|
+
expiryTimerId = null;
|
|
67
|
+
/** Reconnect-replay subscription state (attachToRuntime). */
|
|
68
|
+
runtimeAttached = false;
|
|
69
|
+
glassesWasConnected = false;
|
|
70
|
+
unsubscribeGlassesStatus = null;
|
|
71
|
+
/** Injectable for tests. */
|
|
72
|
+
now = () => Date.now();
|
|
73
|
+
constructor() { }
|
|
74
|
+
static getInstance() {
|
|
75
|
+
if (!LocalDisplayManager.instance) {
|
|
76
|
+
LocalDisplayManager.instance = new LocalDisplayManager();
|
|
77
|
+
}
|
|
78
|
+
return LocalDisplayManager.instance;
|
|
79
|
+
}
|
|
80
|
+
// ===========================================================================
|
|
81
|
+
// Lifecycle API (called from MiniappHost)
|
|
82
|
+
// ===========================================================================
|
|
83
|
+
/**
|
|
84
|
+
* A new local miniapp just mounted. Start the boot window.
|
|
85
|
+
* Calling this for a different pkg while another is booting cancels the
|
|
86
|
+
* previous boot.
|
|
87
|
+
*/
|
|
88
|
+
onMount(packageName, displayName) {
|
|
89
|
+
console.log(`${LOG_TAG}: onMount(${packageName}, "${displayName}")`);
|
|
90
|
+
// Snapshot whatever's on the glasses BEFORE the boot text overwrites it.
|
|
91
|
+
// registerApp fires onMount for every spawn — including a background app or
|
|
92
|
+
// a crash-respawn while another app is foreground — so a boot that times out
|
|
93
|
+
// without rendering must put the prior frame back rather than blank it.
|
|
94
|
+
// Never snapshot the boot text itself: back-to-back mounts (the autostart
|
|
95
|
+
// restore loop, crash-respawn chains) land while the previous app's
|
|
96
|
+
// "Starting X…" is still on the glasses, and endBoot would "restore" that
|
|
97
|
+
// stale, expiry-less frame permanently. Across chained boots, inherit the
|
|
98
|
+
// original pre-boot frame instead.
|
|
99
|
+
const inherited = this.bootingApp ? this.bootingApp.preBoot : this.currentDisplay;
|
|
100
|
+
const preBoot = inherited?.packageName === SYSTEM_BOOT_PKG ? null : inherited;
|
|
101
|
+
// Cancel any in-flight boot for a prior app.
|
|
102
|
+
this.cancelBoot();
|
|
103
|
+
// Send the boot message directly (bypass arbitration — this is a system
|
|
104
|
+
// display). Goes through sendNow so scene devices render it as a scene:
|
|
105
|
+
// otherwise every app start would be a legacy→scene transition on the
|
|
106
|
+
// glasses (which costs a blanking clear).
|
|
107
|
+
this.sendNow(SYSTEM_BOOT_PKG, {
|
|
108
|
+
view: "main",
|
|
109
|
+
layout: { layoutType: "text_wall", text: `Starting ${displayName}…` },
|
|
110
|
+
});
|
|
111
|
+
const timerId = BgTimer.setTimeout(() => {
|
|
112
|
+
this.endBoot();
|
|
113
|
+
}, BOOT_DURATION_MS);
|
|
114
|
+
this.bootingApp = {
|
|
115
|
+
packageName,
|
|
116
|
+
displayName,
|
|
117
|
+
startedAt: this.now(),
|
|
118
|
+
timerId,
|
|
119
|
+
preBoot,
|
|
120
|
+
};
|
|
121
|
+
this.bootQueue.clear();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Show a transient system-level text wall on the glasses (quota exhausted,
|
|
125
|
+
* etc.). Bypasses arbitration like the boot message — an OS notice must not
|
|
126
|
+
* lose to a background app's frame — and rides the existing durationMs
|
|
127
|
+
* expiry, which restores the core app's display (or clears) afterwards.
|
|
128
|
+
* Skipped during a boot window: racing the "Starting X…" flow would strand
|
|
129
|
+
* whichever frame lost.
|
|
130
|
+
*/
|
|
131
|
+
showSystemNotice(text, durationMs = SYSTEM_NOTICE_DURATION_MS) {
|
|
132
|
+
if (!isGlassesConnected(useGlassesStore.getState().connection))
|
|
133
|
+
return;
|
|
134
|
+
if (this.bootingApp)
|
|
135
|
+
return;
|
|
136
|
+
console.log(`${LOG_TAG}: showSystemNotice("${text}")`);
|
|
137
|
+
this.sendNow(SYSTEM_NOTICE_PKG, {
|
|
138
|
+
view: "main",
|
|
139
|
+
layout: { layoutType: "text_wall", text },
|
|
140
|
+
durationMs,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Mark which miniapp is the "core" (foreground) app. Pass null when no local
|
|
145
|
+
* miniapp is foreground.
|
|
146
|
+
*/
|
|
147
|
+
onCoreAppChange(packageName) {
|
|
148
|
+
if (this.coreApp === packageName)
|
|
149
|
+
return;
|
|
150
|
+
console.log(`${LOG_TAG}: onCoreAppChange(${packageName ?? "null"})`);
|
|
151
|
+
this.coreApp = packageName;
|
|
152
|
+
// No core app means no saved frame to restore on the next unmount.
|
|
153
|
+
// Without this, the previous core's last frame can flicker back onto
|
|
154
|
+
// the glasses when the user-initiated clear is followed by an
|
|
155
|
+
// onUnmount that still finds a populated coreAppDisplay.
|
|
156
|
+
if (packageName === null) {
|
|
157
|
+
this.coreAppDisplay = null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** Report-safe ownership snapshot for incident diagnostics. */
|
|
161
|
+
getDiagnosticSnapshot() {
|
|
162
|
+
return {
|
|
163
|
+
coreAppPackageName: this.coreApp,
|
|
164
|
+
currentDisplayPackageName: this.currentDisplay?.packageName ?? null,
|
|
165
|
+
backgroundLockPackageName: this.backgroundLock?.packageName ?? null,
|
|
166
|
+
bootingPackageName: this.bootingApp?.packageName ?? null,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* A local miniapp is going away. Clean up all state associated with it.
|
|
171
|
+
*/
|
|
172
|
+
onUnmount(packageName) {
|
|
173
|
+
console.log(`${LOG_TAG}: onUnmount(${packageName})`);
|
|
174
|
+
// If this was the booting app, cancel boot — and don't strand its
|
|
175
|
+
// "Starting X…" text (a system frame with no expiry): put back what the
|
|
176
|
+
// boot covered, or clear.
|
|
177
|
+
if (this.bootingApp?.packageName === packageName) {
|
|
178
|
+
const preBoot = this.bootingApp.preBoot;
|
|
179
|
+
this.cancelBoot();
|
|
180
|
+
if (this.currentDisplay?.packageName === SYSTEM_BOOT_PKG) {
|
|
181
|
+
// The preBoot owner may have forfeited its frame during the boot
|
|
182
|
+
// window (a clear parked in the boot queue) — don't resurrect it.
|
|
183
|
+
const ownerQueued = preBoot ? this.bootQueue.get(preBoot.packageName) : undefined;
|
|
184
|
+
const preBootForfeited = ownerQueued !== undefined && isClearPayload(ownerQueued.payload);
|
|
185
|
+
if (preBoot && !preBootForfeited && (preBoot.expiresAt === null || preBoot.expiresAt > this.now())) {
|
|
186
|
+
this.restoreDisplay(preBoot);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
this.sendClear();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
this.bootQueue.get(packageName)?.resolve?.({ status: "blocked", reason: "app stopped" });
|
|
194
|
+
this.bootQueue.delete(packageName);
|
|
195
|
+
// Forget the app's retained scenes — nothing left to replay for it.
|
|
196
|
+
sceneRenderer.clearApp(packageName);
|
|
197
|
+
// Release bg lock if this app held it.
|
|
198
|
+
if (this.backgroundLock?.packageName === packageName) {
|
|
199
|
+
this.backgroundLock = null;
|
|
200
|
+
}
|
|
201
|
+
// Drop the saved core frame if the core's context is going away — the
|
|
202
|
+
// frame belongs to a dead context and must not be restored later. The
|
|
203
|
+
// coreApp POINTER itself is NOT cleared here: it is derived state owned
|
|
204
|
+
// by the apps-store reconciler. A liveness/crash respawn tears the
|
|
205
|
+
// context down (this path) without any store change — the app is still
|
|
206
|
+
// "running" — and clearing the pointer here would leave the respawned
|
|
207
|
+
// foreground app arbitrating as background until an unrelated store
|
|
208
|
+
// write happened to re-run the reconciler. Real stops release the slot
|
|
209
|
+
// via the store (running → false → reconciler → onCoreAppChange(null)).
|
|
210
|
+
if (this.coreApp === packageName) {
|
|
211
|
+
this.coreAppDisplay = null;
|
|
212
|
+
}
|
|
213
|
+
// If this app owned the current on-glasses display, clear it (and maybe
|
|
214
|
+
// restore the core app's display if it still has time left).
|
|
215
|
+
if (this.currentDisplay?.packageName === packageName) {
|
|
216
|
+
this.clearExpiryTimer();
|
|
217
|
+
this.currentDisplay = null;
|
|
218
|
+
this.tryRestoreCoreDisplay();
|
|
219
|
+
if (!this.currentDisplay) {
|
|
220
|
+
// Nothing to restore → clear the glasses.
|
|
221
|
+
this.sendClear();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ===========================================================================
|
|
226
|
+
// Display request API (called from LocalMiniappRuntime.handleDisplay)
|
|
227
|
+
// ===========================================================================
|
|
228
|
+
/**
|
|
229
|
+
* A miniapp requested a display. Routes through boot queue, arbitration,
|
|
230
|
+
* and throttle. This is the only public entry point for miniapp display
|
|
231
|
+
* traffic on the local path.
|
|
232
|
+
*
|
|
233
|
+
* `resolve`, when provided (render() requests), is guaranteed to be called
|
|
234
|
+
* exactly once with the request's outcome — including for requests parked in
|
|
235
|
+
* the boot queue (resolved when drained or superseded).
|
|
236
|
+
*/
|
|
237
|
+
request(packageName, payload, resolve) {
|
|
238
|
+
// Dashboard view: pass straight through (no throttle/arbitration). Local
|
|
239
|
+
// dashboard rendering is currently a stub on the phone anyway.
|
|
240
|
+
if (payload.view === "dashboard") {
|
|
241
|
+
this.sendNow(packageName, payload, resolve);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// During boot, any app's requests go into the queue. If the booting app
|
|
245
|
+
// itself makes its first display call, end boot early and drain.
|
|
246
|
+
if (this.bootingApp) {
|
|
247
|
+
const superseded = this.bootQueue.get(packageName);
|
|
248
|
+
superseded?.resolve?.({ status: "blocked", reason: "superseded by a newer frame" });
|
|
249
|
+
this.bootQueue.set(packageName, { payload, resolve });
|
|
250
|
+
if (this.bootingApp.packageName === packageName) {
|
|
251
|
+
this.endBoot();
|
|
252
|
+
}
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
this.arbitrateAndSend(packageName, payload, resolve);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* End a package's temporary display early. If it currently owns the main
|
|
259
|
+
* view, release its background lock and restore the foreground miniapp's
|
|
260
|
+
* saved frame. A dismissal for a package that is no longer visible is a
|
|
261
|
+
* no-op.
|
|
262
|
+
*/
|
|
263
|
+
dismiss(packageName) {
|
|
264
|
+
this.handleExpiry(packageName);
|
|
265
|
+
}
|
|
266
|
+
// ===========================================================================
|
|
267
|
+
// Internals — arbitration
|
|
268
|
+
// ===========================================================================
|
|
269
|
+
arbitrateAndSend(packageName, payload, resolve) {
|
|
270
|
+
const now = this.now();
|
|
271
|
+
// Expire a stale bg lock before arbitrating.
|
|
272
|
+
if (this.backgroundLock && now > this.backgroundLock.expiresAt) {
|
|
273
|
+
this.backgroundLock = null;
|
|
274
|
+
}
|
|
275
|
+
// A clear ("render nothing") means "I'm done with the display" — it is a
|
|
276
|
+
// forfeit, not a frame. A background app releases its lock and the core
|
|
277
|
+
// app's still-valid display comes back; treating it as a render instead
|
|
278
|
+
// would RENEW the lock with an empty frame and blank the glasses while
|
|
279
|
+
// still blocking everyone else.
|
|
280
|
+
if (isClearPayload(payload)) {
|
|
281
|
+
this.handleAppClear(packageName, resolve);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const isCore = packageName === this.coreApp;
|
|
285
|
+
if (isCore) {
|
|
286
|
+
// Save so we can restore later.
|
|
287
|
+
this.coreAppDisplay = {
|
|
288
|
+
packageName,
|
|
289
|
+
processedEvent: {}, // filled by sendNow
|
|
290
|
+
scene: payload.scene,
|
|
291
|
+
expiresAt: payload.durationMs ? now + payload.durationMs : null,
|
|
292
|
+
};
|
|
293
|
+
// If a bg app holds the lock AND is currently on the glasses, core is
|
|
294
|
+
// blocked. The saved coreAppDisplay surfaces when the bg app expires
|
|
295
|
+
// or unmounts.
|
|
296
|
+
const bgHoldsAndDisplays = this.backgroundLock &&
|
|
297
|
+
this.currentDisplay &&
|
|
298
|
+
this.currentDisplay.packageName === this.backgroundLock.packageName;
|
|
299
|
+
if (bgHoldsAndDisplays) {
|
|
300
|
+
resolve?.({ status: "blocked", reason: "a background app holds the display" });
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
// Core can display. If a bg lock exists but holder isn't actively on
|
|
304
|
+
// the glasses, release it.
|
|
305
|
+
if (this.backgroundLock && !bgHoldsAndDisplays) {
|
|
306
|
+
this.backgroundLock = null;
|
|
307
|
+
}
|
|
308
|
+
this.sendNow(packageName, payload, resolve);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
// Non-core: this is a background app.
|
|
312
|
+
if (this.backgroundLock && this.backgroundLock.packageName !== packageName) {
|
|
313
|
+
// Another bg app already holds the lock — drop.
|
|
314
|
+
resolve?.({ status: "blocked", reason: "another background app holds the display" });
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
// Acquire or bump the lock.
|
|
318
|
+
if (!this.backgroundLock) {
|
|
319
|
+
this.backgroundLock = {
|
|
320
|
+
packageName,
|
|
321
|
+
acquiredAt: now,
|
|
322
|
+
expiresAt: now + BACKGROUND_LOCK_TIMEOUT_MS,
|
|
323
|
+
lastActiveTime: now,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
this.backgroundLock.lastActiveTime = now;
|
|
328
|
+
this.backgroundLock.expiresAt = now + BACKGROUND_LOCK_TIMEOUT_MS;
|
|
329
|
+
}
|
|
330
|
+
this.sendNow(packageName, payload, resolve);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* An app cleared its display ("render nothing"). Same semantics as its
|
|
334
|
+
* frame expiring: give up ownership, restore the core app's still-valid
|
|
335
|
+
* display if there is one, otherwise clear the glasses.
|
|
336
|
+
*/
|
|
337
|
+
handleAppClear(packageName, resolve) {
|
|
338
|
+
// Forget the app's retained scene state — its next render starts fresh.
|
|
339
|
+
sceneRenderer.clearApp(packageName);
|
|
340
|
+
if (this.backgroundLock?.packageName === packageName) {
|
|
341
|
+
this.backgroundLock = null;
|
|
342
|
+
}
|
|
343
|
+
if (this.coreApp === packageName) {
|
|
344
|
+
this.coreAppDisplay = null;
|
|
345
|
+
}
|
|
346
|
+
if (this.currentDisplay?.packageName === packageName) {
|
|
347
|
+
this.clearExpiryTimer();
|
|
348
|
+
this.currentDisplay = null;
|
|
349
|
+
this.tryRestoreCoreDisplay();
|
|
350
|
+
if (!this.currentDisplay) {
|
|
351
|
+
this.sendClear();
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
resolve?.({ status: "displayed" });
|
|
355
|
+
}
|
|
356
|
+
// ===========================================================================
|
|
357
|
+
// Internals — send
|
|
358
|
+
// ===========================================================================
|
|
359
|
+
sendNow(packageName, payload, resolve) {
|
|
360
|
+
const expiresAt = payload.durationMs ? this.now() + payload.durationMs : null;
|
|
361
|
+
const view = (payload.view === "dashboard" ? "dashboard" : "main");
|
|
362
|
+
// Scene requests — and legacy layouts a positioning device can render as a
|
|
363
|
+
// scene (sugar, old bundles) — go through the scene pipeline. Everything
|
|
364
|
+
// else stays on the legacy path.
|
|
365
|
+
let sceneElements = payload.scene ?? null;
|
|
366
|
+
if (!sceneElements && payload.layout) {
|
|
367
|
+
const caps = sceneRenderer.currentCapabilities();
|
|
368
|
+
if (caps?.canPosition) {
|
|
369
|
+
sceneElements = sceneRenderer.convertLegacyLayout(payload.layout, caps);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (sceneElements) {
|
|
373
|
+
this.sendScene(packageName, view, sceneElements, expiresAt, resolve);
|
|
374
|
+
}
|
|
375
|
+
else if (payload.layout) {
|
|
376
|
+
// This layout bypasses the scene pipeline (clear_view, dashboard_card,
|
|
377
|
+
// unknown types, or a non-positioning device). If this (app, view) had a
|
|
378
|
+
// retained scene, the glasses no longer match it — reset the diff
|
|
379
|
+
// baseline so the next render() repaints from empty instead of skipping
|
|
380
|
+
// "unchanged" elements.
|
|
381
|
+
sceneRenderer.resetBaseline(packageName, view);
|
|
382
|
+
const rawEvent = {
|
|
383
|
+
view: payload.view ?? "main",
|
|
384
|
+
layout: payload.layout,
|
|
385
|
+
};
|
|
386
|
+
if (payload.durationMs !== undefined) {
|
|
387
|
+
rawEvent.durationMs = payload.durationMs;
|
|
388
|
+
}
|
|
389
|
+
this.sendToNative(packageName, rawEvent, expiresAt);
|
|
390
|
+
resolve?.({ status: "displayed" });
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
// A scene payload on a device with no display block at all.
|
|
394
|
+
resolve?.({ status: "blocked", reason: "no display connected" });
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
// If core app fired, refresh the saved snapshot with the actual processed
|
|
398
|
+
// event so restore uses the wrapped text (legacy) / the retained scene.
|
|
399
|
+
if (packageName === this.coreApp && this.currentDisplay) {
|
|
400
|
+
this.coreAppDisplay = {
|
|
401
|
+
packageName,
|
|
402
|
+
processedEvent: this.currentDisplay.processedEvent,
|
|
403
|
+
scene: this.currentDisplay.scene,
|
|
404
|
+
expiresAt: this.currentDisplay.expiresAt,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Send a scene through SceneRenderer. On positioning devices this emits a
|
|
410
|
+
* SceneFrame; on degrade devices SceneRenderer hands back a legacy layout
|
|
411
|
+
* that rides the existing (unchanged) DisplayProcessor path.
|
|
412
|
+
*/
|
|
413
|
+
sendScene(packageName, view, elements, expiresAt, resolve) {
|
|
414
|
+
const result = sceneRenderer.emitScene(packageName, view, elements);
|
|
415
|
+
if (result.kind === "no-display") {
|
|
416
|
+
resolve?.({ status: "blocked", reason: "no display connected" });
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
if (result.kind === "legacy") {
|
|
420
|
+
if (result.layout) {
|
|
421
|
+
this.sendToNative(packageName, { view, layout: result.layout }, expiresAt);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// Scene degraded to nothing (e.g. all-image scene on a text-only
|
|
425
|
+
// device). render() replaces the frame, so nothing means clear.
|
|
426
|
+
this.sendClear();
|
|
427
|
+
}
|
|
428
|
+
resolve?.({ status: "displayed", degraded: result.degraded, dropped: result.dropped });
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
this.currentDisplay = { packageName, processedEvent: {}, scene: elements, expiresAt };
|
|
432
|
+
this.clearExpiryTimer();
|
|
433
|
+
if (expiresAt !== null) {
|
|
434
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
435
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
436
|
+
this.expiryTimerId = null;
|
|
437
|
+
this.handleExpiry(packageName);
|
|
438
|
+
}, delay);
|
|
439
|
+
}
|
|
440
|
+
resolve?.({ status: "displayed", degraded: result.degraded, dropped: result.dropped });
|
|
441
|
+
}
|
|
442
|
+
sendToNative(packageName, rawEvent, expiresAt) {
|
|
443
|
+
let processedEvent;
|
|
444
|
+
try {
|
|
445
|
+
processedEvent = displayProcessor.processDisplayEvent(rawEvent);
|
|
446
|
+
}
|
|
447
|
+
catch (err) {
|
|
448
|
+
console.error(`${LOG_TAG}: DisplayProcessor error, using raw event:`, err);
|
|
449
|
+
processedEvent = rawEvent;
|
|
450
|
+
}
|
|
451
|
+
try {
|
|
452
|
+
// The display output path is a direct btsdk call now (was a host sendDisplayEvent
|
|
453
|
+
// hook) so a bare OEM renders to the glasses without wiring it.
|
|
454
|
+
void Promise.resolve(BluetoothSdk.displayEvent(processedEvent)).catch((err) => {
|
|
455
|
+
console.error(`${LOG_TAG}: native display failed:`, err);
|
|
456
|
+
});
|
|
457
|
+
// The mirror store also lives in engine, so display requests update the
|
|
458
|
+
// phone-side preview without any host hook.
|
|
459
|
+
useDisplayStore.getState().setDisplayEvent(JSON.stringify(processedEvent));
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
console.error(`${LOG_TAG}: native display failed:`, err);
|
|
463
|
+
}
|
|
464
|
+
this.currentDisplay = { packageName, processedEvent, expiresAt };
|
|
465
|
+
this.clearExpiryTimer();
|
|
466
|
+
if (expiresAt !== null) {
|
|
467
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
468
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
469
|
+
this.expiryTimerId = null;
|
|
470
|
+
this.handleExpiry(packageName);
|
|
471
|
+
}, delay);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
handleExpiry(packageName) {
|
|
475
|
+
// Someone else is on the glasses now — ignore.
|
|
476
|
+
if (!this.currentDisplay || this.currentDisplay.packageName !== packageName) {
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
// Release the lock if it belonged to this (bg) app.
|
|
480
|
+
if (this.backgroundLock?.packageName === packageName) {
|
|
481
|
+
this.backgroundLock = null;
|
|
482
|
+
}
|
|
483
|
+
this.currentDisplay = null;
|
|
484
|
+
this.tryRestoreCoreDisplay();
|
|
485
|
+
if (!this.currentDisplay) {
|
|
486
|
+
this.sendClear();
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
tryRestoreCoreDisplay() {
|
|
490
|
+
if (!this.coreAppDisplay)
|
|
491
|
+
return;
|
|
492
|
+
// If the core snapshot has a duration and it's already elapsed, skip.
|
|
493
|
+
if (this.coreAppDisplay.expiresAt !== null && this.now() >= this.coreAppDisplay.expiresAt) {
|
|
494
|
+
this.coreAppDisplay = null;
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
// Re-send the core's saved display.
|
|
498
|
+
this.restoreDisplay(this.coreAppDisplay);
|
|
499
|
+
}
|
|
500
|
+
sendClear() {
|
|
501
|
+
const clearEvent = {
|
|
502
|
+
view: "main",
|
|
503
|
+
layout: { layoutType: "clear_view" },
|
|
504
|
+
};
|
|
505
|
+
this.sendToNative("system.clear", clearEvent, null);
|
|
506
|
+
this.currentDisplay = null;
|
|
507
|
+
// The glasses main view is now blank: every app's retained scene is
|
|
508
|
+
// replay-only until it re-renders — diffing against it would skip
|
|
509
|
+
// "unchanged" elements onto the blank screen.
|
|
510
|
+
sceneRenderer.markViewStale("main");
|
|
511
|
+
}
|
|
512
|
+
// ===========================================================================
|
|
513
|
+
// Internals — boot
|
|
514
|
+
// ===========================================================================
|
|
515
|
+
cancelBoot() {
|
|
516
|
+
if (!this.bootingApp)
|
|
517
|
+
return;
|
|
518
|
+
BgTimer.clearTimeout(this.bootingApp.timerId);
|
|
519
|
+
this.bootingApp = null;
|
|
520
|
+
}
|
|
521
|
+
endBoot() {
|
|
522
|
+
if (!this.bootingApp)
|
|
523
|
+
return;
|
|
524
|
+
const preBoot = this.bootingApp.preBoot;
|
|
525
|
+
BgTimer.clearTimeout(this.bootingApp.timerId);
|
|
526
|
+
this.bootingApp = null;
|
|
527
|
+
// Drain the queue: core first, then everyone else. Per-app last wins
|
|
528
|
+
// because the map holds one payload per packageName.
|
|
529
|
+
const queued = Array.from(this.bootQueue.entries());
|
|
530
|
+
this.bootQueue.clear();
|
|
531
|
+
const corePayload = this.coreApp ? queued.find(([pkg]) => pkg === this.coreApp) : undefined;
|
|
532
|
+
if (corePayload) {
|
|
533
|
+
this.arbitrateAndSend(corePayload[0], corePayload[1].payload, corePayload[1].resolve);
|
|
534
|
+
}
|
|
535
|
+
for (const [pkg, entry] of queued) {
|
|
536
|
+
if (pkg === this.coreApp)
|
|
537
|
+
continue;
|
|
538
|
+
this.arbitrateAndSend(pkg, entry.payload, entry.resolve);
|
|
539
|
+
}
|
|
540
|
+
// If the boot text is still on the glasses — nothing was queued, or every
|
|
541
|
+
// drained request lost arbitration — it must not strand: it's a system
|
|
542
|
+
// frame with no expiry. Restore whatever was on the glasses before the
|
|
543
|
+
// boot, else clear. Two reasons NOT to restore: the frame's duration
|
|
544
|
+
// elapsed during the boot window, or its owner FORFEITED it during the
|
|
545
|
+
// window (its final queued intent — the queue keeps last-wins per app —
|
|
546
|
+
// was a clear, which the drain above processed as a forfeit; restoring
|
|
547
|
+
// would resurrect content the clear removed).
|
|
548
|
+
if (this.currentDisplay?.packageName === SYSTEM_BOOT_PKG) {
|
|
549
|
+
const ownerEntry = preBoot ? queued.find(([pkg]) => pkg === preBoot.packageName) : undefined;
|
|
550
|
+
const preBootForfeited = ownerEntry !== undefined && isClearPayload(ownerEntry[1].payload);
|
|
551
|
+
if (preBoot && !preBootForfeited && (preBoot.expiresAt === null || preBoot.expiresAt > this.now())) {
|
|
552
|
+
this.restoreDisplay(preBoot);
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
this.sendClear();
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Re-push a previously-captured on-glasses frame (e.g. the display a boot
|
|
561
|
+
* window overwrote). Mirrors tryRestoreCoreDisplay: the saved event is already
|
|
562
|
+
* processed, and any remaining duration is recomputed from its expiry.
|
|
563
|
+
*/
|
|
564
|
+
restoreDisplay(saved) {
|
|
565
|
+
const remaining = saved.expiresAt !== null ? Math.max(0, saved.expiresAt - this.now()) : undefined;
|
|
566
|
+
// Scene restores must REPLAY (create-based, epoch-bumped): re-emitting the
|
|
567
|
+
// scene through the normal diff would come back all-"unchanged" and the
|
|
568
|
+
// device would skip every element (spec §4 — replay is always create-based).
|
|
569
|
+
if (saved.scene) {
|
|
570
|
+
const expiresAt = remaining !== undefined ? this.now() + remaining : null;
|
|
571
|
+
if (sceneRenderer.replayApp(saved.packageName, "main")) {
|
|
572
|
+
this.currentDisplay = { packageName: saved.packageName, processedEvent: {}, scene: saved.scene, expiresAt };
|
|
573
|
+
this.clearExpiryTimer();
|
|
574
|
+
if (expiresAt !== null) {
|
|
575
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
576
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
577
|
+
this.expiryTimerId = null;
|
|
578
|
+
this.handleExpiry(saved.packageName);
|
|
579
|
+
}, delay);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
// Retained state gone (app stopped since) — re-render the saved
|
|
584
|
+
// elements as a fresh scene instead.
|
|
585
|
+
this.sendNow(saved.packageName, { view: "main", scene: saved.scene, durationMs: remaining });
|
|
586
|
+
}
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
this.sendNow(saved.packageName, {
|
|
590
|
+
view: "main",
|
|
591
|
+
layout: saved.processedEvent.layout,
|
|
592
|
+
durationMs: remaining,
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
// ===========================================================================
|
|
596
|
+
// Reconnect replay (design doc §3.4.7 — recovery = replay, host-driven)
|
|
597
|
+
// ===========================================================================
|
|
598
|
+
/**
|
|
599
|
+
* Subscribe to glasses connection state so the current owner's frame is
|
|
600
|
+
* replayed after a reconnect. Safe to call repeatedly; attaches once. Wired
|
|
601
|
+
* from MantleManager next to displayProcessor.attachToRuntime().
|
|
602
|
+
*/
|
|
603
|
+
attachToRuntime() {
|
|
604
|
+
if (this.runtimeAttached)
|
|
605
|
+
return;
|
|
606
|
+
// dev wired this through the (since-removed) glassesStatus runtime hooks;
|
|
607
|
+
// engine reads its own glasses store directly.
|
|
608
|
+
this.glassesWasConnected = isGlassesConnected(useGlassesStore.getState().connection);
|
|
609
|
+
this.unsubscribeGlassesStatus = useGlassesStore.subscribe(() => {
|
|
610
|
+
const connected = isGlassesConnected(useGlassesStore.getState().connection);
|
|
611
|
+
if (connected === this.glassesWasConnected)
|
|
612
|
+
return;
|
|
613
|
+
this.glassesWasConnected = connected;
|
|
614
|
+
if (connected) {
|
|
615
|
+
this.replayCurrent();
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
this.runtimeAttached = true;
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Re-push the current on-glasses frame after a device recovery. Scenes replay
|
|
622
|
+
* from SceneRenderer's retained state (create-based, epoch-bumped); legacy
|
|
623
|
+
* frames re-send their processed event. Expired frames don't come back.
|
|
624
|
+
*/
|
|
625
|
+
replayCurrent() {
|
|
626
|
+
const current = this.currentDisplay;
|
|
627
|
+
if (!current)
|
|
628
|
+
return;
|
|
629
|
+
if (current.expiresAt !== null && this.now() >= current.expiresAt)
|
|
630
|
+
return;
|
|
631
|
+
console.log(`${LOG_TAG}: replayCurrent(${current.packageName})`);
|
|
632
|
+
if (current.scene) {
|
|
633
|
+
if (!sceneRenderer.replayApp(current.packageName, "main")) {
|
|
634
|
+
// Retained state gone (app stopped between disconnect and reconnect).
|
|
635
|
+
this.sendClear();
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
else if (current.processedEvent.layout) {
|
|
639
|
+
this.sendToNative(current.packageName, current.processedEvent, current.expiresAt);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
// ===========================================================================
|
|
643
|
+
// Internals — timer helpers
|
|
644
|
+
// ===========================================================================
|
|
645
|
+
clearExpiryTimer() {
|
|
646
|
+
if (this.expiryTimerId !== null) {
|
|
647
|
+
BgTimer.clearTimeout(this.expiryTimerId);
|
|
648
|
+
this.expiryTimerId = null;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
// ===========================================================================
|
|
652
|
+
// Test hooks
|
|
653
|
+
// ===========================================================================
|
|
654
|
+
/** Injected clock — tests only. */
|
|
655
|
+
_setNowForTest(fn) {
|
|
656
|
+
this.now = fn;
|
|
657
|
+
}
|
|
658
|
+
/** Wipe state — tests only. */
|
|
659
|
+
_resetForTest() {
|
|
660
|
+
this.cancelBoot();
|
|
661
|
+
this.clearExpiryTimer();
|
|
662
|
+
this.coreApp = null;
|
|
663
|
+
this.coreAppDisplay = null;
|
|
664
|
+
this.currentDisplay = null;
|
|
665
|
+
this.backgroundLock = null;
|
|
666
|
+
this.bootQueue.clear();
|
|
667
|
+
this.now = () => Date.now();
|
|
668
|
+
this.unsubscribeGlassesStatus?.();
|
|
669
|
+
this.unsubscribeGlassesStatus = null;
|
|
670
|
+
this.runtimeAttached = false;
|
|
671
|
+
this.glassesWasConnected = false;
|
|
672
|
+
sceneRenderer._resetForTest();
|
|
673
|
+
}
|
|
674
|
+
/** Read-only state snapshot — tests only. */
|
|
675
|
+
_peekForTest() {
|
|
676
|
+
return {
|
|
677
|
+
coreApp: this.coreApp,
|
|
678
|
+
currentDisplayPkg: this.currentDisplay?.packageName ?? null,
|
|
679
|
+
bgLockPkg: this.backgroundLock?.packageName ?? null,
|
|
680
|
+
isBooting: this.bootingApp !== null,
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
const localDisplayManager = LocalDisplayManager.getInstance();
|
|
685
|
+
export default localDisplayManager;
|
|
686
|
+
export { LocalDisplayManager };
|
|
687
|
+
//# sourceMappingURL=LocalDisplayManager.js.map
|