Loading Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,7 @@ LOCAL_SRC_FILES += \ core/java/android/os/storage/IObbActionListener.aidl \ core/java/android/security/IKeystoreService.aidl \ core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl \ core/java/android/service/autofill/IAutoFillCallback.aidl \ core/java/android/service/autofill/IAutoFillManagerService.aidl \ core/java/android/service/autofill/IAutoFillService.aidl \ core/java/android/service/carrier/ICarrierService.aidl \ Loading api/current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6266,6 +6266,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -34642,13 +34643,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier { api/system-current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6457,6 +6457,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -37435,13 +37436,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier { api/test-current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6282,6 +6282,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -34732,13 +34733,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier { core/java/android/app/Activity.java +65 −6 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.hardware.input.InputManager; import android.media.AudioManager; import android.media.session.MediaController; import android.net.Uri; Loading @@ -70,6 +69,9 @@ import android.os.ServiceManager.ServiceNotFoundException; import android.os.StrictMode; import android.os.SystemProperties; import android.os.UserHandle; import android.service.autofill.FillableInputField; import android.service.autofill.AutoFillService; import android.service.autofill.IAutoFillCallback; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; Loading @@ -90,8 +92,6 @@ import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextThemeWrapper; import android.view.DragAndDropPermissions; import android.view.DragEvent; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.KeyboardShortcutGroup; import android.view.KeyboardShortcutInfo; Loading @@ -113,9 +113,11 @@ import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityEvent; import android.widget.AdapterView; import android.widget.EditText; import android.widget.Toast; import android.widget.Toolbar; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.ToolbarActionBar; import com.android.internal.app.WindowDecorActionBar; Loading Loading @@ -802,11 +804,13 @@ public class Activity extends ContextThemeWrapper private boolean mReleased; private boolean mUpdated; } private final ArrayList<ManagedCursor> mManagedCursors = new ArrayList<ManagedCursor>(); // protected by synchronized (this) @GuardedBy("mManagedCursors") private final ArrayList<ManagedCursor> mManagedCursors = new ArrayList<>(); @GuardedBy("this") int mResultCode = RESULT_CANCELED; @GuardedBy("this") Intent mResultData = null; private TranslucentConversionListener mTranslucentCallback; Loading Loading @@ -837,6 +841,9 @@ public class Activity extends ContextThemeWrapper private boolean mHasCurrentPermissionsRequest; private boolean mEatKeyUpEvent; @GuardedBy("this") private IAutoFillCallback mAutoFillCallback; private static native String getDlWarning(); /** Return the intent that started this activity. */ Loading Loading @@ -1687,6 +1694,53 @@ public class Activity extends ContextThemeWrapper public void onProvideAssistContent(AssistContent outContent) { } /** * Lazily gets the {@code IAutoFillCallback} for this activitity. * * <p>This callback is used by the {@link AutoFillService} app to auto-fill the activity fields. */ IAutoFillCallback getAutoFillCallback() { synchronized (this) { if (mAutoFillCallback == null) { mAutoFillCallback = new IAutoFillCallback.Stub() { @Override public void autofill(@SuppressWarnings("rawtypes") List fields) throws RemoteException { runOnUiThread(() -> { final View root = getWindow().getDecorView().getRootView(); for (Object field : fields) { if (!(field instanceof FillableInputField)) { Slog.w(TAG, "autofill(): invalid type " + field.getClass()); continue; } FillableInputField autoFillField = (FillableInputField) field; final int viewId = autoFillField.getId(); final View view = root.findViewByAccessibilityIdTraversal(viewId); // TODO: should handle other types of view as well, but that will // require: // - a new interface like AutoFillable // - a way for the views to define the type of the autofield value if ((view instanceof EditText)) { ((EditText) view).setText(autoFillField.getValue()); } } }); } @Override public void showError(String message) { runOnUiThread(() -> { // TODO: temporary show a toast until it uses the Snack bar. Toast.makeText(Activity.this, "Auto-fill request failed: " + message, Toast.LENGTH_LONG).show(); }); } }; } } return mAutoFillCallback; } /** * Request the Keyboard Shortcuts screen to show up. This will trigger * {@link #onProvideKeyboardShortcuts} to retrieve the shortcuts for the foreground activity. Loading Loading @@ -5974,6 +6028,11 @@ public class Activity extends ContextThemeWrapper getWindow().peekDecorView().getViewRootImpl().dump(prefix, fd, writer, args); } if (mAutoFillCallback != null) { writer.print(prefix); writer.print("mAutoFillCallback: " ); writer.println(mAutoFillCallback); } mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix); } Loading Loading
Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,7 @@ LOCAL_SRC_FILES += \ core/java/android/os/storage/IObbActionListener.aidl \ core/java/android/security/IKeystoreService.aidl \ core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl \ core/java/android/service/autofill/IAutoFillCallback.aidl \ core/java/android/service/autofill/IAutoFillManagerService.aidl \ core/java/android/service/autofill/IAutoFillService.aidl \ core/java/android/service/carrier/ICarrierService.aidl \ Loading
api/current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6266,6 +6266,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -34642,13 +34643,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier {
api/system-current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6457,6 +6457,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -37435,13 +37436,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier {
api/test-current.txt +16 −2 Original line number Diff line number Diff line Loading @@ -6282,6 +6282,7 @@ package android.app.assist { public static class AssistStructure.ViewNode { method public float getAlpha(); method public int getAutoFillId(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); Loading Loading @@ -34732,13 +34733,26 @@ package android.service.autofill { public abstract class AutoFillService extends android.app.Service { ctor public AutoFillService(); method public final android.os.IBinder onBind(android.content.Intent); method public void onNewSession(java.lang.String, android.os.Bundle, int, android.app.assist.AssistStructure); method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback); method public void onReady(); method public void onSessionFinished(java.lang.String); method public void onShutdown(); field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService"; } public final class FillCallback { method public void onFailure(java.lang.CharSequence); method public void onSuccess(android.service.autofill.FillCallback.FillData); } public static final class FillCallback.FillData { } public static class FillCallback.FillData.Builder { ctor public FillCallback.FillData.Builder(); method public android.service.autofill.FillCallback.FillData build(); method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String); } } package android.service.carrier {
core/java/android/app/Activity.java +65 −6 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.hardware.input.InputManager; import android.media.AudioManager; import android.media.session.MediaController; import android.net.Uri; Loading @@ -70,6 +69,9 @@ import android.os.ServiceManager.ServiceNotFoundException; import android.os.StrictMode; import android.os.SystemProperties; import android.os.UserHandle; import android.service.autofill.FillableInputField; import android.service.autofill.AutoFillService; import android.service.autofill.IAutoFillCallback; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; Loading @@ -90,8 +92,6 @@ import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextThemeWrapper; import android.view.DragAndDropPermissions; import android.view.DragEvent; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.KeyboardShortcutGroup; import android.view.KeyboardShortcutInfo; Loading @@ -113,9 +113,11 @@ import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityEvent; import android.widget.AdapterView; import android.widget.EditText; import android.widget.Toast; import android.widget.Toolbar; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.ToolbarActionBar; import com.android.internal.app.WindowDecorActionBar; Loading Loading @@ -802,11 +804,13 @@ public class Activity extends ContextThemeWrapper private boolean mReleased; private boolean mUpdated; } private final ArrayList<ManagedCursor> mManagedCursors = new ArrayList<ManagedCursor>(); // protected by synchronized (this) @GuardedBy("mManagedCursors") private final ArrayList<ManagedCursor> mManagedCursors = new ArrayList<>(); @GuardedBy("this") int mResultCode = RESULT_CANCELED; @GuardedBy("this") Intent mResultData = null; private TranslucentConversionListener mTranslucentCallback; Loading Loading @@ -837,6 +841,9 @@ public class Activity extends ContextThemeWrapper private boolean mHasCurrentPermissionsRequest; private boolean mEatKeyUpEvent; @GuardedBy("this") private IAutoFillCallback mAutoFillCallback; private static native String getDlWarning(); /** Return the intent that started this activity. */ Loading Loading @@ -1687,6 +1694,53 @@ public class Activity extends ContextThemeWrapper public void onProvideAssistContent(AssistContent outContent) { } /** * Lazily gets the {@code IAutoFillCallback} for this activitity. * * <p>This callback is used by the {@link AutoFillService} app to auto-fill the activity fields. */ IAutoFillCallback getAutoFillCallback() { synchronized (this) { if (mAutoFillCallback == null) { mAutoFillCallback = new IAutoFillCallback.Stub() { @Override public void autofill(@SuppressWarnings("rawtypes") List fields) throws RemoteException { runOnUiThread(() -> { final View root = getWindow().getDecorView().getRootView(); for (Object field : fields) { if (!(field instanceof FillableInputField)) { Slog.w(TAG, "autofill(): invalid type " + field.getClass()); continue; } FillableInputField autoFillField = (FillableInputField) field; final int viewId = autoFillField.getId(); final View view = root.findViewByAccessibilityIdTraversal(viewId); // TODO: should handle other types of view as well, but that will // require: // - a new interface like AutoFillable // - a way for the views to define the type of the autofield value if ((view instanceof EditText)) { ((EditText) view).setText(autoFillField.getValue()); } } }); } @Override public void showError(String message) { runOnUiThread(() -> { // TODO: temporary show a toast until it uses the Snack bar. Toast.makeText(Activity.this, "Auto-fill request failed: " + message, Toast.LENGTH_LONG).show(); }); } }; } } return mAutoFillCallback; } /** * Request the Keyboard Shortcuts screen to show up. This will trigger * {@link #onProvideKeyboardShortcuts} to retrieve the shortcuts for the foreground activity. Loading Loading @@ -5974,6 +6028,11 @@ public class Activity extends ContextThemeWrapper getWindow().peekDecorView().getViewRootImpl().dump(prefix, fd, writer, args); } if (mAutoFillCallback != null) { writer.print(prefix); writer.print("mAutoFillCallback: " ); writer.println(mAutoFillCallback); } mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix); } Loading