Add spellcheck and word suggestion to the prediction service

Add suggestion strip to the keyboard service

Add default English dictionary

Add Android LatinIME/native/jni/src suggestion codebase to third_party/android_prediction

Modify keyboard client text display

R=anwilson@chromium.org, viettrungluu@chromium.org

Review URL: https://codereview.chromium.org/1247903003 .
diff --git a/services/prediction/key_set.h b/services/prediction/key_set.h
new file mode 100644
index 0000000..8b72b22
--- /dev/null
+++ b/services/prediction/key_set.h
@@ -0,0 +1,92 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_PREDICTION_KEY_SET_H_
+#define SERVICES_PREDICTION_KEY_SET_H_
+
+#include "mojo/services/prediction/public/interfaces/prediction.mojom.h"
+
+// qwerty keyboard key sets
+
+namespace prediction {
+
+// NOTE: This struct has been modified from the Android Open
+// Source Project. Specifically from the following file:
+// https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/
+// android-5.1.1_r8/java/src/com/android/inputmethod/keyboard/Key.java
+struct Key {
+  int kcode;
+  // Width of the key, not including the gap
+  int kwidth;
+  // Height of the key, not including the gap
+  int kheight;
+  // X coordinate of the key in the keyboard layout
+  int kx;
+  // Y coordinate of the key in the keyboard layout
+  int ky;
+  // Hit bounding box of the key
+  int khit_box_left;
+  int khit_box_top;
+  int khit_box_right;
+  int khit_box_bottom;
+
+  Key() {}
+
+  Key(const int code,
+      const int x,
+      const int y,
+      const int width,
+      const int height,
+      const int horizontal_gap,
+      const int vertical_gap) {
+    kheight = height - vertical_gap;
+    kwidth = width - horizontal_gap;
+    kcode = code;
+    kx = x + horizontal_gap / 2;
+    ky = y;
+    khit_box_left = x;
+    khit_box_top = y;
+    khit_box_right = x + width + 1;
+    khit_box_bottom = y + height;
+  }
+};
+
+namespace keyset {
+
+const Key A(97, 43, 58, 29, 58, 4, 9);
+const Key B(98, 188, 116, 29, 58, 4, 9);
+const Key C(99, 130, 116, 29, 58, 4, 9);
+const Key D(100, 101, 58, 29, 58, 4, 9);
+const Key E(101, 87, 0, 29, 58, 4, 9);
+const Key F(102, 130, 58, 29, 58, 4, 9);
+const Key G(103, 159, 58, 29, 58, 4, 9);
+const Key H(104, 188, 58, 29, 58, 4, 9);
+const Key I(105, 232, 0, 29, 58, 4, 9);
+const Key J(106, 217, 58, 29, 58, 4, 9);
+const Key K(107, 246, 58, 29, 58, 4, 9);
+const Key L(108, 275, 58, 29, 58, 4, 9);
+const Key M(109, 246, 116, 29, 58, 4, 9);
+const Key N(110, 217, 116, 29, 58, 4, 9);
+const Key O(111, 261, 0, 29, 58, 4, 9);
+const Key P(112, 290, 0, 29, 58, 4, 9);
+const Key Q(113, 29, 0, 29, 58, 4, 9);
+const Key R(114, 116, 0, 29, 58, 4, 9);
+const Key S(115, 72, 58, 29, 58, 4, 9);
+const Key T(116, 145, 0, 29, 58, 4, 9);
+const Key U(117, 203, 0, 29, 58, 4, 9);
+const Key V(118, 159, 116, 29, 58, 4, 9);
+const Key W(119, 58, 0, 29, 58, 4, 9);
+const Key X(120, 101, 116, 29, 58, 4, 9);
+const Key Y(121, 174, 0, 29, 58, 4, 9);
+const Key Z(122, 72, 116, 29, 58, 4, 9);
+
+const Key key_set[] = {Q, W, E, R, T, Y, U, I, O, P, A, S, D,
+                       F, G, H, J, K, L, Z, X, C, V, B, N, M};
+
+const int key_count = 26;
+
+}  // namespace keyset
+}  // namespace prediction
+
+#endif  // SERVICES_PREDICTION_KEY_SET_H_