10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)package org.chromium.content.browser; 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import android.content.Context; 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.hardware.Sensor; 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.hardware.SensorEventListener; 100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)import android.hardware.SensorManager; 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.os.Handler; 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.test.AndroidTestCase; 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest; 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.HashSet; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import java.util.Set; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Test suite for DeviceSensors. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochpublic class DeviceSensorsTest extends AndroidTestCase { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private DeviceSensorsForTests mDeviceSensors; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private MockSensorManager mMockSensorManager; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void setUp() throws Exception { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) super.setUp(); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mMockSensorManager = new MockSensorManager(); 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors = DeviceSensorsForTests.getInstance(getContext()); 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.setSensorManagerProxy(mMockSensorManager); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testRegisterSensorsDeviceMotion() { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean start = mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue(start); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain all motion sensors", 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.containsAll( 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_MOTION_SENSORS)); 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceMotionIsActive); 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceOrientationIsActive); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(), 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockSensorManager.mNumRegistered); 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(0, mMockSensorManager.mNumUnRegistered); 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(), 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.getNumberActiveDeviceMotionSensors()); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testRegisterSensorsDeviceOrientation() { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean start = mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue(start); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain all orientation sensors", 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.containsAll( 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_ORIENTATION_SENSORS)); 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceMotionIsActive); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceOrientationIsActive); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(), 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockSensorManager.mNumRegistered); 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(0, mMockSensorManager.mNumUnRegistered); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testRegisterSensorsDeviceMotionAndOrientation() { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startOrientation = mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startMotion = mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue(startOrientation); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue(startMotion); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain all motion sensors", 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.containsAll( 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_MOTION_SENSORS)); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain all orientation sensors", 810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.containsAll( 820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_ORIENTATION_SENSORS)); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Set<Integer> union = new HashSet<Integer>( 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_ORIENTATION_SENSORS); 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch union.addAll(DeviceSensors.DEVICE_MOTION_SENSORS); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(union.size(), mDeviceSensors.mActiveSensors.size()); 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceMotionIsActive); 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceOrientationIsActive); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(union.size(), mMockSensorManager.mNumRegistered); 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(0, mMockSensorManager.mNumUnRegistered); 940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(), 950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.getNumberActiveDeviceMotionSensors()); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testRegisterSensorsDeviceLight() { 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean start = mDeviceSensors.start(0, DeviceSensors.DEVICE_LIGHT, 100); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue(start); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue(mDeviceSensors.mDeviceLightIsActive); 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceMotionIsActive); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceOrientationIsActive); 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(DeviceSensors.DEVICE_LIGHT_SENSORS.size(), 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mMockSensorManager.mNumRegistered); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(0, mMockSensorManager.mNumUnRegistered); 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @SmallTest 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testUnregisterSensorsDeviceMotion() { 1140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 1150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.stop(DeviceSensors.DEVICE_MOTION); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain no sensors", 1180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.isEmpty()); 1190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceMotionIsActive); 1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceOrientationIsActive); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(), 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockSensorManager.mNumUnRegistered); 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(0, mDeviceSensors.getNumberActiveDeviceMotionSensors()); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testUnregisterSensorsDeviceOrientation() { 1290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 1300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.stop(DeviceSensors.DEVICE_ORIENTATION); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain no sensors", 1330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.isEmpty()); 1340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceMotionIsActive); 1350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertFalse(mDeviceSensors.mDeviceOrientationIsActive); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 1370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(), 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockSensorManager.mNumUnRegistered); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testUnRegisterSensorsDeviceMotionAndOrientation() { 1430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 1450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.stop(DeviceSensors.DEVICE_MOTION); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue("should contain all orientation sensors", 1480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.mActiveSensors.containsAll( 1490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.DEVICE_ORIENTATION_SENSORS)); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Set<Integer> diff = new HashSet<Integer>(DeviceSensors.DEVICE_MOTION_SENSORS); 1520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch diff.removeAll(DeviceSensors.DEVICE_ORIENTATION_SENSORS); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(diff.size(), mMockSensorManager.mNumUnRegistered); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.stop(DeviceSensors.DEVICE_ORIENTATION); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue("should contain no sensors", mDeviceSensors.mActiveSensors.isEmpty()); 1590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(diff.size() + DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(), 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockSensorManager.mNumUnRegistered); 1610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertEquals(0, mDeviceSensors.getNumberActiveDeviceMotionSensors()); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testUnregisterSensorsLight() { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.start(0, DeviceSensors.DEVICE_LIGHT, 100); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.stop(DeviceSensors.DEVICE_LIGHT); 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue("should contain no sensors", mDeviceSensors.mActiveSensors.isEmpty()); 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceMotionIsActive); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceOrientationIsActive); 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertFalse(mDeviceSensors.mDeviceLightIsActive); 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @SmallTest 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testSensorChangedgotLight() { 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startLight = mDeviceSensors.start(0, DeviceSensors.DEVICE_LIGHT, 100); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue(startLight); 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertTrue(mDeviceSensors.mDeviceLightIsActive); 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float[] values = {200}; 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.sensorChanged(Sensor.TYPE_LIGHT, values); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.verifyCalls("gotLight"); 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.verifyValue(200); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @SmallTest 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void testSensorChangedgotOrientation() { 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startOrientation = mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertTrue(startOrientation); 1930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceOrientationIsActive); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float alpha = (float) Math.PI / 4; 196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1}; 1970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values); 1980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyCalls("gotOrientation"); 1990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testSensorChangedgotAccelerationIncludingGravity() { 2040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float[] values = {1, 2, 3}; 2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_ACCELEROMETER, values); 2080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyCalls("gotAccelerationIncludingGravity"); 2090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValues(1, 2, 3); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testSensorChangedgotAcceleration() { 2140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float[] values = {1, 2, 3}; 2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_LINEAR_ACCELERATION, values); 2180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyCalls("gotAcceleration"); 2190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValues(1, 2, 3); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void testSensorChangedgotRotationRate() { 2240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float[] values = {1, 2, 3}; 2270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_GYROSCOPE, values); 2280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyCalls("gotRotationRate"); 2290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValues(1, 2, 3); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @SmallTest 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void testSensorChangedgotOrientationAndAcceleration() { 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startOrientation = mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean startMotion = mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue(startOrientation); 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assertTrue(startMotion); 2390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceMotionIsActive); 2400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch assertTrue(mDeviceSensors.mDeviceOrientationIsActive); 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float alpha = (float) Math.PI / 4; 243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1}; 2440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values); 2450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyCalls("gotOrientation"); 2460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0); 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float[] values2 = {1, 2, 3}; 2490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.sensorChanged(Sensor.TYPE_ACCELEROMETER, values2); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.verifyCalls("gotOrientation" + "gotAccelerationIncludingGravity"); 2510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mDeviceSensors.verifyValues(1, 2, 3); 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Tests for correct Device Orientation angles. 2560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 2580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrixIdentity() { 2590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] gravity = {0, 0, 1}; 2600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] magnetic = {0, 1, 0}; 2610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {0, 0, 0}; 2620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 2640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 2650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 2670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrix45DegreesX() { 268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] gravity = {0, (float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4)}; 2690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] magnetic = {0, 1, 0}; 2700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {0, Math.PI / 4, 0}; 2710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 2730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 2740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 2760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrix45DegreesY() { 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] gravity = {-(float) Math.sin(Math.PI / 4), 0, (float) Math.cos(Math.PI / 4)}; 2780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] magnetic = {0, 1, 0}; 2790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {0, 0, Math.PI / 4}; 2800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 2820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 2830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 2850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrix45DegreesZ() { 2860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] gravity = {0, 0, 1}; 287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] magnetic = {(float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4), 0}; 2880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {Math.PI / 4, 0, 0}; 2890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 2910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 2920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 2940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrixGimbalLock() { 2950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] gravity = {0, 1, 0}; 296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] magnetic = {(float) Math.sin(Math.PI / 4), 0, -(float) Math.cos(Math.PI / 4)}; 2970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {Math.PI / 4, Math.PI / 2, 0}; // favor yaw instead of roll 2980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 3000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 3030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrixPitchGreaterThan90() { 3040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) final double largePitchAngle = Math.PI / 2 + Math.PI / 4; 305a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) float[] gravity = {0, (float) Math.cos(largePitchAngle - Math.PI / 2), 306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) -(float) Math.sin(largePitchAngle - Math.PI / 2)}; 3070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] magnetic = {0, 0, -1}; 3080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {0, largePitchAngle, 0}; 3090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 3110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @SmallTest 3140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void testOrientationAnglesFromRotationMatrixRoll90() { 3150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] gravity = {-1, 0, 0}; 3160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) float[] magnetic = {0, 1, 0}; 3170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles = {Math.PI, -Math.PI, -Math.PI / 2}; 3180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) verifyOrientationAngles(gravity, magnetic, expectedAngles); 3200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) /** 3230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * Helper method for verifying angles obtained from rotation matrix. 3240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * 3250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param gravity 3260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * gravity vector in the device frame 3270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param magnetic 3280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * magnetic field vector in the device frame 3290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param expectedAngles 3300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * expectedAngles[0] rotation angle in radians around the Z-axis 3310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * expectedAngles[1] rotation angle in radians around the X-axis 3320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * expectedAngles[2] rotation angle in radians around the Y-axis 3330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) */ 3340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private void verifyOrientationAngles(float[] gravity, float[] magnetic, 3350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] expectedAngles) { 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float[] r = new float[9]; 3370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) double[] values = new double[3]; 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SensorManager.getRotationMatrix(r, null, gravity, magnetic); 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mDeviceSensors.computeDeviceOrientationFromRotationMatrix(r, values); 3400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) assertEquals(expectedAngles.length, values.length); 3420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) final double epsilon = 0.001; 3430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (int i = 0; i < expectedAngles.length; ++i) { 3440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) assertEquals(expectedAngles[i], values[i], epsilon); 3450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // -- End Tests for correct Device Orientation angles. 3500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private static class DeviceSensorsForTests extends DeviceSensors { 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private double mValue1 = 0; 3546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private double mValue2 = 0; 3556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private double mValue3 = 0; 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private String mCalls = ""; 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private DeviceSensorsForTests(Context context) { 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) super(context); 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static DeviceSensorsForTests getInstance(Context context) { 3630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return new DeviceSensorsForTests(context); 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private void verifyValue(double v1) { 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assertEquals(v1, mValue1); 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private void verifyValues(double v1, double v2, double v3) { 3716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v1, mValue1); 3726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v2, mValue2); 3736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v3, mValue3); 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private void verifyValuesEpsilon(double v1, double v2, double v3) { 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v1, mValue1, 0.1); 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v2, mValue2, 0.1); 3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertEquals(v3, mValue3, 0.1); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private void verifyCalls(String names) { 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertEquals(mCalls, names); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected void gotLight(double light) { 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mValue1 = light; 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mCalls = mCalls.concat("gotLight"); 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected void gotOrientation(double alpha, double beta, double gamma) { 3946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue1 = alpha; 3956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue2 = beta; 3966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue3 = gamma; 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCalls = mCalls.concat("gotOrientation"); 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected void gotAcceleration(double x, double y, double z) { 4026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue1 = x; 4036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue2 = y; 4046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue3 = z; 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCalls = mCalls.concat("gotAcceleration"); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected void gotAccelerationIncludingGravity(double x, double y, double z) { 4106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue1 = x; 4116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue2 = y; 4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue3 = z; 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCalls = mCalls.concat("gotAccelerationIncludingGravity"); 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected void gotRotationRate(double alpha, double beta, double gamma) { 4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue1 = alpha; 4196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue2 = beta; 4206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mValue3 = gamma; 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mCalls = mCalls.concat("gotRotationRate"); 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private static class MockSensorManager implements 4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DeviceSensors.SensorManagerProxy { 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private int mNumRegistered = 0; 4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private int mNumUnRegistered = 0; 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private MockSensorManager() { 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public boolean registerListener(SensorEventListener listener, int sensorType, int rate, 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Handler handler) { 4376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mNumRegistered++; 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @Override 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void unregisterListener(SensorEventListener listener, int sensorType) { 4436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mNumUnRegistered++; 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 447