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 "chrome/browser/translate/android/translate_utils.h" |
15 #include "chrome/browser/ui/android/snackbars/translate_snackbar.h" | |
15 #include "components/translate/core/browser/translate_infobar_delegate.h" | 16 #include "components/translate/core/browser/translate_infobar_delegate.h" |
16 #include "jni/TranslateCompactInfoBar_jni.h" | 17 #include "jni/TranslateCompactInfoBar_jni.h" |
17 | 18 |
18 using base::android::JavaParamRef; | 19 using base::android::JavaParamRef; |
19 using base::android::ScopedJavaLocalRef; | 20 using base::android::ScopedJavaLocalRef; |
20 | 21 |
21 // TranslateInfoBar ----------------------------------------------------------- | 22 // TranslateInfoBar ----------------------------------------------------------- |
22 | 23 |
23 TranslateCompactInfoBar::TranslateCompactInfoBar( | 24 TranslateCompactInfoBar::TranslateCompactInfoBar( |
24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) | 25 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) |
25 : InfoBarAndroid(std::move(delegate)) { | 26 : InfoBarAndroid(std::move(delegate)) { |
26 // |translate_driver| must already be bound. | 27 // |translate_driver| must already be bound. |
27 DCHECK(GetDelegate()->GetTranslateDriver()); | 28 DCHECK(GetDelegate()->GetTranslateDriver()); |
28 translate_driver_ = static_cast<translate::ContentTranslateDriver*>( | 29 translate_driver_ = static_cast<translate::ContentTranslateDriver*>( |
29 GetDelegate()->GetTranslateDriver()); | 30 GetDelegate()->GetTranslateDriver()); |
30 translate_driver_->AddObserver(this); | 31 translate_driver_->AddObserver(this); |
32 snackbar_type = TranslateUtils::TYPE_NONE; | |
31 } | 33 } |
32 | 34 |
33 TranslateCompactInfoBar::~TranslateCompactInfoBar() { | 35 TranslateCompactInfoBar::~TranslateCompactInfoBar() { |
34 DCHECK(translate_driver_); | 36 DCHECK(translate_driver_); |
35 translate_driver_->RemoveObserver(this); | 37 translate_driver_->RemoveObserver(this); |
36 } | 38 } |
37 | 39 |
38 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( | 40 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( |
39 JNIEnv* env) { | 41 JNIEnv* env) { |
40 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 42 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
(...skipping 30 matching lines...) Expand all Loading... | |
71 } | 73 } |
72 | 74 |
73 void TranslateCompactInfoBar::SetJavaInfoBar( | 75 void TranslateCompactInfoBar::SetJavaInfoBar( |
74 const base::android::JavaRef<jobject>& java_info_bar) { | 76 const base::android::JavaRef<jobject>& java_info_bar) { |
75 InfoBarAndroid::SetJavaInfoBar(java_info_bar); | 77 InfoBarAndroid::SetJavaInfoBar(java_info_bar); |
76 JNIEnv* env = base::android::AttachCurrentThread(); | 78 JNIEnv* env = base::android::AttachCurrentThread(); |
77 Java_TranslateCompactInfoBar_setNativePtr(env, java_info_bar, | 79 Java_TranslateCompactInfoBar_setNativePtr(env, java_info_bar, |
78 reinterpret_cast<intptr_t>(this)); | 80 reinterpret_cast<intptr_t>(this)); |
79 } | 81 } |
80 | 82 |
83 void TranslateCompactInfoBar::CloseJavaInfoBar() { | |
84 if (GetJavaInfoBar() != nullptr) { | |
85 JNIEnv* env = base::android::AttachCurrentThread(); | |
gone
2017/04/26 17:19:51
I'd make the Java side closeInfoBarInternal call i
ramyasharma
2017/04/27 08:01:42
Thanks. Not using this approach anymore.
| |
86 TranslateSnackbar* snackbar = new TranslateSnackbar(snackbar_type); | |
87 Java_TranslateCompactInfoBar_closeInfoBar( | |
88 env, GetJavaInfoBar(), snackbar_type, | |
89 reinterpret_cast<intptr_t>(snackbar)); | |
90 } | |
91 } | |
92 | |
81 void TranslateCompactInfoBar::ApplyStringTranslateOption( | 93 void TranslateCompactInfoBar::ApplyStringTranslateOption( |
82 JNIEnv* env, | 94 JNIEnv* env, |
83 const JavaParamRef<jobject>& obj, | 95 const JavaParamRef<jobject>& obj, |
84 int option, | 96 int option, |
85 const JavaParamRef<jstring>& value) { | 97 const JavaParamRef<jstring>& value) { |
86 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 98 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
87 if (option == TranslateUtils::OPTION_SOURCE_CODE) { | 99 if (option == TranslateUtils::OPTION_SOURCE_CODE) { |
88 std::string source_code = | 100 std::string source_code = |
89 base::android::ConvertJavaStringToUTF8(env, value); | 101 base::android::ConvertJavaStringToUTF8(env, value); |
90 if (delegate->original_language_code().compare(source_code) != 0) | 102 if (delegate->original_language_code().compare(source_code) != 0) |
91 delegate->UpdateOriginalLanguage(source_code); | 103 delegate->UpdateOriginalLanguage(source_code); |
92 } else if (option == TranslateUtils::OPTION_TARGET_CODE) { | 104 } else if (option == TranslateUtils::OPTION_TARGET_CODE) { |
93 std::string target_code = | 105 std::string target_code = |
94 base::android::ConvertJavaStringToUTF8(env, value); | 106 base::android::ConvertJavaStringToUTF8(env, value); |
95 if (delegate->target_language_code().compare(target_code) != 0) | 107 if (delegate->target_language_code().compare(target_code) != 0) |
96 delegate->UpdateTargetLanguage(target_code); | 108 delegate->UpdateTargetLanguage(target_code); |
97 } else { | 109 } else { |
98 DCHECK(false); | 110 DCHECK(false); |
99 } | 111 } |
100 } | 112 } |
101 | 113 |
102 void TranslateCompactInfoBar::ApplyBoolTranslateOption( | 114 void TranslateCompactInfoBar::ApplyBoolTranslateOption( |
103 JNIEnv* env, | 115 JNIEnv* env, |
104 const JavaParamRef<jobject>& obj, | 116 const JavaParamRef<jobject>& obj, |
105 int option, | 117 int option, |
106 jboolean value) { | 118 jboolean value) { |
107 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 119 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
108 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { | 120 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { |
109 if (delegate->ShouldAlwaysTranslate() != value) | 121 if (delegate->ShouldAlwaysTranslate() != value) { |
110 delegate->ToggleAlwaysTranslate(); | 122 delegate->ToggleAlwaysTranslate(); |
123 snackbar_type = TranslateUtils::TYPE_ALWAYS_TRANSLATE; | |
124 TranslateCompactInfoBar::CloseJavaInfoBar(); | |
gone
2017/04/26 17:19:51
You shouldn't need to scope TranslateCompactInfoBa
ramyasharma
2017/04/27 08:01:42
Done.
| |
125 } | |
111 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { | 126 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { |
112 if (value && delegate->IsTranslatableLanguageByPrefs()) | 127 if (value && delegate->IsTranslatableLanguageByPrefs()) { |
113 delegate->ToggleTranslatableLanguageByPrefs(); | 128 delegate->ToggleTranslatableLanguageByPrefs(); |
129 snackbar_type = TranslateUtils::TYPE_NEVER_TRANSLATE; | |
130 TranslateCompactInfoBar::CloseJavaInfoBar(); | |
131 } | |
114 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { | 132 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { |
115 if (value && !delegate->IsSiteBlacklisted()) | 133 if (value && !delegate->IsSiteBlacklisted()) { |
116 delegate->ToggleSiteBlacklist(); | 134 delegate->ToggleSiteBlacklist(); |
135 snackbar_type = TranslateUtils::TYPE_NEVER_TRANSLATE_SITE; | |
136 TranslateCompactInfoBar::CloseJavaInfoBar(); | |
137 } | |
117 } else { | 138 } else { |
118 DCHECK(false); | 139 DCHECK(false); |
119 } | 140 } |
120 } | 141 } |
121 | 142 |
122 void TranslateCompactInfoBar::OnPageTranslated( | 143 void TranslateCompactInfoBar::OnPageTranslated( |
123 const std::string& original_lang, | 144 const std::string& original_lang, |
124 const std::string& translated_lang, | 145 const std::string& translated_lang, |
125 translate::TranslateErrors::Type error_type) { | 146 translate::TranslateErrors::Type error_type) { |
126 if (!owner()) | 147 if (!owner()) |
127 return; // We're closing; don't call anything, it might access the owner. | 148 return; // We're closing; don't call anything, it might access the owner. |
128 | 149 |
129 DCHECK(translate_driver_); | 150 DCHECK(translate_driver_); |
130 JNIEnv* env = base::android::AttachCurrentThread(); | 151 JNIEnv* env = base::android::AttachCurrentThread(); |
131 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), | 152 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), |
132 error_type); | 153 error_type); |
133 } | 154 } |
134 | 155 |
135 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { | 156 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { |
136 return delegate()->AsTranslateInfoBarDelegate(); | 157 return delegate()->AsTranslateInfoBarDelegate(); |
137 } | 158 } |
138 | 159 |
139 // Native JNI methods --------------------------------------------------------- | 160 // Native JNI methods --------------------------------------------------------- |
140 | 161 |
141 // static | 162 // static |
142 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { | 163 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { |
143 return RegisterNativesImpl(env); | 164 return RegisterNativesImpl(env); |
144 } | 165 } |
OLD | NEW |