summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@android.com>2011-06-02 01:26:32 -0700
committerJeff Brown <jeffbrown@android.com>2011-06-02 15:39:21 -0700
commit1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c (patch)
treecf9491aedb10c8355e62ae8384db0e9f005beb1c /services/java
parent19c97d46fb57f87ff45d9e6ea7122b4eb21ede8c (diff)
downloadframeworks_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.java48
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java13
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();