Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3301)

Unified Diff: chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc

Issue 1082183002: Android - Introduce "keyboard accessory" for Autofill suggestions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..0c3d306c1c37e952399c2a1ea26c21e62665d56c
--- /dev/null
+++ b/chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.cc
@@ -0,0 +1,100 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
David Trainor- moved to gerrit 2015/04/20 23:29:43 2015?
Evan Stade 2015/04/21 00:48:51 Done.
+// 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) {
+}
+
+AutofillKeyboardAccessoryView::~AutofillKeyboardAccessoryView() {
David Trainor- moved to gerrit 2015/04/20 23:29:43 Should we be clearing Java's native pointer of thi
Evan Stade 2015/04/21 00:48:51 I copied this pattern from AutofillPopupBridge/Aut
David Trainor- moved to gerrit 2015/04/21 06:55:47 I might be misunderstanding the lifecycle of this
Evan Stade 2015/04/21 18:10:30 No, but if it comes from a pattern that's existed
David Trainor- moved to gerrit 2015/04/21 21:02:31 I don't think that's a valid argument for proving
Evan Stade 2015/04/23 01:21:09 Done. Thanks for explanation.
+}
+
+void AutofillKeyboardAccessoryView::Show() {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ui::ViewAndroid* view_android = controller_->container_view();
+ DCHECK(view_android);
+
+ java_object_.Reset(Java_AutofillKeyboardAccessoryBridge_create(
+ env, reinterpret_cast<intptr_t>(this),
+ view_android->GetWindowAndroid()->GetJavaObject().obj()));
+
+ UpdateBoundsAndRedrawPopup();
+}
+
+void AutofillKeyboardAccessoryView::Hide() {
+ controller_ = NULL;
David Trainor- moved to gerrit 2015/04/20 23:29:43 nullptr
Evan Stade 2015/04/21 00:48:51 Done.
+ 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

Powered by Google App Engine
This is Rietveld 408576698