| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_infobar.h" | 5 #include "chrome/browser/ui/android/infobars/translate_infobar.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
| 9 #include "base/android/jni_weak_ref.h" | 9 #include "base/android/jni_weak_ref.h" |
| 10 #include "chrome/browser/translate/chrome_translate_client.h" | 10 #include "chrome/browser/translate/chrome_translate_client.h" |
| 11 #include "components/translate/core/browser/translate_infobar_delegate.h" | 11 #include "components/translate/core/browser/translate_infobar_delegate.h" |
| 12 #include "jni/TranslateInfoBarDelegate_jni.h" | 12 #include "jni/TranslateInfoBar_jni.h" |
| 13 | 13 |
| 14 // ChromeTranslateClient | 14 // ChromeTranslateClient |
| 15 // ---------------------------------------------------------- | 15 // ---------------------------------------------------------- |
| 16 | 16 |
| 17 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( | 17 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( |
| 18 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const { | 18 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const { |
| 19 return make_scoped_ptr(new TranslateInfoBar(delegate.Pass())); | 19 return make_scoped_ptr(new TranslateInfoBar(delegate.Pass())); |
| 20 } | 20 } |
| 21 | 21 |
| 22 | 22 |
| 23 // TranslateInfoBar ----------------------------------------------------------- | 23 // TranslateInfoBar ----------------------------------------------------------- |
| 24 | 24 |
| 25 TranslateInfoBar::TranslateInfoBar( | 25 TranslateInfoBar::TranslateInfoBar( |
| 26 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) | 26 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) |
| 27 : InfoBarAndroid(delegate.Pass()), java_translate_delegate_() { | 27 : InfoBarAndroid(delegate.Pass()) { |
| 28 } | 28 } |
| 29 | 29 |
| 30 TranslateInfoBar::~TranslateInfoBar() { | 30 TranslateInfoBar::~TranslateInfoBar() { |
| 31 } | 31 } |
| 32 | 32 |
| 33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { | 33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { |
| 34 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env)); | |
| 35 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 34 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 36 std::vector<base::string16> languages; | 35 std::vector<base::string16> languages; |
| 37 languages.reserve(delegate->num_languages()); | 36 languages.reserve(delegate->num_languages()); |
| 38 for (size_t i = 0; i < delegate->num_languages(); ++i) | 37 for (size_t i = 0; i < delegate->num_languages(); ++i) |
| 39 languages.push_back(delegate->language_name_at(i)); | 38 languages.push_back(delegate->language_name_at(i)); |
| 40 | 39 |
| 41 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = | 40 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = |
| 42 base::android::ToJavaArrayOfStrings(env, languages); | 41 base::android::ToJavaArrayOfStrings(env, languages); |
| 43 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( | 42 return Java_TranslateInfoBar_show( |
| 44 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), | 43 env, delegate->translate_step(), delegate->original_language_index(), |
| 45 delegate->translate_step(), delegate->original_language_index(), | |
| 46 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), | 44 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), |
| 47 ShouldDisplayNeverTranslateInfoBarOnCancel(), | 45 ShouldDisplayNeverTranslateInfoBarOnCancel(), |
| 48 delegate->triggered_from_menu(), java_languages.obj()); | 46 delegate->triggered_from_menu(), java_languages.obj()); |
| 49 } | 47 } |
| 50 | 48 |
| 51 void TranslateInfoBar::ProcessButton(int action, | 49 void TranslateInfoBar::ProcessButton(int action, |
| 52 const std::string& action_value) { | 50 const std::string& action_value) { |
| 53 if (!owner()) | 51 if (!owner()) |
| 54 return; // We're closing; don't call anything, it might access the owner. | 52 return; // We're closing; don't call anything, it might access the owner. |
| 55 | 53 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 73 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 71 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 74 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 72 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
| 75 delegate->translate_step()); | 73 delegate->translate_step()); |
| 76 | 74 |
| 77 // Ask the former bar to transfer ownership to us. | 75 // Ask the former bar to transfer ownership to us. |
| 78 DCHECK(source != NULL); | 76 DCHECK(source != NULL); |
| 79 static_cast<TranslateInfoBar*>(source)->TransferOwnership( | 77 static_cast<TranslateInfoBar*>(source)->TransferOwnership( |
| 80 this, delegate->translate_step()); | 78 this, delegate->translate_step()); |
| 81 } | 79 } |
| 82 | 80 |
| 81 void TranslateInfoBar::SetJavaInfoBar( |
| 82 const base::android::JavaRef<jobject>& java_info_bar) { |
| 83 InfoBarAndroid::SetJavaInfoBar(java_info_bar); |
| 84 JNIEnv* env = base::android::AttachCurrentThread(); |
| 85 Java_TranslateInfoBar_setNativePtr(env, java_info_bar.obj(), |
| 86 reinterpret_cast<intptr_t>(this)); |
| 87 } |
| 88 |
| 83 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, | 89 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, |
| 84 jobject obj, | 90 jobject obj, |
| 85 int source_language_index, | 91 int source_language_index, |
| 86 int target_language_index, | 92 int target_language_index, |
| 87 bool always_translate, | 93 bool always_translate, |
| 88 bool never_translate_language, | 94 bool never_translate_language, |
| 89 bool never_translate_site) { | 95 bool never_translate_site) { |
| 90 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 96 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 91 delegate->UpdateOriginalLanguageIndex(source_language_index); | 97 delegate->UpdateOriginalLanguageIndex(source_language_index); |
| 92 delegate->UpdateTargetLanguageIndex(target_language_index); | 98 delegate->UpdateTargetLanguageIndex(target_language_index); |
| 93 | 99 |
| 94 if (delegate->ShouldAlwaysTranslate() != always_translate) | 100 if (delegate->ShouldAlwaysTranslate() != always_translate) |
| 95 delegate->ToggleAlwaysTranslate(); | 101 delegate->ToggleAlwaysTranslate(); |
| 96 | 102 |
| 97 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) | 103 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) |
| 98 delegate->ToggleTranslatableLanguageByPrefs(); | 104 delegate->ToggleTranslatableLanguageByPrefs(); |
| 99 | 105 |
| 100 if (never_translate_site && !delegate->IsSiteBlacklisted()) | 106 if (never_translate_site && !delegate->IsSiteBlacklisted()) |
| 101 delegate->ToggleSiteBlacklist(); | 107 delegate->ToggleSiteBlacklist(); |
| 102 } | 108 } |
| 103 | 109 |
| 104 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, | 110 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, |
| 105 translate::TranslateStep new_type) { | 111 translate::TranslateStep new_type) { |
| 106 JNIEnv* env = base::android::AttachCurrentThread(); | 112 JNIEnv* env = base::android::AttachCurrentThread(); |
| 107 if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer( | 113 Java_TranslateInfoBar_changeTranslateInfoBarType(env, GetJavaInfoBar(), |
| 108 env, java_translate_delegate_.obj(), | 114 new_type); |
| 109 reinterpret_cast<intptr_t>(destination), new_type)) { | 115 ReassignJavaInfoBar(destination); |
| 110 ReassignJavaInfoBar(destination); | |
| 111 destination->SetJavaDelegate(java_translate_delegate_.Release()); | |
| 112 } | |
| 113 } | |
| 114 | |
| 115 void TranslateInfoBar::SetJavaDelegate(jobject delegate) { | |
| 116 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 117 java_translate_delegate_.Reset(env, delegate); | |
| 118 } | 116 } |
| 119 | 117 |
| 120 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { | 118 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { |
| 121 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 119 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 122 return (delegate->translate_step() == | 120 return (delegate->translate_step() == |
| 123 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && | 121 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && |
| 124 delegate->ShouldShowNeverTranslateShortcut(); | 122 delegate->ShouldShowNeverTranslateShortcut(); |
| 125 } | 123 } |
| 126 | 124 |
| 127 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { | 125 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { |
| 128 return delegate()->AsTranslateInfoBarDelegate(); | 126 return delegate()->AsTranslateInfoBarDelegate(); |
| 129 } | 127 } |
| 130 | 128 |
| 131 | 129 |
| 132 // Native JNI methods --------------------------------------------------------- | 130 // Native JNI methods --------------------------------------------------------- |
| 133 | 131 |
| 134 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { | 132 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { |
| 135 return RegisterNativesImpl(env); | 133 return RegisterNativesImpl(env); |
| 136 } | 134 } |
| OLD | NEW |