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 @@
#include "base/files/file_util.h"
#include "base/i18n/number_formatting.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
......@@ -143,10 +144,15 @@ SuggestionStatus EmojiSuggester::HandleKeyEvent(
DismissSuggestion();
suggestion_shown_ = false;
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()) {
LOG(ERROR) << "Fail to handle event. " << error;
}
last_event_key_ = event.key;
return status;
}
......@@ -165,10 +171,13 @@ bool EmojiSuggester::Suggest(const base::string16& text) {
void EmojiSuggester::ShowSuggestion(const std::string& text) {
if (ChromeKeyboardControllerClient::Get()->is_keyboard_enabled())
return;
ResetState();
std::string error;
// TODO(crbug/1099495): Move suggestion_show_ after checking for error and fix
// tests.
suggestion_shown_ = true;
candidates_.clear();
candidate_id_ = -1;
candidates_ = emoji_map_.at(text);
properties_.visible = true;
properties_.candidates = candidates_;
......@@ -206,6 +215,12 @@ void EmojiSuggester::DismissSuggestion() {
}
}
void EmojiSuggester::ResetState() {
candidates_.clear();
candidate_id_ = -1;
last_event_key_ = base::EmptyString();
}
AssistiveType EmojiSuggester::GetProposeActionType() {
return AssistiveType::kEmoji;
}
......
......@@ -39,6 +39,7 @@ class EmojiSuggester : public Suggester {
void LoadEmojiMap();
void OnEmojiDataLoaded(const std::string& emoji_data);
void RecordAcceptanceIndex(int index);
void ResetState();
InputMethodEngine* const engine_;
......@@ -48,6 +49,8 @@ class EmojiSuggester : public Suggester {
// If we are showing a suggestion right now.
bool suggestion_shown_ = false;
std::string last_event_key_;
// The current list of candidates.
std::vector<base::string16> candidates_;
AssistiveWindowProperties properties_;
......
......@@ -82,6 +82,53 @@ TEST_F(EmojiSuggesterTest, ReturnkDismissWhenPressingEsc) {
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,
ReturnkNotHandledWhenPressingEnterAndACandidateHasNotBeenChosen) {
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