Commit 8bb6e5d5 authored by Haohao Wang's avatar Haohao Wang Committed by Commit Bot

Select correct tab on auto translation

Currently when auto translation is triggered, target language tab is not
selected after translation is completed. This CL fixes this bug.

Change-Id: I605a8f1d04a3bea92054c3f37eb37be9f4d1732b
Issue: 963148
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1687050Reviewed-by: default avataranthonyvd <anthonyvd@chromium.org>
Commit-Queue: Haohao Wang <hhw@google.com>
Cr-Commit-Position: refs/heads/master@{#676635}
parent c1de0bca
...@@ -140,6 +140,17 @@ views::Widget* TranslateBubbleView::ShowBubble( ...@@ -140,6 +140,17 @@ views::Widget* TranslateBubbleView::ShowBubble(
view->SetHighlightedButton(highlighted_button); view->SetHighlightedButton(highlighted_button);
views::Widget* bubble_widget = views::Widget* bubble_widget =
views::BubbleDialogDelegateView::CreateBubble(view); views::BubbleDialogDelegateView::CreateBubble(view);
// TAB UI has the same view throughout. Select the right tab based on |step|
// upon initialization.
if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
TranslateBubbleModel::ViewState state =
TranslateBubbleModelImpl::TranslateStepToViewState(step);
translate_bubble_view_->SwitchView(state);
} else {
translate_bubble_view_->SwitchToErrorView(error_type);
}
// |allow_refocus_alert| is set to false because translate bubble does not // |allow_refocus_alert| is set to false because translate bubble does not
// have an additional screen reader alert instructing the user to use a // have an additional screen reader alert instructing the user to use a
// hotkey combination to focus the bubble. // hotkey combination to focus the bubble.
...@@ -202,9 +213,9 @@ base::string16 TranslateBubbleView::GetWindowTitle() const { ...@@ -202,9 +213,9 @@ base::string16 TranslateBubbleView::GetWindowTitle() const {
void TranslateBubbleView::TabSelectedAt(int index) { void TranslateBubbleView::TabSelectedAt(int index) {
// Tabbed pane is indexed from left to right starting at 0. // Tabbed pane is indexed from left to right starting at 0.
if (index == 1) { if (!model_->IsPageTranslatedInCurrentLanguages() && index == 1) {
Translate(); Translate();
} else { } else if (index == 0) {
ShowOriginal(); ShowOriginal();
} }
} }
...@@ -755,8 +766,9 @@ void TranslateBubbleView::UpdateChildVisibilities() { ...@@ -755,8 +766,9 @@ void TranslateBubbleView::UpdateChildVisibilities() {
for (views::View* view : children()) for (views::View* view : children())
view->SetVisible(view == GetCurrentView()); view->SetVisible(view == GetCurrentView());
// Not required for TAB ui because the title is not shown. // Not required for TAB UI or Button_GM2 UI because the title is not shown.
if (bubble_ui_model_ != language::TranslateUIBubbleModel::TAB && if (bubble_ui_model_ != language::TranslateUIBubbleModel::BUTTON_GM2 &&
bubble_ui_model_ != language::TranslateUIBubbleModel::TAB &&
GetWidget()) { GetWidget()) {
GetWidget()->UpdateWindowTitle(); GetWidget()->UpdateWindowTitle();
} }
...@@ -888,6 +900,7 @@ std::unique_ptr<views::View> TranslateBubbleView::CreateViewTab() { ...@@ -888,6 +900,7 @@ std::unique_ptr<views::View> TranslateBubbleView::CreateViewTab() {
tab_translate_options_button->set_ink_drop_base_color(gfx::kChromeIconGrey); tab_translate_options_button->set_ink_drop_base_color(gfx::kChromeIconGrey);
tab_translate_options_button->SetInkDropMode(views::Button::InkDropMode::ON); tab_translate_options_button->SetInkDropMode(views::Button::InkDropMode::ON);
tab_translate_options_button->SetID(BUTTON_ID_OPTIONS_MENU_TAB); tab_translate_options_button->SetID(BUTTON_ID_OPTIONS_MENU_TAB);
tab_translate_options_button->SetFocusForPlatform();
tab_translate_options_button->set_request_focus_on_press(true); tab_translate_options_button->set_request_focus_on_press(true);
// Close button // Close button
...@@ -1659,10 +1672,11 @@ views::Checkbox* TranslateBubbleView::GetAlwaysTranslateCheckbox() { ...@@ -1659,10 +1672,11 @@ views::Checkbox* TranslateBubbleView::GetAlwaysTranslateCheckbox() {
void TranslateBubbleView::SwitchView( void TranslateBubbleView::SwitchView(
TranslateBubbleModel::ViewState view_state) { TranslateBubbleModel::ViewState view_state) {
TranslateBubbleModel::ViewState current_state = model_->GetViewState(); TranslateBubbleModel::ViewState current_state = model_->GetViewState();
if ((bubble_ui_model_ == language::TranslateUIBubbleModel::TAB && if (bubble_ui_model_ == language::TranslateUIBubbleModel::TAB) {
TabUiIsEquivalentState(view_state) && SwitchTabForViewState(view_state);
TabUiIsEquivalentState(current_state)) || }
current_state == view_state) {
if (current_state == view_state) {
return; return;
} }
...@@ -1673,6 +1687,17 @@ void TranslateBubbleView::SwitchView( ...@@ -1673,6 +1687,17 @@ void TranslateBubbleView::SwitchView(
SizeToContents(); SizeToContents();
} }
void TranslateBubbleView::SwitchTabForViewState(
TranslateBubbleModel::ViewState view_state) {
if ((view_state == TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE ||
view_state == TranslateBubbleModel::VIEW_STATE_TRANSLATING) &&
tabbed_pane_->GetSelectedTabIndex() != 1) {
tabbed_pane_->SelectTabAt(1);
} else if (view_state == TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE &&
tabbed_pane_->GetSelectedTabIndex() != 0) {
tabbed_pane_->SelectTabAt(0);
}
}
void TranslateBubbleView::SwitchToErrorView( void TranslateBubbleView::SwitchToErrorView(
translate::TranslateErrors::Type error_type) { translate::TranslateErrors::Type error_type) {
SwitchView(TranslateBubbleModel::VIEW_STATE_ERROR); SwitchView(TranslateBubbleModel::VIEW_STATE_ERROR);
...@@ -1680,13 +1705,6 @@ void TranslateBubbleView::SwitchToErrorView( ...@@ -1680,13 +1705,6 @@ void TranslateBubbleView::SwitchToErrorView(
model_->ShowError(error_type); model_->ShowError(error_type);
} }
bool TranslateBubbleView::TabUiIsEquivalentState(
TranslateBubbleModel::ViewState view_state) {
return view_state == TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE ||
view_state == TranslateBubbleModel::VIEW_STATE_TRANSLATING ||
view_state == TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE;
}
void TranslateBubbleView::UpdateAdvancedView() { void TranslateBubbleView::UpdateAdvancedView() {
DCHECK(advanced_done_button_); DCHECK(advanced_done_button_);
advanced_done_button_->SetText( advanced_done_button_->SetText(
......
...@@ -200,6 +200,8 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView, ...@@ -200,6 +200,8 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView,
AlwaysTranslateLanguageMenuItem); AlwaysTranslateLanguageMenuItem);
FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest,
TabUiAlwaysTranslateLanguageMenuItem); TabUiAlwaysTranslateLanguageMenuItem);
FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest,
TabUiTabSelectedAfterTranslation);
FRIEND_TEST_ALL_PREFIXES(TranslateLanguageBrowserTest, TranslateAndRevert); FRIEND_TEST_ALL_PREFIXES(TranslateLanguageBrowserTest, TranslateAndRevert);
FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewBrowserTest, FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewBrowserTest,
CheckNeverTranslateThisSiteBlacklist); CheckNeverTranslateThisSiteBlacklist);
...@@ -304,6 +306,9 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView, ...@@ -304,6 +306,9 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView,
// Switches the view type. // Switches the view type.
void SwitchView(TranslateBubbleModel::ViewState view_state); void SwitchView(TranslateBubbleModel::ViewState view_state);
// SwitchView handler for TAB UI since TAB UI has the same view throughout.
void SwitchTabForViewState(TranslateBubbleModel::ViewState view_state);
// Switches to the error view. // Switches to the error view.
void SwitchToErrorView(translate::TranslateErrors::Type error_type); void SwitchToErrorView(translate::TranslateErrors::Type error_type);
...@@ -315,9 +320,6 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView, ...@@ -315,9 +320,6 @@ class TranslateBubbleView : public LocationBarBubbleDelegateView,
void ShowOriginal(); void ShowOriginal();
void ConfirmAdvancedOptions(); void ConfirmAdvancedOptions();
// Return true if the current state is in advanced state for TAB UI.
bool TabUiIsEquivalentState(TranslateBubbleModel::ViewState view_state);
// Handles the reset button in advanced view under Tab UI. // Handles the reset button in advanced view under Tab UI.
void ResetLanguage(); void ResetLanguage();
......
...@@ -707,4 +707,20 @@ TEST_F(TranslateBubbleViewTest, TabUiAlwaysTranslateLanguageMenuItem) { ...@@ -707,4 +707,20 @@ TEST_F(TranslateBubbleViewTest, TabUiAlwaysTranslateLanguageMenuItem) {
TriggerOptionsMenuTab(); TriggerOptionsMenuTab();
EXPECT_FALSE(bubble_->tab_options_menu_model_->IsItemCheckedAt(index)); EXPECT_FALSE(bubble_->tab_options_menu_model_->IsItemCheckedAt(index));
} }
\ No newline at end of file
TEST_F(TranslateBubbleViewTest, TabUiTabSelectedAfterTranslation) {
scoped_feature_list_.InitAndEnableFeatureWithParameters(
language::kUseButtonTranslateBubbleUi,
{{language::kTranslateUIBubbleKey,
language::kTranslateUIBubbleTabValue}});
CreateAndShowBubble();
EXPECT_EQ(bubble_->tabbed_pane_->GetSelectedTabIndex(),
static_cast<size_t>(0));
mock_model_->Translate();
EXPECT_TRUE(mock_model_->translate_called_);
bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE);
EXPECT_EQ(bubble_->tabbed_pane_->GetSelectedTabIndex(),
static_cast<size_t>(1));
}
...@@ -283,12 +283,13 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang, ...@@ -283,12 +283,13 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang,
TranslateErrors::IDENTICAL_LANGUAGES, triggered_from_menu); TranslateErrors::IDENTICAL_LANGUAGES, triggered_from_menu);
NotifyTranslateError(TranslateErrors::IDENTICAL_LANGUAGES); NotifyTranslateError(TranslateErrors::IDENTICAL_LANGUAGES);
return; return;
} else {
// Trigger the "translating now" UI.
translate_client_->ShowTranslateUI(
translate::TRANSLATE_STEP_TRANSLATING, source_lang, target_lang,
TranslateErrors::NONE, triggered_from_menu);
} }
translate_client_->ShowTranslateUI(
translate::TRANSLATE_STEP_TRANSLATING, source_lang, target_lang,
TranslateErrors::NONE, triggered_from_menu);
TranslateScript* script = TranslateDownloadManager::GetInstance()->script(); TranslateScript* script = TranslateDownloadManager::GetInstance()->script();
DCHECK(script != nullptr); DCHECK(script != nullptr);
......
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