Commit 0a4e9245 authored by My Nguyen's avatar My Nguyen Committed by Commit Bot

Add press down and number to accept emoji

Implement according to spec at http://go/e14s-emoji-addition-mock

Pressing down will still move to the next candidate, pressing number
after that will accept the number emoji.

Bug: 1098692
Change-Id: Iad1cd39efa0f2ed5ccfad875b8018058cc3d63ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2263692
Commit-Queue: My Nguyen <myy@chromium.org>
Reviewed-by: default avatarDavid Vallet <dvallet@chromium.org>
Reviewed-by: default avatarDarren Shen <shend@chromium.org>
Cr-Commit-Position: refs/heads/master@{#782860}
parent c1c17071
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/i18n/number_formatting.h" #include "base/i18n/number_formatting.h"
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h" #include "base/strings/string_split.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
...@@ -143,10 +144,15 @@ SuggestionStatus EmojiSuggester::HandleKeyEvent( ...@@ -143,10 +144,15 @@ SuggestionStatus EmojiSuggester::HandleKeyEvent(
DismissSuggestion(); DismissSuggestion();
suggestion_shown_ = false; suggestion_shown_ = false;
status = SuggestionStatus::kDismiss; status = SuggestionStatus::kDismiss;
} else if (last_event_key_ == "Down") {
int choice = 0;
if (base::StringToInt(event.key, &choice) && AcceptSuggestion(choice - 1))
status = SuggestionStatus::kAccept;
} }
if (!error.empty()) { if (!error.empty()) {
LOG(ERROR) << "Fail to handle event. " << error; LOG(ERROR) << "Fail to handle event. " << error;
} }
last_event_key_ = event.key;
return status; return status;
} }
...@@ -165,10 +171,13 @@ bool EmojiSuggester::Suggest(const base::string16& text) { ...@@ -165,10 +171,13 @@ bool EmojiSuggester::Suggest(const base::string16& text) {
void EmojiSuggester::ShowSuggestion(const std::string& text) { void EmojiSuggester::ShowSuggestion(const std::string& text) {
if (ChromeKeyboardControllerClient::Get()->is_keyboard_enabled()) if (ChromeKeyboardControllerClient::Get()->is_keyboard_enabled())
return; return;
ResetState();
std::string error; std::string error;
// TODO(crbug/1099495): Move suggestion_show_ after checking for error and fix
// tests.
suggestion_shown_ = true; suggestion_shown_ = true;
candidates_.clear();
candidate_id_ = -1;
candidates_ = emoji_map_.at(text); candidates_ = emoji_map_.at(text);
properties_.visible = true; properties_.visible = true;
properties_.candidates = candidates_; properties_.candidates = candidates_;
...@@ -206,6 +215,12 @@ void EmojiSuggester::DismissSuggestion() { ...@@ -206,6 +215,12 @@ void EmojiSuggester::DismissSuggestion() {
} }
} }
void EmojiSuggester::ResetState() {
candidates_.clear();
candidate_id_ = -1;
last_event_key_ = base::EmptyString();
}
AssistiveType EmojiSuggester::GetProposeActionType() { AssistiveType EmojiSuggester::GetProposeActionType() {
return AssistiveType::kEmoji; return AssistiveType::kEmoji;
} }
......
...@@ -39,6 +39,7 @@ class EmojiSuggester : public Suggester { ...@@ -39,6 +39,7 @@ class EmojiSuggester : public Suggester {
void LoadEmojiMap(); void LoadEmojiMap();
void OnEmojiDataLoaded(const std::string& emoji_data); void OnEmojiDataLoaded(const std::string& emoji_data);
void RecordAcceptanceIndex(int index); void RecordAcceptanceIndex(int index);
void ResetState();
InputMethodEngine* const engine_; InputMethodEngine* const engine_;
...@@ -48,6 +49,8 @@ class EmojiSuggester : public Suggester { ...@@ -48,6 +49,8 @@ class EmojiSuggester : public Suggester {
// If we are showing a suggestion right now. // If we are showing a suggestion right now.
bool suggestion_shown_ = false; bool suggestion_shown_ = false;
std::string last_event_key_;
// The current list of candidates. // The current list of candidates.
std::vector<base::string16> candidates_; std::vector<base::string16> candidates_;
AssistiveWindowProperties properties_; AssistiveWindowProperties properties_;
......
...@@ -82,6 +82,53 @@ TEST_F(EmojiSuggesterTest, ReturnkDismissWhenPressingEsc) { ...@@ -82,6 +82,53 @@ TEST_F(EmojiSuggesterTest, ReturnkDismissWhenPressingEsc) {
emoji_suggester_->HandleKeyEvent(event)); emoji_suggester_->HandleKeyEvent(event));
} }
TEST_F(EmojiSuggesterTest, ReturnkAcceptWhenPressDownThenValidNumber) {
EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy ")));
InputMethodEngineBase::KeyboardEvent event1;
event1.key = "Down";
emoji_suggester_->HandleKeyEvent(event1);
InputMethodEngineBase::KeyboardEvent event2;
event2.key = "1";
EXPECT_EQ(SuggestionStatus::kAccept,
emoji_suggester_->HandleKeyEvent(event2));
}
TEST_F(EmojiSuggesterTest, ReturnkNotHandledWhenPressDownThenNumberNotInRange) {
EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy ")));
InputMethodEngineBase::KeyboardEvent event1;
event1.key = "Down";
emoji_suggester_->HandleKeyEvent(event1);
InputMethodEngineBase::KeyboardEvent event2;
event2.key = "4";
EXPECT_EQ(SuggestionStatus::kNotHandled,
emoji_suggester_->HandleKeyEvent(event2));
}
TEST_F(EmojiSuggesterTest, ReturnkNotHandledWhenPressDownThenNotANumber) {
EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy ")));
InputMethodEngineBase::KeyboardEvent event1;
event1.key = "Down";
emoji_suggester_->HandleKeyEvent(event1);
InputMethodEngineBase::KeyboardEvent event2;
event2.key = "a";
EXPECT_EQ(SuggestionStatus::kNotHandled,
emoji_suggester_->HandleKeyEvent(event2));
}
TEST_F(EmojiSuggesterTest, ReturnkNotHandledWhenPressDownThenUpThenANumber) {
EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy ")));
InputMethodEngineBase::KeyboardEvent event1;
event1.key = "Down";
emoji_suggester_->HandleKeyEvent(event1);
InputMethodEngineBase::KeyboardEvent event2;
event2.key = "Up";
emoji_suggester_->HandleKeyEvent(event2);
InputMethodEngineBase::KeyboardEvent event3;
event3.key = "1";
EXPECT_EQ(SuggestionStatus::kNotHandled,
emoji_suggester_->HandleKeyEvent(event3));
}
TEST_F(EmojiSuggesterTest, TEST_F(EmojiSuggesterTest,
ReturnkNotHandledWhenPressingEnterAndACandidateHasNotBeenChosen) { ReturnkNotHandledWhenPressingEnterAndACandidateHasNotBeenChosen) {
EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy "))); EXPECT_TRUE(emoji_suggester_->Suggest(base::UTF8ToUTF16("happy ")));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment