auto import from //branches/cupcake_rel/...@140373
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index dd2b154..fbb4d42 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -470,11 +470,20 @@
void setLayoutParams(WindowManager.LayoutParams attrs, boolean newView) {
synchronized (this) {
+ int oldSoftInputMode = mWindowAttributes.softInputMode;
mWindowAttributes.copyFrom(attrs);
if (newView) {
mSoftInputMode = attrs.softInputMode;
requestLayout();
}
+ // Don't lose the mode we last auto-computed.
+ if ((attrs.softInputMode&WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST)
+ == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED) {
+ mWindowAttributes.softInputMode = (mWindowAttributes.softInputMode
+ & ~WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST)
+ | (oldSoftInputMode
+ & WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST);
+ }
mWindowAttributesChanged = true;
scheduleTraversals();
}
@@ -1485,7 +1494,7 @@
+ msg.obj + " to " + mView);
deliverKeyEvent((KeyEvent)msg.obj, true);
break;
- case DISPATCH_POINTER:
+ case DISPATCH_POINTER: {
MotionEvent event = (MotionEvent)msg.obj;
boolean didFinish;
@@ -1571,7 +1580,7 @@
// Let the exception fall through -- the looper will catch
// it and take care of the bad app for us.
}
- break;
+ } break;
case DISPATCH_TRACKBALL:
deliverTrackballEvent((MotionEvent)msg.obj);
break;
@@ -1657,12 +1666,19 @@
case DIE:
dispatchDetachedFromWindow();
break;
- case DISPATCH_KEY_FROM_IME:
+ case DISPATCH_KEY_FROM_IME: {
if (LOCAL_LOGV) Log.v(
"ViewRoot", "Dispatching key "
+ msg.obj + " from IME to " + mView);
+ KeyEvent event = (KeyEvent)msg.obj;
+ if ((event.getFlags()&KeyEvent.FLAG_FROM_SYSTEM) != 0) {
+ // The IME is trying to say this event is from the
+ // system! Bad bad bad!
+ event = KeyEvent.changeFlags(event,
+ event.getFlags()&~KeyEvent.FLAG_FROM_SYSTEM);
+ }
deliverKeyEventToViewHierarchy((KeyEvent)msg.obj, false);
- break;
+ } break;
case FINISH_INPUT_CONNECTION: {
InputMethodManager imm = InputMethodManager.peekInstance();
if (imm != null) {