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

Commit 0f4928f1 authored by Svet Ganov's avatar Svet Ganov Committed by Svetoslav Ganov
Browse files

Refactoring of auto fill - lifecycle, auth, improvements

1. Move management of the remote fill service in a dedicated
   class that abstracts away the async and ephemeral nature
   of the binding.

2. Update auth to move fingerprint out of the platform and
   allow response and dataset auth.

3. Cleaned up the fill and save callback classes.

4. The UI is now shared among all sessions and cleaned up.

5. Reshuffled the remote callbacks to have cleaner separation.

6. Cleaned up and tightened the reponse and dataset classes.

7. Added API to support communicationn with intent based auth.

Test: CTS + manually

bug:31001899

Change-Id: Idc924a01d1aea82807e0397ff7293d2b8470d4d6
parent 21c8595d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -265,8 +265,9 @@ LOCAL_SRC_FILES += \
	core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl \
	core/java/android/service/autofill/IAutoFillAppCallback.aidl \
	core/java/android/service/autofill/IAutoFillManagerService.aidl \
	core/java/android/service/autofill/IAutoFillServerCallback.aidl \
	core/java/android/service/autofill/IAutoFillService.aidl \
	core/java/android/service/autofill/IFillCallback.aidl \
	core/java/android/service/autofill/ISaveCallback.aidl \
	core/java/android/service/carrier/ICarrierService.aidl \
	core/java/android/service/carrier/ICarrierMessagingCallback.aidl \
	core/java/android/service/carrier/ICarrierMessagingService.aidl \
+13 −18
Original line number Diff line number Diff line
@@ -9092,6 +9092,10 @@ package android.content {
    field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
    field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
    field public static final java.lang.String EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID";
    field public static final java.lang.String EXTRA_AUTO_FILL_ASSIST_STRUCTURE = "android.intent.extra.AUTO_FILL_ASSIST_STRUCTURE";
    field public static final java.lang.String EXTRA_AUTO_FILL_CALLBACK = "android.intent.extra.AUTO_FILL_CALLBACK";
    field public static final java.lang.String EXTRA_AUTO_FILL_EXTRAS = "android.intent.extra.AUTO_FILL_EXTRAS";
    field public static final java.lang.String EXTRA_AUTO_FILL_ITEM_ID = "android.intent.extra.AUTO_FILL_ITEM_ID";
    field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
    field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
    field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
@@ -36096,26 +36100,19 @@ package android.service.autofill {
    ctor public AutoFillService();
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onDatasetAuthenticationRequest(android.os.Bundle, int);
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public void onFillResponseAuthenticationRequest(android.os.Bundle, int);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
    field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
    field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
    field public static final int FLAG_AUTHENTICATION_ERROR = 4; // 0x4
    field public static final int FLAG_AUTHENTICATION_REQUESTED = 1; // 0x1
    field public static final int FLAG_AUTHENTICATION_SUCCESS = 2; // 0x2
    field public static final int FLAG_FINGERPRINT_AUTHENTICATION_NOT_AVAILABLE = 8; // 0x8
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
  }
  public final class FillCallback {
    method public void onDatasetAuthentication(android.view.autofill.Dataset, int);
  public final class FillCallback implements android.os.Parcelable {
    method public int describeContents();
    method public void onFailure(java.lang.CharSequence);
    method public void onFillResponseAuthentication(int);
    method public void onSuccess(android.view.autofill.FillResponse);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.autofill.FillCallback> CREATOR;
  }
  public final class SaveCallback {
@@ -46755,10 +46752,9 @@ package android.view.autofill {
  }
  public static final class Dataset.Builder {
    ctor public Dataset.Builder(java.lang.CharSequence);
    ctor public Dataset.Builder(java.lang.String, java.lang.CharSequence);
    method public android.view.autofill.Dataset build();
    method public android.view.autofill.Dataset.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
    method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
  }
@@ -46770,12 +46766,11 @@ package android.view.autofill {
  }
  public static final class FillResponse.Builder {
    ctor public FillResponse.Builder();
    ctor public FillResponse.Builder(java.lang.String);
    method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
    method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
    method public android.view.autofill.FillResponse build();
    method public android.view.autofill.FillResponse.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
  }
@@ -47201,7 +47196,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+13 −18
Original line number Diff line number Diff line
@@ -9504,6 +9504,10 @@ package android.content {
    field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
    field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
    field public static final java.lang.String EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID";
    field public static final java.lang.String EXTRA_AUTO_FILL_ASSIST_STRUCTURE = "android.intent.extra.AUTO_FILL_ASSIST_STRUCTURE";
    field public static final java.lang.String EXTRA_AUTO_FILL_CALLBACK = "android.intent.extra.AUTO_FILL_CALLBACK";
    field public static final java.lang.String EXTRA_AUTO_FILL_EXTRAS = "android.intent.extra.AUTO_FILL_EXTRAS";
    field public static final java.lang.String EXTRA_AUTO_FILL_ITEM_ID = "android.intent.extra.AUTO_FILL_ITEM_ID";
    field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
    field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
    field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
@@ -39128,26 +39132,19 @@ package android.service.autofill {
    ctor public AutoFillService();
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onDatasetAuthenticationRequest(android.os.Bundle, int);
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public void onFillResponseAuthenticationRequest(android.os.Bundle, int);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
    field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
    field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
    field public static final int FLAG_AUTHENTICATION_ERROR = 4; // 0x4
    field public static final int FLAG_AUTHENTICATION_REQUESTED = 1; // 0x1
    field public static final int FLAG_AUTHENTICATION_SUCCESS = 2; // 0x2
    field public static final int FLAG_FINGERPRINT_AUTHENTICATION_NOT_AVAILABLE = 8; // 0x8
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
  }
  public final class FillCallback {
    method public void onDatasetAuthentication(android.view.autofill.Dataset, int);
  public final class FillCallback implements android.os.Parcelable {
    method public int describeContents();
    method public void onFailure(java.lang.CharSequence);
    method public void onFillResponseAuthentication(int);
    method public void onSuccess(android.view.autofill.FillResponse);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.autofill.FillCallback> CREATOR;
  }
  public final class SaveCallback {
@@ -50160,10 +50157,9 @@ package android.view.autofill {
  }
  public static final class Dataset.Builder {
    ctor public Dataset.Builder(java.lang.CharSequence);
    ctor public Dataset.Builder(java.lang.String, java.lang.CharSequence);
    method public android.view.autofill.Dataset build();
    method public android.view.autofill.Dataset.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
    method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
  }
@@ -50175,12 +50171,11 @@ package android.view.autofill {
  }
  public static final class FillResponse.Builder {
    ctor public FillResponse.Builder();
    ctor public FillResponse.Builder(java.lang.String);
    method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
    method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
    method public android.view.autofill.FillResponse build();
    method public android.view.autofill.FillResponse.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
  }
@@ -50606,7 +50601,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+13 −18
Original line number Diff line number Diff line
@@ -9118,6 +9118,10 @@ package android.content {
    field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
    field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
    field public static final java.lang.String EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID";
    field public static final java.lang.String EXTRA_AUTO_FILL_ASSIST_STRUCTURE = "android.intent.extra.AUTO_FILL_ASSIST_STRUCTURE";
    field public static final java.lang.String EXTRA_AUTO_FILL_CALLBACK = "android.intent.extra.AUTO_FILL_CALLBACK";
    field public static final java.lang.String EXTRA_AUTO_FILL_EXTRAS = "android.intent.extra.AUTO_FILL_EXTRAS";
    field public static final java.lang.String EXTRA_AUTO_FILL_ITEM_ID = "android.intent.extra.AUTO_FILL_ITEM_ID";
    field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
    field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
    field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
@@ -36231,26 +36235,19 @@ package android.service.autofill {
    ctor public AutoFillService();
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onDatasetAuthenticationRequest(android.os.Bundle, int);
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public void onFillResponseAuthenticationRequest(android.os.Bundle, int);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.service.autofill.SaveCallback);
    field public static final java.lang.String EXTRA_DATASET_EXTRAS = "android.service.autofill.extra.DATASET_EXTRAS";
    field public static final java.lang.String EXTRA_RESPONSE_EXTRAS = "android.service.autofill.extra.RESPONSE_EXTRAS";
    field public static final int FLAG_AUTHENTICATION_ERROR = 4; // 0x4
    field public static final int FLAG_AUTHENTICATION_REQUESTED = 1; // 0x1
    field public static final int FLAG_AUTHENTICATION_SUCCESS = 2; // 0x2
    field public static final int FLAG_FINGERPRINT_AUTHENTICATION_NOT_AVAILABLE = 8; // 0x8
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
  }
  public final class FillCallback {
    method public void onDatasetAuthentication(android.view.autofill.Dataset, int);
  public final class FillCallback implements android.os.Parcelable {
    method public int describeContents();
    method public void onFailure(java.lang.CharSequence);
    method public void onFillResponseAuthentication(int);
    method public void onSuccess(android.view.autofill.FillResponse);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.autofill.FillCallback> CREATOR;
  }
  public final class SaveCallback {
@@ -47068,10 +47065,9 @@ package android.view.autofill {
  }
  public static final class Dataset.Builder {
    ctor public Dataset.Builder(java.lang.CharSequence);
    ctor public Dataset.Builder(java.lang.String, java.lang.CharSequence);
    method public android.view.autofill.Dataset build();
    method public android.view.autofill.Dataset.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.Dataset.Builder setExtras(android.os.Bundle);
    method public android.view.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
  }
@@ -47083,12 +47079,11 @@ package android.view.autofill {
  }
  public static final class FillResponse.Builder {
    ctor public FillResponse.Builder();
    ctor public FillResponse.Builder(java.lang.String);
    method public android.view.autofill.FillResponse.Builder addDataset(android.view.autofill.Dataset);
    method public android.view.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
    method public android.view.autofill.FillResponse build();
    method public android.view.autofill.FillResponse.Builder requiresCustomAuthentication(android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder requiresFingerprintAuthentication(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.Bundle, int);
    method public android.view.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
    method public android.view.autofill.FillResponse.Builder setExtras(android.os.Bundle);
  }
@@ -47514,7 +47509,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+35 −0
Original line number Diff line number Diff line
@@ -1806,6 +1806,41 @@ public class Intent implements Parcelable, Cloneable {
    @SystemApi
    public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME";

    /**
     * Intent extra: An id if an autofill item ({@link
     * android.view.autofill.Dataset} or {@link android.view.autofill.FillResponse}).
     * <p>
     * Type: String
     * </p>
     */
    public static final String EXTRA_AUTO_FILL_ITEM_ID = "android.intent.extra.AUTO_FILL_ITEM_ID";

    /**
     * Intent extra: The assist structure which captures the filled screen.
     * <p>
     * Type: {@link android.app.assist.AssistStructure}
     * </p>
     */
    public static final String EXTRA_AUTO_FILL_ASSIST_STRUCTURE =
            "android.intent.extra.AUTO_FILL_ASSIST_STRUCTURE";

    /**
     * Intent extra: The metadata associated with the authenticated entity ({@link
     * android.view.autofill.Dataset} or {@link android.view.autofill.FillResponse}).
     * <p>
     * Type: {@link android.os.Bundle}
     * </p>
     */
    public static final String EXTRA_AUTO_FILL_EXTRAS = "android.intent.extra.AUTO_FILL_EXTRAS";

    /**
     * Intent extra: A callback to report an authentication result.
     * <p>
     * Type: {@link android.view.autofill.FillResponse}
     * </p>
     */
    public static final String EXTRA_AUTO_FILL_CALLBACK = "android.intent.extra.AUTO_FILL_CALLBACK";

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // Standard intent broadcast actions (see action variable).
Loading