From bcedb60f4cc23908b505f3ea648a1eb065f2d78e Mon Sep 17 00:00:00 2001 From: Perumaal S Date: Fri, 14 Jun 2019 15:34:07 -0700 Subject: [PATCH] qt_dev: Fix ContentSuggestions service connection Issue: When the RemoteContentSuggestionsService dies (due to package manager update or clear data), the ContentSuggestionsPerUserService (system) does not restart and uses an old zombie instance. Fix: Reset the instance upon onServiceDied in the system service. Test: Verified that stopping/clear-data/package-update of Device Personalization Services (which implements ContentSuggestionsService) multiple-times and then Overview long-press actually works. Also verified that if the Remote Service crashes, we don't keep reconnecting infinitely. Fixes: 120865921 Fixes: 130420008 Change-Id: I80197ec1cb446ddb5f1865a4b75beb18b48d2e9e --- .../ContentSuggestionsPerUserService.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java index 770931179c5e9..bae453d6a7b64 100644 --- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java +++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java @@ -95,7 +95,7 @@ protected boolean updateLocked(boolean disabled) { @GuardedBy("mLock") void provideContextImageLocked(int taskId, @NonNull Bundle imageContextRequestExtras) { - RemoteContentSuggestionsService service = getRemoteServiceLocked(); + RemoteContentSuggestionsService service = ensureRemoteServiceLocked(); if (service != null) { ActivityManager.TaskSnapshot snapshot = mActivityTaskManagerInternal.getTaskSnapshot(taskId, false); @@ -118,7 +118,7 @@ void provideContextImageLocked(int taskId, @NonNull Bundle imageContextRequestEx void suggestContentSelectionsLocked( @NonNull SelectionsRequest selectionsRequest, @NonNull ISelectionsCallback selectionsCallback) { - RemoteContentSuggestionsService service = getRemoteServiceLocked(); + RemoteContentSuggestionsService service = ensureRemoteServiceLocked(); if (service != null) { service.suggestContentSelections(selectionsRequest, selectionsCallback); } @@ -128,7 +128,7 @@ void suggestContentSelectionsLocked( void classifyContentSelectionsLocked( @NonNull ClassificationsRequest classificationsRequest, @NonNull IClassificationsCallback callback) { - RemoteContentSuggestionsService service = getRemoteServiceLocked(); + RemoteContentSuggestionsService service = ensureRemoteServiceLocked(); if (service != null) { service.classifyContentSelections(classificationsRequest, callback); } @@ -136,7 +136,7 @@ void classifyContentSelectionsLocked( @GuardedBy("mLock") void notifyInteractionLocked(@NonNull String requestId, @NonNull Bundle bundle) { - RemoteContentSuggestionsService service = getRemoteServiceLocked(); + RemoteContentSuggestionsService service = ensureRemoteServiceLocked(); if (service != null) { service.notifyInteraction(requestId, bundle); } @@ -153,12 +153,12 @@ private void updateRemoteServiceLocked() { @GuardedBy("mLock") @Nullable - private RemoteContentSuggestionsService getRemoteServiceLocked() { + private RemoteContentSuggestionsService ensureRemoteServiceLocked() { if (mRemoteService == null) { final String serviceName = getComponentNameLocked(); if (serviceName == null) { if (mMaster.verbose) { - Slog.v(TAG, "getRemoteServiceLocked(): not set"); + Slog.v(TAG, "ensureRemoteServiceLocked(): not set"); } return null; } @@ -170,8 +170,8 @@ private RemoteContentSuggestionsService getRemoteServiceLocked() { @Override public void onServiceDied( @NonNull RemoteContentSuggestionsService service) { - // TODO(b/120865921): properly implement Slog.w(TAG, "remote content suggestions service died"); + updateRemoteServiceLocked(); } }, mMaster.isBindInstantServiceAllowed(), mMaster.verbose); }