Index: chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc |
diff --git a/chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc b/chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cc18308b85d22e0b6bf9b08278e205c37f3e06ba |
--- /dev/null |
+++ b/chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc |
@@ -0,0 +1,105 @@ |
+// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.h" |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/jni_string.h" |
+#include "chrome/browser/android/resource_mapper.h" |
+#include "chrome/browser/ui/android/window_android_helper.h" |
+#include "chrome/browser/ui/autofill/autofill_popup_controller.h" |
+#include "components/autofill/core/browser/suggestion.h" |
+#include "jni/AutofillKeyboardAccessoryBridge_jni.h" |
+#include "ui/android/view_android.h" |
+#include "ui/android/window_android.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/gfx/geometry/rect.h" |
+ |
+namespace autofill { |
+ |
+AutofillKeyboardAccessoryView::AutofillKeyboardAccessoryView( |
+ AutofillPopupController* controller) |
+ : controller_(controller) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(env)); |
+} |
+ |
+AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_AutofillKeyboardAccessoryBridge_resetNativeViewPointer( |
+ env, java_object_.obj()); |
+} |
+ |
+void AutofillKeyboardAccessoryView::Show() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ ui::ViewAndroid* view_android = controller_->container_view(); |
+ DCHECK(view_android); |
+ Java_AutofillKeyboardAccessoryBridge_init( |
+ env, java_object_.obj(), |
+ reinterpret_cast<intptr_t>(this), |
+ view_android->GetWindowAndroid()->GetJavaObject().obj()); |
+ |
+ UpdateBoundsAndRedrawPopup(); |
+} |
+ |
+void AutofillKeyboardAccessoryView::Hide() { |
+ controller_ = nullptr; |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_AutofillKeyboardAccessoryBridge_dismiss(env, java_object_.obj()); |
+} |
+ |
+void AutofillKeyboardAccessoryView::UpdateBoundsAndRedrawPopup() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ size_t count = controller_->GetLineCount(); |
+ ScopedJavaLocalRef<jobjectArray> data_array = |
+ Java_AutofillKeyboardAccessoryBridge_createAutofillSuggestionArray(env, |
+ count); |
+ |
+ for (size_t i = 0; i < count; ++i) { |
+ ScopedJavaLocalRef<jstring> value = base::android::ConvertUTF16ToJavaString( |
+ env, controller_->GetElidedValueAt(i)); |
+ ScopedJavaLocalRef<jstring> label = base::android::ConvertUTF16ToJavaString( |
+ env, controller_->GetElidedLabelAt(i)); |
+ int android_icon_id = 0; |
+ |
+ const autofill::Suggestion& suggestion = controller_->GetSuggestionAt(i); |
+ if (!suggestion.icon.empty()) { |
+ android_icon_id = ResourceMapper::MapFromChromiumId( |
+ controller_->GetIconResourceID(suggestion.icon)); |
+ } |
+ |
+ Java_AutofillKeyboardAccessoryBridge_addToAutofillSuggestionArray( |
+ env, data_array.obj(), i, value.obj(), label.obj(), android_icon_id, |
+ suggestion.frontend_id); |
+ } |
+ |
+ Java_AutofillKeyboardAccessoryBridge_show( |
+ env, java_object_.obj(), data_array.obj(), controller_->IsRTL()); |
+} |
+ |
+void AutofillKeyboardAccessoryView::SuggestionSelected(JNIEnv* env, |
+ jobject obj, |
+ jint list_index) { |
+ // Race: Hide() may have already run. |
+ if (controller_) |
+ controller_->AcceptSuggestion(list_index); |
+} |
+ |
+void AutofillKeyboardAccessoryView::ViewDismissed(JNIEnv* env, jobject obj) { |
+ if (controller_) |
+ controller_->ViewDestroyed(); |
+ |
+ delete this; |
+} |
+ |
+void AutofillKeyboardAccessoryView::InvalidateRow(size_t) { |
+} |
+ |
+// static |
+bool AutofillKeyboardAccessoryView::RegisterAutofillKeyboardAccessoryView( |
+ JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
+} // namespace autofill |