Merge "Deactivate h/w keyboard when not an internal build."
diff --git a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
index 2fb7fe8..a2463c2 100644
--- a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
+++ b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
@@ -55,13 +55,20 @@
                 // A dead key.
                 return Event.createDeadEvent(
                         codePointAndFlags & KeyCharacterMap.COMBINING_ACCENT_MASK, null /* next */);
-            } else {
-                // A committable character. This should be committed right away, taking into
-                // account the current state.
-                return Event.createCommittableEvent(codePointAndFlags, null /* next */);
             }
-        } else {
-            return Event.createNotHandledEvent();
+            if (KeyEvent.KEYCODE_ENTER == keyCode) {
+                // The Enter key. If the Shift key is not being pressed, this should send a
+                // CODE_ACTION_ENTER to trigger the action if any, or a carriage return
+                // otherwise. If the Shift key is depressed, this should send a
+                // CODE_SHIFT_ENTER and let Latin IME decide what to do with it.
+                return Event.createCommittableEvent(keyEvent.isShiftPressed()
+                        ? Constants.CODE_SHIFT_ENTER : Constants.CODE_ACTION_ENTER,
+                        null /* next */);
+            }
+            // If not Enter, then we have a committable character. This should be committed
+            // right away, taking into account the current state.
+            return Event.createCommittableEvent(codePointAndFlags, null /* next */);
         }
+        return Event.createNotHandledEvent();
     }
 }