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

Commit 88534657 authored by Kang Li's avatar Kang Li Committed by android-build-merger
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
am: d967ee34

Change-Id: I9573bc8878123fbad308d27adb2977811814ffcd
parents 1b1a55a2 d967ee34
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;
        }
    }
}