summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java67
1 files changed, 35 insertions, 32 deletions
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index e942b274dc53..55a92966eb29 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -645,33 +645,21 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
/**
- * Returns whether inline suggestions are enabled for Autofill.
+ * Returns whether inline suggestions are supported by Autofill provider (not augmented
+ * Autofill provider).
*/
- private boolean isInlineSuggestionsEnabledLocked() {
- return mService.isInlineSuggestionsEnabled()
- || mService.getRemoteInlineSuggestionRenderServiceLocked() != null;
+ private boolean isInlineSuggestionsEnabledByAutofillProviderLocked() {
+ return mService.isInlineSuggestionsEnabled();
}
- /**
- * Ask the IME to make an inline suggestions request if enabled.
- */
- private void maybeRequestInlineSuggestionsRequestThenFillLocked(@NonNull ViewState viewState,
- int newState, int flags) {
- if (isInlineSuggestionsEnabledLocked()) {
- Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer =
- mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ true);
- if (inlineSuggestionsRequestConsumer != null) {
- mInlineSuggestionSession.onCreateInlineSuggestionsRequest(mCurrentViewId,
- inlineSuggestionsRequestConsumer);
- }
- } else {
- mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ false);
- }
- requestNewFillResponseLocked(viewState, newState, flags);
+ private boolean isInlineSuggestionRenderServiceAvailable() {
+ return mService.getRemoteInlineSuggestionRenderServiceLocked() != null;
}
/**
* Reads a new structure and then request a new fill response from the fill service.
+ *
+ * <p> Also asks the IME to make an inline suggestions request if it's enabled.
*/
@GuardedBy("mLock")
private void requestNewFillResponseLocked(@NonNull ViewState viewState, int newState,
@@ -717,6 +705,21 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// structure is taken. This causes only one fill request per bust of focus changes.
cancelCurrentRequestLocked();
+ // Only ask IME to create inline suggestions request if Autofill provider supports it and
+ // the render service is available.
+ if (isInlineSuggestionsEnabledByAutofillProviderLocked()
+ && isInlineSuggestionRenderServiceAvailable()) {
+ Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer =
+ mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ true);
+ if (inlineSuggestionsRequestConsumer != null) {
+ mInlineSuggestionSession.onCreateInlineSuggestionsRequest(mCurrentViewId,
+ inlineSuggestionsRequestConsumer);
+ }
+ } else {
+ mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ false);
+ }
+
+ // Now request the assist structure data.
try {
final Bundle receiverExtras = new Bundle();
receiverExtras.putInt(EXTRA_REQUEST_ID, requestId);
@@ -2322,8 +2325,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if ((flags & FLAG_MANUAL_REQUEST) != 0) {
mForAugmentedAutofillOnly = false;
if (sDebug) Slog.d(TAG, "Re-starting session on view " + id + " and flags " + flags);
- maybeRequestInlineSuggestionsRequestThenFillLocked(viewState,
- ViewState.STATE_RESTARTED_SESSION, flags);
+ requestNewFillResponseLocked(viewState, ViewState.STATE_RESTARTED_SESSION, flags);
return true;
}
@@ -2333,8 +2335,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
Slog.d(TAG, "Starting partition or augmented request for view id " + id + ": "
+ viewState.getStateAsString());
}
- maybeRequestInlineSuggestionsRequestThenFillLocked(viewState,
- ViewState.STATE_STARTED_PARTITION, flags);
+ requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_PARTITION, flags);
return true;
} else {
if (sVerbose) {
@@ -2458,8 +2459,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// View is triggering autofill.
mCurrentViewId = viewState.id;
viewState.update(value, virtualBounds, flags);
- maybeRequestInlineSuggestionsRequestThenFillLocked(viewState,
- ViewState.STATE_STARTED_SESSION, flags);
+ requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_SESSION, flags);
break;
case ACTION_VALUE_CHANGED:
if (mCompatMode && (viewState.getState() & ViewState.STATE_URL_BAR) != 0) {
@@ -3107,12 +3107,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}, mService.getRemoteInlineSuggestionRenderServiceLocked());
};
- // There are 3 cases when augmented autofill should ask IME for a new request:
- // 1. standard autofill provider is None
- // 2. standard autofill provider doesn't support inline (and returns null response)
- // 3. standard autofill provider supports inline, but isn't called because the field
- // doesn't want autofill
- if (mForAugmentedAutofillOnly || !isInlineSuggestionsEnabledLocked()) {
+ // 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:
+ // 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
+ if (isInlineSuggestionRenderServiceAvailable()
+ && (mForAugmentedAutofillOnly
+ || !isInlineSuggestionsEnabledByAutofillProviderLocked())) {
if (sDebug) Slog.d(TAG, "Create inline request for augmented autofill");
mInlineSuggestionSession.onCreateInlineSuggestionsRequest(mCurrentViewId,
/*requestConsumer=*/ requestAugmentedAutofill);