Search in sources :

Example 31 with InputDevice

use of android.view.InputDevice in project android_frameworks_base by DirtyUnicorns.

the class InputManagerService method handleSwitchKeyboardLayout.

// Must be called on handler.
private void handleSwitchKeyboardLayout(@Nullable InputDeviceIdentifier identifier, InputMethodSubtypeHandle handle) {
    synchronized (mInputDevicesLock) {
        for (InputDevice device : mInputDevices) {
            if (identifier != null && !device.getIdentifier().equals(identifier) || !device.isFullKeyboard()) {
                continue;
            }
            String key = getLayoutDescriptor(device.getIdentifier());
            boolean changed = false;
            synchronized (mDataStore) {
                try {
                    if (mDataStore.switchKeyboardLayout(key, handle)) {
                        changed = true;
                    }
                } finally {
                    mDataStore.saveIfNeeded();
                }
            }
            if (changed) {
                reloadKeyboardLayouts();
            }
        }
    }
}
Also used : InputDevice(android.view.InputDevice)

Example 32 with InputDevice

use of android.view.InputDevice in project android_frameworks_base by DirtyUnicorns.

the class InputManagerService method deliverInputDevicesChanged.

// Must be called on handler.
private void deliverInputDevicesChanged(InputDevice[] oldInputDevices) {
    // Scan for changes.
    int numFullKeyboardsAdded = 0;
    mTempInputDevicesChangedListenersToNotify.clear();
    mTempFullKeyboards.clear();
    final int numListeners;
    final int[] deviceIdAndGeneration;
    synchronized (mInputDevicesLock) {
        if (!mInputDevicesChangedPending) {
            return;
        }
        mInputDevicesChangedPending = false;
        numListeners = mInputDevicesChangedListeners.size();
        for (int i = 0; i < numListeners; i++) {
            mTempInputDevicesChangedListenersToNotify.add(mInputDevicesChangedListeners.valueAt(i));
        }
        final int numDevices = mInputDevices.length;
        deviceIdAndGeneration = new int[numDevices * 2];
        for (int i = 0; i < numDevices; i++) {
            final InputDevice inputDevice = mInputDevices[i];
            deviceIdAndGeneration[i * 2] = inputDevice.getId();
            deviceIdAndGeneration[i * 2 + 1] = inputDevice.getGeneration();
            if (!inputDevice.isVirtual() && inputDevice.isFullKeyboard()) {
                if (!containsInputDeviceWithDescriptor(oldInputDevices, inputDevice.getDescriptor())) {
                    mTempFullKeyboards.add(numFullKeyboardsAdded++, inputDevice);
                } else {
                    mTempFullKeyboards.add(inputDevice);
                }
            }
        }
    }
    // Notify listeners.
    for (int i = 0; i < numListeners; i++) {
        mTempInputDevicesChangedListenersToNotify.get(i).notifyInputDevicesChanged(deviceIdAndGeneration);
    }
    mTempInputDevicesChangedListenersToNotify.clear();
    // Check for missing keyboard layouts.
    List<InputDevice> keyboardsMissingLayout = new ArrayList<>();
    final int numFullKeyboards = mTempFullKeyboards.size();
    synchronized (mDataStore) {
        for (int i = 0; i < numFullKeyboards; i++) {
            final InputDevice inputDevice = mTempFullKeyboards.get(i);
            String layout = getCurrentKeyboardLayoutForInputDevice(inputDevice.getIdentifier());
            if (layout == null) {
                layout = getDefaultKeyboardLayout(inputDevice);
                if (layout != null) {
                    setCurrentKeyboardLayoutForInputDevice(inputDevice.getIdentifier(), layout);
                }
            }
            if (layout == null) {
                keyboardsMissingLayout.add(inputDevice);
            }
        }
    }
    if (mNotificationManager != null) {
        if (!keyboardsMissingLayout.isEmpty()) {
            if (keyboardsMissingLayout.size() > 1) {
                // We have more than one keyboard missing a layout, so drop the
                // user at the generic input methods page so they can pick which
                // one to set.
                showMissingKeyboardLayoutNotification(null);
            } else {
                showMissingKeyboardLayoutNotification(keyboardsMissingLayout.get(0));
            }
        } else if (mKeyboardLayoutNotificationShown) {
            hideMissingKeyboardLayoutNotification();
        }
    }
    mTempFullKeyboards.clear();
}
Also used : InputDevice(android.view.InputDevice) ArrayList(java.util.ArrayList)

Example 33 with InputDevice

use of android.view.InputDevice in project android_frameworks_base by DirtyUnicorns.

the class VibratorService method updateInputDeviceVibrators.

private void updateInputDeviceVibrators() {
    synchronized (mVibrations) {
        doCancelVibrateLocked();
        synchronized (mInputDeviceVibrators) {
            mVibrateInputDevicesSetting = false;
            try {
                mVibrateInputDevicesSetting = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.VIBRATE_INPUT_DEVICES, UserHandle.USER_CURRENT) > 0;
            } catch (SettingNotFoundException snfe) {
            }
            mLowPowerMode = mPowerManagerInternal.getLowPowerModeEnabled();
            if (mVibrateInputDevicesSetting) {
                if (!mInputDeviceListenerRegistered) {
                    mInputDeviceListenerRegistered = true;
                    mIm.registerInputDeviceListener(this, mH);
                }
            } else {
                if (mInputDeviceListenerRegistered) {
                    mInputDeviceListenerRegistered = false;
                    mIm.unregisterInputDeviceListener(this);
                }
            }
            mInputDeviceVibrators.clear();
            if (mVibrateInputDevicesSetting) {
                int[] ids = mIm.getInputDeviceIds();
                for (int i = 0; i < ids.length; i++) {
                    InputDevice device = mIm.getInputDevice(ids[i]);
                    Vibrator vibrator = device.getVibrator();
                    if (vibrator.hasVibrator()) {
                        mInputDeviceVibrators.add(vibrator);
                    }
                }
            }
        }
        startNextVibrationLocked();
    }
}
Also used : InputDevice(android.view.InputDevice) Vibrator(android.os.Vibrator) SettingNotFoundException(android.provider.Settings.SettingNotFoundException)

Example 34 with InputDevice

use of android.view.InputDevice in project jmonkeyengine by jMonkeyEngine.

the class AndroidJoystickJoyInput14 method loadJoysticks.

public List<Joystick> loadJoysticks(int joyId, InputManager inputManager) {
    logger.log(Level.INFO, "loading Joystick devices");
    ArrayList<Joystick> joysticks = new ArrayList<Joystick>();
    joysticks.clear();
    joystickIndex.clear();
    ArrayList gameControllerDeviceIds = new ArrayList();
    int[] deviceIds = InputDevice.getDeviceIds();
    for (int deviceId : deviceIds) {
        InputDevice dev = InputDevice.getDevice(deviceId);
        int sources = dev.getSources();
        logger.log(Level.FINE, "deviceId[{0}] sources: {1}", new Object[] { deviceId, sources });
        // Verify that the device has gamepad buttons, control sticks, or both.
        if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) || ((sources & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK)) {
            // This device is a game controller. Store its device ID.
            if (!gameControllerDeviceIds.contains(deviceId)) {
                gameControllerDeviceIds.add(deviceId);
                logger.log(Level.FINE, "Attempting to create joystick for device: {0}", dev);
                // Create an AndroidJoystick and store the InputDevice so we
                // can later correspond the input from the InputDevice to the
                // appropriate jME Joystick event
                AndroidJoystick joystick = new AndroidJoystick(inputManager, joyInput, dev, joyId + joysticks.size(), dev.getName());
                joystickIndex.put(deviceId, joystick);
                joysticks.add(joystick);
                // Each analog input is reported as a MotionRange
                // The axis number corresponds to the type of axis
                // The AndroidJoystick.addAxis(MotionRange) converts the axis
                // type reported by Android into the jME Joystick axis
                List<MotionRange> motionRanges = dev.getMotionRanges();
                for (MotionRange motionRange : motionRanges) {
                    logger.log(Level.INFO, "motion range: {0}", motionRange.toString());
                    logger.log(Level.INFO, "axis: {0}", motionRange.getAxis());
                    JoystickAxis axis = joystick.addAxis(motionRange);
                    logger.log(Level.INFO, "added axis: {0}", axis);
                }
                // device, but I haven't found a better way yet.
                for (int keyCode : AndroidGamepadButtons) {
                    logger.log(Level.INFO, "button[{0}]: {1}", new Object[] { keyCode, KeyCharacterMap.deviceHasKey(keyCode) });
                    if (KeyCharacterMap.deviceHasKey(keyCode)) {
                        // add button even though we aren't sure if the button
                        // actually exists on this InputDevice
                        logger.log(Level.INFO, "button[{0}] exists somewhere", keyCode);
                        JoystickButton button = joystick.addButton(keyCode);
                        logger.log(Level.INFO, "added button: {0}", button);
                    }
                }
            }
        }
    }
    loaded = true;
    return joysticks;
}
Also used : DefaultJoystickButton(com.jme3.input.DefaultJoystickButton) JoystickButton(com.jme3.input.JoystickButton) InputDevice(android.view.InputDevice) AbstractJoystick(com.jme3.input.AbstractJoystick) Joystick(com.jme3.input.Joystick) ArrayList(java.util.ArrayList) JoystickAxis(com.jme3.input.JoystickAxis) DefaultJoystickAxis(com.jme3.input.DefaultJoystickAxis) MotionRange(android.view.InputDevice.MotionRange)

Example 35 with InputDevice

use of android.view.InputDevice in project android_frameworks_base by AOSPA.

the class KeyboardShortcuts method retrieveKeyCharacterMap.

/**
     * Retrieves a {@link KeyCharacterMap} and assigns it to mKeyCharacterMap. If the given id is an
     * existing device, that device's map is used. Otherwise, it checks first all available devices
     * and if there is a full keyboard it uses that map, otherwise falls back to the Virtual
     * Keyboard with its default map.
     */
private void retrieveKeyCharacterMap(int deviceId) {
    final InputManager inputManager = InputManager.getInstance();
    if (deviceId != -1) {
        final InputDevice inputDevice = inputManager.getInputDevice(deviceId);
        if (inputDevice != null) {
            mKeyCharacterMap = inputDevice.getKeyCharacterMap();
            return;
        }
    }
    final int[] deviceIds = inputManager.getInputDeviceIds();
    for (int i = 0; i < deviceIds.length; ++i) {
        final InputDevice inputDevice = inputManager.getInputDevice(deviceIds[i]);
        // resort.
        if (inputDevice.getId() != -1 && inputDevice.isFullKeyboard()) {
            mKeyCharacterMap = inputDevice.getKeyCharacterMap();
            return;
        }
    }
    final InputDevice inputDevice = inputManager.getInputDevice(-1);
    mKeyCharacterMap = inputDevice.getKeyCharacterMap();
}
Also used : InputDevice(android.view.InputDevice) InputManager(android.hardware.input.InputManager)

Aggregations

InputDevice (android.view.InputDevice)83 Paint (android.graphics.Paint)15 RemoteException (android.os.RemoteException)12 ArrayList (java.util.ArrayList)7 Vibrator (android.os.Vibrator)6 SettingNotFoundException (android.provider.Settings.SettingNotFoundException)6 Point (android.graphics.Point)5 InputManager (android.hardware.input.InputManager)5 PointerCoords (android.view.MotionEvent.PointerCoords)5 DisplayInfo (android.view.DisplayInfo)4 KeyboardLayout (android.hardware.input.KeyboardLayout)2 DisplayMetrics (android.util.DisplayMetrics)2 Test (org.junit.Test)2 NonNull (android.annotation.NonNull)1 PendingIntent (android.app.PendingIntent)1 BroadcastReceiver (android.content.BroadcastReceiver)1 Context (android.content.Context)1 Intent (android.content.Intent)1 IntentFilter (android.content.IntentFilter)1 InputDeviceIdentifier (android.hardware.input.InputDeviceIdentifier)1