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

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

Merge "Delay pruning direct share targets." into pi-dev

parents 0b9a87c6 f5e17699
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -934,7 +934,7 @@ public class ChooserActivity extends ResolverActivity {
        public static final int TARGET_STANDARD = 2;

        private static final int MAX_SERVICE_TARGETS = 4;
        private static final int MAX_TARGETS_PER_SERVICE = 4;
        private static final int MAX_TARGETS_PER_SERVICE = 2;

        private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
        private final List<TargetInfo> mCallerTargets = new ArrayList<>();
@@ -942,6 +942,8 @@ public class ChooserActivity extends ResolverActivity {

        private float mLateFee = 1.f;

        private boolean mTargetsNeedPruning = false;

        private final BaseChooserTargetComparator mBaseTargetComparator
                = new BaseChooserTargetComparator();

@@ -1030,7 +1032,13 @@ public class ChooserActivity extends ResolverActivity {
            }

            if (mServiceTargets != null) {
                pruneServiceTargets();
                if (getDisplayInfoCount() == 0) {
                    // b/109676071: When packages change, onListRebuilt() is called before
                    // ResolverActivity.mDisplayList is re-populated; pruning now would cause the
                    // list to disappear briefly, so instead we detect this case (the
                    // set of targets suddenly dropping to zero) and remember to prune later.
                    mTargetsNeedPruning = true;
                }
            }
            if (DEBUG) Log.d(TAG, "List built querying services");
            queryTargetServices(this);
@@ -1117,6 +1125,14 @@ public class ChooserActivity extends ResolverActivity {
        public void addServiceResults(DisplayResolveInfo origTarget, List<ChooserTarget> targets) {
            if (DEBUG) Log.d(TAG, "addServiceResults " + origTarget + ", " + targets.size()
                    + " targets");

            if (mTargetsNeedPruning && targets.size() > 0) {
                // First proper update since we got an onListRebuilt() with (transient) 0 items.
                // Clear out the target list and rebuild.
                mServiceTargets.clear();
                mTargetsNeedPruning = false;
            }

            final float parentScore = getScore(origTarget);
            Collections.sort(targets, mBaseTargetComparator);
            float lastScore = 0;
@@ -1169,17 +1185,6 @@ public class ChooserActivity extends ResolverActivity {
            }
            mServiceTargets.add(chooserTargetInfo);
        }

        private void pruneServiceTargets() {
            if (DEBUG) Log.d(TAG, "pruneServiceTargets");
            for (int i = mServiceTargets.size() - 1; i >= 0; i--) {
                final ChooserTargetInfo cti = mServiceTargets.get(i);
                if (!hasResolvedTarget(cti.getResolveInfo())) {
                    if (DEBUG) Log.d(TAG, " => " + i + " " + cti);
                    mServiceTargets.remove(i);
                }
            }
        }
    }

    static class BaseChooserTargetComparator implements Comparator<ChooserTarget> {