Chromium Code Reviews| 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..c589c7b87976d1099fe55a0f88f40fd884fd8add |
| --- /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 int mNativeAwAutofillManagerDelegate; |
|
bulach
2013/06/26 17:35:19
nit: final ?
sgurun-gerrit only
2013/06/26 23:48:46
Done.
|
| + 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); |
| +} |