diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java index ce83a57bf68b0..792eda7643206 100644 --- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java +++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java @@ -84,6 +84,18 @@ public abstract class AugmentedAutofillService extends Service { private final IAugmentedAutofillService mInterface = new IAugmentedAutofillService.Stub() { + @Override + public void onConnected() { + mHandler.sendMessage(obtainMessage(AugmentedAutofillService::handleOnConnected, + AugmentedAutofillService.this)); + } + + @Override + public void onDisconnected() { + mHandler.sendMessage(obtainMessage(AugmentedAutofillService::handleOnDisconnected, + AugmentedAutofillService.this)); + } + @Override public void onFillRequest(int sessionId, IBinder client, int taskId, ComponentName componentName, AutofillId focusedId, AutofillValue focusedValue, @@ -174,6 +186,14 @@ public abstract class AugmentedAutofillService extends Service { public void onDisconnected() { } + private void handleOnConnected() { + onConnected(); + } + + private void handleOnDisconnected() { + onDisconnected(); + } + private void handleOnFillRequest(int sessionId, @NonNull IBinder client, int taskId, @NonNull ComponentName componentName, @NonNull AutofillId focusedId, @Nullable AutofillValue focusedValue, long requestTime, diff --git a/core/java/android/service/autofill/augmented/IAugmentedAutofillService.aidl b/core/java/android/service/autofill/augmented/IAugmentedAutofillService.aidl index fb6912ac67523..509681113c1f5 100644 --- a/core/java/android/service/autofill/augmented/IAugmentedAutofillService.aidl +++ b/core/java/android/service/autofill/augmented/IAugmentedAutofillService.aidl @@ -31,7 +31,8 @@ import java.util.List; * @hide */ oneway interface IAugmentedAutofillService { - + void onConnected(); + void onDisconnected(); void onFillRequest(int sessionId, in IBinder autofillManagerClient, int taskId, in ComponentName activityComponent, in AutofillId focusedId, in AutofillValue focusedValue, long requestTime, in IFillCallback callback); diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 1a6dabb499080..15dce4af405be 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -1179,6 +1179,7 @@ final class AutofillManagerServiceImpl if (mMaster.verbose) Slog.v(TAG, "whitelisting augmented packages: " + packages); mWhitelistedAugmentAutofillPackages.addAll(packages); } + mRemoteAugmentedAutofillService = getRemoteAugmentedAutofillServiceLocked(); } } diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java index 9947aed8f0b48..88228fb3ec167 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java @@ -55,6 +55,9 @@ final class RemoteAugmentedAutofillService boolean bindInstantServiceAllowed, boolean verbose) { super(context, AugmentedAutofillService.SERVICE_INTERFACE, serviceName, userId, callbacks, bindInstantServiceAllowed, verbose); + + // Bind right away. + scheduleBind(); } @Nullable @@ -82,6 +85,22 @@ final class RemoteAugmentedAutofillService return new Pair<>(serviceInfo, serviceComponent); } + @Override // from RemoteService + protected void handleOnConnectedStateChanged(boolean state) { + if (state && getTimeoutIdleBindMillis() != PERMANENT_BOUND_TIMEOUT_MS) { + scheduleUnbind(); + } + try { + if (state) { + mService.onConnected(); + } else { + mService.onDisconnected(); + } + } catch (Exception e) { + Slog.w(mTag, "Exception calling onConnectedStateChanged(" + state + "): " + e); + } + } + @Override // from AbstractRemoteService protected IAugmentedAutofillService getServiceInterface(IBinder service) { return IAugmentedAutofillService.Stub.asInterface(service);