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 "components/translate/core/browser/translate_infobar_delegate.h" | 15 #include "components/translate/core/browser/translate_infobar_delegate.h" |
16 #include "jni/TranslateCompactInfoBar_jni.h" | 16 #include "jni/TranslateCompactInfoBar_jni.h" |
17 | 17 |
18 using base::android::JavaParamRef; | 18 using base::android::JavaParamRef; |
19 using base::android::ScopedJavaLocalRef; | 19 using base::android::ScopedJavaLocalRef; |
20 | 20 |
21 // TranslateInfoBar ----------------------------------------------------------- | 21 // TranslateInfoBar ----------------------------------------------------------- |
22 | 22 |
23 TranslateCompactInfoBar::TranslateCompactInfoBar( | 23 TranslateCompactInfoBar::TranslateCompactInfoBar( |
24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) | 24 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) |
25 : InfoBarAndroid(std::move(delegate)) { | 25 : InfoBarAndroid(std::move(delegate)), action_flags_(FLAG_NONE) { |
26 // |translate_driver| must already be bound. | 26 GetDelegate()->SetResponder(this); |
27 DCHECK(GetDelegate()->GetTranslateDriver()); | |
28 translate_driver_ = static_cast<translate::ContentTranslateDriver*>( | |
29 GetDelegate()->GetTranslateDriver()); | |
30 translate_driver_->AddObserver(this); | |
31 } | 27 } |
32 | 28 |
33 TranslateCompactInfoBar::~TranslateCompactInfoBar() { | 29 TranslateCompactInfoBar::~TranslateCompactInfoBar() { |
34 DCHECK(translate_driver_); | 30 GetDelegate()->SetResponder(nullptr); |
35 translate_driver_->RemoveObserver(this); | |
36 } | 31 } |
37 | 32 |
38 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( | 33 ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar( |
39 JNIEnv* env) { | 34 JNIEnv* env) { |
40 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 35 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
41 | 36 |
42 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = | 37 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = |
43 TranslateUtils::GetJavaLanguages(env, delegate); | 38 TranslateUtils::GetJavaLanguages(env, delegate); |
44 base::android::ScopedJavaLocalRef<jobjectArray> java_codes = | 39 base::android::ScopedJavaLocalRef<jobjectArray> java_codes = |
45 TranslateUtils::GetJavaLanguageCodes(env, delegate); | 40 TranslateUtils::GetJavaLanguageCodes(env, delegate); |
(...skipping 14 matching lines...) Expand all Loading... | |
60 java_hash_codes); | 55 java_hash_codes); |
61 } | 56 } |
62 | 57 |
63 void TranslateCompactInfoBar::ProcessButton(int action) { | 58 void TranslateCompactInfoBar::ProcessButton(int action) { |
64 if (!owner()) | 59 if (!owner()) |
65 return; // We're closing; don't call anything, it might access the owner. | 60 return; // We're closing; don't call anything, it might access the owner. |
66 | 61 |
67 // TODO(ramyasharma): Handle other button clicks. | 62 // TODO(ramyasharma): Handle other button clicks. |
68 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 63 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
69 if (action == InfoBarAndroid::ACTION_TRANSLATE) { | 64 if (action == InfoBarAndroid::ACTION_TRANSLATE) { |
65 action_flags_ |= FLAG_TRANSLATE; | |
groby-ooo-7-16
2017/05/20 21:30:39
SHould this flag be traced on the delegate instead
Leo
2017/05/21 04:15:20
The actions traced here are mostly frontend-specif
| |
70 delegate->Translate(); | 66 delegate->Translate(); |
71 if (!delegate->ShouldAlwaysTranslate() && ShouldAutoAlwaysTranslate()) { | 67 if (!delegate->ShouldAlwaysTranslate() && ShouldAutoAlwaysTranslate()) { |
72 JNIEnv* env = base::android::AttachCurrentThread(); | 68 JNIEnv* env = base::android::AttachCurrentThread(); |
73 Java_TranslateCompactInfoBar_setAutoAlwaysTranslate(env, | 69 Java_TranslateCompactInfoBar_setAutoAlwaysTranslate(env, |
74 GetJavaInfoBar()); | 70 GetJavaInfoBar()); |
75 } | 71 } |
76 } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) { | 72 } else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) { |
73 action_flags_ |= FLAG_REVERT; | |
77 delegate->RevertTranslation(); | 74 delegate->RevertTranslation(); |
78 } else if (action == InfoBarAndroid::ACTION_CANCEL) { | 75 } else if (action == InfoBarAndroid::ACTION_CANCEL) { |
79 delegate->TranslationDeclined(); | 76 delegate->TranslationDeclined(); |
80 } else { | 77 } else { |
81 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); | 78 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); |
82 } | 79 } |
83 } | 80 } |
84 | 81 |
85 void TranslateCompactInfoBar::SetJavaInfoBar( | 82 void TranslateCompactInfoBar::SetJavaInfoBar( |
86 const base::android::JavaRef<jobject>& java_info_bar) { | 83 const base::android::JavaRef<jobject>& java_info_bar) { |
(...skipping 25 matching lines...) Expand all Loading... | |
112 } | 109 } |
113 | 110 |
114 void TranslateCompactInfoBar::ApplyBoolTranslateOption( | 111 void TranslateCompactInfoBar::ApplyBoolTranslateOption( |
115 JNIEnv* env, | 112 JNIEnv* env, |
116 const JavaParamRef<jobject>& obj, | 113 const JavaParamRef<jobject>& obj, |
117 int option, | 114 int option, |
118 jboolean value) { | 115 jboolean value) { |
119 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 116 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
120 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { | 117 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { |
121 if (delegate->ShouldAlwaysTranslate() != value) { | 118 if (delegate->ShouldAlwaysTranslate() != value) { |
119 action_flags_ |= FLAG_ALWAYS_TRANSLATE; | |
122 delegate->ToggleAlwaysTranslate(); | 120 delegate->ToggleAlwaysTranslate(); |
123 } | 121 } |
124 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { | 122 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { |
125 if (value && delegate->IsTranslatableLanguageByPrefs()) { | 123 if (value && delegate->IsTranslatableLanguageByPrefs()) { |
124 action_flags_ |= FLAG_NEVER_LANGUAGE; | |
126 delegate->ToggleTranslatableLanguageByPrefs(); | 125 delegate->ToggleTranslatableLanguageByPrefs(); |
127 } | 126 } |
128 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { | 127 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { |
129 if (value && !delegate->IsSiteBlacklisted()) { | 128 if (value && !delegate->IsSiteBlacklisted()) { |
129 action_flags_ |= FLAG_NEVER_SITE; | |
130 delegate->ToggleSiteBlacklist(); | 130 delegate->ToggleSiteBlacklist(); |
131 } | 131 } |
132 } else { | 132 } else { |
133 DCHECK(false); | 133 DCHECK(false); |
134 } | 134 } |
135 } | 135 } |
136 | 136 |
137 void TranslateCompactInfoBar::OnPageTranslated( | |
138 const std::string& original_lang, | |
139 const std::string& translated_lang, | |
140 translate::TranslateErrors::Type error_type) { | |
141 if (!owner()) | |
142 return; // We're closing; don't call anything, it might access the owner. | |
143 | |
144 DCHECK(translate_driver_); | |
145 JNIEnv* env = base::android::AttachCurrentThread(); | |
146 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), | |
147 error_type); | |
148 } | |
149 | |
150 bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() { | 137 bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() { |
151 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 138 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
152 return (delegate->GetTranslationAcceptedCount() == kAcceptCountThreshold); | 139 return (delegate->GetTranslationAcceptedCount() == kAcceptCountThreshold); |
153 } | 140 } |
154 | 141 |
155 jboolean TranslateCompactInfoBar::ShouldAutoNeverTranslate( | 142 jboolean TranslateCompactInfoBar::ShouldAutoNeverTranslate( |
156 JNIEnv* env, | 143 JNIEnv* env, |
157 const base::android::JavaParamRef<jobject>& obj) { | 144 const base::android::JavaParamRef<jobject>& obj) { |
158 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 145 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
159 return (delegate->GetTranslationDeniedCount() == kDeniedCountThreshold); | 146 return (delegate->GetTranslationDeniedCount() == kDeniedCountThreshold); |
160 } | 147 } |
161 | 148 |
162 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { | 149 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { |
163 return delegate()->AsTranslateInfoBarDelegate(); | 150 return delegate()->AsTranslateInfoBarDelegate(); |
164 } | 151 } |
165 | 152 |
153 void TranslateCompactInfoBar::ActionOnStep( | |
154 translate::TranslateStep step, | |
155 translate::TranslateErrors::Type error_type) { | |
156 if (!owner()) | |
157 return; // We're closing; don't call anything. | |
158 | |
159 if ((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || | |
160 (step == translate::TRANSLATE_STEP_TRANSLATE_ERROR)) { | |
161 JNIEnv* env = base::android::AttachCurrentThread(); | |
162 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), | |
163 error_type); | |
164 } | |
165 } | |
166 | |
167 bool TranslateCompactInfoBar::Declined() { | |
168 return action_flags_ == FLAG_NONE; | |
169 }; | |
170 | |
166 // Native JNI methods --------------------------------------------------------- | 171 // Native JNI methods --------------------------------------------------------- |
167 | 172 |
168 // static | 173 // static |
169 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { | 174 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { |
170 return RegisterNativesImpl(env); | 175 return RegisterNativesImpl(env); |
171 } | 176 } |
OLD | NEW |