| Index: android_webview/java/src/org/chromium/android_webview/DummyAwAutofillManager.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/DummyAwAutofillManager.java b/android_webview/java/src/org/chromium/android_webview/DummyAwAutofillManager.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2bf03cad5c9ed95d676a12be4413a4959560bde6
|
| --- /dev/null
|
| +++ b/android_webview/java/src/org/chromium/android_webview/DummyAwAutofillManager.java
|
| @@ -0,0 +1,419 @@
|
| +package org.chromium.android_webview;
|
| +
|
| +import android.annotation.SuppressLint;
|
| +import android.content.Context;
|
| +import android.graphics.Matrix;
|
| +import android.graphics.Rect;
|
| +import android.os.Bundle;
|
| +import android.os.LocaleList;
|
| +import android.util.Pair;
|
| +import android.util.SparseArray;
|
| +import android.view.View;
|
| +import android.view.ViewStructure;
|
| +import android.view.autofill.AutofillValue;
|
| +
|
| +import org.chromium.base.Log;
|
| +import org.chromium.base.ThreadUtils;
|
| +
|
| +import java.util.ArrayList;
|
| +
|
| +@SuppressLint("NewApi") // Removed once SDK roll to O
|
| +public class DummyAwAutofillManager extends AwAutofillManager {
|
| +
|
| + private class DummyViewStructure extends ViewStructure {
|
| +
|
| + @Override
|
| + public void setAlpha(float alpha) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + }
|
| +
|
| + @Override
|
| + public void setAccessibilityFocused(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setCheckable(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setChecked(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setActivated(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public CharSequence getText() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + public int getTextSelectionStart() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return 0;
|
| + }
|
| +
|
| + @Override
|
| + public int getTextSelectionEnd() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return 0;
|
| + }
|
| +
|
| + @Override
|
| + public CharSequence getHint() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle getExtras() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + public boolean hasExtras() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return false;
|
| + }
|
| +
|
| + @Override
|
| + public int addChildCount(int num) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return 0;
|
| + }
|
| +
|
| + @Override
|
| + public int getChildCount() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return 0;
|
| + }
|
| +
|
| + @Override
|
| + public ViewStructure newChild(int index) {
|
| + DummyViewStructure child = new DummyViewStructure();
|
| + mChildren.add(child);
|
| +
|
| + return child;
|
| + }
|
| +
|
| + @Override
|
| + public ViewStructure asyncNewChild(int index) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + public void asyncCommit() {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setId(int id, String packageName, String typeName, String entryName) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setDimens(int left, int top, int scrollX, int scrollY, int width, int height) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setTransformation(Matrix matrix) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setElevation(float elevation) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setVisibility(int visibility) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setEnabled(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setClickable(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setLongClickable(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setContextClickable(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setFocusable(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setFocused(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setSelected(boolean state) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setClassName(String className) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setContentDescription(CharSequence contentDescription) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setText(CharSequence text) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setText(CharSequence text, int selectionStart, int selectionEnd) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setTextStyle(float size, int fgColor, int bgColor, int style) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setTextLines(int[] charOffsets, int[] baselines) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setHint(CharSequence hint) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setChildCount(int num) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setDataIsSensitive(boolean sensitive) {
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setAutofillOptions(String[] options) {
|
| + }
|
| +
|
| + private ArrayList<DummyViewStructure> mChildren = new ArrayList<DummyViewStructure>();
|
| + private AutofillValue mAutofillValue;
|
| + private int mAutoFillType;
|
| + private int mVirtualId;
|
| +
|
| + public ArrayList<DummyViewStructure> getChildren() {
|
| + return mChildren;
|
| + }
|
| +
|
| + public AutofillValue getAutofillValue() {
|
| + return mAutofillValue;
|
| + }
|
| +
|
| + public int getAutoFillType() {
|
| + return mAutoFillType;
|
| + }
|
| +
|
| + public int getVirtualId() {
|
| + return mVirtualId;
|
| + }
|
| +
|
| + @Override
|
| + public void setAutofillType(int arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + }
|
| +
|
| + @Override
|
| + public void setAutofillValue(AutofillValue autofillValue) {
|
| + mAutofillValue = autofillValue;
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setInputType(int arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setOpaque(boolean arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setUrl(String arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + }
|
| +
|
| + @Override
|
| + public void setAutofillHint(String[] arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| + }
|
| +
|
| + @Override
|
| + public void setAutofillId(ViewStructure arg0, int virtualId) {
|
| + mVirtualId = virtualId;
|
| + }
|
| +
|
| + @Override
|
| + public void setIdEntry(String arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| +
|
| + @Override
|
| + public void setLocaleList(LocaleList arg0) {
|
| + // TODO(michaelbai): Auto-generated method stub
|
| +
|
| + }
|
| + }
|
| +
|
| + private static final String TAG = "bt:-DummyAwAutofillManager";
|
| + private AwContents mAwContents;
|
| + private DummyViewStructure mViewStructure;
|
| + private boolean mFirstSuggestion;
|
| + private boolean mSecondSuggestion;
|
| +
|
| + /**
|
| + * @param context
|
| + */
|
| + public DummyAwAutofillManager(Context context, AwContents awContents) {
|
| + super(context);
|
| + mAwContents = awContents;
|
| + }
|
| +
|
| + @Override
|
| + public void notifyVirtualValueChanged(View parent, int childId, AutofillValue value) {
|
| + if (!mSecondSuggestion) {
|
| + mSecondSuggestion = true;
|
| + ThreadUtils.postOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + DummyAwAutofillManager.this.autoFillVirtual();
|
| + }
|
| + });
|
| + }
|
| + Log.d(TAG, "notifyVirtualValueChanged " + value.getTextValue());
|
| + }
|
| +
|
| + @Override
|
| + public void commit() {
|
| + reset();
|
| + Log.d(TAG, "commit ");
|
| + }
|
| +
|
| + @Override
|
| + public void notifyVirtualViewEntered(View parent, int childId, Rect bounds) {
|
| + if (!mFirstSuggestion) {
|
| + mFirstSuggestion = true;
|
| + ThreadUtils.postOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + DummyAwAutofillManager.this.onProvideVirtualStructure();
|
| + }
|
| + });
|
| + }
|
| + Log.d(TAG, "notifyVirtualViewEntered " + childId);
|
| + }
|
| +
|
| + @Override
|
| + public void notifyVirtualViewExited(View parent, int childId) {
|
| + Log.d(TAG, "notifyVirtualViewExited " + childId);
|
| + }
|
| +
|
| + @Override
|
| + public void cancel() {
|
| + reset();
|
| + Log.d(TAG, "cancel ");
|
| + }
|
| +
|
| + private void reset() {
|
| + mFirstSuggestion = false;
|
| + mSecondSuggestion = false;
|
| + }
|
| +
|
| + private void onProvideVirtualStructure() {
|
| + mViewStructure = new DummyViewStructure();
|
| + mAwContents.onProvideAutoFillVirtualStructure(mViewStructure, 0);
|
| +
|
| + ThreadUtils.postOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + DummyAwAutofillManager.this.autoFillVirtual();
|
| + }
|
| + });
|
| + }
|
| +
|
| + private void autoFillVirtual() {
|
| + final SparseArray<AutofillValue> values = new SparseArray<AutofillValue>();
|
| + for (DummyViewStructure child : mViewStructure.getChildren()) {
|
| + int id = child.getVirtualId();
|
| + String newValue = null;
|
| + String value = (String) child.getAutofillValue().getTextValue();
|
| + if (value.equalsIgnoreCase("name")) {
|
| + newValue = "WebView example";
|
| + } else if (value.equalsIgnoreCase("email")) {
|
| + newValue = "webview@android.com";
|
| + }
|
| + if (mSecondSuggestion) {
|
| + if (value.equalsIgnoreCase("phone")) {
|
| + newValue = "+1 650-650-0000";
|
| + }
|
| + }
|
| + values.put(id, AutofillValue.forText(newValue));
|
| + }
|
| + mAwContents.autofill(values);
|
| + }
|
| +}
|
|
|