OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/android/infobars/translate_compact_infobar.h" | 5 #include "chrome/browser/ui/android/infobars/translate_compact_infobar.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
12 #include "base/android/jni_weak_ref.h" | 12 #include "base/android/jni_weak_ref.h" |
13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "chrome/browser/translate/android/translate_utils.h" |
14 #include "components/translate/core/browser/translate_infobar_delegate.h" | 15 #include "components/translate/core/browser/translate_infobar_delegate.h" |
15 #include "jni/TranslateCompactInfoBar_jni.h" | 16 #include "jni/TranslateCompactInfoBar_jni.h" |
16 | 17 |
17 using base::android::JavaParamRef; | 18 using base::android::JavaParamRef; |
18 using base::android::ScopedJavaLocalRef; | 19 using base::android::ScopedJavaLocalRef; |
19 | 20 |
20 // TranslateInfoBar ----------------------------------------------------------- | 21 // TranslateInfoBar ----------------------------------------------------------- |
21 | 22 |
22 TranslateCompactInfoBar::TranslateCompactInfoBar( | 23 TranslateCompactInfoBar::TranslateCompactInfoBar( |
23 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) | 24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) |
24 : InfoBarAndroid(std::move(delegate)) {} | 25 : InfoBarAndroid(std::move(delegate)) { |
| 26 // |translate_driver| must already be bound. |
| 27 DCHECK(GetDelegate()->GetTranslateDriver()); |
| 28 translate_driver_ = static_cast<translate::ContentTranslateDriver*>( |
| 29 GetDelegate()->GetTranslateDriver()); |
| 30 translate_driver_->AddObserver(this); |
| 31 } |
25 | 32 |
26 TranslateCompactInfoBar::~TranslateCompactInfoBar() {} | 33 TranslateCompactInfoBar::~TranslateCompactInfoBar() { |
| 34 DCHECK(translate_driver_); |
| 35 translate_driver_->RemoveObserver(this); |
| 36 } |
27 | 37 |
28 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( | 38 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( |
29 JNIEnv* env) { | 39 JNIEnv* env) { |
30 // TODO(ramyasharma): Implement. | 40 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
31 return Java_TranslateCompactInfoBar_create(env); | 41 |
| 42 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = |
| 43 TranslateUtils::GetJavaLanguages(env, delegate); |
| 44 base::android::ScopedJavaLocalRef<jobjectArray> java_codes = |
| 45 TranslateUtils::GetJavaLanguageCodes(env, delegate); |
| 46 |
| 47 ScopedJavaLocalRef<jstring> source_language_code = |
| 48 base::android::ConvertUTF8ToJavaString( |
| 49 env, delegate->original_language_code()); |
| 50 |
| 51 ScopedJavaLocalRef<jstring> target_language_code = |
| 52 base::android::ConvertUTF8ToJavaString(env, |
| 53 delegate->target_language_code()); |
| 54 return Java_TranslateCompactInfoBar_create(env, source_language_code, |
| 55 target_language_code, |
| 56 java_languages, java_codes); |
32 } | 57 } |
33 | 58 |
34 void TranslateCompactInfoBar::ProcessButton(int action) { | 59 void TranslateCompactInfoBar::ProcessButton(int action) { |
35 // TODO(ramyasharma): Implement. | 60 if (!owner()) |
| 61 return; // We're closing; don't call anything, it might access the owner. |
| 62 |
| 63 // TODO(ramyasharma): Handle other button clicks. |
| 64 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 65 if (action == InfoBarAndroid::ACTION_TRANSLATE) |
| 66 delegate->Translate(); |
| 67 else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) |
| 68 delegate->RevertTranslation(); |
| 69 else |
| 70 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); |
36 } | 71 } |
37 | 72 |
38 void TranslateCompactInfoBar::SetJavaInfoBar( | 73 void TranslateCompactInfoBar::SetJavaInfoBar( |
39 const base::android::JavaRef<jobject>& java_info_bar) { | 74 const base::android::JavaRef<jobject>& java_info_bar) { |
40 InfoBarAndroid::SetJavaInfoBar(java_info_bar); | 75 InfoBarAndroid::SetJavaInfoBar(java_info_bar); |
41 JNIEnv* env = base::android::AttachCurrentThread(); | 76 JNIEnv* env = base::android::AttachCurrentThread(); |
42 Java_TranslateCompactInfoBar_setNativePtr(env, java_info_bar, | 77 Java_TranslateCompactInfoBar_setNativePtr(env, java_info_bar, |
43 reinterpret_cast<intptr_t>(this)); | 78 reinterpret_cast<intptr_t>(this)); |
44 } | 79 } |
45 | 80 |
46 void TranslateCompactInfoBar::ApplyTranslateOptions( | 81 void TranslateCompactInfoBar::ApplyTranslateOptions( |
47 JNIEnv* env, | 82 JNIEnv* env, |
48 const JavaParamRef<jobject>& obj) { | 83 const JavaParamRef<jobject>& obj) { |
49 // TODO(ramyasharma): Implement. | 84 // TODO(ramyasharma): Implement. |
50 } | 85 } |
51 | 86 |
| 87 void TranslateCompactInfoBar::OnPageTranslated( |
| 88 const std::string& original_lang, |
| 89 const std::string& translated_lang, |
| 90 translate::TranslateErrors::Type error_type) { |
| 91 if (!owner()) |
| 92 return; // We're closing; don't call anything, it might access the owner. |
| 93 |
| 94 DCHECK(translate_driver_); |
| 95 JNIEnv* env = base::android::AttachCurrentThread(); |
| 96 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), |
| 97 error_type); |
| 98 } |
| 99 |
52 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { | 100 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { |
53 return delegate()->AsTranslateInfoBarDelegate(); | 101 return delegate()->AsTranslateInfoBarDelegate(); |
54 } | 102 } |
55 | 103 |
56 // Native JNI methods --------------------------------------------------------- | 104 // Native JNI methods --------------------------------------------------------- |
57 | 105 |
58 // static | 106 // static |
59 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { | 107 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { |
60 return RegisterNativesImpl(env); | 108 return RegisterNativesImpl(env); |
61 } | 109 } |
OLD | NEW |