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

Commit 1eb01219 authored by Simranjit Kohli's avatar Simranjit Kohli
Browse files

[Autofill] Fix getAutofillComponent returning null sometimes

Sometimes getAutofillComponent may return null. This can be easily
reproduced by killing the autofill provider, then calling
AutofillManager#getAutofillServiceComponentName, which returns null.
With this change, it'll return the user selected component.

Test: atest CtsAutoFillServiceTestCases
Bug: 319503432
Flag: android.service.autofill.fix_get_autofill_component
Change-Id: I10dd46830feb82c82a8f26084f2fc50685b5a1ec
parent 0b3b6a65
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -63,6 +63,16 @@ flag {
  bug: "334141398"
}

flag {
  name: "fix_get_autofill_component"
  namespace: "autofill"
  description: "Fix getAutofillComponent returning null, even when user has selected provider"
  bug: "319503432"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "test_flag"
  namespace: "autofill"
+7 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.autofill;

import static android.Manifest.permission.MANAGE_AUTO_FILL;
import static android.content.Context.AUTOFILL_MANAGER_SERVICE;
import static android.service.autofill.Flags.fixGetAutofillComponent;
import static android.view.autofill.AutofillManager.MAX_TEMP_AUGMENTED_SERVICE_DURATION_MS;
import static android.view.autofill.AutofillManager.getSmartSuggestionModeToString;

@@ -1920,8 +1921,12 @@ public final class AutofillManagerService

            try {
                synchronized (mLock) {
                    final AutofillManagerServiceImpl service =
                            peekServiceForUserWithLocalBinderIdentityLocked(userId);
                    final AutofillManagerServiceImpl service;
                    if (fixGetAutofillComponent()) {
                        service = getServiceForUserWithLocalBinderIdentityLocked(userId);
                    } else {
                        service = peekServiceForUserWithLocalBinderIdentityLocked(userId);
                    }
                    if (service != null) {
                        componentName = service.getServiceComponentName();
                    } else if (sVerbose) {