Update use of input manager API in settings.

Change-Id: I7aa033df8b5eec69cc6002b0bcc20b1d9902e4e0
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index fdd02f8..ae6826b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -54,6 +54,7 @@
     <uses-permission android:name="android.permission.STATUS_BAR" />
     <uses-permission android:name="android.permission.MANAGE_USB" />
     <uses-permission android:name="android.permission.SET_POINTER_SPEED" />
+    <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" />
 
     <application android:label="@string/settings_label"
             android:icon="@mipmap/ic_launcher_settings"
diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java
index 7679cfb..3f40f9a 100644
--- a/src/com/android/settings/PointerSpeedPreference.java
+++ b/src/com/android/settings/PointerSpeedPreference.java
@@ -69,7 +69,7 @@
 
         mSeekBar = getSeekBar(view);
         mSeekBar.setMax(InputManager.MAX_POINTER_SPEED - InputManager.MIN_POINTER_SPEED);
-        mOldSpeed = mIm.getPointerSpeed();
+        mOldSpeed = mIm.getPointerSpeed(getContext());
         mSeekBar.setProgress(mOldSpeed - InputManager.MIN_POINTER_SPEED);
         mSeekBar.setOnSeekBarChangeListener(this);
     }
@@ -90,7 +90,7 @@
     }
 
     private void onSpeedChanged() {
-        int speed = mIm.getPointerSpeed();
+        int speed = mIm.getPointerSpeed(getContext());
         mSeekBar.setProgress(speed - InputManager.MIN_POINTER_SPEED);
     }
 
@@ -101,7 +101,8 @@
         final ContentResolver resolver = getContext().getContentResolver();
 
         if (positiveResult) {
-            mIm.setPointerSpeed(mSeekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
+            mIm.setPointerSpeed(getContext(),
+                    mSeekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
         } else {
             restoreOldState();
         }
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index cc2cf0a..ac9a27b 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -31,27 +31,23 @@
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.hardware.input.InputManager;
-import android.hardware.input.InputManager.KeyboardLayout;
+import android.hardware.input.KeyboardLayout;
 import android.os.Bundle;
 import android.os.Handler;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
-import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.provider.Settings.System;
 import android.text.TextUtils;
 import android.view.InputDevice;
-import android.view.KeyCharacterMap;
-import android.view.KeyCharacterMap.UnavailableException;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 
@@ -373,11 +369,12 @@
             for (int i = 0; i < devices.length; i++) {
                 InputDevice device = InputDevice.getDevice(devices[i]);
                 if (device != null
+                        && !device.isVirtual()
                         && (device.getSources() & InputDevice.SOURCE_KEYBOARD) != 0
                         && device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC) {
                     final String inputDeviceDescriptor = device.getDescriptor();
                     final String keyboardLayoutDescriptor =
-                            im.getInputDeviceKeyboardLayoutDescriptor(inputDeviceDescriptor);
+                            im.getKeyboardLayoutForInputDevice(inputDeviceDescriptor);
                     final KeyboardLayout keyboardLayout = keyboardLayoutDescriptor != null ?
                             im.getKeyboardLayout(keyboardLayoutDescriptor) : null;
 
diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPicker.java b/src/com/android/settings/inputmethod/KeyboardLayoutPicker.java
index 472df3a..4cfae56 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutPicker.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutPicker.java
@@ -24,19 +24,17 @@
 import android.content.Context;
 import android.content.Loader;
 import android.hardware.input.InputManager;
-import android.hardware.input.InputManager.KeyboardLayout;
+import android.hardware.input.KeyboardLayout;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.ArrayAdapter;
-import android.widget.ListAdapter;
 import android.widget.ListView;
 
-import java.util.Collections;
-import java.util.List;
+import java.util.Arrays;
 
 public class KeyboardLayoutPicker extends ListFragment
-        implements LoaderCallbacks<List<KeyboardLayout>> {
+        implements LoaderCallbacks<KeyboardLayout[]> {
     private static final String TAG = "KeyboardLayoutPicker";
 
     private String mInputDeviceDescriptor;
@@ -73,46 +71,46 @@
         if (mInputDeviceDescriptor != null) {
             KeyboardLayout c = (KeyboardLayout)l.getItemAtPosition(position);
             InputManager im = (InputManager)getActivity().getSystemService(Context.INPUT_SERVICE);
-            im.setInputDeviceKeyboardLayoutDescriptor(mInputDeviceDescriptor, c.getDescriptor());
+            im.setKeyboardLayoutForInputDevice(mInputDeviceDescriptor, c.getDescriptor());
         }
 
         getActivity().finish();
     }
 
     @Override
-    public Loader<List<KeyboardLayout>> onCreateLoader(int id, Bundle args) {
+    public Loader<KeyboardLayout[]> onCreateLoader(int id, Bundle args) {
         return new KeyboardLayoutLoader(getActivity());
     }
 
     @Override
-    public void onLoadFinished(Loader<List<KeyboardLayout>> loader,
-            List<KeyboardLayout> data) {
+    public void onLoadFinished(Loader<KeyboardLayout[]> loader,
+            KeyboardLayout[] data) {
         setListAdapter(new KeyboardLayoutAdapter(getActivity(), data));
     }
 
     @Override
-    public void onLoaderReset(Loader<List<KeyboardLayout>> loader) {
+    public void onLoaderReset(Loader<KeyboardLayout[]> loader) {
         setListAdapter(null);
     }
 
     private static final class KeyboardLayoutAdapter
             extends ArrayAdapter<KeyboardLayout> {
-        public KeyboardLayoutAdapter(Context context, List<KeyboardLayout> list) {
+        public KeyboardLayoutAdapter(Context context, KeyboardLayout[] list) {
             super(context, android.R.layout.simple_list_item_1, list);
         }
     }
 
     private static final class KeyboardLayoutLoader
-            extends AsyncTaskLoader<List<KeyboardLayout>> {
+            extends AsyncTaskLoader<KeyboardLayout[]> {
         public KeyboardLayoutLoader(Context context) {
             super(context);
         }
 
         @Override
-        public List<KeyboardLayout> loadInBackground() {
+        public KeyboardLayout[] loadInBackground() {
             InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
-            List<KeyboardLayout> list = im.getKeyboardLayouts();
-            Collections.sort(list);
+            KeyboardLayout[] list = im.getKeyboardLayouts();
+            Arrays.sort(list);
             return list;
         }