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/window_android_helper.h" | 10 #include "chrome/browser/ui/android/window_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/suggestion.h" | 12 #include "components/autofill/core/browser/suggestion.h" |
13 #include "grit/components_strings.h" | 13 #include "grit/components_strings.h" |
14 #include "jni/AutofillKeyboardAccessoryBridge_jni.h" | 14 #include "jni/AutofillKeyboardAccessoryBridge_jni.h" |
15 #include "ui/android/view_android.h" | 15 #include "ui/android/view_android.h" |
16 #include "ui/android/window_android.h" | 16 #include "ui/android/window_android.h" |
17 #include "ui/base/l10n/l10n_util.h" | 17 #include "ui/base/l10n/l10n_util.h" |
18 #include "ui/base/resource/resource_bundle.h" | 18 #include "ui/base/resource/resource_bundle.h" |
19 #include "ui/gfx/geometry/rect.h" | 19 #include "ui/gfx/geometry/rect.h" |
20 | 20 |
21 namespace autofill { | 21 namespace autofill { |
22 | 22 |
23 AutofillKeyboardAccessoryView::AutofillKeyboardAccessoryView( | 23 AutofillKeyboardAccessoryView::AutofillKeyboardAccessoryView( |
24 AutofillPopupController* controller) | 24 AutofillPopupController* controller) |
25 : controller_(controller) { | 25 : controller_(controller), |
| 26 deleting_index_(-1) { |
26 JNIEnv* env = base::android::AttachCurrentThread(); | 27 JNIEnv* env = base::android::AttachCurrentThread(); |
27 java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(env)); | 28 java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(env)); |
28 } | 29 } |
29 | 30 |
30 AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() { | 31 AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() { |
31 JNIEnv* env = base::android::AttachCurrentThread(); | 32 JNIEnv* env = base::android::AttachCurrentThread(); |
32 Java_AutofillKeyboardAccessoryBridge_resetNativeViewPointer( | 33 Java_AutofillKeyboardAccessoryBridge_resetNativeViewPointer( |
33 env, java_object_.obj()); | 34 env, java_object_.obj()); |
34 } | 35 } |
35 | 36 |
(...skipping 23 matching lines...) Expand all Loading... |
59 count); | 60 count); |
60 | 61 |
61 for (size_t i = 0; i < count; ++i) { | 62 for (size_t i = 0; i < count; ++i) { |
62 const autofill::Suggestion& suggestion = controller_->GetSuggestionAt(i); | 63 const autofill::Suggestion& suggestion = controller_->GetSuggestionAt(i); |
63 int android_icon_id = 0; | 64 int android_icon_id = 0; |
64 if (!suggestion.icon.empty()) { | 65 if (!suggestion.icon.empty()) { |
65 android_icon_id = ResourceMapper::MapFromChromiumId( | 66 android_icon_id = ResourceMapper::MapFromChromiumId( |
66 controller_->GetIconResourceID(suggestion.icon)); | 67 controller_->GetIconResourceID(suggestion.icon)); |
67 } | 68 } |
68 | 69 |
| 70 bool deletable = |
| 71 controller_->GetRemovalConfirmationText(i, nullptr, nullptr); |
69 Java_AutofillKeyboardAccessoryBridge_addToAutofillSuggestionArray( | 72 Java_AutofillKeyboardAccessoryBridge_addToAutofillSuggestionArray( |
70 env, data_array.obj(), i, | 73 env, data_array.obj(), i, |
71 base::android::ConvertUTF16ToJavaString(env, suggestion.value).obj(), | 74 base::android::ConvertUTF16ToJavaString(env, suggestion.value).obj(), |
72 base::android::ConvertUTF16ToJavaString(env, suggestion.label).obj(), | 75 base::android::ConvertUTF16ToJavaString(env, suggestion.label).obj(), |
73 android_icon_id, suggestion.frontend_id); | 76 android_icon_id, suggestion.frontend_id, deletable); |
74 } | 77 } |
75 | 78 |
76 Java_AutofillKeyboardAccessoryBridge_show( | 79 Java_AutofillKeyboardAccessoryBridge_show( |
77 env, java_object_.obj(), data_array.obj(), controller_->IsRTL()); | 80 env, java_object_.obj(), data_array.obj(), controller_->IsRTL()); |
78 } | 81 } |
79 | 82 |
80 void AutofillKeyboardAccessoryView::SuggestionSelected(JNIEnv* env, | 83 void AutofillKeyboardAccessoryView::SuggestionSelected(JNIEnv* env, |
81 jobject obj, | 84 jobject obj, |
82 jint list_index) { | 85 jint list_index) { |
83 // Race: Hide() may have already run. | 86 // Race: Hide() may have already run. |
84 if (controller_) | 87 if (controller_) |
85 controller_->AcceptSuggestion(list_index); | 88 controller_->AcceptSuggestion(list_index); |
86 } | 89 } |
87 | 90 |
| 91 void AutofillKeyboardAccessoryView::DeletionRequested(JNIEnv* env, |
| 92 jobject obj, |
| 93 jint list_index) { |
| 94 if (!controller_) |
| 95 return; |
| 96 |
| 97 base::string16 confirmation_title, confirmation_body; |
| 98 if (!controller_->GetRemovalConfirmationText(list_index, &confirmation_title, |
| 99 &confirmation_body)) { |
| 100 return; |
| 101 } |
| 102 |
| 103 deleting_index_ = list_index; |
| 104 Java_AutofillKeyboardAccessoryBridge_confirmDeletion( |
| 105 env, java_object_.obj(), |
| 106 base::android::ConvertUTF16ToJavaString(env, confirmation_title).obj(), |
| 107 base::android::ConvertUTF16ToJavaString(env, confirmation_body).obj()); |
| 108 } |
| 109 |
| 110 void AutofillKeyboardAccessoryView::DeletionConfirmed(JNIEnv* env, |
| 111 jobject obj) { |
| 112 if (!controller_) |
| 113 return; |
| 114 |
| 115 CHECK_GE(deleting_index_, 0); |
| 116 controller_->RemoveSuggestion(deleting_index_); |
| 117 } |
| 118 |
88 void AutofillKeyboardAccessoryView::ViewDismissed(JNIEnv* env, jobject obj) { | 119 void AutofillKeyboardAccessoryView::ViewDismissed(JNIEnv* env, jobject obj) { |
89 if (controller_) | 120 if (controller_) |
90 controller_->ViewDestroyed(); | 121 controller_->ViewDestroyed(); |
91 | 122 |
92 delete this; | 123 delete this; |
93 } | 124 } |
94 | 125 |
95 void AutofillKeyboardAccessoryView::InvalidateRow(size_t) { | 126 void AutofillKeyboardAccessoryView::InvalidateRow(size_t) { |
96 } | 127 } |
97 | 128 |
98 // static | 129 // static |
99 bool AutofillKeyboardAccessoryView::RegisterAutofillKeyboardAccessoryView( | 130 bool AutofillKeyboardAccessoryView::RegisterAutofillKeyboardAccessoryView( |
100 JNIEnv* env) { | 131 JNIEnv* env) { |
101 return RegisterNativesImpl(env); | 132 return RegisterNativesImpl(env); |
102 } | 133 } |
103 | 134 |
104 } // namespace autofill | 135 } // namespace autofill |
OLD | NEW |