From ae93a0111d5bd8dd500f0610abd124f945858df3 Mon Sep 17 00:00:00 2001 From: Adam He Date: Wed, 20 Feb 2019 15:57:05 -0800 Subject: [PATCH] Permanently and immediately binds the augmented autofill service. Fixes: 124456706 Test: manual verification Change-Id: I01a2035f405b9ed659412828de9ff08937bc673d --- .../augmented/AugmentedAutofillService.java | 20 +++++++++++++++++++ .../augmented/IAugmentedAutofillService.aidl | 3 ++- .../autofill/AutofillManagerServiceImpl.java | 1 + .../RemoteAugmentedAutofillService.java | 19 ++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) 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 1bce11ee95de0..a22b8f901c400 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -1071,6 +1071,7 @@ final class AutofillManagerServiceImpl mRemoteAugmentedAutofillService.destroy(); mRemoteAugmentedAutofillService = null; } + 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 61f63d3bbc3d9..a76c5e71a53a5 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java @@ -54,6 +54,9 @@ final class RemoteAugmentedAutofillService boolean bindInstantServiceAllowed, boolean verbose) { super(context, AugmentedAutofillService.SERVICE_INTERFACE, serviceName, userId, callbacks, bindInstantServiceAllowed, verbose); + + // Bind right away. + scheduleBind(); } @Nullable @@ -81,6 +84,22 @@ final class RemoteAugmentedAutofillService return 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);