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

Commit 565943fd authored by Adam Powell's avatar Adam Powell
Browse files

ChooserActivity direct share jank fixes

Don't show the ChooserTargetService targets until we have all
responses in, or we hit our timeout. This helps prevent targets from
jumping around under the user's finger. We still give bonuses to
services that respond faster.

Bug 26790940

Change-Id: I8a19e19e08eeb502ccc4b4feaa1710ca3315e9f6
parent c2ba2907
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ public class ChooserActivity extends ResolverActivity {
                    if (mServiceConnections.isEmpty()) {
                        mChooserHandler.removeMessages(CHOOSER_TARGET_SERVICE_WATCHDOG_TIMEOUT);
                        sendVoiceChoicesIfNeeded();
                        mChooserListAdapter.setShowServiceTargets(true);
                    }
                    break;

@@ -138,6 +139,7 @@ public class ChooserActivity extends ResolverActivity {
                    }
                    unbindRemainingServices();
                    sendVoiceChoicesIfNeeded();
                    mChooserListAdapter.setShowServiceTargets(true);
                    break;

                default:
@@ -766,6 +768,7 @@ public class ChooserActivity extends ResolverActivity {

        private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
        private final List<TargetInfo> mCallerTargets = new ArrayList<>();
        private boolean mShowServiceTargets;

        private float mLateFee = 1.f;

@@ -866,6 +869,9 @@ public class ChooserActivity extends ResolverActivity {
        }

        public int getServiceTargetCount() {
            if (!mShowServiceTargets) {
                return 0;
            }
            return Math.min(mServiceTargets.size(), MAX_SERVICE_TARGETS);
        }

@@ -955,6 +961,14 @@ public class ChooserActivity extends ResolverActivity {
            notifyDataSetChanged();
        }

        /**
         * Set to true to reveal all service targets at once.
         */
        public void setShowServiceTargets(boolean show) {
            mShowServiceTargets = show;
            notifyDataSetChanged();
        }

        private void insertServiceTarget(ChooserTargetInfo chooserTargetInfo) {
            final float newScore = chooserTargetInfo.getModifiedScore();
            for (int i = 0, N = mServiceTargets.size(); i < N; i++) {