| /* | |
| * Copyright (C) 2013 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package com.example.inputmanagercompat; | |
| import android.content.Context; | |
| import android.os.Build; | |
| import android.os.Handler; | |
| import android.view.InputDevice; | |
| import android.view.MotionEvent; | |
| public interface InputManagerCompat { | |
| /** | |
| * Gets information about the input device with the specified id. | |
| * | |
| * @param id The device id | |
| * @return The input device or null if not found | |
| */ | |
| public InputDevice getInputDevice(int id); | |
| /** | |
| * Gets the ids of all input devices in the system. | |
| * | |
| * @return The input device ids. | |
| */ | |
| public int[] getInputDeviceIds(); | |
| /** | |
| * Registers an input device listener to receive notifications about when | |
| * input devices are added, removed or changed. | |
| * | |
| * @param listener The listener to register. | |
| * @param handler The handler on which the listener should be invoked, or | |
| * null if the listener should be invoked on the calling thread's | |
| * looper. | |
| */ | |
| public void registerInputDeviceListener(InputManagerCompat.InputDeviceListener listener, | |
| Handler handler); | |
| /** | |
| * Unregisters an input device listener. | |
| * | |
| * @param listener The listener to unregister. | |
| */ | |
| public void unregisterInputDeviceListener(InputManagerCompat.InputDeviceListener listener); | |
| /* | |
| * The following three calls are to simulate V16 behavior on pre-Jellybean | |
| * devices. If you don't call them, your callback will never be called | |
| * pre-API 16. | |
| */ | |
| /** | |
| * Pass the motion events to the InputManagerCompat. This is used to | |
| * optimize for polling for controllers. If you do not pass these events in, | |
| * polling will cause regular object creation. | |
| * | |
| * @param event the motion event from the app | |
| */ | |
| public void onGenericMotionEvent(MotionEvent event); | |
| /** | |
| * Tell the V9 input manager that it should stop polling for disconnected | |
| * devices. You can call this during onPause in your activity, although you | |
| * might want to call it whenever your game is not active (or whenever you | |
| * don't care about being notified of new input devices) | |
| */ | |
| public void onPause(); | |
| /** | |
| * Tell the V9 input manager that it should start polling for disconnected | |
| * devices. You can call this during onResume in your activity, although you | |
| * might want to call it less often (only when the gameplay is actually | |
| * active) | |
| */ | |
| public void onResume(); | |
| public interface InputDeviceListener { | |
| /** | |
| * Called whenever the input manager detects that a device has been | |
| * added. This will only be called in the V9 version when a motion event | |
| * is detected. | |
| * | |
| * @param deviceId The id of the input device that was added. | |
| */ | |
| void onInputDeviceAdded(int deviceId); | |
| /** | |
| * Called whenever the properties of an input device have changed since | |
| * they were last queried. This will not be called for the V9 version of | |
| * the API. | |
| * | |
| * @param deviceId The id of the input device that changed. | |
| */ | |
| void onInputDeviceChanged(int deviceId); | |
| /** | |
| * Called whenever the input manager detects that a device has been | |
| * removed. For the V9 version, this can take some time depending on the | |
| * poll rate. | |
| * | |
| * @param deviceId The id of the input device that was removed. | |
| */ | |
| void onInputDeviceRemoved(int deviceId); | |
| } | |
| /** | |
| * Use this to construct a compatible InputManager. | |
| */ | |
| public static class Factory { | |
| /** | |
| * Constructs and returns a compatible InputManger | |
| * | |
| * @param context the Context that will be used to get the system | |
| * service from | |
| * @return a compatible implementation of InputManager | |
| */ | |
| public static InputManagerCompat getInputManager(Context context) { | |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | |
| return new InputManagerV16(context); | |
| } else { | |
| return new InputManagerV9(); | |
| } | |
| } | |
| } | |
| } |