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

Commit bcedb60f authored by Perumaal S's avatar Perumaal S Committed by Perumaal Shanmugam
Browse files

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
parent 2aa255a7
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ public final class ContentSuggestionsPerUserService extends

    @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 @@ public final class ContentSuggestionsPerUserService extends
    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 @@ public final class ContentSuggestionsPerUserService extends
    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 @@ public final class ContentSuggestionsPerUserService extends

    @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 @@ public final class ContentSuggestionsPerUserService extends

    @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 @@ public final class ContentSuggestionsPerUserService extends
                        @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);
        }