| 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 "grit/generated_resources.h" | 12 #include "grit/generated_resources.h" |
| 13 #include "jni/TranslateInfoBarDelegate_jni.h" | 13 #include "jni/TranslateInfoBarDelegate_jni.h" |
| 14 #include "ui/base/l10n/l10n_util.h" | 14 #include "ui/base/l10n/l10n_util.h" |
| 15 | 15 |
| 16 // ChromeTranslateClient | 16 // ChromeTranslateClient |
| 17 // ---------------------------------------------------------- | 17 // ---------------------------------------------------------- |
| 18 | 18 |
| 19 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( | 19 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( |
| 20 scoped_ptr<TranslateInfoBarDelegate> delegate) const { | 20 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const { |
| 21 return scoped_ptr<infobars::InfoBar>(new TranslateInfoBar(delegate.Pass())); | 21 return scoped_ptr<infobars::InfoBar>(new TranslateInfoBar(delegate.Pass())); |
| 22 } | 22 } |
| 23 | 23 |
| 24 | 24 |
| 25 // TranslateInfoBar ----------------------------------------------------------- | 25 // TranslateInfoBar ----------------------------------------------------------- |
| 26 | 26 |
| 27 TranslateInfoBar::TranslateInfoBar( | 27 TranslateInfoBar::TranslateInfoBar( |
| 28 scoped_ptr<TranslateInfoBarDelegate> delegate) | 28 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) |
| 29 : InfoBarAndroid(delegate.PassAs<infobars::InfoBarDelegate>()), | 29 : InfoBarAndroid(delegate.PassAs<infobars::InfoBarDelegate>()), |
| 30 java_translate_delegate_() { | 30 java_translate_delegate_() { |
| 31 } | 31 } |
| 32 | 32 |
| 33 TranslateInfoBar::~TranslateInfoBar() { | 33 TranslateInfoBar::~TranslateInfoBar() { |
| 34 } | 34 } |
| 35 | 35 |
| 36 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { | 36 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { |
| 37 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env)); | 37 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env)); |
| 38 TranslateInfoBarDelegate* delegate = GetDelegate(); | 38 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 39 std::vector<base::string16> languages; | 39 std::vector<base::string16> languages; |
| 40 languages.reserve(delegate->num_languages()); | 40 languages.reserve(delegate->num_languages()); |
| 41 for (size_t i = 0; i < delegate->num_languages(); ++i) | 41 for (size_t i = 0; i < delegate->num_languages(); ++i) |
| 42 languages.push_back(delegate->language_name_at(i)); | 42 languages.push_back(delegate->language_name_at(i)); |
| 43 | 43 |
| 44 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = | 44 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = |
| 45 base::android::ToJavaArrayOfStrings(env, languages); | 45 base::android::ToJavaArrayOfStrings(env, languages); |
| 46 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( | 46 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( |
| 47 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), | 47 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), |
| 48 delegate->translate_step(), delegate->original_language_index(), | 48 delegate->translate_step(), delegate->original_language_index(), |
| 49 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), | 49 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), |
| 50 ShouldDisplayNeverTranslateInfoBarOnCancel(), | 50 ShouldDisplayNeverTranslateInfoBarOnCancel(), |
| 51 delegate->triggered_from_menu(), java_languages.obj()); | 51 delegate->triggered_from_menu(), java_languages.obj()); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void TranslateInfoBar::ProcessButton(int action, | 54 void TranslateInfoBar::ProcessButton(int action, |
| 55 const std::string& action_value) { | 55 const std::string& action_value) { |
| 56 if (!owner()) | 56 if (!owner()) |
| 57 return; // We're closing; don't call anything, it might access the owner. | 57 return; // We're closing; don't call anything, it might access the owner. |
| 58 | 58 |
| 59 TranslateInfoBarDelegate* delegate = GetDelegate(); | 59 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 60 if (action == InfoBarAndroid::ACTION_TRANSLATE) { | 60 if (action == InfoBarAndroid::ACTION_TRANSLATE) { |
| 61 delegate->Translate(); | 61 delegate->Translate(); |
| 62 return; | 62 return; |
| 63 } | 63 } |
| 64 | 64 |
| 65 if (action == InfoBarAndroid::ACTION_CANCEL) | 65 if (action == InfoBarAndroid::ACTION_CANCEL) |
| 66 delegate->TranslationDeclined(); | 66 delegate->TranslationDeclined(); |
| 67 else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) | 67 else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) |
| 68 delegate->RevertTranslation(); | 68 delegate->RevertTranslation(); |
| 69 else | 69 else |
| 70 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); | 70 DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); |
| 71 | 71 |
| 72 RemoveSelf(); | 72 RemoveSelf(); |
| 73 } | 73 } |
| 74 | 74 |
| 75 void TranslateInfoBar::PassJavaInfoBar(InfoBarAndroid* source) { | 75 void TranslateInfoBar::PassJavaInfoBar(InfoBarAndroid* source) { |
| 76 TranslateInfoBarDelegate* delegate = GetDelegate(); | 76 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 77 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 77 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
| 78 delegate->translate_step()); | 78 delegate->translate_step()); |
| 79 | 79 |
| 80 // Ask the former bar to transfer ownership to us. | 80 // Ask the former bar to transfer ownership to us. |
| 81 DCHECK(source != NULL); | 81 DCHECK(source != NULL); |
| 82 static_cast<TranslateInfoBar*>(source)->TransferOwnership( | 82 static_cast<TranslateInfoBar*>(source)->TransferOwnership( |
| 83 this, delegate->translate_step()); | 83 this, delegate->translate_step()); |
| 84 } | 84 } |
| 85 | 85 |
| 86 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, | 86 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, |
| 87 jobject obj, | 87 jobject obj, |
| 88 int source_language_index, | 88 int source_language_index, |
| 89 int target_language_index, | 89 int target_language_index, |
| 90 bool always_translate, | 90 bool always_translate, |
| 91 bool never_translate_language, | 91 bool never_translate_language, |
| 92 bool never_translate_site) { | 92 bool never_translate_site) { |
| 93 TranslateInfoBarDelegate* delegate = GetDelegate(); | 93 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 94 delegate->UpdateOriginalLanguageIndex(source_language_index); | 94 delegate->UpdateOriginalLanguageIndex(source_language_index); |
| 95 delegate->UpdateTargetLanguageIndex(target_language_index); | 95 delegate->UpdateTargetLanguageIndex(target_language_index); |
| 96 | 96 |
| 97 if (delegate->ShouldAlwaysTranslate() != always_translate) | 97 if (delegate->ShouldAlwaysTranslate() != always_translate) |
| 98 delegate->ToggleAlwaysTranslate(); | 98 delegate->ToggleAlwaysTranslate(); |
| 99 | 99 |
| 100 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) | 100 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) |
| 101 delegate->ToggleTranslatableLanguageByPrefs(); | 101 delegate->ToggleTranslatableLanguageByPrefs(); |
| 102 | 102 |
| 103 if (never_translate_site && !delegate->IsSiteBlacklisted()) | 103 if (never_translate_site && !delegate->IsSiteBlacklisted()) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 114 destination->SetJavaDelegate(java_translate_delegate_.Release()); | 114 destination->SetJavaDelegate(java_translate_delegate_.Release()); |
| 115 } | 115 } |
| 116 } | 116 } |
| 117 | 117 |
| 118 void TranslateInfoBar::SetJavaDelegate(jobject delegate) { | 118 void TranslateInfoBar::SetJavaDelegate(jobject delegate) { |
| 119 JNIEnv* env = base::android::AttachCurrentThread(); | 119 JNIEnv* env = base::android::AttachCurrentThread(); |
| 120 java_translate_delegate_.Reset(env, delegate); | 120 java_translate_delegate_.Reset(env, delegate); |
| 121 } | 121 } |
| 122 | 122 |
| 123 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { | 123 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { |
| 124 TranslateInfoBarDelegate* delegate = GetDelegate(); | 124 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 125 return (delegate->translate_step() == | 125 return (delegate->translate_step() == |
| 126 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && | 126 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && |
| 127 delegate->ShouldShowNeverTranslateShortcut(); | 127 delegate->ShouldShowNeverTranslateShortcut(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { | 130 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { |
| 131 return delegate()->AsTranslateInfoBarDelegate(); | 131 return delegate()->AsTranslateInfoBarDelegate(); |
| 132 } | 132 } |
| 133 | 133 |
| 134 | 134 |
| 135 // Native JNI methods --------------------------------------------------------- | 135 // Native JNI methods --------------------------------------------------------- |
| 136 | 136 |
| 137 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { | 137 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { |
| 138 return RegisterNativesImpl(env); | 138 return RegisterNativesImpl(env); |
| 139 } | 139 } |
| OLD | NEW |