| 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
|
|
|