| Index: chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| diff --git a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| index c5b1a391ce696ac2e4b90b6826503c3919773585..2e08dfe5e1d749a7d5bec4dfe63781998416c049 100644
|
| --- a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| +++ b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/android/jni_string.h"
|
| #include "base/android/jni_weak_ref.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "chrome/browser/translate/android/translate_utils.h"
|
| #include "components/translate/core/browser/translate_infobar_delegate.h"
|
| #include "jni/TranslateCompactInfoBar_jni.h"
|
|
|
| @@ -21,18 +22,52 @@ using base::android::ScopedJavaLocalRef;
|
|
|
| TranslateCompactInfoBar::TranslateCompactInfoBar(
|
| std::unique_ptr<translate::TranslateInfoBarDelegate> delegate)
|
| - : InfoBarAndroid(std::move(delegate)) {}
|
| + : InfoBarAndroid(std::move(delegate)) {
|
| + // |translate_driver| must already be bound.
|
| + DCHECK(GetDelegate()->GetTranslateDriver());
|
| + translate_driver_ = static_cast<translate::ContentTranslateDriver*>(
|
| + GetDelegate()->GetTranslateDriver());
|
| + translate_driver_->AddObserver(this);
|
| +}
|
|
|
| -TranslateCompactInfoBar::~TranslateCompactInfoBar() {}
|
| +TranslateCompactInfoBar::~TranslateCompactInfoBar() {
|
| + DCHECK(translate_driver_);
|
| + translate_driver_->RemoveObserver(this);
|
| +}
|
|
|
| ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar(
|
| JNIEnv* env) {
|
| - // TODO(ramyasharma): Implement.
|
| - return Java_TranslateCompactInfoBar_create(env);
|
| + translate::TranslateInfoBarDelegate* delegate = GetDelegate();
|
| +
|
| + base::android::ScopedJavaLocalRef<jobjectArray> java_languages =
|
| + TranslateUtils::GetJavaLanguages(env, delegate);
|
| + base::android::ScopedJavaLocalRef<jobjectArray> java_codes =
|
| + TranslateUtils::GetJavaLanguageCodes(env, delegate);
|
| +
|
| + ScopedJavaLocalRef<jstring> source_language_code =
|
| + base::android::ConvertUTF8ToJavaString(
|
| + env, delegate->original_language_code());
|
| +
|
| + ScopedJavaLocalRef<jstring> target_language_code =
|
| + base::android::ConvertUTF8ToJavaString(env,
|
| + delegate->target_language_code());
|
| + return Java_TranslateCompactInfoBar_create(env, source_language_code,
|
| + target_language_code,
|
| + java_languages, java_codes);
|
| }
|
|
|
| void TranslateCompactInfoBar::ProcessButton(int action) {
|
| - // TODO(ramyasharma): Implement.
|
| + if (!owner())
|
| + return; // We're closing; don't call anything, it might access the owner.
|
| +
|
| + // TODO(ramyasharma): Handle other button clicks.
|
| + translate::TranslateInfoBarDelegate* delegate = GetDelegate();
|
| + if (action == InfoBarAndroid::ACTION_TRANSLATE)
|
| + delegate->Translate();
|
| + else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL)
|
| + delegate->RevertTranslation();
|
| + else
|
| + DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action);
|
| }
|
|
|
| void TranslateCompactInfoBar::SetJavaInfoBar(
|
| @@ -49,6 +84,19 @@ void TranslateCompactInfoBar::ApplyTranslateOptions(
|
| // TODO(ramyasharma): Implement.
|
| }
|
|
|
| +void TranslateCompactInfoBar::OnPageTranslated(
|
| + const std::string& original_lang,
|
| + const std::string& translated_lang,
|
| + translate::TranslateErrors::Type error_type) {
|
| + if (!owner())
|
| + return; // We're closing; don't call anything, it might access the owner.
|
| +
|
| + DCHECK(translate_driver_);
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(),
|
| + error_type);
|
| +}
|
| +
|
| translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() {
|
| return delegate()->AsTranslateInfoBarDelegate();
|
| }
|
|
|