--- name: mockdevice-testing description: MockDeviceKit for testing without physical glasses hardware --- # MockDevice Testing (Android) Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses. MockDeviceKit simulates Meta glasses behavior for development and testing. It provides: - `MockDeviceKit` — Entry point for creating simulated devices - `MockRaybanMeta` — Simulated Ray-Ban Meta glasses - `MockCameraKit` — Simulated camera with configurable video feed and photo capture ## Setup Add `mwdat-mockdevice` to your Gradle dependencies: ```kotlin dependencies { implementation(libs.mwdat.mockdevice) } ``` ## Creating a mock device ```kotlin import com.meta.wearable.dat.mockdevice.MockDeviceKit import com.meta.wearable.dat.mockdevice.api.MockDeviceKitConfig val mockDeviceKit = MockDeviceKit.getInstance(context) // Attach fake registration and connectivity (auto-initializes Wearables if needed). // By default, Wearables.registrationState transitions to Registered. mockDeviceKit.enable() // Or start in unregistered state to test registration flows: // mockDeviceKit.enable(MockDeviceKitConfig(initiallyRegistered = false)) val device = mockDeviceKit.pairRaybanMeta() ``` You can check `mockDeviceKit.isEnabled` to query whether the mock environment is active. ## Simulating device states ```kotlin // Simulate glasses lifecycle device.powerOn() device.unfold() device.don() // Simulate wearing the glasses // Later... device.doff() // Simulate removing device.fold() device.powerOff() ``` ## Configuring permissions MockDeviceKit provides `permissions` to control permission behavior without the Meta AI app. By default, `RequestPermissionContract` returns `Granted`. Use `set()` to control `checkPermissionStatus()` and `setRequestResult()` to control request outcomes. ```kotlin val mockDeviceKit = MockDeviceKit.getInstance(context) // Simulate denied camera permission status mockDeviceKit.permissions.set(Permission.CAMERA, PermissionStatus.Denied) // Simulate denied request result (user tapping "deny") mockDeviceKit.permissions.setRequestResult(Permission.CAMERA, PermissionStatus.Denied) ``` ## Setting up mock camera feeds ### Video streaming ```kotlin val camera = device.services.camera camera.setCameraFeed(videoUri) ``` ### Photo capture ```kotlin val camera = device.services.camera camera.setCapturedImage(imageUri) ``` **Note**: Android doesn't transcode video automatically. Mock video files must be in h.265 format. Use FFmpeg to convert: ```bash ffmpeg -hwaccel videotoolbox -i input.mp4 -c:v hevc_videotoolbox -c:a aac_at -tag:v hvc1 -vf "scale=540:960" output.mov ``` ## Writing instrumentation tests Create a reusable test base class: ```kotlin import android.content.Context import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.platform.app.InstrumentationRegistry import com.meta.wearable.dat.mockdevice.MockDeviceKit import com.meta.wearable.dat.mockdevice.api.MockDeviceKitInterface import org.junit.After import org.junit.Before import org.junit.Rule open class MockDeviceKitTestCase( private val activityClass: Class ) { @get:Rule val scenarioRule = ActivityScenarioRule(activityClass) protected lateinit var mockDeviceKit: MockDeviceKitInterface protected lateinit var targetContext: Context @Before open fun setUp() { val instrumentation = InstrumentationRegistry.getInstrumentation() targetContext = instrumentation.targetContext mockDeviceKit = MockDeviceKit.getInstance(targetContext) grantRuntimePermissions() } @After open fun tearDown() { mockDeviceKit.disable() } private fun grantRuntimePermissions() { val packageName = targetContext.packageName val shell = InstrumentationRegistry.getInstrumentation().uiAutomation shell.executeShellCommand("pm grant $packageName android.permission.BLUETOOTH_CONNECT") shell.executeShellCommand("pm grant $packageName android.permission.CAMERA") } } ``` ## Using MockDeviceKit in the CameraAccess sample The CameraAccess sample app includes a Debug menu for MockDeviceKit: 1. Tap the **Debug icon** to open the MockDeviceKit menu 2. Tap **Pair RayBan Meta** to create a simulated device 3. Use **PowerOn**, **Unfold**, **Don** to simulate glasses states 4. Select video/image files for mock camera feeds 5. Start streaming to see simulated frames ## Supported media formats | Type | Formats | |------|---------| | Video | h.264 (AVC), h.265 (HEVC) | | Image | JPEG, PNG | ## Links - [Mock Device Kit overview](https://wearables.developer.meta.com/docs/mock-device-kit) - [Android testing guide](https://wearables.developer.meta.com/docs/testing-mdk-android)