Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5381aa4b authored by Felipe Leme's avatar Felipe Leme
Browse files

Initial implementation of the Auto-Fill Framework classes.

This CL provides the initial, skeleton implementation of the Auto-Fill
Framework classes:

- Defines the system service and app-based
  AIDL (IAutoFillManagerService.aidl and IAutoFillService.aidl respectively).
- Defines the 'adb shell cmd' interface.
- Defines the permission required to access the service.
- Registers the service on SystemServer.
- Adds the code to bind the app-specified service to system_server.
- Defines the service class (AutoFillService) required by providers.
- Implements the initial startSession() method.

This is still a very early, "work-in-progress" change:
- It has many TODOs.
- It does not have unit or CTS tests yet.
- It does not provide a callback method to auto-fill the fields.
- In fact, it has a lot of TODOs.

Despite these adversities, it can be tested by following the steps
below:

1.Create an app with a service extending AutoFillService

2.Implement the onNewSession() method

3.In the manifest:
 - Listen to android.service.autofill.AutoFillService intents.
 - Require the android.permission.BIND_AUTO_FILL permission.

4.Explicitly set the app as an autofill-service by running:
  adb shell settings put secure auto_fill_service MY_APP/.MY_SERVICE

5.Start a session against the top activity:
  adb shell cmd autofill start session

BUG: 31001899
Test: manually built and ran it

Change-Id: I00f4822159b31ddddba8f513e57c4474bc74eb89
parent 8f68c8b9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -251,6 +251,8 @@ 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/IAutoFillManagerService.aidl \
	core/java/android/service/autofill/IAutoFillService.aidl \
	core/java/android/service/carrier/ICarrierService.aidl \
	core/java/android/service/carrier/ICarrierMessagingCallback.aidl \
	core/java/android/service/carrier/ICarrierMessagingService.aidl \
+15 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android {
    field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
    field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
    field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
    field public static final java.lang.String BIND_AUTO_FILL = "android.permission.BIND_AUTO_FILL";
    field public static final deprecated java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
    field public static final java.lang.String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
    field public static final java.lang.String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
@@ -34628,6 +34629,20 @@ package android.security.keystore {
}
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 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";
  }
}
package android.service.carrier {
  public class CarrierIdentifier implements android.os.Parcelable {
+16 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ package android {
    field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
    field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
    field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
    field public static final java.lang.String BIND_AUTO_FILL = "android.permission.BIND_AUTO_FILL";
    field public static final deprecated java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
    field public static final java.lang.String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
    field public static final java.lang.String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
@@ -130,6 +131,7 @@ package android {
    field public static final java.lang.String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
    field public static final java.lang.String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
    field public static final java.lang.String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
    field public static final java.lang.String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL";
    field public static final java.lang.String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES";
    field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
    field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
@@ -37396,6 +37398,20 @@ package android.security.keystore {
}
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 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";
  }
}
package android.service.carrier {
  public class CarrierIdentifier implements android.os.Parcelable {
+16 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android {
    field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
    field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
    field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
    field public static final java.lang.String BIND_AUTO_FILL = "android.permission.BIND_AUTO_FILL";
    field public static final deprecated java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
    field public static final java.lang.String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
    field public static final java.lang.String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
@@ -32764,6 +32765,7 @@ package android.provider {
    field public static final java.lang.String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins";
    field public static final deprecated java.lang.String ALLOW_MOCK_LOCATION = "mock_location";
    field public static final java.lang.String ANDROID_ID = "android_id";
    field public static final java.lang.String AUTO_FILL_SERVICE = "auto_fill_service";
    field public static final deprecated java.lang.String BACKGROUND_DATA = "background_data";
    field public static final deprecated java.lang.String BLUETOOTH_ON = "bluetooth_on";
    field public static final android.net.Uri CONTENT_URI;
@@ -34717,6 +34719,20 @@ package android.security.keystore {
}
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 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";
  }
}
package android.service.carrier {
  public class CarrierIdentifier implements android.os.Parcelable {
+8 −0
Original line number Diff line number Diff line
@@ -3337,6 +3337,14 @@ public abstract class Context {
     */
    public static final String VOICE_INTERACTION_MANAGER_SERVICE = "voiceinteraction";

    /**
     * Official published name of the (internal) auto-fill service.
     *
     * @hide
     * @see #getSystemService
     */
    public static final String AUTO_FILL_MANAGER_SERVICE = "autofill";

    /**
     * Use with {@link #getSystemService} to access the
     * {@link com.android.server.voiceinteraction.SoundTriggerService}.
Loading