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

Commit ef0af93c authored by Simranjit Kohli's avatar Simranjit Kohli
Browse files

[Autofill PCC]: Optimize PCC Detection calling

PCC Detection feature should only be enabled if both conditions are satisfied.
1. flag:pcc_classification_enabled is enabled
2. Device has config: config_defaultFieldClassificationService defined.

In the absence of either of the above, PCC feature should be turned off.

Test: atest CtsAutoFillServiceTestCases
The above 'atest CtsAutoFillServiceTestCases' was ran in two cases
1. config_defaultFieldClassificationService not present on device.
2. config_defaultFieldClassificationService defined on the device.
Also, ran through Autofill usecase manually.
Bug: 279610519

Merged-In: I92f509b150586f7ad35580240a2981c1d31f10a9
Change-Id: I92f509b150586f7ad35580240a2981c1d31f10a9
parent fec1a431
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -760,6 +760,12 @@ public final class AutofillManagerService
        return false;
    }

    // Called by Shell command
    String getFieldDetectionServiceName(@UserIdInt int userId) {
        enforceCallingPermissionForManagement();
        return mFieldClassificationResolver.readServiceName(userId);
    }

    // Called by Shell command
    boolean setTemporaryDetectionService(@UserIdInt int userId, @NonNull String serviceName,
            int durationMs) {
@@ -903,9 +909,9 @@ public final class AutofillManagerService
    }

    /**
     * Whether the Autofill PCC Classification feature is enabled.
     * Whether the Autofill PCC Classification feature flag is enabled.
     */
    public boolean isPccClassificationEnabled() {
    public boolean isPccClassificationFlagEnabled() {
        synchronized (mFlagLock) {
            return mPccClassificationEnabled;
        }
+17 −0
Original line number Diff line number Diff line
@@ -1730,6 +1730,23 @@ final class AutofillManagerServiceImpl
        return mRemoteFieldClassificationService;
    }


    public boolean isPccClassificationEnabled() {
        boolean result = isPccClassificationEnabledInternal();
        if (sVerbose) {
            Slog.v(TAG, "pccEnabled: " + result);
        }
        return result;
    }

    public boolean isPccClassificationEnabledInternal() {
        boolean flagEnabled = mMaster.isPccClassificationFlagEnabled();
        if (!flagEnabled) return false;
        synchronized (mLock) {
            return getRemoteFieldClassificationServiceLocked() != null;
        }
    }

    /**
     * Called when the {@link AutofillManagerService#mFieldClassificationResolver}
     * changed (among other places).
+11 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.os.RemoteCallback;
import android.os.ShellCommand;
import android.os.UserHandle;
import android.service.autofill.AutofillFieldClassificationService.Scores;
import android.text.TextUtils;
import android.view.autofill.AutofillManager;

import com.android.internal.os.IResultReceiver;
@@ -154,6 +155,8 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand {
                return getBindInstantService(pw);
            case "default-augmented-service-enabled":
                return getDefaultAugmentedServiceEnabled(pw);
            case "field-detection-service-enabled":
                return isFieldDetectionServiceEnabled(pw);
            case "saved-password-count":
                return getSavedPasswordCount(pw);
            default:
@@ -343,6 +346,14 @@ public final class AutofillManagerServiceShellCommand extends ShellCommand {
        return 0;
    }

    private int isFieldDetectionServiceEnabled(PrintWriter pw) {
        final int userId = getNextIntArgRequired();
        String name = mService.getFieldDetectionServiceName(userId);
        boolean enabled = !TextUtils.isEmpty(name);
        pw.println(enabled);
        return 0;
    }

    private int setTemporaryAugmentedService(PrintWriter pw) {
        final int userId = getNextIntArgRequired();
        final String serviceName = getNextArg();
+3 −3
Original line number Diff line number Diff line
@@ -798,7 +798,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
     * Returns empty list if PCC is off or no types available
    */
    private List<String> getTypeHintsForProvider() {
        if (!mService.getMaster().isPccClassificationEnabled()) {
        if (!mService.isPccClassificationEnabled()) {
            return Collections.EMPTY_LIST;
        }
        final String typeHints = mService.getMaster().getPccProviderHints();
@@ -1200,7 +1200,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
        // structure is taken. This causes only one fill request per burst of focus changes.
        cancelCurrentRequestLocked();

        if (mService.getMaster().isPccClassificationEnabled()
        if (mService.isPccClassificationEnabled()
                && mClassificationState.mHintsToAutofillIdMap == null) {
            if (sVerbose) {
                Slog.v(TAG, "triggering field classification");
@@ -1631,7 +1631,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
            Slog.d(TAG, "DBG: computeDatasetsForProviderAndUpdateContainer: "
                    + autofillProviderContainer);
        }
        if (!mService.getMaster().isPccClassificationEnabled())  {
        if (!mService.isPccClassificationEnabled())  {
            if (sVerbose) {
                Slog.v(TAG, "PCC classification is disabled");
            }