@glassly/engine 0.1.0-dev.98 → 0.2.8-dev.445
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 +28 -0
- package/build/engine.d.ts +32 -10
- package/build/engine.d.ts.map +1 -1
- package/build/engine.js +24 -16
- package/build/engine.js.map +1 -1
- package/build/facades/dev.d.ts +9 -0
- package/build/facades/dev.d.ts.map +1 -1
- package/build/facades/dev.js +9 -0
- package/build/facades/dev.js.map +1 -1
- package/build/facades/display.d.ts +10 -3
- package/build/facades/display.d.ts.map +1 -1
- package/build/facades/display.js +22 -8
- package/build/facades/display.js.map +1 -1
- package/build/facades/displayMirror.d.ts +11 -0
- package/build/facades/displayMirror.d.ts.map +1 -1
- package/build/facades/displayMirror.js +22 -0
- package/build/facades/displayMirror.js.map +1 -1
- package/build/facades/glasses.d.ts +31 -1
- package/build/facades/glasses.d.ts.map +1 -1
- package/build/facades/glasses.js +51 -0
- package/build/facades/glasses.js.map +1 -1
- package/build/facades/memory.d.ts +0 -6
- package/build/facades/memory.d.ts.map +1 -1
- package/build/facades/memory.js +1 -9
- package/build/facades/memory.js.map +1 -1
- package/build/facades/miniapps.d.ts +3 -1
- package/build/facades/miniapps.d.ts.map +1 -1
- package/build/facades/miniapps.js +3 -1
- package/build/facades/miniapps.js.map +1 -1
- package/build/facades/pairing.d.ts.map +1 -1
- package/build/facades/pairing.js +5 -4
- package/build/facades/pairing.js.map +1 -1
- package/build/facades/permissions.d.ts +2 -0
- package/build/facades/permissions.d.ts.map +1 -1
- package/build/facades/permissions.js +48 -0
- package/build/facades/permissions.js.map +1 -1
- package/build/facades/phoneNotifications.d.ts +20 -9
- package/build/facades/phoneNotifications.d.ts.map +1 -1
- package/build/facades/phoneNotifications.js +33 -26
- package/build/facades/phoneNotifications.js.map +1 -1
- package/build/facades/settings.d.ts.map +1 -1
- package/build/facades/settings.js +1 -2
- package/build/facades/settings.js.map +1 -1
- package/build/generated/releaseMetadata.js +4 -4
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/index.d.ts +6 -4
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -4
- package/build/index.js.map +1 -1
- package/build/react/MentraLiveOtaFlow.js +2 -2
- package/build/react/MentraLiveOtaFlow.js.map +1 -1
- package/build/react/useMentraLiveOta.d.ts.map +1 -1
- package/build/react/useMentraLiveOta.js +8 -7
- package/build/react/useMentraLiveOta.js.map +1 -1
- package/build/runtime/config.d.ts +1 -1
- package/build/runtime/config.d.ts.map +1 -1
- package/build/runtime/config.js.map +1 -1
- package/build/services/AppRegistry.d.ts +4 -1
- package/build/services/AppRegistry.d.ts.map +1 -1
- package/build/services/AppRegistry.js +21 -1
- package/build/services/AppRegistry.js.map +1 -1
- package/build/services/BlobStore.d.ts +2 -2
- package/build/services/BlobStore.js +3 -3
- package/build/services/BlobStore.js.map +1 -1
- package/build/services/CloudClientService.d.ts +7 -3
- package/build/services/CloudClientService.d.ts.map +1 -1
- package/build/services/CloudClientService.js +34 -9
- package/build/services/CloudClientService.js.map +1 -1
- package/build/services/DevServerBridge.d.ts +1 -18
- package/build/services/DevServerBridge.d.ts.map +1 -1
- package/build/services/DevServerBridge.js +9 -8
- package/build/services/DevServerBridge.js.map +1 -1
- package/build/services/DeviceEventRouter.d.ts.map +1 -1
- package/build/services/DeviceEventRouter.js +58 -71
- package/build/services/DeviceEventRouter.js.map +1 -1
- package/build/services/DisplayDiagnostics.d.ts +5 -0
- package/build/services/DisplayDiagnostics.d.ts.map +1 -0
- package/build/services/DisplayDiagnostics.js +105 -0
- package/build/services/DisplayDiagnostics.js.map +1 -0
- package/build/services/DisplayProcessor.d.ts +6 -7
- package/build/services/DisplayProcessor.d.ts.map +1 -1
- package/build/services/DisplayProcessor.js +17 -45
- package/build/services/DisplayProcessor.js.map +1 -1
- package/build/services/GestureDotsService.d.ts +10 -4
- package/build/services/GestureDotsService.d.ts.map +1 -1
- package/build/services/GestureDotsService.js +70 -16
- package/build/services/GestureDotsService.js.map +1 -1
- package/build/services/GlassesKeyboardInput.d.ts +77 -0
- package/build/services/GlassesKeyboardInput.d.ts.map +1 -0
- package/build/services/GlassesKeyboardInput.js +261 -0
- package/build/services/GlassesKeyboardInput.js.map +1 -0
- package/build/services/GlassesSensorService.d.ts +47 -0
- package/build/services/GlassesSensorService.d.ts.map +1 -0
- package/build/services/GlassesSensorService.js +242 -0
- package/build/services/GlassesSensorService.js.map +1 -0
- package/build/services/GlassesTouchInput.d.ts +14 -0
- package/build/services/GlassesTouchInput.d.ts.map +1 -0
- package/build/services/GlassesTouchInput.js +107 -0
- package/build/services/GlassesTouchInput.js.map +1 -0
- package/build/services/HeadingService.d.ts +0 -6
- package/build/services/HeadingService.d.ts.map +1 -1
- package/build/services/HeadingService.js +0 -27
- package/build/services/HeadingService.js.map +1 -1
- package/build/services/HotspotShutdown.d.ts.map +1 -1
- package/build/services/HotspotShutdown.js +2 -1
- package/build/services/HotspotShutdown.js.map +1 -1
- package/build/services/JSCrashloopReportService.js +2 -2
- package/build/services/JSCrashloopReportService.js.map +1 -1
- package/build/services/JSRouter.d.ts +6 -4
- package/build/services/JSRouter.d.ts.map +1 -1
- package/build/services/JSRouter.js +15 -13
- package/build/services/JSRouter.js.map +1 -1
- package/build/services/LocalDisplayManager.d.ts +35 -7
- package/build/services/LocalDisplayManager.d.ts.map +1 -1
- package/build/services/LocalDisplayManager.js +105 -27
- package/build/services/LocalDisplayManager.js.map +1 -1
- package/build/services/LocalMiniappDataMigration.d.ts +1 -1
- package/build/services/LocalMiniappDataMigration.js +1 -1
- package/build/services/LocalMiniappDataMigration.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts +64 -11
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +441 -35
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/services/LocalSttFallbackCoordinator.d.ts +3 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -1
- package/build/services/LocalSttFallbackCoordinator.js +27 -8
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -1
- package/build/services/MemoryStore.d.ts +8 -33
- package/build/services/MemoryStore.d.ts.map +1 -1
- package/build/services/MemoryStore.js +30 -56
- package/build/services/MemoryStore.js.map +1 -1
- package/build/services/MiniappEngine.d.ts +3 -3
- package/build/services/MiniappEngine.js +7 -7
- package/build/services/MiniappEngine.js.map +1 -1
- package/build/services/MiniappLauncher.d.ts +8 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -1
- package/build/services/MiniappLauncher.js +19 -1
- package/build/services/MiniappLauncher.js.map +1 -1
- package/build/services/MirrorService.d.ts +24 -0
- package/build/services/MirrorService.d.ts.map +1 -0
- package/build/services/MirrorService.js +132 -0
- package/build/services/MirrorService.js.map +1 -0
- package/build/services/NativeNavigationService.d.ts +2 -3
- package/build/services/NativeNavigationService.d.ts.map +1 -1
- package/build/services/NativeNavigationService.js +24 -21
- package/build/services/NativeNavigationService.js.map +1 -1
- package/build/services/NavigationHandlers.d.ts.map +1 -1
- package/build/services/NavigationHandlers.js +10 -5
- package/build/services/NavigationHandlers.js.map +1 -1
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
- package/build/services/OtaInstallCoordinator.js +24 -23
- package/build/services/OtaInstallCoordinator.js.map +1 -1
- package/build/services/PairedGlassesLatch.d.ts +7 -0
- package/build/services/PairedGlassesLatch.d.ts.map +1 -0
- package/build/services/PairedGlassesLatch.js +38 -0
- package/build/services/PairedGlassesLatch.js.map +1 -0
- package/build/services/PhoneActivity.d.ts +23 -0
- package/build/services/PhoneActivity.d.ts.map +1 -0
- package/build/services/PhoneActivity.js +111 -0
- package/build/services/PhoneActivity.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -1
- package/build/services/PhoneCameraFovCoordinator.js +4 -3
- package/build/services/PhoneCameraFovCoordinator.js.map +1 -1
- package/build/services/PhoneNotificationsSync.d.ts +40 -6
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -1
- package/build/services/PhoneNotificationsSync.js +160 -84
- package/build/services/PhoneNotificationsSync.js.map +1 -1
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -1
- package/build/services/PhonePhotoCoordinator.js +6 -5
- package/build/services/PhonePhotoCoordinator.js.map +1 -1
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
- package/build/services/PhoneStreamCoordinator.js +8 -7
- package/build/services/PhoneStreamCoordinator.js.map +1 -1
- package/build/services/STTModelManager.d.ts +3 -0
- package/build/services/STTModelManager.d.ts.map +1 -1
- package/build/services/STTModelManager.js +15 -1
- package/build/services/STTModelManager.js.map +1 -1
- package/build/services/SceneRenderer.d.ts +43 -2
- package/build/services/SceneRenderer.d.ts.map +1 -1
- package/build/services/SceneRenderer.js +123 -8
- package/build/services/SceneRenderer.js.map +1 -1
- package/build/services/StreamLifecycleController.d.ts.map +1 -1
- package/build/services/StreamLifecycleController.js +6 -14
- package/build/services/StreamLifecycleController.js.map +1 -1
- package/build/services/TTSModelManager.js +1 -1
- package/build/services/TTSModelManager.js.map +1 -1
- package/build/services/UIRouter.d.ts +2 -2
- package/build/services/UIRouter.js +5 -5
- package/build/services/UIRouter.js.map +1 -1
- package/build/services/asg/galleryPathMigration.js +1 -1
- package/build/services/asg/galleryPathMigration.js.map +1 -1
- package/build/services/asg/gallerySyncService.js +2 -2
- package/build/services/asg/gallerySyncService.js.map +1 -1
- package/build/services/asg/localStorageService.d.ts.map +1 -1
- package/build/services/asg/localStorageService.js +3 -3
- package/build/services/asg/localStorageService.js.map +1 -1
- package/build/services/debug/DashboardOpenTrace.d.ts +32 -0
- package/build/services/debug/DashboardOpenTrace.d.ts.map +1 -0
- package/build/services/debug/DashboardOpenTrace.js +128 -0
- package/build/services/debug/DashboardOpenTrace.js.map +1 -0
- package/build/services/debug/dashboardOpenTimeline.d.ts +77 -0
- package/build/services/debug/dashboardOpenTimeline.d.ts.map +1 -0
- package/build/services/debug/dashboardOpenTimeline.js +195 -0
- package/build/services/debug/dashboardOpenTimeline.js.map +1 -0
- package/build/services/effectiveCapabilities.d.ts.map +1 -1
- package/build/services/effectiveCapabilities.js +25 -13
- package/build/services/effectiveCapabilities.js.map +1 -1
- package/build/services/gestureClaims.d.ts +34 -15
- package/build/services/gestureClaims.d.ts.map +1 -1
- package/build/services/gestureClaims.js +42 -21
- package/build/services/gestureClaims.js.map +1 -1
- package/build/services/manifestFields.d.ts +9 -0
- package/build/services/manifestFields.d.ts.map +1 -0
- package/build/services/manifestFields.js +26 -0
- package/build/services/manifestFields.js.map +1 -0
- package/build/services/memoryStoreInstance.d.ts +0 -10
- package/build/services/memoryStoreInstance.d.ts.map +1 -1
- package/build/services/memoryStoreInstance.js +2 -31
- package/build/services/memoryStoreInstance.js.map +1 -1
- package/build/services/mirrorSnapshot.d.ts +16 -0
- package/build/services/mirrorSnapshot.d.ts.map +1 -0
- package/build/services/mirrorSnapshot.js +102 -0
- package/build/services/mirrorSnapshot.js.map +1 -0
- package/build/services/nativeNavigationGate.d.ts +8 -0
- package/build/services/nativeNavigationGate.d.ts.map +1 -0
- package/build/services/nativeNavigationGate.js +12 -0
- package/build/services/nativeNavigationGate.js.map +1 -0
- package/build/services/notificationAppCatalog.d.ts +7 -0
- package/build/services/notificationAppCatalog.d.ts.map +1 -0
- package/build/services/notificationAppCatalog.js +16 -0
- package/build/services/notificationAppCatalog.js.map +1 -0
- package/build/services/notifications/notificationPolicy.d.ts +55 -0
- package/build/services/notifications/notificationPolicy.d.ts.map +1 -0
- package/build/services/notifications/notificationPolicy.js +41 -0
- package/build/services/notifications/notificationPolicy.js.map +1 -0
- package/build/services/pages/OverlayPages.d.ts +26 -0
- package/build/services/pages/OverlayPages.d.ts.map +1 -0
- package/build/services/pages/OverlayPages.js +80 -0
- package/build/services/pages/OverlayPages.js.map +1 -0
- package/build/services/pages/PageHost.d.ts +32 -0
- package/build/services/pages/PageHost.d.ts.map +1 -0
- package/build/services/pages/PageHost.js +99 -0
- package/build/services/pages/PageHost.js.map +1 -0
- package/build/services/pages/overlayApps.d.ts +25 -0
- package/build/services/pages/overlayApps.d.ts.map +1 -0
- package/build/services/pages/overlayApps.js +66 -0
- package/build/services/pages/overlayApps.js.map +1 -0
- package/build/services/pages/pageEligibility.d.ts +9 -0
- package/build/services/pages/pageEligibility.d.ts.map +1 -0
- package/build/services/pages/pageEligibility.js +27 -0
- package/build/services/pages/pageEligibility.js.map +1 -0
- package/build/services/settingsBridge.d.ts +58 -0
- package/build/services/settingsBridge.d.ts.map +1 -0
- package/build/services/settingsBridge.js +90 -0
- package/build/services/settingsBridge.js.map +1 -0
- package/build/services/speakerProfileStoreInstance.js +1 -1
- package/build/services/speakerProfileStoreInstance.js.map +1 -1
- package/build/services/uiShim.d.ts +1 -1
- package/build/services/uiShim.js +4 -4
- package/build/services/uiShim.js.map +1 -1
- package/build/stores/appVisibility.d.ts +28 -0
- package/build/stores/appVisibility.d.ts.map +1 -1
- package/build/stores/appVisibility.js +34 -0
- package/build/stores/appVisibility.js.map +1 -1
- package/build/stores/apps.d.ts +13 -0
- package/build/stores/apps.d.ts.map +1 -1
- package/build/stores/apps.js +66 -12
- package/build/stores/apps.js.map +1 -1
- package/build/stores/bluetoothSettingKeys.js +1 -1
- package/build/stores/bluetoothSettingKeys.js.map +1 -1
- package/build/stores/display.d.ts +3 -3
- package/build/stores/display.d.ts.map +1 -1
- package/build/stores/display.js +16 -4
- package/build/stores/display.js.map +1 -1
- package/build/stores/glasses.d.ts.map +1 -1
- package/build/stores/glasses.js +14 -1
- package/build/stores/glasses.js.map +1 -1
- package/build/stores/settings.d.ts +1 -0
- package/build/stores/settings.d.ts.map +1 -1
- package/build/stores/settings.js +170 -44
- package/build/stores/settings.js.map +1 -1
- package/build/types/applet.d.ts +14 -1
- package/build/types/applet.d.ts.map +1 -1
- package/build/types/applet.js.map +1 -1
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -1
- package/build/types/capabilities/even-realities-g2.js +5 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -1
- package/build/types/capabilities/simulated-glasses.d.ts +1 -1
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -1
- package/build/types/capabilities/simulated-glasses.js +7 -4
- package/build/types/capabilities/simulated-glasses.js.map +1 -1
- package/build/types/hardware.d.ts +20 -1
- package/build/types/hardware.d.ts.map +1 -1
- package/build/types/hardware.js +2 -0
- package/build/types/hardware.js.map +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +1 -0
- package/build/types/index.js.map +1 -1
- package/build/utils/debouncedPatch.d.ts +3 -1
- package/build/utils/debouncedPatch.d.ts.map +1 -1
- package/build/utils/debouncedPatch.js +6 -3
- package/build/utils/debouncedPatch.js.map +1 -1
- package/build/utils/devMiniappLaunch.d.ts.map +1 -1
- package/build/utils/devMiniappLaunch.js +4 -3
- package/build/utils/devMiniappLaunch.js.map +1 -1
- package/build/utils/display/measurer/TextMeasurer.d.ts +2 -159
- package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -1
- package/build/utils/display/measurer/TextMeasurer.js +2 -272
- package/build/utils/display/measurer/TextMeasurer.js.map +1 -1
- package/build/utils/display/measurer/script-detection.d.ts +1 -52
- package/build/utils/display/measurer/script-detection.d.ts.map +1 -1
- package/build/utils/display/measurer/script-detection.js +2 -183
- package/build/utils/display/measurer/script-detection.js.map +1 -1
- package/build/utils/display/pixelArt.d.ts +3 -0
- package/build/utils/display/pixelArt.d.ts.map +1 -0
- package/build/utils/display/pixelArt.js +3 -0
- package/build/utils/display/pixelArt.js.map +1 -0
- package/build/utils/display/profiles/g1.d.ts +1 -32
- package/build/utils/display/profiles/g1.d.ts.map +1 -1
- package/build/utils/display/profiles/g1.js +2 -212
- package/build/utils/display/profiles/g1.js.map +1 -1
- package/build/utils/display/profiles/g2.d.ts +1 -12
- package/build/utils/display/profiles/g2.d.ts.map +1 -1
- package/build/utils/display/profiles/g2.js +2 -33
- package/build/utils/display/profiles/g2.js.map +1 -1
- package/build/utils/display/profiles/nex.d.ts +1 -9
- package/build/utils/display/profiles/nex.d.ts.map +1 -1
- package/build/utils/display/profiles/nex.js +2 -149
- package/build/utils/display/profiles/nex.js.map +1 -1
- package/build/utils/display/profiles/types.d.ts +1 -102
- package/build/utils/display/profiles/types.d.ts.map +1 -1
- package/build/utils/display/profiles/types.js.map +1 -1
- package/build/utils/display/profiles/z100.d.ts +1 -32
- package/build/utils/display/profiles/z100.d.ts.map +1 -1
- package/build/utils/display/profiles/z100.js +2 -181
- package/build/utils/display/profiles/z100.js.map +1 -1
- package/build/utils/display/scene/degrade.d.ts.map +1 -1
- package/build/utils/display/scene/degrade.js +4 -1
- package/build/utils/display/scene/degrade.js.map +1 -1
- package/build/utils/display/scene/differ.d.ts +13 -1
- package/build/utils/display/scene/differ.d.ts.map +1 -1
- package/build/utils/display/scene/differ.js +22 -0
- package/build/utils/display/scene/differ.js.map +1 -1
- package/build/utils/display/scene/index.d.ts +1 -1
- package/build/utils/display/scene/index.d.ts.map +1 -1
- package/build/utils/display/scene/index.js.map +1 -1
- package/build/utils/display/scene/process.d.ts.map +1 -1
- package/build/utils/display/scene/process.js +183 -11
- package/build/utils/display/scene/process.js.map +1 -1
- package/build/utils/display/scene/store.d.ts +1 -1
- package/build/utils/display/scene/store.d.ts.map +1 -1
- package/build/utils/display/scene/store.js +0 -0
- package/build/utils/display/scene/store.js.map +1 -1
- package/build/utils/display/scene/svgPath.d.ts +9 -0
- package/build/utils/display/scene/svgPath.d.ts.map +1 -0
- package/build/utils/display/scene/svgPath.js +167 -0
- package/build/utils/display/scene/svgPath.js.map +1 -0
- package/build/utils/display/scene/types.d.ts +2 -142
- package/build/utils/display/scene/types.d.ts.map +1 -1
- package/build/utils/display/scene/types.js +0 -0
- package/build/utils/display/scene/types.js.map +1 -1
- package/build/utils/display/wrapper/TextWrapper.d.ts +1 -101
- package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -1
- package/build/utils/display/wrapper/TextWrapper.js +2 -470
- package/build/utils/display/wrapper/TextWrapper.js.map +1 -1
- package/build/utils/display/wrapper/types.d.ts +2 -74
- package/build/utils/display/wrapper/types.d.ts.map +1 -1
- package/build/utils/display/wrapper/types.js +2 -10
- package/build/utils/display/wrapper/types.js.map +1 -1
- package/build/utils/hardware/hardware.js +1 -1
- package/build/utils/hardware/hardware.js.map +1 -1
- package/build/utils/timers/timers.d.ts.map +1 -1
- package/build/utils/timers/timers.js +26 -4
- package/build/utils/timers/timers.js.map +1 -1
- package/package.json +8 -8
- package/src/engine.ts +24 -15
- package/src/facades/dev.ts +10 -0
- package/src/facades/display.ts +21 -8
- package/src/facades/displayMirror.ts +29 -0
- package/src/facades/glasses.ts +61 -1
- package/src/facades/memory.ts +1 -12
- package/src/facades/miniapps.ts +4 -1
- package/src/facades/pairing.ts +8 -6
- package/src/facades/permissions.ts +46 -0
- package/src/facades/phoneNotifications.ts +45 -26
- package/src/facades/settings.ts +1 -2
- package/src/generated/releaseMetadata.ts +4 -4
- package/src/index.ts +6 -9
- package/src/react/MentraLiveOtaFlow.tsx +2 -2
- package/src/react/useMentraLiveOta.ts +14 -8
- package/src/runtime/config.ts +1 -1
- package/src/services/AppRegistry.ts +43 -7
- package/src/services/BlobStore.ts +3 -3
- package/src/services/CloudClientService.ts +37 -10
- package/src/services/DevServerBridge.ts +12 -10
- package/src/services/DeviceEventRouter.ts +73 -74
- package/src/services/DisplayDiagnostics.ts +107 -0
- package/src/services/DisplayProcessor.ts +20 -55
- package/src/services/GestureDotsService.ts +77 -16
- package/src/services/GlassesKeyboardInput.ts +306 -0
- package/src/services/GlassesSensorService.ts +233 -0
- package/src/services/GlassesTouchInput.ts +128 -0
- package/src/services/HeadingService.ts +0 -24
- package/src/services/HotspotShutdown.ts +3 -1
- package/src/services/JSCrashloopReportService.ts +2 -2
- package/src/services/JSRouter.ts +29 -14
- package/src/services/LocalDisplayManager.ts +112 -26
- package/src/services/LocalMiniappDataMigration.ts +1 -1
- package/src/services/LocalMiniappRuntime.ts +500 -43
- package/src/services/LocalSttFallbackCoordinator.ts +28 -7
- package/src/services/MemoryStore.ts +32 -80
- package/src/services/MiniappEngine.ts +7 -7
- package/src/services/MiniappLauncher.ts +25 -1
- package/src/services/MirrorService.ts +139 -0
- package/src/services/NativeNavigationService.ts +29 -25
- package/src/services/NavigationHandlers.ts +10 -5
- package/src/services/OtaInstallCoordinator.ts +36 -34
- package/src/services/PairedGlassesLatch.ts +39 -0
- package/src/services/PhoneActivity.ts +116 -0
- package/src/services/PhoneCameraFovCoordinator.ts +6 -4
- package/src/services/PhoneNotificationsSync.ts +185 -103
- package/src/services/PhonePhotoCoordinator.ts +9 -10
- package/src/services/PhoneStreamCoordinator.ts +13 -11
- package/src/services/STTModelManager.ts +15 -1
- package/src/services/SceneRenderer.ts +148 -10
- package/src/services/StreamLifecycleController.ts +9 -7
- package/src/services/TTSModelManager.ts +1 -1
- package/src/services/UIRouter.ts +5 -5
- package/src/services/asg/galleryPathMigration.ts +1 -1
- package/src/services/asg/gallerySyncService.ts +2 -2
- package/src/services/asg/localStorageService.ts +3 -3
- package/src/services/debug/DashboardOpenTrace.ts +153 -0
- package/src/services/debug/dashboardOpenTimeline.ts +237 -0
- package/src/services/effectiveCapabilities.ts +32 -13
- package/src/services/gestureClaims.ts +72 -23
- package/src/services/manifestFields.ts +23 -0
- package/src/services/memoryStoreInstance.ts +2 -34
- package/src/services/mirrorSnapshot.ts +116 -0
- package/src/services/nativeNavigationGate.ts +14 -0
- package/src/services/notificationAppCatalog.ts +21 -0
- package/src/services/notifications/notificationPolicy.ts +87 -0
- package/src/services/pages/OverlayPages.ts +86 -0
- package/src/services/pages/PageHost.ts +116 -0
- package/src/services/pages/overlayApps.ts +72 -0
- package/src/services/pages/pageEligibility.ts +30 -0
- package/src/services/settingsBridge.ts +111 -0
- package/src/services/speakerProfileStoreInstance.ts +1 -1
- package/src/services/uiShim.ts +4 -4
- package/src/stores/appVisibility.ts +45 -0
- package/src/stores/apps.ts +110 -32
- package/src/stores/bluetoothSettingKeys.ts +1 -1
- package/src/stores/display.ts +18 -7
- package/src/stores/glasses.ts +15 -1
- package/src/stores/settings.ts +175 -51
- package/src/types/applet.ts +14 -1
- package/src/types/capabilities/even-realities-g2.ts +6 -0
- package/src/types/capabilities/simulated-glasses.ts +8 -4
- package/src/types/hardware.ts +34 -1
- package/src/types/index.ts +1 -0
- package/src/utils/debouncedPatch.ts +8 -4
- package/src/utils/devMiniappLaunch.ts +5 -3
- package/src/utils/display/measurer/TextMeasurer.ts +3 -346
- package/src/utils/display/measurer/script-detection.ts +10 -218
- package/src/utils/display/pixelArt.ts +3 -0
- package/src/utils/display/profiles/g1.ts +2 -236
- package/src/utils/display/profiles/g2.ts +2 -39
- package/src/utils/display/profiles/nex.ts +2 -166
- package/src/utils/display/profiles/types.ts +9 -132
- package/src/utils/display/profiles/z100.ts +2 -198
- package/src/utils/display/scene/degrade.ts +4 -1
- package/src/utils/display/scene/differ.ts +25 -1
- package/src/utils/display/scene/index.ts +5 -0
- package/src/utils/display/scene/process.ts +196 -13
- package/src/utils/display/scene/store.ts +0 -0
- package/src/utils/display/scene/svgPath.ts +163 -0
- package/src/utils/display/scene/types.ts +0 -0
- package/src/utils/display/wrapper/TextWrapper.ts +2 -546
- package/src/utils/display/wrapper/types.ts +3 -102
- package/src/utils/hardware/hardware.ts +1 -1
- package/src/utils/timers/timers.ts +32 -4
- package/build/services/CustomDashboardModel.d.ts +0 -48
- package/build/services/CustomDashboardModel.d.ts.map +0 -1
- package/build/services/CustomDashboardModel.js +0 -73
- package/build/services/CustomDashboardModel.js.map +0 -1
- package/build/services/CustomDashboardService.d.ts +0 -63
- package/build/services/CustomDashboardService.d.ts.map +0 -1
- package/build/services/CustomDashboardService.js +0 -576
- package/build/services/CustomDashboardService.js.map +0 -1
- package/build/services/DashboardCoordinator.d.ts +0 -26
- package/build/services/DashboardCoordinator.d.ts.map +0 -1
- package/build/services/DashboardCoordinator.js +0 -125
- package/build/services/DashboardCoordinator.js.map +0 -1
- package/build/services/iosNotificationAppCatalog.d.ts +0 -13
- package/build/services/iosNotificationAppCatalog.d.ts.map +0 -1
- package/build/services/iosNotificationAppCatalog.js +0 -28
- package/build/services/iosNotificationAppCatalog.js.map +0 -1
- package/src/services/CustomDashboardModel.ts +0 -83
- package/src/services/CustomDashboardService.ts +0 -598
- package/src/services/DashboardCoordinator.ts +0 -121
- package/src/services/iosNotificationAppCatalog.ts +0 -39
package/src/stores/settings.ts
CHANGED
|
@@ -3,7 +3,6 @@ import {AsyncResult, result as Res, Result} from "typesafe-ts"
|
|
|
3
3
|
import {create} from "zustand"
|
|
4
4
|
import {subscribeWithSelector} from "zustand/middleware"
|
|
5
5
|
|
|
6
|
-
import {normalizeDashboardWidgets} from "../services/CustomDashboardModel"
|
|
7
6
|
import {storage} from "../utils/storage"
|
|
8
7
|
import {getBluetoothSettingKeysForDevice} from "./bluetoothSettingKeys"
|
|
9
8
|
import {useGlassesStore} from "./glasses"
|
|
@@ -49,6 +48,11 @@ export interface Setting {
|
|
|
49
48
|
resetOnBuildEnvChange?: true
|
|
50
49
|
}
|
|
51
50
|
|
|
51
|
+
// The provider list the data-consent screen currently shows. Stored per
|
|
52
|
+
// install so a later bump can be told apart from an older answer; the boot
|
|
53
|
+
// router only shows the screen during first onboarding today.
|
|
54
|
+
export const AI_DATA_CONSENT_VERSION = 1
|
|
55
|
+
|
|
52
56
|
export const SETTINGS: Record<string, Setting> = {
|
|
53
57
|
// feature flags / mantle settings:
|
|
54
58
|
dev_mode: {key: "dev_mode", defaultValue: () => __DEV__, writable: true, saveOnServer: true, persist: true}, // deprecated
|
|
@@ -77,8 +81,12 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
77
81
|
saveOnServer: true,
|
|
78
82
|
persist: true,
|
|
79
83
|
},
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
// Developer tools: shows the Miniapp Developer launcher and the dev-only
|
|
85
|
+
// bundled miniapps (see DEV_TOOLS_PACKAGES). Off by default so ordinary
|
|
86
|
+
// installs never see them. Replaced the legacy `miniapp_dev_mode` key,
|
|
87
|
+
// which only controlled the Miniapp Developer home tile.
|
|
88
|
+
dev_tools: {
|
|
89
|
+
key: "dev_tools",
|
|
82
90
|
defaultValue: () => false,
|
|
83
91
|
writable: true,
|
|
84
92
|
saveOnServer: true,
|
|
@@ -132,10 +140,10 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
132
140
|
},
|
|
133
141
|
// Show the glasses display mirror on the home screen even when a real
|
|
134
142
|
// (non-simulated) pair of glasses is paired. Toggled from the glasses card's
|
|
135
|
-
// long-press menu.
|
|
143
|
+
// long-press menu. Default on.
|
|
136
144
|
home_mirror: {
|
|
137
145
|
key: "home_mirror",
|
|
138
|
-
defaultValue: () =>
|
|
146
|
+
defaultValue: () => true,
|
|
139
147
|
writable: true,
|
|
140
148
|
saveOnServer: true,
|
|
141
149
|
persist: true,
|
|
@@ -223,6 +231,37 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
223
231
|
saveOnServer: false,
|
|
224
232
|
persist: true,
|
|
225
233
|
},
|
|
234
|
+
// In-app disclosure of which third parties receive user data (App Store
|
|
235
|
+
// 5.1.2(i)). `_version` is the AI_DATA_CONSENT_VERSION the user last saw
|
|
236
|
+
// and `_agreed` is their answer. Declining turns disable_cloud on. The
|
|
237
|
+
// screen is part of first onboarding only. Device-local: consent is a
|
|
238
|
+
// property of this install, and logout's resetAllLocal() clears it so the
|
|
239
|
+
// next account is asked afresh.
|
|
240
|
+
ai_data_consent_version: {
|
|
241
|
+
key: "ai_data_consent_version",
|
|
242
|
+
defaultValue: () => 0,
|
|
243
|
+
writable: true,
|
|
244
|
+
saveOnServer: false,
|
|
245
|
+
persist: true,
|
|
246
|
+
},
|
|
247
|
+
ai_data_consent_agreed: {
|
|
248
|
+
key: "ai_data_consent_agreed",
|
|
249
|
+
defaultValue: () => false,
|
|
250
|
+
writable: true,
|
|
251
|
+
saveOnServer: false,
|
|
252
|
+
persist: true,
|
|
253
|
+
},
|
|
254
|
+
// The user chose "Continue without an account" on the login screen. Boot
|
|
255
|
+
// treats no-session + this flag as guest mode (cloud disabled, no token
|
|
256
|
+
// exchange). Signing in clears it. Device-local like disable_cloud; logout's
|
|
257
|
+
// resetAllLocal() drops it so the login screen offers Skip again.
|
|
258
|
+
login_skipped: {
|
|
259
|
+
key: "login_skipped",
|
|
260
|
+
defaultValue: () => false,
|
|
261
|
+
writable: true,
|
|
262
|
+
saveOnServer: false,
|
|
263
|
+
persist: true,
|
|
264
|
+
},
|
|
226
265
|
// Cloud V2 endpoint OVERRIDES. Empty = no override; cloudClient's resolveUrl
|
|
227
266
|
// owns the full precedence (override -> env -> Metro-derived dev default).
|
|
228
267
|
// The value may be an explicit URL or the METRO_AUTO sentinel ("my dev
|
|
@@ -428,6 +467,16 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
428
467
|
persist: true,
|
|
429
468
|
nativeAuthoritative: true,
|
|
430
469
|
},
|
|
470
|
+
// Latched true the first time the identity projects as paired to real
|
|
471
|
+
// (non-simulated) glasses; never cleared, so forgetting the glasses keeps
|
|
472
|
+
// what it unlocked (the Store). Per-phone like the identity it derives from.
|
|
473
|
+
has_paired_glasses: {
|
|
474
|
+
key: "has_paired_glasses",
|
|
475
|
+
defaultValue: () => false,
|
|
476
|
+
writable: true,
|
|
477
|
+
saveOnServer: false,
|
|
478
|
+
persist: true,
|
|
479
|
+
},
|
|
431
480
|
default_controller: {
|
|
432
481
|
key: "default_controller",
|
|
433
482
|
defaultValue: () => "",
|
|
@@ -436,6 +485,16 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
436
485
|
persist: true,
|
|
437
486
|
nativeAuthoritative: true,
|
|
438
487
|
},
|
|
488
|
+
// Display name of the keyboard the glasses remember (G2 Glassly CFW). The
|
|
489
|
+
// native bridge owns the address/bond; this only keeps the home card and
|
|
490
|
+
// settings row populated before the glasses connect, like default_controller.
|
|
491
|
+
keyboard_name: {
|
|
492
|
+
key: "keyboard_name",
|
|
493
|
+
defaultValue: () => "",
|
|
494
|
+
writable: true,
|
|
495
|
+
saveOnServer: false,
|
|
496
|
+
persist: true,
|
|
497
|
+
},
|
|
439
498
|
pending_controller: {
|
|
440
499
|
key: "pending_controller",
|
|
441
500
|
defaultValue: () => "",
|
|
@@ -476,13 +535,6 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
476
535
|
saveOnServer: true,
|
|
477
536
|
persist: true,
|
|
478
537
|
},
|
|
479
|
-
enable_phone_notifications: {
|
|
480
|
-
key: "enable_phone_notifications",
|
|
481
|
-
defaultValue: () => false,
|
|
482
|
-
writable: true,
|
|
483
|
-
saveOnServer: true,
|
|
484
|
-
persist: true,
|
|
485
|
-
},
|
|
486
538
|
settings_access_count: {
|
|
487
539
|
key: "settings_access_count",
|
|
488
540
|
defaultValue: () => 0,
|
|
@@ -650,13 +702,6 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
650
702
|
saveOnServer: true,
|
|
651
703
|
persist: true,
|
|
652
704
|
},
|
|
653
|
-
use_native_dashboard: {
|
|
654
|
-
key: "use_native_dashboard",
|
|
655
|
-
defaultValue: () => true,
|
|
656
|
-
writable: true,
|
|
657
|
-
saveOnServer: true,
|
|
658
|
-
persist: true,
|
|
659
|
-
},
|
|
660
705
|
// Debug escape hatch: G2 scene rendering through the Glassly CFW
|
|
661
706
|
// direct-framebuffer path (rasterized mode-3 frames into the carrier).
|
|
662
707
|
// ON by default — the working production path on CFW glasses; OFF falls
|
|
@@ -671,8 +716,34 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
671
716
|
saveOnServer: false,
|
|
672
717
|
persist: true,
|
|
673
718
|
},
|
|
719
|
+
// Debug: ask Glassly CFW glasses (revision 26+) for the 7.5 ms / latency-0
|
|
720
|
+
// fast BLE connection profile with slow mode suppressed, instead of the
|
|
721
|
+
// stock 15-30 ms link and its one-minute slow-mode timer. OFF by default:
|
|
722
|
+
// the fast link costs battery whenever the phone is merely connected, and
|
|
723
|
+
// the phone must agree to the interval. Synced to the Bluetooth SDK, which
|
|
724
|
+
// sends the control to both lenses and re-sends it on every CFW detection.
|
|
725
|
+
// Device-local debug knob, so not saved on the server.
|
|
726
|
+
cfw_fast_ble: {
|
|
727
|
+
key: "cfw_fast_ble",
|
|
728
|
+
defaultValue: () => false,
|
|
729
|
+
writable: true,
|
|
730
|
+
saveOnServer: false,
|
|
731
|
+
persist: true,
|
|
732
|
+
},
|
|
733
|
+
// Maximum rate at which display updates leave the phone for the glasses.
|
|
734
|
+
// The Bluetooth SDK paces every scene frame and legacy layout to this,
|
|
735
|
+
// coalescing faster updates last-wins; clears bypass it. No effect on G2
|
|
736
|
+
// custom firmware, whose driver coalesces off the link itself. Device-local
|
|
737
|
+
// debug knob (2..20), so not saved on the server.
|
|
738
|
+
display_max_fps: {
|
|
739
|
+
key: "display_max_fps",
|
|
740
|
+
defaultValue: () => 8,
|
|
741
|
+
writable: true,
|
|
742
|
+
saveOnServer: false,
|
|
743
|
+
persist: true,
|
|
744
|
+
},
|
|
674
745
|
// Master switch for the Scene API dashboard on G2 custom firmware
|
|
675
|
-
// (
|
|
746
|
+
// (the dashboard's eligibility). Off leaves an eligible device on the
|
|
676
747
|
// native head-up behavior. Device-local debug knob, so not saved on the
|
|
677
748
|
// server.
|
|
678
749
|
custom_dashboard_enabled: {
|
|
@@ -682,6 +753,37 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
682
753
|
saveOnServer: false,
|
|
683
754
|
persist: true,
|
|
684
755
|
},
|
|
756
|
+
// Debug: time each dashboard open (head-up / double tap → glasses frame)
|
|
757
|
+
// and post the stage timeline as a phone notification. Persisted so a
|
|
758
|
+
// slow first open after an app restart is still caught. Device-local.
|
|
759
|
+
debug_dashboard_open_timing: {
|
|
760
|
+
key: "debug_dashboard_open_timing",
|
|
761
|
+
defaultValue: () => false,
|
|
762
|
+
writable: true,
|
|
763
|
+
saveOnServer: false,
|
|
764
|
+
persist: true,
|
|
765
|
+
},
|
|
766
|
+
// Debug escape hatch: enter the G2's firmware-rendered navigation mode on
|
|
767
|
+
// custom firmware too. Off by default: CFW draws the navigation miniapp's
|
|
768
|
+
// own HUD through the scene canvas and reads session.compass directly, so
|
|
769
|
+
// native nav mode is reserved for stock firmware. Device-local debug knob,
|
|
770
|
+
// so not saved on the server.
|
|
771
|
+
cfw_native_navigation: {
|
|
772
|
+
key: "cfw_native_navigation",
|
|
773
|
+
defaultValue: () => false,
|
|
774
|
+
writable: true,
|
|
775
|
+
saveOnServer: false,
|
|
776
|
+
persist: true,
|
|
777
|
+
},
|
|
778
|
+
// Debug: open miniapps from their last screenshot, fading straight into the
|
|
779
|
+
// app. Off shows the splash instead. Device-local, default on.
|
|
780
|
+
use_screenshot_transition: {
|
|
781
|
+
key: "use_screenshot_transition",
|
|
782
|
+
defaultValue: () => true,
|
|
783
|
+
writable: true,
|
|
784
|
+
saveOnServer: false,
|
|
785
|
+
persist: true,
|
|
786
|
+
},
|
|
685
787
|
// Gesture-dots debug indicator: flash a glyph on the glasses when a touch
|
|
686
788
|
// gesture is received while the display is empty. Works on any
|
|
687
789
|
// scene-capable device, not only CFW. Device-local debug knob, default off.
|
|
@@ -710,24 +812,33 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
710
812
|
saveOnServer: false,
|
|
711
813
|
persist: true,
|
|
712
814
|
},
|
|
713
|
-
//
|
|
714
|
-
|
|
715
|
-
key: "
|
|
716
|
-
defaultValue: () =>
|
|
815
|
+
// "solid" | "two_tone": the battery widgets' G and R.
|
|
816
|
+
custom_dashboard_battery_style: {
|
|
817
|
+
key: "custom_dashboard_battery_style",
|
|
818
|
+
defaultValue: () => "solid",
|
|
819
|
+
writable: true,
|
|
820
|
+
saveOnServer: false,
|
|
821
|
+
persist: true,
|
|
822
|
+
},
|
|
823
|
+
// {preset, slots: {slotId: widgetId}, scratchpad: [widgetId]} — the
|
|
824
|
+
// dashboard miniapp owns the shape and its default; null draws its default layout.
|
|
825
|
+
custom_dashboard_layout: {
|
|
826
|
+
key: "custom_dashboard_layout",
|
|
827
|
+
defaultValue: () => null,
|
|
717
828
|
writable: true,
|
|
718
829
|
saveOnServer: false,
|
|
719
830
|
persist: true,
|
|
720
831
|
},
|
|
721
832
|
custom_dashboard_calendar_event_count: {
|
|
722
833
|
key: "custom_dashboard_calendar_event_count",
|
|
723
|
-
defaultValue: () =>
|
|
834
|
+
defaultValue: () => 3,
|
|
724
835
|
writable: true,
|
|
725
836
|
saveOnServer: false,
|
|
726
837
|
persist: true,
|
|
727
838
|
},
|
|
728
839
|
custom_dashboard_calendar_days_ahead: {
|
|
729
840
|
key: "custom_dashboard_calendar_days_ahead",
|
|
730
|
-
defaultValue: () =>
|
|
841
|
+
defaultValue: () => 5,
|
|
731
842
|
writable: true,
|
|
732
843
|
saveOnServer: false,
|
|
733
844
|
persist: true,
|
|
@@ -910,42 +1021,58 @@ export const SETTINGS: Record<string, Setting> = {
|
|
|
910
1021
|
saveOnServer: true,
|
|
911
1022
|
persist: true,
|
|
912
1023
|
},
|
|
913
|
-
//
|
|
914
|
-
//
|
|
915
|
-
//
|
|
916
|
-
|
|
917
|
-
key: "
|
|
1024
|
+
// Apps the connected glasses reported posting notifications (bundle/package
|
|
1025
|
+
// id + display name). Backs the filter UI where the phone cannot enumerate
|
|
1026
|
+
// apps itself and the allowlist pushed to firmware that filters on-glass.
|
|
1027
|
+
notification_seen_apps: {
|
|
1028
|
+
key: "notification_seen_apps",
|
|
918
1029
|
defaultValue: () => [],
|
|
919
1030
|
writable: true,
|
|
920
1031
|
saveOnServer: false,
|
|
921
1032
|
persist: true,
|
|
922
1033
|
},
|
|
923
|
-
//
|
|
924
|
-
|
|
925
|
-
|
|
1034
|
+
// Notification display, any glasses: firmware that presents notifications
|
|
1035
|
+
// itself receives these as a GlassesNotificationConfig; the engine's own
|
|
1036
|
+
// viewer reads the same four. Master switch first.
|
|
1037
|
+
notifications_enabled: {
|
|
1038
|
+
key: "notifications_enabled",
|
|
926
1039
|
defaultValue: () => true,
|
|
927
1040
|
writable: true,
|
|
928
1041
|
saveOnServer: true,
|
|
929
1042
|
persist: true,
|
|
930
1043
|
},
|
|
931
|
-
|
|
932
|
-
|
|
1044
|
+
// Show a popup when a notification arrives; off keeps history only.
|
|
1045
|
+
notifications_popups: {
|
|
1046
|
+
key: "notifications_popups",
|
|
933
1047
|
defaultValue: () => true,
|
|
934
1048
|
writable: true,
|
|
935
1049
|
saveOnServer: true,
|
|
936
1050
|
persist: true,
|
|
937
1051
|
},
|
|
938
|
-
// Popup duration in seconds; firmware
|
|
939
|
-
|
|
940
|
-
key: "
|
|
1052
|
+
// Popup duration in seconds; 0 lets the firmware or viewer pick its default.
|
|
1053
|
+
notifications_popup_seconds: {
|
|
1054
|
+
key: "notifications_popup_seconds",
|
|
941
1055
|
defaultValue: () => 5,
|
|
942
1056
|
writable: true,
|
|
943
1057
|
saveOnServer: true,
|
|
944
1058
|
persist: true,
|
|
945
1059
|
},
|
|
946
|
-
//
|
|
947
|
-
|
|
948
|
-
key: "
|
|
1060
|
+
// Hold popups while another glasses feature (navigation, a miniapp) is on screen.
|
|
1061
|
+
notifications_hold_during_apps: {
|
|
1062
|
+
key: "notifications_hold_during_apps",
|
|
1063
|
+
defaultValue: () => true,
|
|
1064
|
+
writable: true,
|
|
1065
|
+
saveOnServer: true,
|
|
1066
|
+
persist: true,
|
|
1067
|
+
},
|
|
1068
|
+
// Experimental, any glasses: hold notification popups while the phone is in
|
|
1069
|
+
// use (unlocked, or the Glassly App foregrounded), so a notification isn't
|
|
1070
|
+
// shown on the glasses and the phone screen at once. The dashboard reducer
|
|
1071
|
+
// reads it with PhoneActivity when a notification posts; on iOS
|
|
1072
|
+
// PhoneNotificationsSync also folds it into the stock G2 firmware's
|
|
1073
|
+
// auto_display, which pops notifications up on its own.
|
|
1074
|
+
notifications_ignore_while_active: {
|
|
1075
|
+
key: "notifications_ignore_while_active",
|
|
949
1076
|
defaultValue: () => true,
|
|
950
1077
|
writable: true,
|
|
951
1078
|
saveOnServer: true,
|
|
@@ -1001,9 +1128,9 @@ export const BLUETOOTH_SETTING_KEYS: string[] = [
|
|
|
1001
1128
|
SETTINGS.dashboard_depth.key,
|
|
1002
1129
|
SETTINGS.menu_apps.key,
|
|
1003
1130
|
SETTINGS.calendar_events.key,
|
|
1004
|
-
// G2 native reads this to gate rendering while the ER firmware dashboard is open.
|
|
1005
|
-
SETTINGS.use_native_dashboard.key,
|
|
1006
1131
|
SETTINGS.cfw_scene_renderer.key,
|
|
1132
|
+
SETTINGS.cfw_fast_ble.key,
|
|
1133
|
+
SETTINGS.display_max_fps.key,
|
|
1007
1134
|
SETTINGS.twelve_hour_time.key,
|
|
1008
1135
|
SETTINGS.metric_system.key,
|
|
1009
1136
|
// button:
|
|
@@ -1070,13 +1197,10 @@ export interface SettingsState {
|
|
|
1070
1197
|
}
|
|
1071
1198
|
|
|
1072
1199
|
const getDefaultSettings = () =>
|
|
1073
|
-
Object.keys(SETTINGS).reduce(
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
},
|
|
1078
|
-
{} as Record<string, any>,
|
|
1079
|
-
)
|
|
1200
|
+
Object.keys(SETTINGS).reduce((acc, key) => {
|
|
1201
|
+
acc[key] = SETTINGS[key].defaultValue()
|
|
1202
|
+
return acc
|
|
1203
|
+
}, {} as Record<string, any>)
|
|
1080
1204
|
|
|
1081
1205
|
// Single-flight for loadAllSettings: the host fires it at module load and
|
|
1082
1206
|
// engine.start()'s device-store hydration awaits it — without the memo the
|
package/src/types/applet.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type {ReactNode} from "react"
|
|
|
3
3
|
* App and miniapp types owned by @glassly/engine.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
import {HardwareRequirement} from "./hardware"
|
|
8
7
|
|
|
9
8
|
import type {CompatibilityResult} from "../utils/hardware/hardware"
|
|
@@ -24,6 +23,7 @@ export type AppPermissionType =
|
|
|
24
23
|
| "LOCATION"
|
|
25
24
|
| "BACKGROUND_LOCATION"
|
|
26
25
|
| "READ_NOTIFICATIONS"
|
|
26
|
+
| "DISPLAY_MIRROR"
|
|
27
27
|
| "POST_NOTIFICATIONS"
|
|
28
28
|
| "API_KEYS"
|
|
29
29
|
| "MEMORY"
|
|
@@ -107,12 +107,25 @@ export interface ClientApp extends AppletInterface {
|
|
|
107
107
|
loading: boolean
|
|
108
108
|
local: boolean
|
|
109
109
|
hidden: boolean
|
|
110
|
+
/**
|
|
111
|
+
* Persistent miniapp: the host starts it at launch and it only stops from
|
|
112
|
+
* the app switcher's persistent pill; its card cannot be swiped away and
|
|
113
|
+
* the capsule close minimizes it. Manifest `persistent` gives the default;
|
|
114
|
+
* the wearer's choice persists beside the hidden flag.
|
|
115
|
+
*/
|
|
116
|
+
persistent?: boolean
|
|
110
117
|
onStart?: () => void
|
|
111
118
|
onStop?: () => void
|
|
112
119
|
screenshot?: string
|
|
113
120
|
runtimePermissions?: string[]
|
|
114
121
|
declaredPermissions?: string[]
|
|
115
122
|
version?: string
|
|
123
|
+
/** Manifest `description`: the paragraph the store and the info page show. */
|
|
124
|
+
description?: string
|
|
125
|
+
/** Manifest `tagline`: one line under the name. */
|
|
126
|
+
tagline?: string
|
|
127
|
+
/** Manifest `tags`: lowercase store tag slugs. */
|
|
128
|
+
tags?: string[]
|
|
116
129
|
needsPcm?: boolean
|
|
117
130
|
needsTranscript?: boolean
|
|
118
131
|
devUrl?: string
|
|
@@ -88,6 +88,9 @@ export const evenRealitiesG2: Capabilities = {
|
|
|
88
88
|
// OTA capabilities - G2 firmware updates are not driven by the ASG OTA flow
|
|
89
89
|
hasOta: false,
|
|
90
90
|
|
|
91
|
+
// Glassly CFW is bundled for the G2 and flashed over BLE from the app
|
|
92
|
+
hasCustomFirmware: true,
|
|
93
|
+
|
|
91
94
|
// Dashboard - G2 renders Even Realities' native dashboard in firmware, so
|
|
92
95
|
// Glassly does not manage the dashboard or expose dashboard settings for it
|
|
93
96
|
hasNativeDashboard: true,
|
|
@@ -96,4 +99,7 @@ export const evenRealitiesG2: Capabilities = {
|
|
|
96
99
|
// 576×188 overview map); magnetometer streams only while it is active
|
|
97
100
|
hasNativeNavigation: true,
|
|
98
101
|
|
|
102
|
+
// Firmware notification centre: popups + history, on-glass app filter.
|
|
103
|
+
hasNativeNotifications: true,
|
|
104
|
+
nativeNotificationPopupSeconds: [0, 5, 7, 10],
|
|
99
105
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Capability profile for the Simulated Glasses model.
|
|
5
5
|
* Defines the hardware and software features available on this device.
|
|
6
|
-
*
|
|
6
|
+
* The display previews the G2 Glassly CFW scene API, including SVG and rotation.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type {Capabilities} from "../hardware"
|
|
@@ -38,10 +38,14 @@ export const simulatedGlasses: Capabilities = {
|
|
|
38
38
|
width: 576,
|
|
39
39
|
height: 288,
|
|
40
40
|
canPosition: true,
|
|
41
|
-
maxTextElements:
|
|
42
|
-
maxImageElements:
|
|
43
|
-
shapes: ["rect"],
|
|
41
|
+
maxTextElements: 120,
|
|
42
|
+
maxImageElements: 120,
|
|
43
|
+
shapes: ["rect", "circle", "arc", "pie", "line", "triangle", "quad", "bezier", "svg"],
|
|
44
|
+
animation: true,
|
|
45
|
+
rotation: true,
|
|
46
|
+
depth: true,
|
|
44
47
|
// The mirror renders full 8-bit grayscale; 16 matches the G2's 4-bit
|
|
48
|
+
|
|
45
49
|
// panel so simulated output previews what real hardware can show.
|
|
46
50
|
intensityLevels: 16,
|
|
47
51
|
partialUpdate: true,
|
package/src/types/hardware.ts
CHANGED
|
@@ -56,11 +56,31 @@ export interface DisplayCapabilities {
|
|
|
56
56
|
maxImageElements?: number
|
|
57
57
|
/** Per-image dimension cap (box-level), when the firmware has one. */
|
|
58
58
|
maxImagePx?: {width: number; height: number}
|
|
59
|
-
shapes?:
|
|
59
|
+
shapes?: DisplayShape[]
|
|
60
|
+
/** True ⇒ the device animates element transitions itself. */
|
|
61
|
+
animation?: boolean
|
|
62
|
+
/** Geometric and SVG rotations, including duration-based transitions. */
|
|
63
|
+
rotation?: boolean
|
|
64
|
+
/** Per-element stereo `depth` (a lens disparity) is honored; otherwise elements draw flat. */
|
|
65
|
+
depth?: boolean
|
|
60
66
|
intensityLevels?: number
|
|
67
|
+
|
|
61
68
|
partialUpdate?: boolean
|
|
69
|
+
/**
|
|
70
|
+
* The views a miniapp may draw right now: "main" for every app, "dashboard"
|
|
71
|
+
* (the overlay slot) only for the designated system dashboard app while the
|
|
72
|
+
* glasses are eligible. Per app; filled in by the miniapp runtime.
|
|
73
|
+
*/
|
|
74
|
+
views?: DisplayView[]
|
|
62
75
|
}
|
|
63
76
|
|
|
77
|
+
export type DisplayView = "main" | "dashboard"
|
|
78
|
+
|
|
79
|
+
export type DisplayShape = "rect" | "circle" | "arc" | "pie" | "line" | "triangle" | "quad" | "bezier" | "svg"
|
|
80
|
+
|
|
81
|
+
/** Every vector shape the Glassly CFW rasterizes on the glasses. */
|
|
82
|
+
export const ALL_DISPLAY_SHAPES: DisplayShape[] = ["rect", "circle", "arc", "pie", "line", "triangle", "quad", "bezier"]
|
|
83
|
+
|
|
64
84
|
/**
|
|
65
85
|
* Microphone capabilities
|
|
66
86
|
*/
|
|
@@ -164,6 +184,10 @@ export interface Capabilities {
|
|
|
164
184
|
// OTA capability
|
|
165
185
|
hasOta?: boolean
|
|
166
186
|
|
|
187
|
+
// True when the app ships a flashable Glassly custom firmware for this
|
|
188
|
+
// model, so pairing can offer to install it and Settings exposes the flasher
|
|
189
|
+
hasCustomFirmware?: boolean
|
|
190
|
+
|
|
167
191
|
// Native dashboard capability
|
|
168
192
|
// True when the device renders its own dashboard in firmware (e.g. Even
|
|
169
193
|
// Realities' built-in dashboard on G2). Glassly does not manage or expose
|
|
@@ -175,6 +199,15 @@ export interface Capabilities {
|
|
|
175
199
|
// (G2 nav mode: instruction card + map slots + magnetometer compass); nav
|
|
176
200
|
// apps feed it structured fields and map bitmaps instead of scene elements
|
|
177
201
|
hasNativeNavigation?: boolean
|
|
202
|
+
|
|
203
|
+
// True when the firmware presents phone notifications itself (popup +
|
|
204
|
+
// history) and takes a GlassesNotificationConfig. How it gets the content
|
|
205
|
+
// (reading the phone's stream, or an upload from the phone) is the driver's
|
|
206
|
+
// business; the engine only decides who presents.
|
|
207
|
+
hasNativeNotifications?: boolean
|
|
208
|
+
// Popup durations the firmware accepts, in seconds (0 = firmware default).
|
|
209
|
+
// Drivers snap other values; the settings UI offers exactly these.
|
|
210
|
+
nativeNotificationPopupSeconds?: number[]
|
|
178
211
|
}
|
|
179
212
|
|
|
180
213
|
/**
|
package/src/types/index.ts
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
|
+
import {BgTimer} from "./timers"
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Merge partial patches and flush once after `delayMs` of quiet time.
|
|
3
|
-
*
|
|
5
|
+
* Runs on BgTimer so a debounced write still lands while the app is
|
|
6
|
+
* backgrounded; off-Android (and under Jest) BgTimer falls through to the
|
|
7
|
+
* global timer, so fake timers can still advance it.
|
|
4
8
|
*/
|
|
5
9
|
export function createDebouncedPatchFlusher<T extends Record<string, unknown>>(
|
|
6
10
|
flush: (patch: T) => void,
|
|
7
11
|
delayMs: number,
|
|
8
12
|
) {
|
|
9
13
|
let pending = {} as T
|
|
10
|
-
let timer:
|
|
14
|
+
let timer: number | null = null
|
|
11
15
|
|
|
12
16
|
const schedule = (callback: () => void) => {
|
|
13
|
-
timer = setTimeout(callback, delayMs)
|
|
17
|
+
timer = BgTimer.setTimeout(callback, delayMs)
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
return (patch: Partial<T>) => {
|
|
17
21
|
pending = {...pending, ...patch}
|
|
18
22
|
if (timer != null) {
|
|
19
|
-
clearTimeout(timer)
|
|
23
|
+
BgTimer.clearTimeout(timer)
|
|
20
24
|
}
|
|
21
25
|
schedule(() => {
|
|
22
26
|
timer = null
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
import {configuredDevHost} from "./configuredDevHost"
|
|
23
23
|
import {storage} from "./storage/storage"
|
|
24
24
|
|
|
25
|
+
import {BgTimer} from "./timers"
|
|
26
|
+
|
|
25
27
|
const REACHABILITY_TIMEOUT_MS = 1500
|
|
26
28
|
|
|
27
29
|
// A single dropped DNS lookup or momentary Wi-Fi blip (AP roam, DHCP renewal,
|
|
@@ -53,13 +55,13 @@ export type DecideDevLaunchOptions = {
|
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
function delay(ms: number): Promise<void> {
|
|
56
|
-
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
58
|
+
return new Promise((resolve) => BgTimer.setTimeout(resolve, ms))
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
/** Single GET <devUrl>/miniapp.json attempt with a hard timeout. */
|
|
60
62
|
async function fetchManifestOnce(devUrl: string): Promise<DevManifest | null> {
|
|
61
63
|
const controller = new AbortController()
|
|
62
|
-
const timer = setTimeout(() => controller.abort(), REACHABILITY_TIMEOUT_MS)
|
|
64
|
+
const timer = BgTimer.setTimeout(() => controller.abort(), REACHABILITY_TIMEOUT_MS)
|
|
63
65
|
try {
|
|
64
66
|
const res = await fetch(`${devUrl.replace(/\/$/, "")}/miniapp.json`, {
|
|
65
67
|
method: "GET",
|
|
@@ -68,7 +70,7 @@ async function fetchManifestOnce(devUrl: string): Promise<DevManifest | null> {
|
|
|
68
70
|
if (!res.ok) return null
|
|
69
71
|
return (await res.json()) as DevManifest
|
|
70
72
|
} finally {
|
|
71
|
-
clearTimeout(timer)
|
|
73
|
+
BgTimer.clearTimeout(timer)
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
|