diff options
| author | Jeff Brown <jeffbrown@android.com> | 2011-06-02 01:26:32 -0700 |
|---|---|---|
| committer | Jeff Brown <jeffbrown@android.com> | 2011-06-02 15:39:21 -0700 |
| commit | 1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c (patch) | |
| tree | cf9491aedb10c8355e62ae8384db0e9f005beb1c /services/java | |
| parent | 19c97d46fb57f87ff45d9e6ea7122b4eb21ede8c (diff) | |
| download | frameworks_base-1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c.zip frameworks_base-1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c.tar.gz frameworks_base-1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c.tar.bz2 | |
Add a preference panel for mouse speed.
Bug: 4124987
Change-Id: I3ce175d268a1d043cf5878481261b1049a15a149
Diffstat (limited to 'services/java')
| -rw-r--r-- | services/java/com/android/server/wm/InputManager.java | 48 | ||||
| -rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 13 |
2 files changed, 59 insertions, 2 deletions
diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java index ab781f4..4eda684 100644 --- a/services/java/com/android/server/wm/InputManager.java +++ b/services/java/com/android/server/wm/InputManager.java @@ -23,10 +23,14 @@ import org.xmlpull.v1.XmlPullParser; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.database.ContentObserver; import android.os.Environment; +import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; import android.os.SystemProperties; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; import android.util.Slog; import android.util.Xml; import android.view.InputChannel; @@ -56,7 +60,7 @@ public class InputManager { private final Callbacks mCallbacks; private final Context mContext; private final WindowManagerService mWindowManagerService; - + private static native void nativeInit(Context context, Callbacks callbacks, MessageQueue messageQueue); private static native void nativeStart(); @@ -85,6 +89,7 @@ public class InputManager { private static native int[] nativeGetInputDeviceIds(); private static native boolean nativeTransferTouchFocus(InputChannel fromChannel, InputChannel toChannel); + private static native void nativeSetPointerSpeed(int speed); private static native String nativeDump(); // Input event injection constants defined in InputDispatcher.h. @@ -123,10 +128,13 @@ public class InputManager { Slog.i(TAG, "Initializing input manager"); nativeInit(mContext, mCallbacks, looper.getQueue()); } - + public void start() { Slog.i(TAG, "Starting input manager"); nativeStart(); + + registerPointerSpeedSettingObserver(); + updatePointerSpeedFromSettings(); } public void setDisplaySize(int displayId, int width, int height) { @@ -359,6 +367,42 @@ public class InputManager { return nativeTransferTouchFocus(fromChannel, toChannel); } + /** + * Set the pointer speed. + * @param speed The pointer speed as a value between -7 (slowest) and 7 (fastest) + * where 0 is the default speed. + */ + public void setPointerSpeed(int speed) { + speed = Math.min(Math.max(speed, -7), 7); + nativeSetPointerSpeed(speed); + } + + public void updatePointerSpeedFromSettings() { + int speed = getPointerSpeedSetting(0); + setPointerSpeed(speed); + } + + private void registerPointerSpeedSettingObserver() { + mContext.getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.POINTER_SPEED), true, + new ContentObserver(mWindowManagerService.mH) { + @Override + public void onChange(boolean selfChange) { + updatePointerSpeedFromSettings(); + } + }); + } + + private int getPointerSpeedSetting(int defaultValue) { + int speed = defaultValue; + try { + speed = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.POINTER_SPEED); + } catch (SettingNotFoundException snfe) { + } + return speed; + } + public void dump(PrintWriter pw) { String dumpStr = nativeDump(); if (dumpStr != null) { diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 7760897..4ff6b06 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -5947,6 +5947,19 @@ public class WindowManagerService extends IWindowManager.Stub } } + /** + * Temporarily set the pointer speed. Does not save the new setting. + * Used by the settings application. + */ + public void setPointerSpeed(int speed) { + if (!checkCallingPermission(android.Manifest.permission.SET_POINTER_SPEED, + "setPointerSpeed()")) { + throw new SecurityException("Requires SET_POINTER_SPEED permission"); + } + + mInputManager.setPointerSpeed(speed); + } + private WindowState getFocusedWindow() { synchronized (mWindowMap) { return getFocusedWindowLocked(); |
