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

Commit 26675231 authored by Felipe Leme's avatar Felipe Leme
Browse files

Fixed updateAutofillValue() when mText is not set.

updateAutofillValue() was crashing some apps when the mText was not set at the
time it was called. One solution would be to not set mText at all - since the
Autofill Service should rely only on getAutofillValue() - but that could break
existing services.

Hence, a safer solution is to set that field if it's null.

Test: existing CtsAutoFillServiceTestCases tests pass
Test: manual verification using Fly Delta app

Fixes: 62751039

Change-Id: I91a8e0ed5db4148f5eb5729b8e254aa3531f15e4
parent 1e1c5d7b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1051,6 +1051,9 @@ public class AssistStructure implements Parcelable {
        public void updateAutofillValue(AutofillValue value) {
            mAutofillValue = value;
            if (value.isText()) {
                if (mText == null) {
                    mText = new ViewNodeText();
                }
                mText.mText = value.getTextValue();
            }
        }
+5 −4
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.app.Activity;
import android.app.Service;
import android.app.assist.AssistStructure;
import android.content.Intent;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.IBinder;
import android.os.ICancellationSignal;
@@ -35,9 +34,6 @@ import android.view.autofill.AutofillManager;

import com.android.internal.os.SomeArgs;

import java.util.ArrayList;
import java.util.List;

/**
 * Top-level service of the current autofill service for a given user.
 *
@@ -192,6 +188,11 @@ public abstract class AutofillService extends Service {
     * {@link SaveCallback#onSuccess()} or {@link SaveCallback#onFailure(CharSequence)})
     * to notify the result of the request.
     *
     * <p><b>NOTE: </b>to retrieve the actual value of the field, the service should call
     * {@link android.app.assist.AssistStructure.ViewNode#getAutofillValue()}; if it calls
     * {@link android.app.assist.AssistStructure.ViewNode#getText()} or other methods, there is no
     * guarantee such method will return the most recent value of the field.
     *
     * @param request the {@link SaveRequest request} to handle.
     *        See {@link FillResponse} for examples of multiple-sections requests.
     * @param callback object used to notify the result of the request.