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

Commit 21065061 authored by Adam He's avatar Adam He
Browse files

Allow disojoint datasets for inline suggestions.

Autofill providers are allowed to pass back datasets that do not always
contain data for all views present. Inline response will ignore datasets
not relevant to currently focused AutofillId or those without an
InlinePresentation.

Fixes: 150312101
Test: atest InlineLoginActivityTest
Change-Id: Ie4d48eec571d4ccbfcbff8aa3ad4a75f7716072c
parent f73b8416
Loading
Loading
Loading
Loading
+21 −13
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
import android.view.autofill.IAutoFillManagerClient;
import android.view.inputmethod.InlineSuggestionsRequest;
import android.view.inputmethod.InlineSuggestionsResponse;

import com.android.internal.infra.AbstractRemoteService;
import com.android.internal.infra.AndroidFuture;
@@ -243,8 +244,7 @@ final class RemoteAugmentedAutofillService
        }
        mCallbacks.setLastResponse(sessionId);

        try {
            inlineSuggestionsCallback.onInlineSuggestionsResponse(
        final InlineSuggestionsResponse inlineSuggestionsResponse =
                InlineSuggestionFactory.createAugmentedInlineSuggestionsResponse(
                        request, inlineSuggestionsData, focusedId, mContext,
                        dataset -> {
@@ -256,7 +256,15 @@ final class RemoteAugmentedAutofillService
                            } catch (RemoteException e) {
                                Slog.w(TAG, "Encounter exception autofilling the values");
                            }
                            }, onErrorCallback, remoteRenderService));
                        }, onErrorCallback, remoteRenderService);

        if (inlineSuggestionsResponse == null) {
            Slog.w(TAG, "InlineSuggestionFactory created null response");
            return;
        }

        try {
            inlineSuggestionsCallback.onInlineSuggestionsResponse(inlineSuggestionsResponse);
        } catch (RemoteException e) {
            Slog.w(TAG, "Exception sending inline suggestions response back to IME.");
        }
+6 −0
Original line number Diff line number Diff line
@@ -2686,6 +2686,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                                requestHideFillUi(mCurrentViewId);
                            }
                        }, mService.getRemoteInlineSuggestionRenderServiceLocked());

        if (inlineSuggestionsResponse == null) {
            Slog.w(TAG, "InlineSuggestionFactory created null response");
            return false;
        }

        try {
            imeResponse.getCallback().onInlineSuggestionsResponse(inlineSuggestionsResponse);
        } catch (RemoteException e) {
+2 −2
Original line number Diff line number Diff line
@@ -150,13 +150,13 @@ public final class InlineSuggestionFactory {
            final int fieldIndex = dataset.getFieldIds().indexOf(autofillId);
            if (fieldIndex < 0) {
                Slog.w(TAG, "AutofillId=" + autofillId + " not found in dataset");
                return null;
                continue;
            }
            final InlinePresentation inlinePresentation = dataset.getFieldInlinePresentation(
                    fieldIndex);
            if (inlinePresentation == null) {
                Slog.w(TAG, "InlinePresentation not found in dataset");
                return null;
                continue;
            }
            if (!includeDataset(dataset, fieldIndex, filterText)) {
                continue;