diff options
| author | 2020-03-19 01:10:39 +0000 | |
|---|---|---|
| committer | 2020-03-19 01:10:39 +0000 | |
| commit | 76b89b6d72ea8aba65e90ea0236abbcc22c023eb (patch) | |
| tree | 7db67bebe10163fa2eb1e7467505192b2d41939d | |
| parent | 35193303a6cfcba7ed3ee48e3ba576f74b88d0a1 (diff) | |
| parent | bc6900480d7197819a602b8629a47caadcf624ef (diff) | |
Merge "Remove the InlineActions API" into rvc-dev
13 files changed, 37 insertions, 402 deletions
diff --git a/api/current.txt b/api/current.txt index 8152cd6d6862..baad02c0278c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43123,7 +43123,6 @@ package android.service.autofill { public static final class FillResponse.Builder { ctor public FillResponse.Builder(); method @NonNull public android.service.autofill.FillResponse.Builder addDataset(@Nullable android.service.autofill.Dataset); - method @NonNull public android.service.autofill.FillResponse.Builder addInlineAction(@NonNull android.service.autofill.InlineAction); method @NonNull public android.service.autofill.FillResponse build(); method @NonNull public android.service.autofill.FillResponse.Builder disableAutofill(long); method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews); @@ -43153,15 +43152,6 @@ package android.service.autofill { method public android.service.autofill.ImageTransformation build(); } - public final class InlineAction implements android.os.Parcelable { - ctor public InlineAction(@NonNull android.service.autofill.InlinePresentation, @NonNull android.content.IntentSender); - method public int describeContents(); - method @NonNull public android.content.IntentSender getAction(); - method @NonNull public android.service.autofill.InlinePresentation getInlinePresentation(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.InlineAction> CREATOR; - } - public final class InlinePresentation implements android.os.Parcelable { ctor public InlinePresentation(@NonNull android.app.slice.Slice, @NonNull android.view.inline.InlinePresentationSpec, boolean); method public int describeContents(); diff --git a/api/system-current.txt b/api/system-current.txt index 2d2ebcde1010..9515f7160616 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -9772,7 +9772,6 @@ package android.service.autofill.augmented { method @NonNull public android.service.autofill.augmented.FillResponse build(); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setClientState(@NonNull android.os.Bundle); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow); - method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineActions(@NonNull java.util.List<android.service.autofill.InlineAction>); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineSuggestions(@NonNull java.util.List<android.service.autofill.Dataset>); } diff --git a/api/test-current.txt b/api/test-current.txt index 286408dbbecb..86eea6275f89 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -3260,7 +3260,6 @@ package android.service.autofill.augmented { method @NonNull public android.service.autofill.augmented.FillResponse build(); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setClientState(@NonNull android.os.Bundle); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow); - method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineActions(@NonNull java.util.List<android.service.autofill.InlineAction>); method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineSuggestions(@NonNull java.util.List<android.service.autofill.Dataset>); } diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java index 06b5fa07a554..bc08b84d31fd 100644 --- a/core/java/android/service/autofill/FillResponse.java +++ b/core/java/android/service/autofill/FillResponse.java @@ -88,8 +88,6 @@ public final class FillResponse implements Parcelable { private final @Nullable UserData mUserData; private final @Nullable int[] mCancelIds; private final boolean mSupportsInlineSuggestions; - // TODO(b/149240554): revert back to use ParceledListSlice after the bug is resolved. - private final @Nullable ArrayList<InlineAction> mInlineActions; private FillResponse(@NonNull Builder builder) { mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null; @@ -109,7 +107,6 @@ public final class FillResponse implements Parcelable { mUserData = builder.mUserData; mCancelIds = builder.mCancelIds; mSupportsInlineSuggestions = builder.mSupportsInlineSuggestions; - mInlineActions = builder.mInlineActions; } /** @hide */ @@ -212,11 +209,6 @@ public final class FillResponse implements Parcelable { return mSupportsInlineSuggestions; } - /** @hide */ - public @Nullable List<InlineAction> getInlineActions() { - return mInlineActions; - } - /** * Builder for {@link FillResponse} objects. You must to provide at least * one dataset or set an authentication intent with a presentation view. @@ -239,7 +231,6 @@ public final class FillResponse implements Parcelable { private UserData mUserData; private int[] mCancelIds; private boolean mSupportsInlineSuggestions; - private ArrayList<InlineAction> mInlineActions; /** * Triggers a custom UI before before autofilling the screen with any data set in this @@ -656,22 +647,6 @@ public final class FillResponse implements Parcelable { } /** - * Adds a new {@link InlineAction} to this response representing an action UI. - * - * @return This builder. - */ - @NonNull - public Builder addInlineAction(@NonNull InlineAction inlineAction) { - throwIfDestroyed(); - throwIfAuthenticationCalled(); - if (mInlineActions == null) { - mInlineActions = new ArrayList<>(); - } - mInlineActions.add(inlineAction); - return this; - } - - /** * Builds a new {@link FillResponse} instance. * * @throws IllegalStateException if any of the following conditions occur: @@ -788,9 +763,6 @@ public final class FillResponse implements Parcelable { builder.append(", mCancelIds=").append(mCancelIds.length); } builder.append(", mSupportInlinePresentations=").append(mSupportsInlineSuggestions); - if (mInlineActions != null) { - builder.append(", mInlineActions=" + mInlineActions); - } return builder.append("]").toString(); } @@ -820,7 +792,6 @@ public final class FillResponse implements Parcelable { parcel.writeParcelableArray(mFieldClassificationIds, flags); parcel.writeInt(mFlags); parcel.writeIntArray(mCancelIds); - parcel.writeTypedList(mInlineActions, flags); parcel.writeInt(mRequestId); } @@ -878,14 +849,6 @@ public final class FillResponse implements Parcelable { final int[] cancelIds = parcel.createIntArray(); builder.setPresentationCancelIds(cancelIds); - final List<InlineAction> inlineActions = parcel.createTypedArrayList( - InlineAction.CREATOR); - if (inlineActions != null) { - for (InlineAction inlineAction : inlineActions) { - builder.addInlineAction(inlineAction); - } - } - final FillResponse response = builder.build(); response.setRequestId(parcel.readInt()); diff --git a/core/java/android/service/autofill/InlineAction.aidl b/core/java/android/service/autofill/InlineAction.aidl deleted file mode 100644 index 7f8511825d73..000000000000 --- a/core/java/android/service/autofill/InlineAction.aidl +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.service.autofill; - -parcelable InlineAction; diff --git a/core/java/android/service/autofill/InlineAction.java b/core/java/android/service/autofill/InlineAction.java deleted file mode 100644 index 17c4b33ba96b..000000000000 --- a/core/java/android/service/autofill/InlineAction.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.service.autofill; - -import android.annotation.NonNull; -import android.content.IntentSender; -import android.os.Parcelable; - -import com.android.internal.util.DataClass; - -/** - * Represents an inline action as part of the autofill/augmented autofill response. - * - * <p> It includes both the action intent and the UI presentation. For example, the UI can be - * associated with an intent which can open an activity for the user to manage the Autofill provider - * settings. - */ -@DataClass( - genToString = true, - genHiddenConstDefs = true, - genEqualsHashCode = true) -public final class InlineAction implements Parcelable { - - /** - * Representation of the inline action. - */ - private final @NonNull InlinePresentation mInlinePresentation; - - /** - * The associated intent which will be triggered when the action is selected. It will only be - * called by the OS. - */ - private final @NonNull IntentSender mAction; - - - - // Code below generated by codegen v1.0.15. - // - // DO NOT MODIFY! - // CHECKSTYLE:OFF Generated code - // - // To regenerate run: - // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/service/autofill/InlineAction.java - // - // To exclude the generated code from IntelliJ auto-formatting enable (one-time): - // Settings > Editor > Code Style > Formatter Control - //@formatter:off - - - /** - * Creates a new InlineAction. - * - * @param inlinePresentation - * Representation of the inline action. - * @param action - * The associated intent which will be triggered when the action is selected. It will only be - * invoked by the OS. - */ - @DataClass.Generated.Member - public InlineAction( - @NonNull InlinePresentation inlinePresentation, - @NonNull IntentSender action) { - this.mInlinePresentation = inlinePresentation; - com.android.internal.util.AnnotationValidations.validate( - NonNull.class, null, mInlinePresentation); - this.mAction = action; - com.android.internal.util.AnnotationValidations.validate( - NonNull.class, null, mAction); - - // onConstructed(); // You can define this method to get a callback - } - - /** - * Representation of the inline action. - */ - @DataClass.Generated.Member - public @NonNull InlinePresentation getInlinePresentation() { - return mInlinePresentation; - } - - /** - * The associated intent which will be triggered when the action is selected. It will only be - * invoked by the OS. - */ - @DataClass.Generated.Member - public @NonNull IntentSender getAction() { - return mAction; - } - - @Override - @DataClass.Generated.Member - public String toString() { - // You can override field toString logic by defining methods like: - // String fieldNameToString() { ... } - - return "InlineAction { " + - "inlinePresentation = " + mInlinePresentation + ", " + - "action = " + mAction + - " }"; - } - - @Override - @DataClass.Generated.Member - public boolean equals(@android.annotation.Nullable Object o) { - // You can override field equality logic by defining either of the methods like: - // boolean fieldNameEquals(InlineAction other) { ... } - // boolean fieldNameEquals(FieldType otherValue) { ... } - - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - @SuppressWarnings("unchecked") - InlineAction that = (InlineAction) o; - //noinspection PointlessBooleanExpression - return true - && java.util.Objects.equals(mInlinePresentation, that.mInlinePresentation) - && java.util.Objects.equals(mAction, that.mAction); - } - - @Override - @DataClass.Generated.Member - public int hashCode() { - // You can override field hashCode logic by defining methods like: - // int fieldNameHashCode() { ... } - - int _hash = 1; - _hash = 31 * _hash + java.util.Objects.hashCode(mInlinePresentation); - _hash = 31 * _hash + java.util.Objects.hashCode(mAction); - return _hash; - } - - @Override - @DataClass.Generated.Member - public void writeToParcel(@NonNull android.os.Parcel dest, int flags) { - // You can override field parcelling by defining methods like: - // void parcelFieldName(Parcel dest, int flags) { ... } - - dest.writeTypedObject(mInlinePresentation, flags); - dest.writeTypedObject(mAction, flags); - } - - @Override - @DataClass.Generated.Member - public int describeContents() { return 0; } - - /** @hide */ - @SuppressWarnings({"unchecked", "RedundantCast"}) - @DataClass.Generated.Member - /* package-private */ InlineAction(@NonNull android.os.Parcel in) { - // You can override field unparcelling by defining methods like: - // static FieldType unparcelFieldName(Parcel in) { ... } - - InlinePresentation inlinePresentation = (InlinePresentation) in.readTypedObject(InlinePresentation.CREATOR); - IntentSender action = (IntentSender) in.readTypedObject(IntentSender.CREATOR); - - this.mInlinePresentation = inlinePresentation; - com.android.internal.util.AnnotationValidations.validate( - NonNull.class, null, mInlinePresentation); - this.mAction = action; - com.android.internal.util.AnnotationValidations.validate( - NonNull.class, null, mAction); - - // onConstructed(); // You can define this method to get a callback - } - - @DataClass.Generated.Member - public static final @NonNull Parcelable.Creator<InlineAction> CREATOR - = new Parcelable.Creator<InlineAction>() { - @Override - public InlineAction[] newArray(int size) { - return new InlineAction[size]; - } - - @Override - public InlineAction createFromParcel(@NonNull android.os.Parcel in) { - return new InlineAction(in); - } - }; - - @DataClass.Generated( - time = 1583798182424L, - codegenVersion = "1.0.15", - sourceFile = "frameworks/base/core/java/android/service/autofill/InlineAction.java", - inputSignatures = "private final @android.annotation.NonNull android.service.autofill.InlinePresentation mInlinePresentation\nprivate final @android.annotation.NonNull android.content.IntentSender mAction\nclass InlineAction extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstDefs=true, genEqualsHashCode=true)") - @Deprecated - private void __metadata() {} - - - //@formatter:on - // End of generated code - -} diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java index 5b08ae20f071..1efa3dd0c865 100644 --- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java +++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java @@ -40,7 +40,6 @@ import android.os.RemoteException; import android.os.SystemClock; import android.service.autofill.Dataset; import android.service.autofill.FillEventHistory; -import android.service.autofill.InlineAction; import android.service.autofill.augmented.PresentationParams.SystemPopupPresentationParams; import android.util.Log; import android.util.Pair; @@ -559,10 +558,9 @@ public abstract class AugmentedAutofillService extends Service { } } - void reportResult(@Nullable List<Dataset> inlineSuggestionsData, - @Nullable List<InlineAction> inlineActions) { + void reportResult(@Nullable List<Dataset> inlineSuggestionsData) { try { - mCallback.onSuccess(inlineSuggestionsData, inlineActions); + mCallback.onSuccess(inlineSuggestionsData); } catch (RemoteException e) { Log.e(TAG, "Error calling back with the inline suggestions data: " + e); } diff --git a/core/java/android/service/autofill/augmented/FillCallback.java b/core/java/android/service/autofill/augmented/FillCallback.java index 6b4e1185703c..526a749c95a1 100644 --- a/core/java/android/service/autofill/augmented/FillCallback.java +++ b/core/java/android/service/autofill/augmented/FillCallback.java @@ -55,14 +55,14 @@ public final class FillCallback { if (response == null) { mProxy.logEvent(AutofillProxy.REPORT_EVENT_NO_RESPONSE); - mProxy.reportResult(/* inlineSuggestionsData */ null, /* inlineActions */null); + mProxy.reportResult(/* inlineSuggestionsData */ null); return; } List<Dataset> inlineSuggestions = response.getInlineSuggestions(); if (inlineSuggestions != null && !inlineSuggestions.isEmpty()) { mProxy.logEvent(AutofillProxy.REPORT_EVENT_INLINE_RESPONSE); - mProxy.reportResult(inlineSuggestions, response.getInlineActions()); + mProxy.reportResult(inlineSuggestions); return; } diff --git a/core/java/android/service/autofill/augmented/FillResponse.java b/core/java/android/service/autofill/augmented/FillResponse.java index f564b3ba616a..f72eb782c407 100644 --- a/core/java/android/service/autofill/augmented/FillResponse.java +++ b/core/java/android/service/autofill/augmented/FillResponse.java @@ -21,7 +21,6 @@ import android.annotation.SystemApi; import android.annotation.TestApi; import android.os.Bundle; import android.service.autofill.Dataset; -import android.service.autofill.InlineAction; import com.android.internal.util.DataClass; @@ -53,12 +52,6 @@ public final class FillResponse { private @Nullable List<Dataset> mInlineSuggestions; /** - * Defaults to null if no inline actions are provided. - */ - @DataClass.PluralOf("inlineAction") - private @Nullable List<InlineAction> mInlineActions; - - /** * The client state that {@link AugmentedAutofillService} implementation can put anything in to * identify the request and the response when calling * {@link AugmentedAutofillService#getFillEventHistory()}. @@ -73,10 +66,6 @@ public final class FillResponse { return null; } - private static List<InlineAction> defaultInlineActions() { - return null; - } - private static Bundle defaultClientState() { return null; } @@ -85,7 +74,6 @@ public final class FillResponse { /** @hide */ abstract static class BaseBuilder { abstract FillResponse.Builder addInlineSuggestion(@NonNull Dataset value); - abstract FillResponse.Builder addInlineAction(@NonNull InlineAction value); } @@ -107,11 +95,9 @@ public final class FillResponse { /* package-private */ FillResponse( @Nullable FillWindow fillWindow, @Nullable List<Dataset> inlineSuggestions, - @Nullable List<InlineAction> inlineActions, @Nullable Bundle clientState) { this.mFillWindow = fillWindow; this.mInlineSuggestions = inlineSuggestions; - this.mInlineActions = inlineActions; this.mClientState = clientState; // onConstructed(); // You can define this method to get a callback @@ -139,16 +125,6 @@ public final class FillResponse { } /** - * Defaults to null if no inline actions are provided. - * - * @hide - */ - @DataClass.Generated.Member - public @Nullable List<InlineAction> getInlineActions() { - return mInlineActions; - } - - /** * The client state that {@link AugmentedAutofillService} implementation can put anything in to * identify the request and the response when calling * {@link AugmentedAutofillService#getFillEventHistory()}. @@ -169,7 +145,6 @@ public final class FillResponse { private @Nullable FillWindow mFillWindow; private @Nullable List<Dataset> mInlineSuggestions; - private @Nullable List<InlineAction> mInlineActions; private @Nullable Bundle mClientState; private long mBuilderFieldsSet = 0L; @@ -210,26 +185,6 @@ public final class FillResponse { } /** - * Defaults to null if no inline actions are provided. - */ - @DataClass.Generated.Member - public @NonNull Builder setInlineActions(@NonNull List<InlineAction> value) { - checkNotUsed(); - mBuilderFieldsSet |= 0x4; - mInlineActions = value; - return this; - } - - /** @see #setInlineActions */ - @DataClass.Generated.Member - @Override - @NonNull FillResponse.Builder addInlineAction(@NonNull InlineAction value) { - if (mInlineActions == null) setInlineActions(new ArrayList<>()); - mInlineActions.add(value); - return this; - } - - /** * The client state that {@link AugmentedAutofillService} implementation can put anything in to * identify the request and the response when calling * {@link AugmentedAutofillService#getFillEventHistory()}. @@ -237,7 +192,7 @@ public final class FillResponse { @DataClass.Generated.Member public @NonNull Builder setClientState(@NonNull Bundle value) { checkNotUsed(); - mBuilderFieldsSet |= 0x8; + mBuilderFieldsSet |= 0x4; mClientState = value; return this; } @@ -245,7 +200,7 @@ public final class FillResponse { /** Builds the instance. This builder should not be touched after calling this! */ public @NonNull FillResponse build() { checkNotUsed(); - mBuilderFieldsSet |= 0x10; // Mark builder used + mBuilderFieldsSet |= 0x8; // Mark builder used if ((mBuilderFieldsSet & 0x1) == 0) { mFillWindow = defaultFillWindow(); @@ -254,21 +209,17 @@ public final class FillResponse { mInlineSuggestions = defaultInlineSuggestions(); } if ((mBuilderFieldsSet & 0x4) == 0) { - mInlineActions = defaultInlineActions(); - } - if ((mBuilderFieldsSet & 0x8) == 0) { mClientState = defaultClientState(); } FillResponse o = new FillResponse( mFillWindow, mInlineSuggestions, - mInlineActions, mClientState); return o; } private void checkNotUsed() { - if ((mBuilderFieldsSet & 0x10) != 0) { + if ((mBuilderFieldsSet & 0x8) != 0) { throw new IllegalStateException( "This Builder should not be reused. Use a new Builder instance instead"); } @@ -276,10 +227,10 @@ public final class FillResponse { } @DataClass.Generated( - time = 1583793032373L, + time = 1584480900526L, codegenVersion = "1.0.15", sourceFile = "frameworks/base/core/java/android/service/autofill/augmented/FillResponse.java", - inputSignatures = "private @android.annotation.Nullable android.service.autofill.augmented.FillWindow mFillWindow\nprivate @com.android.internal.util.DataClass.PluralOf(\"inlineSuggestion\") @android.annotation.Nullable java.util.List<android.service.autofill.Dataset> mInlineSuggestions\nprivate @com.android.internal.util.DataClass.PluralOf(\"inlineAction\") @android.annotation.Nullable java.util.List<android.service.autofill.InlineAction> mInlineActions\nprivate @android.annotation.Nullable android.os.Bundle mClientState\nprivate static android.service.autofill.augmented.FillWindow defaultFillWindow()\nprivate static java.util.List<android.service.autofill.Dataset> defaultInlineSuggestions()\nprivate static java.util.List<android.service.autofill.InlineAction> defaultInlineActions()\nprivate static android.os.Bundle defaultClientState()\nclass FillResponse extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true, genHiddenGetters=true)\nabstract android.service.autofill.augmented.FillResponse.Builder addInlineSuggestion(android.service.autofill.Dataset)\nabstract android.service.autofill.augmented.FillResponse.Builder addInlineAction(android.service.autofill.InlineAction)\nclass BaseBuilder extends java.lang.Object implements []") + inputSignatures = "private @android.annotation.Nullable android.service.autofill.augmented.FillWindow mFillWindow\nprivate @com.android.internal.util.DataClass.PluralOf(\"inlineSuggestion\") @android.annotation.Nullable java.util.List<android.service.autofill.Dataset> mInlineSuggestions\nprivate @android.annotation.Nullable android.os.Bundle mClientState\nprivate static android.service.autofill.augmented.FillWindow defaultFillWindow()\nprivate static java.util.List<android.service.autofill.Dataset> defaultInlineSuggestions()\nprivate static android.os.Bundle defaultClientState()\nclass FillResponse extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true, genHiddenGetters=true)\nabstract android.service.autofill.augmented.FillResponse.Builder addInlineSuggestion(android.service.autofill.Dataset)\nclass BaseBuilder extends java.lang.Object implements []") @Deprecated private void __metadata() {} diff --git a/core/java/android/service/autofill/augmented/IFillCallback.aidl b/core/java/android/service/autofill/augmented/IFillCallback.aidl index 545dab284067..24af1e51dd56 100644 --- a/core/java/android/service/autofill/augmented/IFillCallback.aidl +++ b/core/java/android/service/autofill/augmented/IFillCallback.aidl @@ -20,7 +20,6 @@ import android.os.Bundle; import android.os.ICancellationSignal; import android.service.autofill.Dataset; -import android.service.autofill.InlineAction; import java.util.List; @@ -31,8 +30,7 @@ import java.util.List; */ interface IFillCallback { void onCancellable(in ICancellationSignal cancellation); - void onSuccess(in @nullable List<Dataset> inlineSuggestionsData, - in @nullable List<InlineAction> inlineActions); + void onSuccess(in @nullable List<Dataset> inlineSuggestionsData); boolean isCompleted(); void cancel(); } diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java index 53afa6e283d9..b4b0641e2f2a 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java @@ -37,7 +37,6 @@ import android.os.ICancellationSignal; import android.os.RemoteException; import android.os.SystemClock; import android.service.autofill.Dataset; -import android.service.autofill.InlineAction; import android.service.autofill.augmented.AugmentedAutofillService; import android.service.autofill.augmented.IAugmentedAutofillService; import android.service.autofill.augmented.IFillCallback; @@ -167,12 +166,12 @@ final class RemoteAugmentedAutofillService focusedId, focusedValue, requestTime, inlineSuggestionsRequest, new IFillCallback.Stub() { @Override - public void onSuccess(@Nullable List<Dataset> inlineSuggestionsData, - @Nullable List<InlineAction> inlineActions) { + public void onSuccess( + @Nullable List<Dataset> inlineSuggestionsData) { mCallbacks.resetLastResponse(); maybeRequestShowInlineSuggestions(sessionId, inlineSuggestionsRequest, inlineSuggestionsData, - inlineActions, focusedId, inlineSuggestionsCallback, + focusedId, inlineSuggestionsCallback, client, onErrorCallback, remoteRenderService); requestAutofill.complete(null); } @@ -237,8 +236,7 @@ final class RemoteAugmentedAutofillService private void maybeRequestShowInlineSuggestions(int sessionId, @Nullable InlineSuggestionsRequest request, - @Nullable List<Dataset> inlineSuggestionsData, - @Nullable List<InlineAction> inlineActions, @NonNull AutofillId focusedId, + @Nullable List<Dataset> inlineSuggestionsData, @NonNull AutofillId focusedId, @Nullable Function<InlineSuggestionsResponse, Boolean> inlineSuggestionsCallback, @NonNull IAutoFillManagerClient client, @NonNull Runnable onErrorCallback, @Nullable RemoteInlineSuggestionRenderService remoteRenderService) { @@ -251,7 +249,7 @@ final class RemoteAugmentedAutofillService final InlineSuggestionsResponse inlineSuggestionsResponse = InlineSuggestionFactory.createAugmentedInlineSuggestionsResponse( - request, inlineSuggestionsData, inlineActions, focusedId, + request, inlineSuggestionsData, focusedId, dataset -> { mCallbacks.logAugmentedAutofillSelected(sessionId, dataset.getId()); @@ -260,8 +258,13 @@ final class RemoteAugmentedAutofillService final int size = fieldIds.size(); final boolean hideHighlight = size == 1 && fieldIds.get(0).equals(focusedId); - client.autofill(sessionId, fieldIds, dataset.getFieldValues(), - hideHighlight); + if (dataset.getAuthentication() != null) { + client.startIntentSender(dataset.getAuthentication(), + new Intent()); + } else { + client.autofill(sessionId, fieldIds, dataset.getFieldValues(), + hideHighlight); + } } catch (RemoteException e) { Slog.w(TAG, "Encounter exception autofilling the values"); } diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 9af7cbe5bffe..8032e9b70e0d 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -2737,8 +2737,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState InlineSuggestionsResponse inlineSuggestionsResponse = InlineSuggestionFactory.createInlineSuggestionsResponse( - inlineSuggestionsRequest.get(), - response, filterText, response.getInlineActions(), mCurrentViewId, + inlineSuggestionsRequest.get(), response, filterText, mCurrentViewId, this, () -> { synchronized (mLock) { mInlineSuggestionSession.hideInlineSuggestionsUi(mCurrentViewId); diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java index 0ca9dd92877f..71d4acec7c6a 100644 --- a/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java +++ b/services/autofill/java/com/android/server/autofill/ui/InlineSuggestionFactory.java @@ -21,13 +21,11 @@ import static com.android.server.autofill.Helper.sVerbose; import android.annotation.NonNull; import android.annotation.Nullable; -import android.content.IntentSender; import android.os.IBinder; import android.os.RemoteException; import android.service.autofill.Dataset; import android.service.autofill.FillResponse; import android.service.autofill.IInlineSuggestionUiCallback; -import android.service.autofill.InlineAction; import android.service.autofill.InlinePresentation; import android.text.TextUtils; import android.util.Slog; @@ -73,8 +71,7 @@ public final class InlineSuggestionFactory { @Nullable public static InlineSuggestionsResponse createInlineSuggestionsResponse( @NonNull InlineSuggestionsRequest request, @NonNull FillResponse response, - @Nullable String filterText, @Nullable List<InlineAction> inlineActions, - @NonNull AutofillId autofillId, + @Nullable String filterText, @NonNull AutofillId autofillId, @NonNull AutoFillUI.AutoFillUiCallback client, @NonNull Runnable onErrorCallback, @Nullable RemoteInlineSuggestionRenderService remoteRenderService) { if (sDebug) Slog.d(TAG, "createInlineSuggestionsResponse called"); @@ -96,7 +93,7 @@ public final class InlineSuggestionFactory { final InlinePresentation inlineAuthentication = response.getAuthentication() == null ? null : response.getInlinePresentation(); return createInlineSuggestionsResponseInternal(/* isAugmented= */ false, request, - response.getDatasets(), filterText, inlineAuthentication, inlineActions, autofillId, + response.getDatasets(), filterText, inlineAuthentication, autofillId, onErrorCallback, onClickFactory, remoteRenderService); } @@ -107,15 +104,14 @@ public final class InlineSuggestionFactory { @Nullable public static InlineSuggestionsResponse createAugmentedInlineSuggestionsResponse( @NonNull InlineSuggestionsRequest request, @NonNull List<Dataset> datasets, - @Nullable List<InlineAction> inlineActions, @NonNull AutofillId autofillId, + @NonNull AutofillId autofillId, @NonNull InlineSuggestionUiCallback inlineSuggestionUiCallback, @NonNull Runnable onErrorCallback, @Nullable RemoteInlineSuggestionRenderService remoteRenderService) { if (sDebug) Slog.d(TAG, "createAugmentedInlineSuggestionsResponse called"); return createInlineSuggestionsResponseInternal(/* isAugmented= */ true, request, datasets, /* filterText= */ null, /* inlineAuthentication= */ null, - inlineActions, autofillId, onErrorCallback, - (dataset, datasetIndex) -> + autofillId, onErrorCallback, (dataset, datasetIndex) -> inlineSuggestionUiCallback.autofill(dataset), remoteRenderService); } @@ -123,8 +119,7 @@ public final class InlineSuggestionFactory { private static InlineSuggestionsResponse createInlineSuggestionsResponseInternal( boolean isAugmented, @NonNull InlineSuggestionsRequest request, @Nullable List<Dataset> datasets, @Nullable String filterText, - @Nullable InlinePresentation inlineAuthentication, - @Nullable List<InlineAction> inlineActions, @NonNull AutofillId autofillId, + @Nullable InlinePresentation inlineAuthentication, @NonNull AutofillId autofillId, @NonNull Runnable onErrorCallback, @NonNull BiConsumer<Dataset, Integer> onClickFactory, @Nullable RemoteInlineSuggestionRenderService remoteRenderService) { @@ -167,16 +162,6 @@ public final class InlineSuggestionFactory { inlineSuggestions.add(inlineSuggestion); } - if (inlineActions != null) { - for (InlineAction inlineAction : inlineActions) { - final InlineSuggestion inlineActionSuggestion = createInlineAction(isAugmented, - mergedInlinePresentation(request, 0, inlineAction.getInlinePresentation()), - inlineAction.getAction(), - remoteRenderService, onErrorCallback, request.getHostInputToken(), - request.getHostDisplayId()); - inlineSuggestions.add(inlineActionSuggestion); - } - } return new InlineSuggestionsResponse(inlineSuggestions); } @@ -211,35 +196,6 @@ public final class InlineSuggestionFactory { return valueText.toLowerCase().startsWith(constraintLowerCase); } - - private static InlineSuggestion createInlineAction(boolean isAugmented, - @NonNull InlinePresentation presentation, - @NonNull IntentSender action, - @Nullable RemoteInlineSuggestionRenderService remoteRenderService, - @NonNull Runnable onErrorCallback, @Nullable IBinder hostInputToken, - int displayId) { - final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo( - presentation.getInlinePresentationSpec(), - isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM - : InlineSuggestionInfo.SOURCE_AUTOFILL, - presentation.getAutofillHints(), InlineSuggestionInfo.TYPE_ACTION, - presentation.isPinned()); - final Runnable onClickAction = () -> { - try { - // TODO(b/150499490): route the intent to the client app to have it fired there, - // so that it will appear as a part of the same task as the client app (similar - // to the authentication flow). - action.sendIntent(null, 0, null, null, null); - } catch (IntentSender.SendIntentException e) { - onErrorCallback.run(); - Slog.w(TAG, "Error sending inline action intent"); - } - }; - return new InlineSuggestion(inlineSuggestionInfo, - createInlineContentProvider(presentation, onClickAction, onErrorCallback, - remoteRenderService, hostInputToken, displayId)); - } - private static InlineSuggestion createInlineSuggestion(boolean isAugmented, @NonNull Dataset dataset, int datasetIndex, @NonNull InlinePresentation inlinePresentation, @@ -247,12 +203,15 @@ public final class InlineSuggestionFactory { @NonNull RemoteInlineSuggestionRenderService remoteRenderService, @NonNull Runnable onErrorCallback, @Nullable IBinder hostInputToken, int displayId) { + final String suggestionSource = isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM + : InlineSuggestionInfo.SOURCE_AUTOFILL; + final String suggestionType = + dataset.getAuthentication() == null ? InlineSuggestionInfo.TYPE_SUGGESTION + : InlineSuggestionInfo.TYPE_ACTION; final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo( - inlinePresentation.getInlinePresentationSpec(), - isAugmented ? InlineSuggestionInfo.SOURCE_PLATFORM - : InlineSuggestionInfo.SOURCE_AUTOFILL, - inlinePresentation.getAutofillHints(), - InlineSuggestionInfo.TYPE_SUGGESTION, inlinePresentation.isPinned()); + inlinePresentation.getInlinePresentationSpec(), suggestionSource, + inlinePresentation.getAutofillHints(), suggestionType, + inlinePresentation.isPinned()); final InlineSuggestion inlineSuggestion = new InlineSuggestion(inlineSuggestionInfo, createInlineContentProvider(inlinePresentation, @@ -270,7 +229,7 @@ public final class InlineSuggestionFactory { final InlineSuggestionInfo inlineSuggestionInfo = new InlineSuggestionInfo( inlinePresentation.getInlinePresentationSpec(), InlineSuggestionInfo.SOURCE_AUTOFILL, inlinePresentation.getAutofillHints(), - InlineSuggestionInfo.TYPE_SUGGESTION, inlinePresentation.isPinned()); + InlineSuggestionInfo.TYPE_ACTION, inlinePresentation.isPinned()); return new InlineSuggestion(inlineSuggestionInfo, createInlineContentProvider(inlinePresentation, |