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

Commit 9a99d9ce authored by Joshua Trask's avatar Joshua Trask Committed by Android (Google) Code Review
Browse files

Merge "Strip resources held by ResolverRankerService CB" into main

parents 4584385d d0a266c3
Loading
Loading
Loading
Loading
+29 −14
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.metrics.LogMaker;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
@@ -46,6 +47,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;

import com.google.android.collect.Lists;

import java.lang.ref.WeakReference;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
@@ -372,20 +374,7 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator
        }

        public final IResolverRankerResult resolverRankerResult =
                new IResolverRankerResult.Stub() {
            @Override
            public void sendResult(List<ResolverTarget> targets) throws RemoteException {
                if (DEBUG) {
                    Log.d(TAG, "Sending Result back to Resolver: " + targets);
                }
                synchronized (mLock) {
                    final Message msg = Message.obtain();
                    msg.what = RANKER_SERVICE_RESULT;
                    msg.obj = targets;
                    mHandler.sendMessage(msg);
                }
            }
        };
                new ResolverRankerResultCallback(mLock, mHandler);

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
@@ -417,6 +406,32 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator
        }
    }

    private static class ResolverRankerResultCallback extends IResolverRankerResult.Stub {
        private final Object mLock;
        private final WeakReference<Handler> mHandlerRef;

        private ResolverRankerResultCallback(Object lock, Handler handler) {
            mLock = lock;
            mHandlerRef = new WeakReference<>(handler);
        }

        @Override
        public void sendResult(List<ResolverTarget> targets) throws RemoteException {
            if (DEBUG) {
                Log.d(TAG, "Sending Result back to Resolver: " + targets);
            }
            synchronized (mLock) {
                final Message msg = Message.obtain();
                msg.what = RANKER_SERVICE_RESULT;
                msg.obj = targets;
                Handler handler = mHandlerRef.get();
                if (handler != null) {
                    handler.sendMessage(msg);
                }
            }
        }
    }

    @Override
    void beforeCompute() {
        super.beforeCompute();