| 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::ShowSnackbar(JNIEnv* env, |
| 84 const JavaParamRef<jobject>& obj) { |
| 85 if (!GetJavaInfoBar()) |
| 86 return; |
| 87 |
| 88 Java_TranslateCompactInfoBar_showSnackbar(env, GetJavaInfoBar(), |
| 89 snackbar_type_); |
| 90 } |
| 91 |
| 81 void TranslateCompactInfoBar::ApplyStringTranslateOption( | 92 void TranslateCompactInfoBar::ApplyStringTranslateOption( |
| 82 JNIEnv* env, | 93 JNIEnv* env, |
| 83 const JavaParamRef<jobject>& obj, | 94 const JavaParamRef<jobject>& obj, |
| 84 int option, | 95 int option, |
| 85 const JavaParamRef<jstring>& value) { | 96 const JavaParamRef<jstring>& value) { |
| 86 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 97 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 87 if (option == TranslateUtils::OPTION_SOURCE_CODE) { | 98 if (option == TranslateUtils::OPTION_SOURCE_CODE) { |
| 88 std::string source_code = | 99 std::string source_code = |
| 89 base::android::ConvertJavaStringToUTF8(env, value); | 100 base::android::ConvertJavaStringToUTF8(env, value); |
| 90 if (delegate->original_language_code().compare(source_code) != 0) | 101 if (delegate->original_language_code().compare(source_code) != 0) |
| 91 delegate->UpdateOriginalLanguage(source_code); | 102 delegate->UpdateOriginalLanguage(source_code); |
| 92 } else if (option == TranslateUtils::OPTION_TARGET_CODE) { | 103 } else if (option == TranslateUtils::OPTION_TARGET_CODE) { |
| 93 std::string target_code = | 104 std::string target_code = |
| 94 base::android::ConvertJavaStringToUTF8(env, value); | 105 base::android::ConvertJavaStringToUTF8(env, value); |
| 95 if (delegate->target_language_code().compare(target_code) != 0) | 106 if (delegate->target_language_code().compare(target_code) != 0) |
| 96 delegate->UpdateTargetLanguage(target_code); | 107 delegate->UpdateTargetLanguage(target_code); |
| 97 } else { | 108 } else { |
| 98 DCHECK(false); | 109 DCHECK(false); |
| 99 } | 110 } |
| 100 } | 111 } |
| 101 | 112 |
| 102 void TranslateCompactInfoBar::ApplyBoolTranslateOption( | 113 void TranslateCompactInfoBar::ApplyBoolTranslateOption( |
| 103 JNIEnv* env, | 114 JNIEnv* env, |
| 104 const JavaParamRef<jobject>& obj, | 115 const JavaParamRef<jobject>& obj, |
| 105 int option, | 116 int option, |
| 106 jboolean value) { | 117 jboolean value) { |
| 107 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 118 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 108 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { | 119 if (option == TranslateUtils::OPTION_ALWAYS_TRANSLATE) { |
| 109 if (delegate->ShouldAlwaysTranslate() != value) | 120 if (delegate->ShouldAlwaysTranslate() != value) { |
| 110 delegate->ToggleAlwaysTranslate(); | 121 delegate->ToggleAlwaysTranslate(); |
| 122 snackbar_type_ = TranslateUtils::TYPE_ALWAYS_TRANSLATE; |
| 123 } |
| 111 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { | 124 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE) { |
| 112 if (value && delegate->IsTranslatableLanguageByPrefs()) | 125 if (value && delegate->IsTranslatableLanguageByPrefs()) { |
| 113 delegate->ToggleTranslatableLanguageByPrefs(); | 126 delegate->ToggleTranslatableLanguageByPrefs(); |
| 127 snackbar_type_ = TranslateUtils::TYPE_NEVER_TRANSLATE; |
| 128 } |
| 114 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { | 129 } else if (option == TranslateUtils::OPTION_NEVER_TRANSLATE_SITE) { |
| 115 if (value && !delegate->IsSiteBlacklisted()) | 130 if (value && !delegate->IsSiteBlacklisted()) { |
| 116 delegate->ToggleSiteBlacklist(); | 131 delegate->ToggleSiteBlacklist(); |
| 132 snackbar_type_ = TranslateUtils::TYPE_NEVER_TRANSLATE_SITE; |
| 133 } |
| 117 } else { | 134 } else { |
| 118 DCHECK(false); | 135 DCHECK(false); |
| 119 } | 136 } |
| 120 } | 137 } |
| 121 | 138 |
| 122 void TranslateCompactInfoBar::OnPageTranslated( | 139 void TranslateCompactInfoBar::OnPageTranslated( |
| 123 const std::string& original_lang, | 140 const std::string& original_lang, |
| 124 const std::string& translated_lang, | 141 const std::string& translated_lang, |
| 125 translate::TranslateErrors::Type error_type) { | 142 translate::TranslateErrors::Type error_type) { |
| 126 if (!owner()) | 143 if (!owner()) |
| 127 return; // We're closing; don't call anything, it might access the owner. | 144 return; // We're closing; don't call anything, it might access the owner. |
| 128 | 145 |
| 129 DCHECK(translate_driver_); | 146 DCHECK(translate_driver_); |
| 130 JNIEnv* env = base::android::AttachCurrentThread(); | 147 JNIEnv* env = base::android::AttachCurrentThread(); |
| 131 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), | 148 Java_TranslateCompactInfoBar_onPageTranslated(env, GetJavaInfoBar(), |
| 132 error_type); | 149 error_type); |
| 133 } | 150 } |
| 134 | 151 |
| 135 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { | 152 translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { |
| 136 return delegate()->AsTranslateInfoBarDelegate(); | 153 return delegate()->AsTranslateInfoBarDelegate(); |
| 137 } | 154 } |
| 138 | 155 |
| 139 // Native JNI methods --------------------------------------------------------- | 156 // Native JNI methods --------------------------------------------------------- |
| 140 | 157 |
| 141 // static | 158 // static |
| 142 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { | 159 bool RegisterTranslateCompactInfoBar(JNIEnv* env) { |
| 143 return RegisterNativesImpl(env); | 160 return RegisterNativesImpl(env); |
| 144 } | 161 } |
| OLD | NEW |