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

Commit d967ee34 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Dedupes ranked apps in sharing windows, and reuses computed scores in...

Merge "Dedupes ranked apps in sharing windows, and reuses computed scores in sorting for ResolverActivity." into oc-dr1-dev
parents 262359fd 6afa4f29
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1681,7 +1681,14 @@ public class ResolverActivity extends Activity {
        // We assume that at this point we've already filtered out the only intent for a different
        // targetUserId which we're going to use.
        private void addResolveInfo(DisplayResolveInfo dri) {
            if (dri.mResolveInfo.targetUserId == UserHandle.USER_CURRENT) {
            if (dri != null && dri.mResolveInfo != null
                    && dri.mResolveInfo.targetUserId == UserHandle.USER_CURRENT) {
                // Checks if this info is already listed in display.
                for (DisplayResolveInfo existingInfo : mDisplayList) {
                    if (resolveInfoMatch(dri.mResolveInfo, existingInfo.mResolveInfo)) {
                        return;
                    }
                }
                mDisplayList.add(dri);
            }
        }
+3 −1
Original line number Diff line number Diff line
@@ -553,8 +553,10 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
                Log.e(TAG, "Error in Predict: " + e);
            }
        }
        if (mAfterCompute != null) {
            mAfterCompute.afterCompute();
        }
    }

    // adds select prob as the default values, according to a pre-trained Logistic Regression model.
    private void addDefaultSelectProbability(ResolverTarget target) {
+48 −26
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.RemoteException;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;

import java.lang.InterruptedException;
@@ -55,7 +56,11 @@ public class ResolverListController {
    private static final String TAG = "ResolverListController";
    private static final boolean DEBUG = false;

    Object mLock = new Object();

    @GuardedBy("mLock")
    private ResolverComparator mResolverComparator;
    private boolean isComputed = false;

    public ResolverListController(
            Context context,
@@ -68,6 +73,10 @@ public class ResolverListController {
        mLaunchedFromUid = launchedFromUid;
        mTargetIntent = targetIntent;
        mReferrerPackage = referrerPackage;
        synchronized (mLock) {
            mResolverComparator =
                    new ResolverComparator(mContext, mTargetIntent, mReferrerPackage, null);
        }
    }

    @VisibleForTesting
@@ -232,18 +241,21 @@ public class ResolverListController {
    @VisibleForTesting
    @WorkerThread
    public void sort(List<ResolverActivity.ResolvedComponentInfo> inputList) {
        synchronized (mLock) {
            if (mResolverComparator == null) {
                Log.d(TAG, "Comparator has already been destroyed; skipped.");
                return;
            }
            final CountDownLatch finishComputeSignal = new CountDownLatch(1);
            ComputeCallback callback = new ComputeCallback(finishComputeSignal);
        if (mResolverComparator == null) {
            mResolverComparator =
                    new ResolverComparator(mContext, mTargetIntent, mReferrerPackage, callback);
        } else {
            mResolverComparator.setCallBack(callback);
        }
            try {
                long beforeRank = System.currentTimeMillis();
                if (!isComputed) {
                    mResolverComparator.compute(inputList);
                    finishComputeSignal.await();
                    isComputed = true;
                }
                Collections.sort(inputList, mResolverComparator);
                long afterRank = System.currentTimeMillis();
                if (DEBUG) {
@@ -253,6 +265,7 @@ public class ResolverListController {
                Log.e(TAG, "Compute & Sort was interrupted: " + e);
            }
        }
    }

    private static boolean isSameResolvedComponent(ResolveInfo a,
            ResolverActivity.ResolvedComponentInfo b) {
@@ -271,27 +284,36 @@ public class ResolverListController {

    @VisibleForTesting
    public float getScore(ResolverActivity.DisplayResolveInfo target) {
        synchronized (mLock) {
            if (mResolverComparator == null) {
                return 0.0f;
            }
            return mResolverComparator.getScore(target.getResolvedComponentName());
        }
    }

    public void updateModel(ComponentName componentName) {
        synchronized (mLock) {
            if (mResolverComparator != null) {
                mResolverComparator.updateModel(componentName);
            }
        }
    }

    public void updateChooserCounts(String packageName, int userId, String action) {
        synchronized (mLock) {
            if (mResolverComparator != null) {
                mResolverComparator.updateChooserCounts(packageName, userId, action);
            }
        }
    }

    public void destroy() {
        synchronized (mLock) {
            if (mResolverComparator != null) {
                mResolverComparator.destroy();
            }
            mResolverComparator = null;
        }
    }
}