[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
This commit is contained in:
Simranjit Kohli
2023-05-07 12:21:07 -07:00
parent fec1a4311e
commit ef0af93c7c
4 changed files with 39 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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).

View File

@@ -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();

View File

@@ -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");
}