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 if (java_info_bar()) { | |
David Trainor- moved to gerrit
2015/06/03 19:38:46
Just override onNativeDestroyed() in java?
Changwan Ryu
2015/06/04 01:42:27
Done.
| |
32 JNIEnv* env = base::android::AttachCurrentThread(); | |
33 Java_TranslateInfoBar_onNativeDestroyed(env, java_info_bar()); | |
34 } | |
31 } | 35 } |
32 | 36 |
33 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { | 37 ScopedJavaLocalRef<jobject> TranslateInfoBar::CreateRenderInfoBar(JNIEnv* env) { |
34 java_translate_delegate_.Reset(Java_TranslateInfoBarDelegate_create(env)); | |
35 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 38 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
36 std::vector<base::string16> languages; | 39 std::vector<base::string16> languages; |
37 languages.reserve(delegate->num_languages()); | 40 languages.reserve(delegate->num_languages()); |
38 for (size_t i = 0; i < delegate->num_languages(); ++i) | 41 for (size_t i = 0; i < delegate->num_languages(); ++i) |
39 languages.push_back(delegate->language_name_at(i)); | 42 languages.push_back(delegate->language_name_at(i)); |
40 | 43 |
41 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = | 44 base::android::ScopedJavaLocalRef<jobjectArray> java_languages = |
42 base::android::ToJavaArrayOfStrings(env, languages); | 45 base::android::ToJavaArrayOfStrings(env, languages); |
43 return Java_TranslateInfoBarDelegate_showTranslateInfoBar( | 46 return Java_TranslateInfoBar_show( |
44 env, java_translate_delegate_.obj(), reinterpret_cast<intptr_t>(this), | 47 env, delegate->translate_step(), |
45 delegate->translate_step(), delegate->original_language_index(), | 48 delegate->original_language_index(), delegate->target_language_index(), |
46 delegate->target_language_index(), delegate->ShouldAlwaysTranslate(), | 49 delegate->ShouldAlwaysTranslate(), |
47 ShouldDisplayNeverTranslateInfoBarOnCancel(), | 50 ShouldDisplayNeverTranslateInfoBarOnCancel(), |
48 delegate->triggered_from_menu(), java_languages.obj()); | 51 delegate->triggered_from_menu(), java_languages.obj()); |
49 } | 52 } |
50 | 53 |
51 void TranslateInfoBar::ProcessButton(int action, | 54 void TranslateInfoBar::ProcessButton(int action, |
52 const std::string& action_value) { | 55 const std::string& action_value) { |
53 if (!owner()) | 56 if (!owner()) |
54 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. |
55 | 58 |
56 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 59 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
(...skipping 16 matching lines...) Expand all Loading... | |
73 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 76 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
74 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 77 DCHECK_NE(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
75 delegate->translate_step()); | 78 delegate->translate_step()); |
76 | 79 |
77 // Ask the former bar to transfer ownership to us. | 80 // Ask the former bar to transfer ownership to us. |
78 DCHECK(source != NULL); | 81 DCHECK(source != NULL); |
79 static_cast<TranslateInfoBar*>(source)->TransferOwnership( | 82 static_cast<TranslateInfoBar*>(source)->TransferOwnership( |
80 this, delegate->translate_step()); | 83 this, delegate->translate_step()); |
81 } | 84 } |
82 | 85 |
86 void TranslateInfoBar::SetJavaInfoBar( | |
87 const base::android::JavaRef<jobject>& java_info_bar) { | |
88 InfoBarAndroid::SetJavaInfoBar(java_info_bar); | |
89 JNIEnv* env = base::android::AttachCurrentThread(); | |
90 Java_TranslateInfoBar_setNativePtr(env, java_info_bar.obj(), | |
91 reinterpret_cast<intptr_t>(this)); | |
92 } | |
93 | |
83 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, | 94 void TranslateInfoBar::ApplyTranslateOptions(JNIEnv* env, |
84 jobject obj, | 95 jobject obj, |
85 int source_language_index, | 96 int source_language_index, |
86 int target_language_index, | 97 int target_language_index, |
87 bool always_translate, | 98 bool always_translate, |
88 bool never_translate_language, | 99 bool never_translate_language, |
89 bool never_translate_site) { | 100 bool never_translate_site) { |
90 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 101 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
91 delegate->UpdateOriginalLanguageIndex(source_language_index); | 102 delegate->UpdateOriginalLanguageIndex(source_language_index); |
92 delegate->UpdateTargetLanguageIndex(target_language_index); | 103 delegate->UpdateTargetLanguageIndex(target_language_index); |
93 | 104 |
94 if (delegate->ShouldAlwaysTranslate() != always_translate) | 105 if (delegate->ShouldAlwaysTranslate() != always_translate) |
95 delegate->ToggleAlwaysTranslate(); | 106 delegate->ToggleAlwaysTranslate(); |
96 | 107 |
97 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) | 108 if (never_translate_language && delegate->IsTranslatableLanguageByPrefs()) |
98 delegate->ToggleTranslatableLanguageByPrefs(); | 109 delegate->ToggleTranslatableLanguageByPrefs(); |
99 | 110 |
100 if (never_translate_site && !delegate->IsSiteBlacklisted()) | 111 if (never_translate_site && !delegate->IsSiteBlacklisted()) |
101 delegate->ToggleSiteBlacklist(); | 112 delegate->ToggleSiteBlacklist(); |
102 } | 113 } |
103 | 114 |
104 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, | 115 void TranslateInfoBar::TransferOwnership(TranslateInfoBar* destination, |
105 translate::TranslateStep new_type) { | 116 translate::TranslateStep new_type) { |
106 JNIEnv* env = base::android::AttachCurrentThread(); | 117 JNIEnv* env = base::android::AttachCurrentThread(); |
107 if (Java_TranslateInfoBarDelegate_changeTranslateInfoBarTypeAndPointer( | 118 Java_TranslateInfoBar_changeTranslateInfoBarType(env, java_info_bar(), |
108 env, java_translate_delegate_.obj(), | 119 new_type); |
109 reinterpret_cast<intptr_t>(destination), new_type)) { | 120 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 } | 121 } |
119 | 122 |
120 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { | 123 bool TranslateInfoBar::ShouldDisplayNeverTranslateInfoBarOnCancel() { |
121 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); | 124 translate::TranslateInfoBarDelegate* delegate = GetDelegate(); |
122 return (delegate->translate_step() == | 125 return (delegate->translate_step() == |
123 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && | 126 translate::TRANSLATE_STEP_BEFORE_TRANSLATE) && |
124 delegate->ShouldShowNeverTranslateShortcut(); | 127 delegate->ShouldShowNeverTranslateShortcut(); |
125 } | 128 } |
126 | 129 |
127 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { | 130 translate::TranslateInfoBarDelegate* TranslateInfoBar::GetDelegate() { |
128 return delegate()->AsTranslateInfoBarDelegate(); | 131 return delegate()->AsTranslateInfoBarDelegate(); |
129 } | 132 } |
130 | 133 |
131 | 134 |
132 // Native JNI methods --------------------------------------------------------- | 135 // Native JNI methods --------------------------------------------------------- |
133 | 136 |
134 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { | 137 bool RegisterTranslateInfoBarDelegate(JNIEnv* env) { |
135 return RegisterNativesImpl(env); | 138 return RegisterNativesImpl(env); |
136 } | 139 } |
OLD | NEW |