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

Commit 45b7084e 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
am: 88534657

Change-Id: Idd79132833e43bebf75f48b405715657d03cf90d
parents d023078f 88534657
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;
        }
    }
}