All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- [Feature] Display capability —
mwdat-displaybrings visual experiences to Meta Ray-Ban Display glasses, with content rendering (FlexBox, Text, Button, Image, Icon) and MP4 video playback.Displayinterface conforming toCapability, accessed viaDeviceSession.addDisplay(config)/DeviceSession.removeDisplay().DisplayConfigurationfor configuring a display session, plus typedDisplayStateandDisplayErrorenums for observing display lifecycle and error handling.Display.sendContent { ... }for building UI declaratively. Each call replaces the entire display; content is presented one view at a time with vertical scrolling only.FlexBoxScopeview builders:flexBox,text,icon,image,buttonwithDirection,Alignment,ButtonStyle,CornerRadius,IconName,IconStyle,ImageSize,TextColor,TextStyle,FlexBoxBackgroundstyling primitives.VideoPlayerwithVideoSource.Url,VideoCodec.MP4, plus typedVideoPlayerStateandVideoPlayerErrorfor observation.
- [Feature] Device Access Toolkit App Model (DAM) — a new architecture model for the SDK. Apps opt in by declaring
<meta-data android:name="com.meta.wearable.mwdat.DAM_ENABLED" android:value="true" />inAndroidManifest.xml. DAM is required for the new Display capability; both the App Model flow and the older flow continue to be supported for camera functionality on Meta AI glasses.Wearables.openDATGlassesAppUpdate(activity): opens the Meta AI DAT app update destination for the configured app.
- [API]
Wearables.openFirmwareUpdate(activity): opens the Meta AI firmware update screen for the connected device. - [API]
Wearables.getDeviceState(deviceIdentifier): returns aStateFlow<DeviceState>exposing live device state, including currentThermalLevel. - [API]
Wearables.registrationErrorStream: returns aFlow<RegistrationError>for observing registration errors out-of-band fromRegistrationState. - [API]
Wearables.isDevMode: returns whether the SDK is configured for developer mode. - [API]
DeviceSession.errors:SharedFlow<DeviceSessionError>for observing session-scoped errors. - [API]
DeviceStatedata class with athermalLevelproperty exposing per-device thermal status. - [API]
ThermalLevelenum exposing per-device thermal state. - [API]
NavigationErrorenum: typed error for the newWearables.openFirmwareUpdate/openDATGlassesAppUpdateAPIs. - [API]
DeviceSessionError(replacesSessionError) adds typed cases for thermal, battery, and peak-power conditions:BATTERY_CRITICAL,PEAK_POWER_SHUTDOWN,THERMAL_CRITICAL,THERMAL_EMERGENCY. Also addsDAT_APP_ON_THE_GLASSES_UPDATE_REQUIREDfor surfacing required app updates. - [API]
StreamErrorcases:BATTERY_LOW,CRITICAL_STREAM_ERROR,PEAK_POWER_LIMIT,THERMAL_EMERGENCY,THERMAL_HOT,TIMEOUTfor typed handling of streaming failures. - [API]
DeviceType.isDisplayCapableandDevice.isDisplayCapable(): helpers to check whether a device or device type supports a display capability. - [API]
SpecificDeviceSelector.activeDevice(): returns the currently activeDeviceIdentifierfor the selector. - [API]
Stream.errorStreamandStream.start():Streamnow exposes a typed error stream and an explicitstart()method. - [API]
VideoFrame.isCodecConfig: indicates whether a frame contains codec configuration data instead of payload video frames. Constructor signature changed to include the new flag. - [Feature] Captouch simulation:
MockDeviceKitnow allows simulatingtapandtapAndHoldcaptouch gestures via the newMockCaptouchKitinterface, accessible fromMockDisplaylessGlasses.services.captouch.
- [API] Overhauled session management to make device sessions explicit. The previously-implicit CoreUX session is now surfaced as
DeviceSession, which serves as the entry point to interact with a glasses device — capabilities likeStreamandDisplayare attached to a session viaDeviceSession.addStream(...)/addDisplay(...), and session state and errors are observed directly on theDeviceSessioninstance rather than via globalWearablesAPIs. This consolidates several renames:Sessionclass is nowDeviceSession. Existing extension functionsaddStream(...)/removeStream(...)now take aDeviceSessionreceiver.SessionErroris nowDeviceSessionError(with additional cases — see Added).SessionStateis nowDeviceSessionState. State values areIDLE,STARTING,STARTED,PAUSED,STOPPING,STOPPEDfor finer lifecycle tracking.StreamSessionis nowStream(interface, conforming toCapability).StreamSessionStateis nowStreamState.- The
Wearables.startStreamSession(...)factory is removed; create aDeviceSessionviaWearables.createSession(...), then callDeviceSession.addStream(config)(andremoveStream()to detach). Wearables.getDeviceSessionState(deviceIdentifier)removed; observe state directly on theDeviceSessioninstance viaDeviceSession.state.
- [API]
RegistrationStatereshaped from a sealed class hierarchy (Available,Registered,Registering,Unavailable,Unregistering) to a plain enum (AVAILABLE,REGISTERED,REGISTERING,UNAVAILABLE,UNREGISTERING). The previous registration-error payload has been moved toWearables.registrationErrorStream.
Wearables.checkPermission()(viaPermissionsSession): fixed double-resume crash that could occur when a permission check is completed twice.PermissionsSession: fixed stale state after Bluetooth reconnection so subsequent permission checks reflect current device state.Stream(photo capture): added a timeout to photo capture to prevent permanent locking when the capture never completes.MockDeviceKit:don()andfold()now maintain consistent device state across cycles.VideoFrame: fixed buffer lifecycle when surfacing compressed video codec config frames.ACDCRegistrationService: fixed a leakedServiceConnectionduring registration.
- Ray-Ban Meta Optics glasses support.
- [Feature]
MockCameraKitcan use the phone camera (front and back) to simulate streaming withMockCameraKit.setCameraFeed(CameraFacing). - [Feature]
StreamConfiguration.compressVideoproperty to enable compressed HEVC video streaming, bypassing decoding. TheVideoFrame.isCompressedproperty indicates whether the frame data is compressed. - [Feature]
MockDeviceKitnow supports configuration to simulate device registration and permissions.MockDeviceKitConfigdata class to configureMockDeviceKitinitialization withinitiallyRegisteredandinitialPermissionsGrantedoptions.MockPermissionsinterface withsetandsetRequestResultto simulate permission states in tests.MockDeviceKitInterface.enable(config),disable,isEnabled, andpermissionsfor controlling MockDeviceKit lifecycle and permissions.
- [API] Session-based device management. Device interactions are now scoped to a
Sessionwith explicit lifecycle control.Wearables.createSession(deviceSelector): Creates aSessionfor a givenDeviceSelector.Sessionclass withstart,stop, state observation viagetState, and error observation viagetErrors.DeviceSessionStateenum with valuesIDLE,STARTING,PAUSED,STOPPING.SessionErrorenum with typed error cases.Capabilityinterface for extending sessions with additional features such as camera streaming.- Camera streaming exposed as a
Capability, as newStreaminterface. Access to it withSession.addStream(config)andSession.removeStream.
- [API]
MockDisplaylessGlassesServicesinterface grouping mock services, accessible viaMockDisplaylessGlasses.services.
- [API] Renamed
DeviceMetadatadata class toDevice, making it consistent with iOS. - [API]
DeviceSelector.activeDevicereturnsDeviceIdentifierdirectly.activeDeviceFlowfor the flow-based approach. - [API]
MockDeviceKitInterface.resetreplaced withenable/disablefor explicit lifecycle control. - Improved the Camera Access App MockDevice UI.
MockDevicebetter simulates state when a device is powered off or doffed.- Runtime crashes when building with R8/minify enabled.
ClassCastExceptionwhencom.meta.wearable.mwdat.APPLICATION_IDmanifest metadata is not parsed as aString.
- [API] Removed old session model API, including
DeviceSessionclass, in favor of the newSession. - [API]
MockDisplaylessGlasses.getCameraKithas been removed. The functionality is accessible throughMockDisplaylessGlasses.services. - Third-party library entries from
AndroidManifest.xml.
- [API] Sealed interface
CaptureErrorfor photo capture error handling with typed error cases:DeviceDisconnected,NotStreaming,CaptureInProgress, andCaptureFailed. - [API] Enum
LinkStaterepresenting device connectivity state with valuesCONNECTING,CONNECTED, andDISCONNECTED. Brings parity with iOS SDK.
- [API]
StreamSession.capturePhoto()now returnsDatResult<PhotoData, CaptureError>instead ofResult<PhotoData>. - [API]
Device.linkState: Replaces booleanavailableproperty withLinkStateenum for richer connectivity state information. - Improved Android video decoding and playback performance.
- [CameraAccess] Removed timer functionality.
- Fixed R8 build errors when minify is enabled.
- Improved
DeviceSessionaccuracy. - Fixed duplicate class errors when building with React Native.
- Improved audio and video packet deserialization.
- High resolution (720x1280) video can be requested.
Note: This version requires updated configuration values from Wearables Developer Center for release channel functionality.
- Meta Ray-Ban Display glasses support.
- [API]
AutoDeviceSelectorincludes newfilterproperty. Defaults to filter out incompatible devices. - [API]
presentationTimeUsproperty toVideoFrame.
- The registration dialog now opens in place, instead of jumping to Meta AI app.
- [API]
Wearables.startRegistrationandWearables.startUnregistrationaccept an Activity instead of a Context.
- Removed timer functionality in Camera Access app.
- The correct state is now reported after unregistering the application.
- Improved stream latency, which was degrading over time.
- [API] Result-like object (
DatResult) used to returnErrorfrom some methods. - [API]
ALREADY_INITIALIZEDerror toWearablesError.
- [API] Permission functions now return
DatResult<PermissionStatus, PermissionError>instead ofPermissionStatus. - [API] In
PermissionError,COMPANION_APP_NOT_INSTALLEDhas been renamed toMETA_AI_NOT_INSTALLED. - The Camera Access app streaming UX reflects device availability.
- The Camera Access app shows errors when incompatible glasses are found.
- Fixed orientation of images captured by
MockDevice. - Streaming status becomes
stoppedwhen permission is not granted. - Fixed invalidation of flow from
Wearables.getDeviceSessionStateafter streaming stops. - Fixed UI issues in the Camera Access app.
- [API]
Errordata class fromPermissionStatus.
- The Camera Access app now correctly processes orientation metadata in HEIC images.
- [API] Base classes for errors (
DatError) and exceptions (DatException) of the SDK. - [API] New
WearablesErrorandWearablesExceptiontypes. - [API] Configurable frame rate for the video stream. Valid values include 30, 24, 15, 7 and 2 fps.
- [API]
AutoDeviceSelectorconstructor now accepts a device ranking function to influence device selection. - [API] A description (string) to enum types.
- [API]
DeviceMetadataincludes new fields for compatibility and firmware info versions.
- [API] The SDK now splits into components for independent project inclusion.
- [API] Calling any
Wearablesfunction without initialization throws a WearablesException. - [API] Permission API updated for better consistency with iOS:
checkPermissionrenamed tocheckPermissionStatus.AskPermissionContractrenamed toRequestpermissionContract.PermissionGrantStatereplaced byPermissionStatus, with valuesGRANTEDandDENIED.- Updated the set of values of
PermissionError.
- [API] Permission requests now return an
Errorinstead of throwing exceptions. - [API]
RegistrationErrornow holds different errors, aligning more closely with the iOS SDK. - [API]
DeviceSelector's select method replaced by an active device Flow. - [API] Renamed
DeviceTypeenum values. - [API] Replaced
MockDeviceUUIDwithDeviceIdentifier. AutoDeviceSelectornow selects or drops devices based on connectivity state.- Adaptive Bit Rate (streaming) updated to use provided resolution and frame rate hints.
- Camera Access app redesigned and updated to the current SDK version.
- [API]
PermissionException. - [API]
onDeviceNamemethod onPermission.
- Sessions now close properly when the connection with the glasses is lost.
- The requested video quality is now correctly applied to the stream.
- First version of the Wearables Device Access Toolkit for Android.