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

Commit 92cac63a authored by Shashwat Razdan's avatar Shashwat Razdan Committed by Automerger Merge Worker
Browse files

Merge "Unlink to death before removing the callback wrapper in...

Merge "Unlink to death before removing the callback wrapper in SmartspaceService/AppPredictionServic3e" into tm-dev am: 1ec2fe2e am: 187a2c41

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18475472



Change-Id: Idb478cd0a58823064dc473c7bd6e40a0be5b617e
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f0e7087c 187a2c41
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -224,17 +224,16 @@ public abstract class AppPredictionService extends Service {
        }

        final CallbackWrapper wrapper = findCallbackWrapper(callbacks, callback);
        if (wrapper != null) {
        removeCallbackWrapper(callbacks, wrapper);
    }
    }

    private void removeCallbackWrapper(
                ArrayList<CallbackWrapper> callbacks, CallbackWrapper wrapper) {
        if (callbacks == null) {
    private void removeCallbackWrapper(@Nullable ArrayList<CallbackWrapper> callbacks,
            @Nullable CallbackWrapper wrapper) {
        if (callbacks == null || wrapper == null) {
            return;
        }
        callbacks.remove(wrapper);
        wrapper.destroy();
        if (callbacks.isEmpty()) {
            onStopPredictionUpdates();
        }
@@ -264,7 +263,8 @@ public abstract class AppPredictionService extends Service {
    public abstract void onRequestPredictionUpdate(@NonNull AppPredictionSessionId sessionId);

    private void doDestroyPredictionSession(@NonNull AppPredictionSessionId sessionId) {
        mSessionCallbacks.remove(sessionId);
        final ArrayList<CallbackWrapper> callbacks = mSessionCallbacks.remove(sessionId);
        if (callbacks != null) callbacks.forEach(CallbackWrapper::destroy);
        onDestroyPredictionSession(sessionId);
    }

@@ -314,12 +314,14 @@ public abstract class AppPredictionService extends Service {
                @Nullable Consumer<CallbackWrapper> onBinderDied) {
            mCallback = callback;
            mOnBinderDied = onBinderDied;
            if (mOnBinderDied != null) {
                try {
                    mCallback.asBinder().linkToDeath(this, 0);
                } catch (RemoteException e) {
                    Slog.e(TAG, "Failed to link to death: " + e);
                }
            }
        }

        public boolean isCallback(@NonNull IPredictionCallback callback) {
            if (mCallback == null) {
@@ -329,6 +331,12 @@ public abstract class AppPredictionService extends Service {
            return mCallback.equals(callback);
        }

        public void destroy() {
            if (mCallback != null && mOnBinderDied != null) {
                mCallback.asBinder().unlinkToDeath(this, 0);
            }
        }

        @Override
        public void accept(List<AppTarget> ts) {
            try {
@@ -342,6 +350,7 @@ public abstract class AppPredictionService extends Service {

        @Override
        public void binderDied() {
            destroy();
            mCallback = null;
            if (mOnBinderDied != null) {
                mOnBinderDied.accept(this);
+21 −12
Original line number Diff line number Diff line
@@ -202,10 +202,8 @@ public abstract class SmartspaceService extends Service {
        }

        final CallbackWrapper wrapper = findCallbackWrapper(callbacks, callback);
        if (wrapper != null) {
        removeCallbackWrapper(callbacks, wrapper);
    }
    }

    private void doRequestPredictionUpdate(@NonNull SmartspaceSessionId sessionId) {
        if (DEBUG) {
@@ -231,12 +229,13 @@ public abstract class SmartspaceService extends Service {
        return null;
    }

    private void removeCallbackWrapper(
            ArrayList<CallbackWrapper> callbacks, CallbackWrapper wrapper) {
        if (callbacks == null) {
    private void removeCallbackWrapper(@Nullable ArrayList<CallbackWrapper> callbacks,
            @Nullable CallbackWrapper wrapper) {
        if (callbacks == null || wrapper == null) {
            return;
        }
        callbacks.remove(wrapper);
        wrapper.destroy();
    }

    /**
@@ -249,7 +248,9 @@ public abstract class SmartspaceService extends Service {
            Log.d(TAG, "doDestroy mSessionCallbacks: " + mSessionCallbacks);
        }
        super.onDestroy();
        mSessionCallbacks.remove(sessionId);

        final ArrayList<CallbackWrapper> callbacks = mSessionCallbacks.remove(sessionId);
        if (callbacks != null) callbacks.forEach(CallbackWrapper::destroy);
        onDestroySmartspaceSession(sessionId);
    }

@@ -287,12 +288,14 @@ public abstract class SmartspaceService extends Service {
                @Nullable Consumer<CallbackWrapper> onBinderDied) {
            mCallback = callback;
            mOnBinderDied = onBinderDied;
            if (mOnBinderDied != null) {
                try {
                    mCallback.asBinder().linkToDeath(this, 0);
                } catch (RemoteException e) {
                    Slog.e(TAG, "Failed to link to death: " + e);
                }
            }
        }

        public boolean isCallback(@NonNull ISmartspaceCallback callback) {
            if (mCallback == null) {
@@ -317,9 +320,15 @@ public abstract class SmartspaceService extends Service {
            }
        }

        public void destroy() {
            if (mCallback != null && mOnBinderDied != null) {
                mCallback.asBinder().unlinkToDeath(this, 0);
            }
        }

        @Override
        public void binderDied() {
            mCallback.asBinder().unlinkToDeath(this, 0);
            destroy();
            mCallback = null;
            if (mOnBinderDied != null) {
                mOnBinderDied.accept(this);