1a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka/* 2a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * Copyright (C) 2016 The Android Open Source Project 3a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * 4a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * you may not use this file except in compliance with the License. 6a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * You may obtain a copy of the License at 7a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * 8a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * 10a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * See the License for the specific language governing permissions and 14a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * limitations under the License 15a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka */ 16a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 17a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokapackage com.android.settings.testutils.shadow; 18a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 19a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport static org.robolectric.util.ReflectionHelpers.ClassParameter.from; 20a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 21a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport android.hardware.input.IInputManager; 22a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport android.hardware.input.InputManager; 23a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport android.os.Handler; 24a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 25a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport org.robolectric.annotation.Implementation; 26a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport org.robolectric.annotation.Implements; 27a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport org.robolectric.util.ReflectionHelpers; 28a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 29a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport java.util.ArrayList; 30a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport java.util.Collections; 31a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokaimport java.util.List; 32a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 33a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka/* 34a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka * Shadow for {@ InputManager} that has assessors for registered {@link InputDeviceListener}s. 35a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka */ 36a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka@Implements(value = InputManager.class, callThroughByDefault = false) 37a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaokapublic class ShadowInputManager { 38a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 39a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka private ArrayList<InputManager.InputDeviceListener> mInputDeviceListeners; 40a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 41a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka @Implementation 42a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka public void __constructor__(IInputManager service) { 43a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka mInputDeviceListeners = new ArrayList<>(); 44a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 45a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 46a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka @Implementation 47a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka public static InputManager getInstance() { 48a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka return ReflectionHelpers.callConstructor( 49a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka InputManager.class, 50a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka from(IInputManager.class, null)); 51a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 52a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 53a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka @Implementation 54a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka public void registerInputDeviceListener(InputManager.InputDeviceListener listener, 55a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka Handler handler) { 56a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka // TODO: Use handler. 57a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka if (!mInputDeviceListeners.contains(listener)) { 58a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka mInputDeviceListeners.add(listener); 59a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 60a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 61a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 62a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka @Implementation 63a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka public void unregisterInputDeviceListener(InputManager.InputDeviceListener listener) { 64a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka if (mInputDeviceListeners.contains(listener)) { 65a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka mInputDeviceListeners.remove(listener); 66a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 67a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 68a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka 69a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka // Non-Android accessor. 70a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka public List<InputManager.InputDeviceListener> getRegisteredInputDeviceListeners() { 71a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka return Collections.unmodifiableList(mInputDeviceListeners); 72a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka } 73a034fa5407081350a7561ffd6f4a4c8922916c6cTadashi G. Takaoka} 74