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); |
+ } |
+} |