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

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwAutofillManagerDelegate.java

Issue 16212007: Implement the autofill UI for chromium powered android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue15097004
Patch Set: convert NOTREACHED to NOTIMPLEMENTED Created 7 years, 6 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: android_webview/java/src/org/chromium/android_webview/AwAutofillManagerDelegate.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwAutofillManagerDelegate.java b/android_webview/java/src/org/chromium/android_webview/AwAutofillManagerDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca0c5a608a144b39a86105928944480f026a1354
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/AwAutofillManagerDelegate.java
@@ -0,0 +1,123 @@
+// Copyright (c) 2013 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.
+
+package org.chromium.android_webview;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsoluteLayout;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+import org.chromium.content.browser.ContentViewCore;
+import org.chromium.ui.ViewAndroidDelegate;
+import org.chromium.ui.autofill.AutofillPopup;
+import org.chromium.ui.autofill.AutofillSuggestion;
+
+// Java counterpart to the AwAutofillManagerDelegate. This class is owned by
+// AwContents and has a weak reference from native side.
+@JNINamespace("android_webview")
+public class AwAutofillManagerDelegate {
+
+ private final int mNativeAwAutofillManagerDelegate;
+ private AutofillPopup mAutofillPopup;
+ private ViewGroup mContainerView;
+ private double mDIPScale;
+ private ContentViewCore mContentViewCore;
+
+ @CalledByNative
+ public static AwAutofillManagerDelegate create(int nativeDelegate) {
+ return new AwAutofillManagerDelegate(nativeDelegate);
+ }
+
+ private AwAutofillManagerDelegate(int nativeAwAutofillManagerDelegate) {
+ mNativeAwAutofillManagerDelegate = nativeAwAutofillManagerDelegate;
+ }
+
+ public void init(ContentViewCore contentViewCore, double DIPScale) {
+ mContentViewCore = contentViewCore;
+ mContainerView = contentViewCore.getContainerView();
+ mDIPScale = DIPScale;
+ }
+
+ @CalledByNative
+ private void showAutofillPopup(float x, float y, float width, float height,
+ AutofillSuggestion[] suggestions) {
+
+ if (mContentViewCore == null) return;
+
+ if (mAutofillPopup == null) {
+ mAutofillPopup = new AutofillPopup(
+ mContentViewCore.getContext(),
+ getViewAndroidDelegate(),
+ new AutofillPopup.AutofillPopupDelegate() {
+ public void requestHide() { }
+ public void suggestionSelected(int listIndex) {
+ nativeSuggestionSelected(mNativeAwAutofillManagerDelegate, listIndex);
+ }
+ });
+ }
+ mAutofillPopup.setAnchorRect(x, y, width, height);
+ mAutofillPopup.show(suggestions);
+ }
+
+ @CalledByNative
+ public void hideAutofillPopup() {
+ if (mAutofillPopup == null)
+ return;
+ mAutofillPopup.hide();
+ mAutofillPopup = null;
+ }
+
+ private ViewAndroidDelegate getViewAndroidDelegate() {
+ return new ViewAndroidDelegate() {
+ @Override
+ public View acquireAnchorView() {
+ View anchorView = new View(mContentViewCore.getContext());
+ mContainerView.addView(anchorView);
+ return anchorView;
+ }
+
+ @Override
+ public void setAnchorViewPosition(
+ View view, float x, float y, float width, float height) {
+ assert(view.getParent() == mContainerView);
+
+ int leftMargin = (int)Math.round(x * mDIPScale);
+ int topMargin = (int)mContentViewCore.getRenderCoordinates().getContentOffsetYPix()
+ + (int)Math.round(y * mDIPScale);
+
+ AbsoluteLayout.LayoutParams lp = new AbsoluteLayout.LayoutParams((int)width,
+ (int)height, leftMargin, topMargin);
+ view.setLayoutParams(lp);
+ }
+
+ @Override
+ public void releaseAnchorView(View anchorView) {
+ mContainerView.removeView(anchorView);
+ }
+ };
+ }
+
+ @CalledByNative
+ private static AutofillSuggestion[] createAutofillSuggestionArray(int size) {
+ return new AutofillSuggestion[size];
+ }
+
+ /**
+ * @param array AutofillSuggestion array that should get a new suggestion added.
+ * @param index Index in the array where to place a new suggestion.
+ * @param name Name of the suggestion.
+ * @param label Label of the suggestion.
+ * @param uniqueId Unique suggestion id.
+ */
+ @CalledByNative
+ private static void addToAutofillSuggestionArray(AutofillSuggestion[] array, int index,
+ String name, String label, int uniqueId) {
+ array[index] = new AutofillSuggestion(name, label, uniqueId);
+ }
+
+ private native void nativeSuggestionSelected(int nativeAwAutofillManagerDelegate, int position);
+}
« no previous file with comments | « android_webview/browser/aw_browser_context.h ('k') | android_webview/java/src/org/chromium/android_webview/AwContents.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698