Merge "Fix cts fail for android.autofillservice.cts.augmented" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-05-12 17:31:44 +00:00
committed by Android (Google) Code Review
3 changed files with 46 additions and 13 deletions

View File

@@ -86,6 +86,16 @@ public final class FillRequest implements Parcelable {
*/
public static final @RequestFlags int FLAG_PASSWORD_INPUT_TYPE = 0x4;
/**
* Indicates the view was not focused.
*
* <p><b>Note:</b> Defines the flag value to 0x10, because the flag value 0x08 has been defined
* in {@link AutofillManager}.</p>
*
* @hide
*/
public static final @RequestFlags int FLAG_VIEW_NOT_FOCUSED = 0x10;
/** @hide */
public static final int INVALID_REQUEST_ID = Integer.MIN_VALUE;
@@ -165,7 +175,8 @@ public final class FillRequest implements Parcelable {
@IntDef(flag = true, prefix = "FLAG_", value = {
FLAG_MANUAL_REQUEST,
FLAG_COMPATIBILITY_MODE_REQUEST,
FLAG_PASSWORD_INPUT_TYPE
FLAG_PASSWORD_INPUT_TYPE,
FLAG_VIEW_NOT_FOCUSED
})
@Retention(RetentionPolicy.SOURCE)
@DataClass.Generated.Member
@@ -187,6 +198,8 @@ public final class FillRequest implements Parcelable {
return "FLAG_COMPATIBILITY_MODE_REQUEST";
case FLAG_PASSWORD_INPUT_TYPE:
return "FLAG_PASSWORD_INPUT_TYPE";
case FLAG_VIEW_NOT_FOCUSED:
return "FLAG_VIEW_NOT_FOCUSED";
default: return Integer.toHexString(value);
}
}
@@ -248,7 +261,8 @@ public final class FillRequest implements Parcelable {
mFlags,
FLAG_MANUAL_REQUEST
| FLAG_COMPATIBILITY_MODE_REQUEST
| FLAG_PASSWORD_INPUT_TYPE);
| FLAG_PASSWORD_INPUT_TYPE
| FLAG_VIEW_NOT_FOCUSED);
this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
onConstructed();
@@ -384,7 +398,8 @@ public final class FillRequest implements Parcelable {
mFlags,
FLAG_MANUAL_REQUEST
| FLAG_COMPATIBILITY_MODE_REQUEST
| FLAG_PASSWORD_INPUT_TYPE);
| FLAG_PASSWORD_INPUT_TYPE
| FLAG_VIEW_NOT_FOCUSED);
this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
onConstructed();
@@ -405,10 +420,10 @@ public final class FillRequest implements Parcelable {
};
@DataClass.Generated(
time = 1588119440090L,
time = 1589280816805L,
codegenVersion = "1.0.15",
sourceFile = "frameworks/base/core/java/android/service/autofill/FillRequest.java",
inputSignatures = "public static final @android.service.autofill.FillRequest.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PASSWORD_INPUT_TYPE\npublic static final int INVALID_REQUEST_ID\nprivate final int mId\nprivate final @android.annotation.NonNull java.util.List<android.service.autofill.FillContext> mFillContexts\nprivate final @android.annotation.Nullable android.os.Bundle mClientState\nprivate final @android.service.autofill.FillRequest.RequestFlags int mFlags\nprivate final @android.annotation.Nullable android.view.inputmethod.InlineSuggestionsRequest mInlineSuggestionsRequest\nprivate void onConstructed()\nclass FillRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
inputSignatures = "public static final @android.service.autofill.FillRequest.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PASSWORD_INPUT_TYPE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_VIEW_NOT_FOCUSED\npublic static final int INVALID_REQUEST_ID\nprivate final int mId\nprivate final @android.annotation.NonNull java.util.List<android.service.autofill.FillContext> mFillContexts\nprivate final @android.annotation.Nullable android.os.Bundle mClientState\nprivate final @android.service.autofill.FillRequest.RequestFlags int mFlags\nprivate final @android.annotation.Nullable android.view.inputmethod.InlineSuggestionsRequest mInlineSuggestionsRequest\nprivate void onConstructed()\nclass FillRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}

View File

@@ -18,6 +18,7 @@ package android.view.autofill;
import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST;
import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
import static android.service.autofill.FillRequest.FLAG_VIEW_NOT_FOCUSED;
import static android.view.autofill.Helper.sDebug;
import static android.view.autofill.Helper.sVerbose;
import static android.view.autofill.Helper.toList;
@@ -879,7 +880,11 @@ public final class AutofillManager {
* @param view view requesting the new autofill context.
*/
public void requestAutofill(@NonNull View view) {
notifyViewEntered(view, FLAG_MANUAL_REQUEST);
int flags = FLAG_MANUAL_REQUEST;
if (!view.isFocused()) {
flags |= FLAG_VIEW_NOT_FOCUSED;
}
notifyViewEntered(view, flags);
}
/**
@@ -926,7 +931,11 @@ public final class AutofillManager {
* @param absBounds absolute boundaries of the virtual view in the screen.
*/
public void requestAutofill(@NonNull View view, int virtualId, @NonNull Rect absBounds) {
notifyViewEntered(view, virtualId, absBounds, FLAG_MANUAL_REQUEST);
int flags = FLAG_MANUAL_REQUEST;
if (!view.isFocused()) {
flags |= FLAG_VIEW_NOT_FOCUSED;
}
notifyViewEntered(view, virtualId, absBounds, flags);
}
/**

View File

@@ -19,6 +19,7 @@ package com.android.server.autofill;
import static android.service.autofill.AutofillFieldClassificationService.EXTRA_SCORES;
import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST;
import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
import static android.service.autofill.FillRequest.FLAG_VIEW_NOT_FOCUSED;
import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
import static android.view.autofill.AutofillManager.ACTION_RESPONSE_EXPIRED;
import static android.view.autofill.AutofillManager.ACTION_START_SESSION;
@@ -653,6 +654,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
return mService.isInlineSuggestionsEnabled();
}
private boolean isViewFocusedLocked(int flags) {
return (flags & FLAG_VIEW_NOT_FOCUSED) == 0;
}
/**
* Clears the existing response for the partition, reads a new structure, and then requests a
* new fill response from the fill service.
@@ -711,10 +716,13 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
cancelCurrentRequestLocked();
// Only ask IME to create inline suggestions request if Autofill provider supports it and
// the render service is available.
// the render service is available except the autofill is triggered manually and the view
// is also not focused.
final RemoteInlineSuggestionRenderService remoteRenderService =
mService.getRemoteInlineSuggestionRenderServiceLocked();
if (isInlineSuggestionsEnabledByAutofillProviderLocked() && remoteRenderService != null) {
if (isInlineSuggestionsEnabledByAutofillProviderLocked()
&& remoteRenderService != null
&& isViewFocusedLocked(flags)) {
Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer =
mAssistReceiver.newAutofillRequestLocked(viewState,
/*isInlineRequest=*/ true);
@@ -3139,9 +3147,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
};
// When the inline suggestion render service is available, there are 2 cases when
// augmented autofill should ask IME for inline suggestion request, because standard
// autofill flow didn't:
// When the inline suggestion render service is available and the view is focused, there
// are 2 cases when augmented autofill should ask IME for inline suggestion request,
// because standard autofill flow didn't:
// 1. the field is augmented autofill only (when standard autofill provider is None or
// when it returns null response)
// 2. standard autofill provider doesn't support inline suggestion
@@ -3149,7 +3157,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mService.getRemoteInlineSuggestionRenderServiceLocked();
if (remoteRenderService != null
&& (mForAugmentedAutofillOnly
|| !isInlineSuggestionsEnabledByAutofillProviderLocked())) {
|| !isInlineSuggestionsEnabledByAutofillProviderLocked())
&& isViewFocusedLocked(flags)) {
if (sDebug) Slog.d(TAG, "Create inline request for augmented autofill");
remoteRenderService.getInlineSuggestionsRendererInfo(new RemoteCallback(
(extras) -> {