Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1081)

Unified Diff: chrome/browser/ui/android/infobars/translate_compact_infobar.cc

Issue 2788343002: Translate page in the new UI. (Closed)
Patch Set: compact unit test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698