Merge change I4958d608 into eclair-mr2
* changes:
add dpad control of text selection for sholes
diff --git a/core/res/res/layout/media_controller.xml b/core/res/res/layout/media_controller.xml
index c49835d..32db60a 100644
--- a/core/res/res/layout/media_controller.xml
+++ b/core/res/res/layout/media_controller.xml
@@ -59,7 +59,7 @@
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dip"
android:layout_weight="1"
- android:layout_height="30px"
+ android:layout_height="30dip"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true" />
diff --git a/services/java/com/android/server/InputDevice.java b/services/java/com/android/server/InputDevice.java
index eaad3b7..6eb6242 100644
--- a/services/java/com/android/server/InputDevice.java
+++ b/services/java/com/android/server/InputDevice.java
@@ -65,6 +65,7 @@
// This is the last generated pointer data, ordered to match
// mPointerIds.
+ boolean mSkipLastPointers;
int mLastNumPointers = 0;
final int[] mLastData = new int[MotionEvent.NUM_SAMPLE_DATA * MAX_POINTERS];
@@ -511,6 +512,11 @@
long curTimeNano, Display display, int orientation,
int metaState) {
+ if (mSkipLastPointers) {
+ mSkipLastPointers = false;
+ mLastNumPointers = 0;
+ }
+
if (mNextNumPointers <= 0 && mLastNumPointers <= 0) {
return null;
}
diff --git a/services/java/com/android/server/KeyInputQueue.java b/services/java/com/android/server/KeyInputQueue.java
index 5d65c71..d68ccfa 100644
--- a/services/java/com/android/server/KeyInputQueue.java
+++ b/services/java/com/android/server/KeyInputQueue.java
@@ -689,7 +689,8 @@
ev, curTime, curTimeNano);
if (doMotion && ms.mNextNumPointers > 0
- && ms.mLastNumPointers == 0) {
+ && (ms.mLastNumPointers == 0
+ || ms.mSkipLastPointers)) {
doMotion = !generateVirtualKeyDown(di,
ev, curTime, curTimeNano);
}
@@ -703,7 +704,7 @@
me = ms.generateAbsMotion(di, curTime,
curTimeNano, mDisplay,
mOrientation, mGlobalMetaState);
- if (false) Log.v(TAG, "Absolute: x="
+ if (DEBUG_POINTERS) Log.v(TAG, "Absolute: x="
+ di.mAbs.mNextData[MotionEvent.SAMPLE_X]
+ " y="
+ di.mAbs.mNextData[MotionEvent.SAMPLE_Y]
@@ -729,6 +730,7 @@
ms.mLastData, 0,
num * MotionEvent.NUM_SAMPLE_DATA);
ms.mLastNumPointers = num;
+ ms.mSkipLastPointers = true;
}
ms.finish();
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 20b01d2..9caa386 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -430,8 +430,8 @@
// to another, and this is the higher one in Z-order.
WindowState mUpperWallpaperTarget = null;
int mWallpaperAnimLayerAdjustment;
- float mLastWallpaperX;
- float mLastWallpaperY;
+ float mLastWallpaperX = -1;
+ float mLastWallpaperY = -1;
// Lock for waiting for the wallpaper.
final Object mWaitingOnWallpaperLock = new Object();
// This is set when we are waiting for a wallpaper to tell us it is done
@@ -1464,8 +1464,12 @@
}
if (visible) {
- mLastWallpaperX = mWallpaperTarget.mWallpaperX;
- mLastWallpaperY = mWallpaperTarget.mWallpaperY;
+ if (mWallpaperTarget.mWallpaperX >= 0) {
+ mLastWallpaperX = mWallpaperTarget.mWallpaperX;
+ }
+ if (mWallpaperTarget.mWallpaperY >= 0) {
+ mLastWallpaperY = mWallpaperTarget.mWallpaperY;
+ }
}
// Start stepping backwards from here, ensuring that our wallpaper windows
@@ -1566,34 +1570,32 @@
boolean sync) {
boolean changed = false;
boolean rawChanged = false;
- if (mLastWallpaperX >= 0) {
- int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw;
- int offset = availw > 0 ? -(int)(availw*mLastWallpaperX+.5f) : 0;
- changed = wallpaperWin.mXOffset != offset;
- if (changed) {
- if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
- + wallpaperWin + " x: " + offset);
- wallpaperWin.mXOffset = offset;
- }
- if (wallpaperWin.mWallpaperX != mLastWallpaperX) {
- wallpaperWin.mWallpaperX = mLastWallpaperX;
- rawChanged = true;
- }
+ float wpx = mLastWallpaperX >= 0 ? mLastWallpaperX : 0.5f;
+ int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw;
+ int offset = availw > 0 ? -(int)(availw*wpx+.5f) : 0;
+ changed = wallpaperWin.mXOffset != offset;
+ if (changed) {
+ if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
+ + wallpaperWin + " x: " + offset);
+ wallpaperWin.mXOffset = offset;
+ }
+ if (wallpaperWin.mWallpaperX != wpx) {
+ wallpaperWin.mWallpaperX = wpx;
+ rawChanged = true;
}
- if (mLastWallpaperY >= 0) {
- int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh;
- int offset = availh > 0 ? -(int)(availh*mLastWallpaperY+.5f) : 0;
- if (wallpaperWin.mYOffset != offset) {
- if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
- + wallpaperWin + " y: " + offset);
- changed = true;
- wallpaperWin.mYOffset = offset;
- }
- if (wallpaperWin.mWallpaperY != mLastWallpaperY) {
- wallpaperWin.mWallpaperY = mLastWallpaperY;
- rawChanged = true;
- }
+ float wpy = mLastWallpaperY >= 0 ? mLastWallpaperY : 0.5f;
+ int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh;
+ offset = availh > 0 ? -(int)(availh*wpy+.5f) : 0;
+ if (wallpaperWin.mYOffset != offset) {
+ if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
+ + wallpaperWin + " y: " + offset);
+ changed = true;
+ wallpaperWin.mYOffset = offset;
+ }
+ if (wallpaperWin.mWallpaperY != wpy) {
+ wallpaperWin.mWallpaperY = wpy;
+ rawChanged = true;
}
if (rawChanged) {
@@ -1649,7 +1651,7 @@
}
}
- boolean updateWallpaperOffsetLocked(boolean sync) {
+ boolean updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) {
final int dw = mDisplay.getWidth();
final int dh = mDisplay.getHeight();
@@ -1657,22 +1659,31 @@
WindowState target = mWallpaperTarget;
if (target != null) {
- mLastWallpaperX = target.mWallpaperX;
- mLastWallpaperY = target.mWallpaperY;
- int curTokenIndex = mWallpaperTokens.size();
- while (curTokenIndex > 0) {
- curTokenIndex--;
- WindowToken token = mWallpaperTokens.get(curTokenIndex);
- int curWallpaperIndex = token.windows.size();
- while (curWallpaperIndex > 0) {
- curWallpaperIndex--;
- WindowState wallpaper = token.windows.get(curWallpaperIndex);
- if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) {
- wallpaper.computeShownFrameLocked();
- changed = true;
- // We only want to be synchronous with one wallpaper.
- sync = false;
- }
+ if (target.mWallpaperX >= 0) {
+ mLastWallpaperX = target.mWallpaperX;
+ } else if (changingTarget.mWallpaperX >= 0) {
+ mLastWallpaperX = changingTarget.mWallpaperX;
+ }
+ if (target.mWallpaperY >= 0) {
+ mLastWallpaperY = target.mWallpaperY;
+ } else if (changingTarget.mWallpaperY >= 0) {
+ mLastWallpaperY = changingTarget.mWallpaperY;
+ }
+ }
+
+ int curTokenIndex = mWallpaperTokens.size();
+ while (curTokenIndex > 0) {
+ curTokenIndex--;
+ WindowToken token = mWallpaperTokens.get(curTokenIndex);
+ int curWallpaperIndex = token.windows.size();
+ while (curWallpaperIndex > 0) {
+ curWallpaperIndex--;
+ WindowState wallpaper = token.windows.get(curWallpaperIndex);
+ if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) {
+ wallpaper.computeShownFrameLocked();
+ changed = true;
+ // We only want to be synchronous with one wallpaper.
+ sync = false;
}
}
}
@@ -2179,11 +2190,8 @@
if (window.mWallpaperX != x || window.mWallpaperY != y) {
window.mWallpaperX = x;
window.mWallpaperY = y;
-
- if (mWallpaperTarget == window) {
- if (updateWallpaperOffsetLocked(true)) {
- performLayoutAndPlaceSurfacesLocked();
- }
+ if (updateWallpaperOffsetLocked(window, true)) {
+ performLayoutAndPlaceSurfacesLocked();
}
}
}