Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Unified Diff: services/keyboard_native/key_layout.cc

Issue 1247903003: Add spellcheck and word suggestion to the prediction service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/keyboard_native/key_layout.cc
diff --git a/services/keyboard_native/key_layout.cc b/services/keyboard_native/key_layout.cc
index a41eb6e492552f9899bf3bfeebef0c9a8a47c8e9..722e1ba795b8186d15cde7af7f434b61614b6f19 100644
--- a/services/keyboard_native/key_layout.cc
+++ b/services/keyboard_native/key_layout.cc
@@ -11,6 +11,8 @@
#include "services/keyboard_native/kLowerCaseIcon.h"
#include "services/keyboard_native/kUpperCaseIcon.h"
#include "services/keyboard_native/key_layout.h"
+#include "services/keyboard_native/predictor.h"
+#include "services/keyboard_native/text_update_key.h"
#include "skia/ext/refptr.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkImageDecoder.h"
@@ -103,8 +105,10 @@ class ImageKey : public KeyLayout::Key {
KeyLayout::KeyLayout()
: on_text_callback_(),
+ on_suggest_text_callback_(),
layout_(&letters_layout_),
key_map_(&lower_case_key_map_),
+ predictor_(nullptr),
weak_factory_(this) {
InitLayouts();
InitKeyMaps();
@@ -137,6 +141,11 @@ void KeyLayout::SetDeleteCallback(base::Callback<void()> on_delete_callback) {
on_delete_callback_ = on_delete_callback;
}
+void KeyLayout::SetSuggestTextCallback(
+ base::Callback<void(const std::string&)> on_suggest_text_callback) {
+ on_suggest_text_callback_ = on_suggest_text_callback;
+}
+
void KeyLayout::SetKeyArea(const gfx::RectF& key_area) {
key_area_ = key_area;
}
@@ -174,7 +183,6 @@ void KeyLayout::Draw(SkCanvas* canvas) {
key_index++) {
float key_width = static_cast<float>(key_area_.width()) *
(*layout_)[row_index][key_index];
-
(*key_map_)[row_index][key_index]->Draw(
canvas, text_paint,
gfx::RectF(current_left, current_top, key_width, row_height));
@@ -208,6 +216,11 @@ void KeyLayout::OnTouchUp(const gfx::PointF& touch_up) {
}
}
+void KeyLayout::SetPredictor(Predictor* predictor) {
+ predictor_ = predictor;
+ predictor_->SetSuggestionKeys(lower_case_key_map_[0]);
+}
+
void KeyLayout::InitLayouts() {
// Row layouts are specified by a vector of floats which indicate the percent
// width a given key takes up in that row. The floats of a given row *MUST*
@@ -219,12 +232,15 @@ void KeyLayout::InitLayouts() {
std::vector<float> seven_key_row_layout = {
0.15f, 0.1f, 0.1f, 0.3f, 0.1f, 0.1f, 0.15f};
std::vector<float> five_key_row_layout = {0.15f, 0.1f, 0.5f, 0.1f, 0.15f};
+ std::vector<float> three_key_row_layout = {0.33f, 0.33f, 0.33f};
+ letters_layout_.push_back(three_key_row_layout);
letters_layout_.push_back(ten_key_row_layout);
letters_layout_.push_back(nine_key_row_layout);
letters_layout_.push_back(nine_key_row_layout);
letters_layout_.push_back(five_key_row_layout);
+ symbols_layout_.push_back(three_key_row_layout);
symbols_layout_.push_back(ten_key_row_layout);
symbols_layout_.push_back(nine_key_row_layout);
symbols_layout_.push_back(nine_key_row_layout);
@@ -236,26 +252,40 @@ void KeyLayout::OnKeyDoNothing(const TextKey& key) {
}
void KeyLayout::OnKeyEmitText(const TextKey& key) {
+ predictor_->StoreCurWord(std::string(key.ToText()));
on_text_callback_.Run(std::string(key.ToText()));
}
void KeyLayout::OnKeyDelete(const TextKey& key) {
+ predictor_->DeleteCharInCurWord();
on_delete_callback_.Run();
}
+void KeyLayout::OnSuggestKeyEmitText(const TextUpdateKey& key) {
+ std::string update_string = std::string(key.ToText());
+ int delete_size = predictor_->ChooseSuggestedWord(std::string(key.ToText()));
+ for (int i = 0; i < delete_size; i++) {
+ on_delete_callback_.Run();
+ }
+ on_suggest_text_callback_.Run(update_string);
+}
+
void KeyLayout::OnKeySwitchToUpperCase(const TextKey& key) {
layout_ = &letters_layout_;
key_map_ = &upper_case_key_map_;
+ predictor_->SetSuggestionKeys(upper_case_key_map_[0]);
}
void KeyLayout::OnKeySwitchToLowerCase(const TextKey& key) {
layout_ = &letters_layout_;
key_map_ = &lower_case_key_map_;
+ predictor_->SetSuggestionKeys(lower_case_key_map_[0]);
}
void KeyLayout::OnKeySwitchToSymbols(const TextKey& key) {
layout_ = &symbols_layout_;
key_map_ = &symbols_key_map_;
+ predictor_->SetSuggestionKeys(symbols_key_map_[0]);
}
void KeyLayout::InitKeyMaps() {
@@ -265,6 +295,8 @@ void KeyLayout::InitKeyMaps() {
base::Bind(&KeyLayout::OnKeyEmitText, weak_factory_.GetWeakPtr());
base::Callback<void(const TextKey&)> delete_callback =
base::Bind(&KeyLayout::OnKeyDelete, weak_factory_.GetWeakPtr());
+ base::Callback<void(const TextUpdateKey&)> suggest_emit_text_callback =
+ base::Bind(&KeyLayout::OnSuggestKeyEmitText, weak_factory_.GetWeakPtr());
base::Callback<void(const TextKey&)> switch_to_upper_case_callback =
base::Bind(&KeyLayout::OnKeySwitchToUpperCase,
weak_factory_.GetWeakPtr());
@@ -283,6 +315,21 @@ void KeyLayout::InitKeyMaps() {
ImageKey* action_image_key =
new ImageKey(":)", do_nothing_callback, keyboard_native::kActionIcon);
+ std::vector<Key*> suggestion_strip_key_map_row_lower = {
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback)};
+
+ std::vector<Key*> suggestion_strip_key_map_row_upper = {
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback)};
+
+ std::vector<Key*> suggestion_strip_key_map_row_symbol = {
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback),
+ new TextUpdateKey("", suggest_emit_text_callback)};
+
std::vector<Key*> lower_case_key_map_row_one = {
new TextKey("q", emit_text_callback),
new TextKey("w", emit_text_callback),
@@ -324,7 +371,8 @@ void KeyLayout::InitKeyMaps() {
new TextKey(".", emit_text_callback),
action_image_key};
- lower_case_key_map_ = {lower_case_key_map_row_one,
+ lower_case_key_map_ = {suggestion_strip_key_map_row_lower,
+ lower_case_key_map_row_one,
lower_case_key_map_row_two,
lower_case_key_map_row_three,
lower_case_key_map_row_four};
@@ -370,7 +418,8 @@ void KeyLayout::InitKeyMaps() {
new TextKey(".", emit_text_callback),
action_image_key};
- upper_case_key_map_ = {upper_case_key_map_row_one,
+ upper_case_key_map_ = {suggestion_strip_key_map_row_upper,
+ upper_case_key_map_row_one,
upper_case_key_map_row_two,
upper_case_key_map_row_three,
upper_case_key_map_row_four};
@@ -418,10 +467,11 @@ void KeyLayout::InitKeyMaps() {
new TextKey(".", emit_text_callback),
action_image_key};
- symbols_key_map_ = {symbols_key_map_row_one,
+ symbols_key_map_ = {suggestion_strip_key_map_row_symbol,
+ symbols_key_map_row_one,
symbols_key_map_row_two,
symbols_key_map_row_three,
symbols_key_map_row_four};
}
-}
-// namespace keyboard
+
+} // namespace keyboard

Powered by Google App Engine
This is Rietveld 408576698