blob: 1aa73d78d4f6df2a9c7f4b0fc6144df9f7f73f3a [file] [log] [blame]
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/translate/partial_translate_bubble_model_impl.h"
#include <utility>
#include "chrome/browser/translate/chrome_translate_client.h"
#include "components/translate/core/browser/language_state.h"
#include "components/translate/core/browser/translate_manager.h"
#include "components/translate/core/browser/translate_ui_delegate.h"
// TODO(crbug/1314825): When the PartialTranslateManager is added it will
// replace and take the role of the TranslateUIDelegate. TranslateUIDelegate
// calls have been left in this implementation as future reference for
// implementing PartialTranslateManager.
PartialTranslateBubbleModelImpl::PartialTranslateBubbleModelImpl(
ViewState view_state,
std::unique_ptr<translate::TranslateUIDelegate> ui_delegate)
: ui_delegate_(std::move(ui_delegate)) {
DCHECK_NE(VIEW_STATE_SOURCE_LANGUAGE, view_state);
DCHECK_NE(VIEW_STATE_TARGET_LANGUAGE, view_state);
current_view_state_ = view_state;
}
PartialTranslateBubbleModelImpl::~PartialTranslateBubbleModelImpl() = default;
PartialTranslateBubbleModelImpl::ViewState
PartialTranslateBubbleModelImpl::GetViewState() const {
return current_view_state_;
}
void PartialTranslateBubbleModelImpl::SetViewState(
PartialTranslateBubbleModelImpl::ViewState view_state) {
current_view_state_ = view_state;
}
void PartialTranslateBubbleModelImpl::ShowError(
translate::TranslateErrors::Type error_type) {
// TODO(crbug/1314825): implement when partial translate specific
// metrics are added.
}
int PartialTranslateBubbleModelImpl::GetNumberOfSourceLanguages() const {
return ui_delegate_->GetNumberOfLanguages();
}
int PartialTranslateBubbleModelImpl::GetNumberOfTargetLanguages() const {
// Subtract 1 to account for unknown language option being omitted.
return ui_delegate_->GetNumberOfLanguages() - 1;
}
std::u16string PartialTranslateBubbleModelImpl::GetSourceLanguageNameAt(
int index) const {
return ui_delegate_->GetLanguageNameAt(index);
}
std::u16string PartialTranslateBubbleModelImpl::GetTargetLanguageNameAt(
int index) const {
// Add 1 to account for unknown language option at index 0 in
// TranslateUIDelegate language list.
return ui_delegate_->GetLanguageNameAt(index + 1);
}
int PartialTranslateBubbleModelImpl::GetSourceLanguageIndex() const {
return ui_delegate_->GetSourceLanguageIndex();
}
void PartialTranslateBubbleModelImpl::UpdateSourceLanguageIndex(int index) {
ui_delegate_->UpdateSourceLanguageIndex(index);
}
int PartialTranslateBubbleModelImpl::GetTargetLanguageIndex() const {
// Subtract 1 to account for unknown language option being omitted from the
// bubble target language list.
return ui_delegate_->GetTargetLanguageIndex() - 1;
}
void PartialTranslateBubbleModelImpl::UpdateTargetLanguageIndex(int index) {
// Add 1 to account for unknown language option at index 0 in
// TranslateUIDelegate language list.
ui_delegate_->UpdateTargetLanguageIndex(index + 1);
}
void PartialTranslateBubbleModelImpl::Translate() {
// TODO(crbug/1314825): Update implementation when PartialTranslateManager is
// complete.
}
void PartialTranslateBubbleModelImpl::RevertTranslation() {
// TODO(crbug/1314825): Update implementation when PartialTranslateManager is
// complete.
}
bool PartialTranslateBubbleModelImpl::IsCurrentSelectionTranslated() const {
// TODO(crbug/1314825): Update implementation when PartialTranslateManager is
// complete.
// Normally we'd check the ui delegate stored languages against the page
// LanguageState. To replace LanguageState we need to save the "currently
// translated language", and we need to query the source language from the
// PartialTranslateManager instead of the UIDelegate.
// There is still the open question of whether the source language can be
// changed - if not then this becomes easier. Presumably the target language
// can change, so we will need to save that state because we can't rely on
// LanguageState.
return false;
}
void PartialTranslateBubbleModelImpl::TranslateFullPage(
content::WebContents* web_contents) {
translate::TranslateManager* translate_manager =
ChromeTranslateClient::GetManagerFromWebContents(web_contents);
translate_manager->ShowTranslateUI(true);
}