| 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
|
|
|