OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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/autofill/autofill_keyboard_accessory_view.h" | 5 #include "chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "chrome/browser/android/resource_mapper.h" | 9 #include "chrome/browser/android/resource_mapper.h" |
10 #include "chrome/browser/ui/android/view_android_helper.h" | 10 #include "chrome/browser/ui/android/view_android_helper.h" |
11 #include "chrome/browser/ui/autofill/autofill_popup_controller.h" | 11 #include "chrome/browser/ui/autofill/autofill_popup_controller.h" |
12 #include "components/autofill/core/browser/popup_item_ids.h" | 12 #include "components/autofill/core/browser/popup_item_ids.h" |
13 #include "components/autofill/core/browser/suggestion.h" | 13 #include "components/autofill/core/browser/suggestion.h" |
14 #include "grit/components_strings.h" | 14 #include "grit/components_strings.h" |
15 #include "jni/AutofillKeyboardAccessoryBridge_jni.h" | 15 #include "jni/AutofillKeyboardAccessoryBridge_jni.h" |
16 #include "ui/android/view_android.h" | 16 #include "ui/android/view_android.h" |
17 #include "ui/android/window_android.h" | 17 #include "ui/android/window_android.h" |
18 #include "ui/base/l10n/l10n_util.h" | 18 #include "ui/base/l10n/l10n_util.h" |
19 #include "ui/base/resource/resource_bundle.h" | 19 #include "ui/base/resource/resource_bundle.h" |
20 #include "ui/gfx/geometry/rect.h" | 20 #include "ui/gfx/geometry/rect.h" |
21 | 21 |
22 namespace autofill { | 22 namespace autofill { |
23 | 23 |
24 namespace { | 24 namespace { |
25 | 25 |
26 void AddToJavaArray(const Suggestion& suggestion, | 26 void AddToJavaArray(const Suggestion& suggestion, |
27 const AutofillPopupController& controller, | 27 int icon_id, |
28 JNIEnv* env, | 28 JNIEnv* env, |
29 jobjectArray data_array, | 29 jobjectArray data_array, |
30 size_t position, | 30 size_t position, |
31 bool deletable) { | 31 bool deletable) { |
32 int android_icon_id = 0; | 32 int android_icon_id = 0; |
33 if (!suggestion.icon.empty()) { | 33 if (!suggestion.icon.empty()) |
34 android_icon_id = ResourceMapper::MapFromChromiumId( | 34 android_icon_id = ResourceMapper::MapFromChromiumId(icon_id); |
35 controller.GetIconResourceID(suggestion.icon)); | |
36 } | |
37 | 35 |
38 Java_AutofillKeyboardAccessoryBridge_addToAutofillSuggestionArray( | 36 Java_AutofillKeyboardAccessoryBridge_addToAutofillSuggestionArray( |
39 env, data_array, position, | 37 env, data_array, position, |
40 base::android::ConvertUTF16ToJavaString(env, suggestion.value).obj(), | 38 base::android::ConvertUTF16ToJavaString(env, suggestion.value).obj(), |
41 base::android::ConvertUTF16ToJavaString(env, suggestion.label).obj(), | 39 base::android::ConvertUTF16ToJavaString(env, suggestion.label).obj(), |
42 android_icon_id, suggestion.frontend_id, deletable); | 40 android_icon_id, suggestion.frontend_id, deletable); |
43 } | 41 } |
44 | 42 |
45 } // namespace | 43 } // namespace |
46 | 44 |
47 AutofillKeyboardAccessoryView::AutofillKeyboardAccessoryView( | 45 AutofillKeyboardAccessoryView::AutofillKeyboardAccessoryView( |
48 AutofillPopupController* controller) | 46 AutofillPopupController* controller) |
49 : controller_(controller), | 47 : view_helper_(controller), controller_(controller), deleting_index_(-1) { |
50 deleting_index_(-1) { | |
51 JNIEnv* env = base::android::AttachCurrentThread(); | 48 JNIEnv* env = base::android::AttachCurrentThread(); |
52 java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(env)); | 49 java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(env)); |
53 } | 50 } |
54 | 51 |
55 AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() { | 52 AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() { |
56 JNIEnv* env = base::android::AttachCurrentThread(); | 53 JNIEnv* env = base::android::AttachCurrentThread(); |
57 Java_AutofillKeyboardAccessoryBridge_resetNativeViewPointer( | 54 Java_AutofillKeyboardAccessoryBridge_resetNativeViewPointer( |
58 env, java_object_.obj()); | 55 env, java_object_.obj()); |
59 } | 56 } |
60 | 57 |
(...skipping 21 matching lines...) Expand all Loading... |
82 ScopedJavaLocalRef<jobjectArray> data_array = | 79 ScopedJavaLocalRef<jobjectArray> data_array = |
83 Java_AutofillKeyboardAccessoryBridge_createAutofillSuggestionArray(env, | 80 Java_AutofillKeyboardAccessoryBridge_createAutofillSuggestionArray(env, |
84 count); | 81 count); |
85 positions_.resize(count); | 82 positions_.resize(count); |
86 size_t position = 0; | 83 size_t position = 0; |
87 | 84 |
88 // Place "CLEAR FORM" item first in the list. | 85 // Place "CLEAR FORM" item first in the list. |
89 for (size_t i = 0; i < count; ++i) { | 86 for (size_t i = 0; i < count; ++i) { |
90 const Suggestion& suggestion = controller_->GetSuggestionAt(i); | 87 const Suggestion& suggestion = controller_->GetSuggestionAt(i); |
91 if (suggestion.frontend_id == POPUP_ITEM_ID_CLEAR_FORM) { | 88 if (suggestion.frontend_id == POPUP_ITEM_ID_CLEAR_FORM) { |
92 AddToJavaArray(suggestion, *controller_, env, data_array.obj(), position, | 89 AddToJavaArray(suggestion, |
93 false); | 90 view_helper_.GetIconResourceID(suggestion.icon), env, |
| 91 data_array.obj(), position, false); |
94 positions_[position++] = i; | 92 positions_[position++] = i; |
95 } | 93 } |
96 } | 94 } |
97 | 95 |
98 for (size_t i = 0; i < count; ++i) { | 96 for (size_t i = 0; i < count; ++i) { |
99 const Suggestion& suggestion = controller_->GetSuggestionAt(i); | 97 const Suggestion& suggestion = controller_->GetSuggestionAt(i); |
100 if (suggestion.frontend_id != POPUP_ITEM_ID_CLEAR_FORM) { | 98 if (suggestion.frontend_id != POPUP_ITEM_ID_CLEAR_FORM) { |
101 bool deletable = | 99 bool deletable = |
102 controller_->GetRemovalConfirmationText(i, nullptr, nullptr); | 100 controller_->GetRemovalConfirmationText(i, nullptr, nullptr); |
103 AddToJavaArray(suggestion, *controller_, env, data_array.obj(), position, | 101 AddToJavaArray(suggestion, |
104 deletable); | 102 view_helper_.GetIconResourceID(suggestion.icon), env, |
| 103 data_array.obj(), position, deletable); |
105 positions_[position++] = i; | 104 positions_[position++] = i; |
106 } | 105 } |
107 } | 106 } |
108 | 107 |
109 Java_AutofillKeyboardAccessoryBridge_show( | 108 Java_AutofillKeyboardAccessoryBridge_show( |
110 env, java_object_.obj(), data_array.obj(), controller_->IsRTL()); | 109 env, java_object_.obj(), data_array.obj(), controller_->IsRTL()); |
111 } | 110 } |
112 | 111 |
| 112 int AutofillKeyboardAccessoryView::LineFromY(int y) { |
| 113 return view_helper_.LineFromY(y); |
| 114 } |
| 115 |
| 116 gfx::Rect AutofillKeyboardAccessoryView::GetPopupBounds() { |
| 117 return view_helper_.popup_bounds(); |
| 118 } |
| 119 |
113 void AutofillKeyboardAccessoryView::SuggestionSelected( | 120 void AutofillKeyboardAccessoryView::SuggestionSelected( |
114 JNIEnv* env, | 121 JNIEnv* env, |
115 const JavaParamRef<jobject>& obj, | 122 const JavaParamRef<jobject>& obj, |
116 jint list_index) { | 123 jint list_index) { |
117 // Race: Hide() may have already run. | 124 // Race: Hide() may have already run. |
118 if (controller_) | 125 if (controller_) |
119 controller_->AcceptSuggestion(positions_[list_index]); | 126 controller_->AcceptSuggestion(positions_[list_index]); |
120 } | 127 } |
121 | 128 |
122 void AutofillKeyboardAccessoryView::DeletionRequested( | 129 void AutofillKeyboardAccessoryView::DeletionRequested( |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 void AutofillKeyboardAccessoryView::InvalidateRow(size_t) { | 168 void AutofillKeyboardAccessoryView::InvalidateRow(size_t) { |
162 } | 169 } |
163 | 170 |
164 // static | 171 // static |
165 bool AutofillKeyboardAccessoryView::RegisterAutofillKeyboardAccessoryView( | 172 bool AutofillKeyboardAccessoryView::RegisterAutofillKeyboardAccessoryView( |
166 JNIEnv* env) { | 173 JNIEnv* env) { |
167 return RegisterNativesImpl(env); | 174 return RegisterNativesImpl(env); |
168 } | 175 } |
169 | 176 |
170 } // namespace autofill | 177 } // namespace autofill |
OLD | NEW |