From cd42caeb00aa0bdd33f565816bdbfb46ccbbad24 Mon Sep 17 00:00:00 2001 From: 1 Date: Fri, 14 Apr 2023 03:04:40 +0000 Subject: Move Nearby to the front of the app list. Introduce a concept of a "cemented" component that always goes to the front of the list. Just allowing up to one of these since we really don't expect to ever have more than one. Remove the nearby action code as well, along with some associated cleanup. Not in this CL: Prevent this target from being pinned. Bug: 275787600 Test: atest com.android.intentresolver Change-Id: I55c551f930de2d642cd0e5a42c6cdbd6e1918f0b --- .../intentresolver/ChooserActionFactory.java | 94 ---------------------- .../android/intentresolver/ChooserActivity.java | 7 +- .../intentresolver/ChooserRequestParameters.java | 32 ++------ .../android/intentresolver/ResolverActivity.java | 3 +- .../contentpreview/ChooserContentPreviewUi.java | 4 - .../contentpreview/FileContentPreviewUi.java | 15 +--- .../contentpreview/TextContentPreviewUi.java | 4 - .../contentpreview/UnifiedContentPreviewUi.java | 8 +- .../model/AbstractResolverComparator.java | 37 ++++----- .../AppPredictionServiceResolverComparator.java | 8 +- .../ResolverRankerServiceResolverComparator.java | 10 ++- .../contentpreview/ChooserContentPreviewUiTest.kt | 1 - .../model/AbstractResolverComparatorTest.java | 74 ++++++++++++----- 13 files changed, 94 insertions(+), 203 deletions(-) (limited to 'java') diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java index 23e04560..f355d9d4 100644 --- a/java/src/com/android/intentresolver/ChooserActionFactory.java +++ b/java/src/com/android/intentresolver/ChooserActionFactory.java @@ -26,12 +26,9 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; -import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.Bundle; import android.service.chooser.ChooserAction; import android.text.TextUtils; import android.util.Log; @@ -92,8 +89,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio private final Runnable mOnCopyButtonClicked; private final TargetInfo mEditSharingTarget; private final Runnable mOnEditButtonClicked; - private final TargetInfo mNearbySharingTarget; - private final Runnable mOnNearbyButtonClicked; private final ImmutableList mCustomActions; private final @Nullable ChooserAction mModifyShareAction; private final Consumer mExcludeSharedTextAction; @@ -144,18 +139,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio firstVisibleImageQuery, activityStarter, logger), - getNearbySharingTarget( - context, - chooserRequest.getTargetIntent(), - integratedDeviceComponents), - makeOnNearbyShareRunnable( - getNearbySharingTarget( - context, - chooserRequest.getTargetIntent(), - integratedDeviceComponents), - activityStarter, - finishCallback, - logger), chooserRequest.getChooserActions(), chooserRequest.getModifyShareAction(), onUpdateSharedTextIsExcluded, @@ -171,8 +154,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio Runnable onCopyButtonClicked, TargetInfo editSharingTarget, Runnable onEditButtonClicked, - TargetInfo nearbySharingTarget, - Runnable onNearbyButtonClicked, List customActions, @Nullable ChooserAction modifyShareAction, Consumer onUpdateSharedTextIsExcluded, @@ -184,8 +165,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio mOnCopyButtonClicked = onCopyButtonClicked; mEditSharingTarget = editSharingTarget; mOnEditButtonClicked = onEditButtonClicked; - mNearbySharingTarget = nearbySharingTarget; - mOnNearbyButtonClicked = onNearbyButtonClicked; mCustomActions = ImmutableList.copyOf(customActions); mModifyShareAction = modifyShareAction; mExcludeSharedTextAction = onUpdateSharedTextIsExcluded; @@ -218,21 +197,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio mOnEditButtonClicked); } - /** Create a "Share to Nearby" action. */ - @Override - @Nullable - public ActionRow.Action createNearbyButton() { - if (mNearbySharingTarget == null) { - return null; - } - - return new ActionRow.Action( - com.android.internal.R.id.chooser_nearby_button, - mNearbySharingTarget.getDisplayLabel(), - mNearbySharingTarget.getDisplayIconHolder().getDisplayIcon(), - mOnNearbyButtonClicked); - } - /** Create custom actions */ @Override public List createCustomActions() { @@ -403,64 +367,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio }; } - private static TargetInfo getNearbySharingTarget( - Context context, - Intent originalIntent, - ChooserIntegratedDeviceComponents integratedComponents) { - final ComponentName cn = integratedComponents.getNearbySharingComponent(); - if (cn == null) { - return null; - } - - final Intent resolveIntent = new Intent(originalIntent); - resolveIntent.setComponent(cn); - final ResolveInfo ri = context.getPackageManager().resolveActivity( - resolveIntent, PackageManager.GET_META_DATA); - if (ri == null || ri.activityInfo == null) { - Log.e(TAG, "Device-specified nearby sharing component (" + cn - + ") not available"); - return null; - } - - // Allow the nearby sharing component to provide a more appropriate icon and label - // for the chip. - CharSequence name = null; - Drawable icon = null; - final Bundle metaData = ri.activityInfo.metaData; - if (metaData != null) { - try { - final Resources pkgRes = context.getPackageManager().getResourcesForActivity(cn); - final int nameResId = metaData.getInt(CHIP_LABEL_METADATA_KEY); - name = pkgRes.getString(nameResId); - final int resId = metaData.getInt(CHIP_ICON_METADATA_KEY); - icon = pkgRes.getDrawable(resId); - } catch (NameNotFoundException | Resources.NotFoundException ex) { /* ignore */ } - } - if (TextUtils.isEmpty(name)) { - name = ri.loadLabel(context.getPackageManager()); - } - if (icon == null) { - icon = ri.loadIcon(context.getPackageManager()); - } - - final DisplayResolveInfo dri = DisplayResolveInfo.newDisplayResolveInfo( - originalIntent, ri, name, "", resolveIntent, null); - dri.getDisplayIconHolder().setDisplayIcon(icon); - return dri; - } - - private static Runnable makeOnNearbyShareRunnable( - TargetInfo nearbyShareTarget, - ActionActivityStarter activityStarter, - Consumer finishCallback, - ChooserActivityLogger logger) { - return () -> { - logger.logActionSelected(ChooserActivityLogger.SELECTION_TYPE_NEARBY); - // Action bar is user-independent; always start as primary. - activityStarter.safelyStartActivityAsPersonalProfileUser(nearbyShareTarget); - }; - } - @Nullable private static ActionRow.Action createCustomAction( Context context, diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 404d6da3..ab2ba91e 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -239,7 +239,6 @@ public class ChooserActivity extends ResolverActivity implements getIntent(), getReferrerPackageName(), getReferrer(), - mIntegratedDeviceComponents, mFeatureFlagRepository); } catch (IllegalArgumentException e) { Log.e(TAG, "Caller provided invalid Chooser request parameters", e); @@ -1261,7 +1260,8 @@ public class ChooserActivity extends ResolverActivity implements AbstractResolverComparator resolverComparator; if (appPredictor != null) { resolverComparator = new AppPredictionServiceResolverComparator(this, getTargetIntent(), - getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger()); + getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger(), + getIntegratedDeviceComponents().getNearbySharingComponent()); } else { resolverComparator = new ResolverRankerServiceResolverComparator( @@ -1270,7 +1270,8 @@ public class ChooserActivity extends ResolverActivity implements getReferrerPackageName(), null, getChooserActivityLogger(), - getResolverRankerServiceUserHandleList(userHandle)); + getResolverRankerServiceUserHandleList(userHandle), + getIntegratedDeviceComponents().getNearbySharingComponent()); } return new ChooserListController( diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java index f9004a9b..039f50e9 100644 --- a/java/src/com/android/intentresolver/ChooserRequestParameters.java +++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java @@ -69,7 +69,6 @@ public class ChooserRequestParameters { Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK; private final Intent mTarget; - private final ChooserIntegratedDeviceComponents mIntegratedDeviceComponents; private final String mReferrerPackageName; private final Pair mTitleSpec; private final Intent mReferrerFillInIntent; @@ -104,14 +103,11 @@ public class ChooserRequestParameters { final Intent clientIntent, String referrerPackageName, final Uri referrer, - ChooserIntegratedDeviceComponents integratedDeviceComponents, FeatureFlagRepository featureFlags) { final Intent requestedTarget = parseTargetIntentExtra( clientIntent.getParcelableExtra(Intent.EXTRA_INTENT)); mTarget = intentWithModifiedLaunchFlags(requestedTarget); - mIntegratedDeviceComponents = integratedDeviceComponents; - mReferrerPackageName = referrerPackageName; mAdditionalTargets = intentsWithModifiedLaunchFlagsFromExtraIfPresent( @@ -133,8 +129,11 @@ public class ChooserRequestParameters { mRefinementIntentSender = clientIntent.getParcelableExtra( Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER); - mFilteredComponentNames = getFilteredComponentNames( - clientIntent, mIntegratedDeviceComponents.getNearbySharingComponent()); + ComponentName[] filteredComponents = clientIntent.getParcelableArrayExtra( + Intent.EXTRA_EXCLUDE_COMPONENTS, ComponentName.class); + mFilteredComponentNames = filteredComponents != null + ? ImmutableList.copyOf(filteredComponents) + : ImmutableList.of(); mCallerChooserTargets = parseCallerTargetsFromClientIntent(clientIntent); @@ -252,10 +251,6 @@ public class ChooserRequestParameters { return mTargetIntentFilter; } - public ChooserIntegratedDeviceComponents getIntegratedDeviceComponents() { - return mIntegratedDeviceComponents; - } - private static boolean isSendAction(@Nullable String action) { return (Intent.ACTION_SEND.equals(action) || Intent.ACTION_SEND_MULTIPLE.equals(action)); } @@ -309,23 +304,6 @@ public class ChooserRequestParameters { return Pair.create(requestedTitle, defaultTitleRes); } - private static ImmutableList getFilteredComponentNames( - Intent clientIntent, @Nullable ComponentName nearbySharingComponent) { - Stream filteredComponents = streamParcelableArrayExtra( - clientIntent, Intent.EXTRA_EXCLUDE_COMPONENTS, ComponentName.class, true, true); - - if (nearbySharingComponent != null) { - // Exclude Nearby from main list if chip is present, to avoid duplication. - // TODO: we don't have an explicit guarantee that the chip will be displayed just - // because we have a non-null component; that's ultimately determined by the preview - // layout. Maybe we can make that decision further upstream? - filteredComponents = Stream.concat( - filteredComponents, Stream.of(nearbySharingComponent)); - } - - return filteredComponents.collect(toImmutableList()); - } - private static ImmutableList parseCallerTargetsFromClientIntent( Intent clientIntent) { return diff --git a/java/src/com/android/intentresolver/ResolverActivity.java b/java/src/com/android/intentresolver/ResolverActivity.java index 3b9d2a53..66eae92d 100644 --- a/java/src/com/android/intentresolver/ResolverActivity.java +++ b/java/src/com/android/intentresolver/ResolverActivity.java @@ -871,7 +871,8 @@ public class ResolverActivity extends FragmentActivity implements getReferrerPackageName(), null, null, - getResolverRankerServiceUserHandleList(userHandle)); + getResolverRankerServiceUserHandleList(userHandle), + null); return new ResolverListController( this, mPm, diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index 56027a16..3c2ee343 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -66,10 +66,6 @@ public final class ChooserContentPreviewUi { @Nullable ActionRow.Action createEditButton(); - /** Create an "Share to Nearby" action. */ - @Nullable - ActionRow.Action createNearbyButton(); - /** Create custom actions */ List createCustomActions(); diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java index e9d65eed..cae9403a 100644 --- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java @@ -103,21 +103,8 @@ class FileContentPreviewUi extends ContentPreviewUi { final ActionRow actionRow = contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); actionRow.setActions( - createActions( - createFilePreviewActions(), - mActionFactory.createCustomActions())); + createActions(new ArrayList<>(), mActionFactory.createCustomActions())); return contentPreviewLayout; } - - private List createFilePreviewActions() { - List actions = new ArrayList<>(1); - //TODO(b/120417119): - // add action buttonFactory.createCopyButton() - ActionRow.Action action = mActionFactory.createNearbyButton(); - if (action != null) { - actions.add(action); - } - return actions; - } } diff --git a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java index ece0c312..44a9e654 100644 --- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java @@ -125,10 +125,6 @@ class TextContentPreviewUi extends ContentPreviewUi { private List createTextPreviewActions() { ArrayList actions = new ArrayList<>(2); actions.add(mActionFactory.createCopyButton()); - ActionRow.Action nearbyAction = mActionFactory.createNearbyButton(); - if (nearbyAction != null) { - actions.add(nearbyAction); - } return actions; } } diff --git a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java index 9ce875c8..ebf9bf11 100644 --- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java @@ -152,14 +152,10 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { } private List createImagePreviewActions() { - ArrayList actions = new ArrayList<>(2); + ArrayList actions = new ArrayList<>(1); //TODO: add copy action; - ActionRow.Action action = mActionFactory.createNearbyButton(); - if (action != null) { - actions.add(action); - } if (mFiles.size() == 1 && mTypeClassifier.isImageType(mFiles.get(0).getMimeType())) { - action = mActionFactory.createEditButton(); + ActionRow.Action action = mActionFactory.createEditButton(); if (action != null) { actions.add(action); } diff --git a/java/src/com/android/intentresolver/model/AbstractResolverComparator.java b/java/src/com/android/intentresolver/model/AbstractResolverComparator.java index 7357fde9..bc54e01e 100644 --- a/java/src/com/android/intentresolver/model/AbstractResolverComparator.java +++ b/java/src/com/android/intentresolver/model/AbstractResolverComparator.java @@ -16,6 +16,7 @@ package com.android.intentresolver.model; +import android.annotation.Nullable; import android.app.usage.UsageStatsManager; import android.content.ComponentName; import android.content.Context; @@ -34,8 +35,6 @@ import com.android.intentresolver.ResolvedComponentInfo; import com.android.intentresolver.ResolverActivity; import com.android.intentresolver.chooser.TargetInfo; -import com.google.android.collect.Lists; - import java.text.Collator; import java.util.ArrayList; import java.util.Comparator; @@ -59,6 +58,7 @@ public abstract class AbstractResolverComparator implements Comparator mUsmMap = new HashMap<>(); protected String[] mAnnotations; protected String mContentType; + protected final ComponentName mPromoteToFirst; // True if the current share is a link. private final boolean mHttp; @@ -105,23 +105,6 @@ public abstract class AbstractResolverComparator implements Comparator resolvedActivityUserSpaceList) { + List resolvedActivityUserSpaceList, + @Nullable ComponentName promoteToFirst) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); mContentType = intent.getType(); @@ -147,6 +133,7 @@ public abstract class AbstractResolverComparator implements Comparator mHandler.sendEmptyMessage(RANKER_SERVICE_RESULT), getChooserActivityLogger(), - mUser); + mUser, + mPromoteToFirst); mComparatorModel = buildUpdatedModel(); mResolverRankerService.compute(targets); } else { diff --git a/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java b/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java index 725212e4..ebaffc36 100644 --- a/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java +++ b/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java @@ -102,9 +102,10 @@ public class ResolverRankerServiceResolverComparator extends AbstractResolverCom */ public ResolverRankerServiceResolverComparator(Context launchedFromContext, Intent intent, String referrerPackage, Runnable afterCompute, - ChooserActivityLogger chooserActivityLogger, UserHandle targetUserSpace) { + ChooserActivityLogger chooserActivityLogger, UserHandle targetUserSpace, + ComponentName promoteToFirst) { this(launchedFromContext, intent, referrerPackage, afterCompute, chooserActivityLogger, - Lists.newArrayList(targetUserSpace)); + Lists.newArrayList(targetUserSpace), promoteToFirst); } /** @@ -117,8 +118,9 @@ public class ResolverRankerServiceResolverComparator extends AbstractResolverCom */ public ResolverRankerServiceResolverComparator(Context launchedFromContext, Intent intent, String referrerPackage, Runnable afterCompute, - ChooserActivityLogger chooserActivityLogger, List targetUserSpaceList) { - super(launchedFromContext, intent, targetUserSpaceList); + ChooserActivityLogger chooserActivityLogger, List targetUserSpaceList, + @Nullable ComponentName promoteToFirst) { + super(launchedFromContext, intent, targetUserSpaceList, promoteToFirst); mCollator = Collator.getInstance( launchedFromContext.getResources().getConfiguration().locale); mReferrerPackage = referrerPackage; diff --git a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt index 7b9a0ce6..a7273a86 100644 --- a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt +++ b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt @@ -53,7 +53,6 @@ class ChooserContentPreviewUiTest { private val actionFactory = object : ActionFactory { override fun createCopyButton() = ActionRow.Action(label = "Copy", icon = null) {} override fun createEditButton(): ActionRow.Action? = null - override fun createNearbyButton(): ActionRow.Action? = null override fun createCustomActions(): List = emptyList() override fun getModifyShareAction(): ActionRow.Action? = null override fun getExcludeSharedTextAction(): Consumer = Consumer {} diff --git a/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java index 892a2e28..5f0ead7b 100644 --- a/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java +++ b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java @@ -40,52 +40,82 @@ public class AbstractResolverComparatorTest { @Test public void testPinned() { - ResolvedComponentInfo r1 = new ResolvedComponentInfo( - new ComponentName("package", "class"), new Intent(), new ResolveInfo() - ); + ResolvedComponentInfo r1 = createResolvedComponentInfo( + new ComponentName("package", "class")); r1.setPinned(true); - ResolvedComponentInfo r2 = new ResolvedComponentInfo( - new ComponentName("zackage", "zlass"), new Intent(), new ResolveInfo() - ); + ResolvedComponentInfo r2 = createResolvedComponentInfo( + new ComponentName("zackage", "zlass")); Context context = InstrumentationRegistry.getTargetContext(); - AbstractResolverComparator comparator = getTestComparator(context); + AbstractResolverComparator comparator = getTestComparator(context, null); assertEquals("Pinned ranks over unpinned", -1, comparator.compare(r1, r2)); assertEquals("Unpinned ranks under pinned", 1, comparator.compare(r2, r1)); } - @Test public void testBothPinned() { - ResolveInfo pmInfo1 = new ResolveInfo(); - pmInfo1.activityInfo = new ActivityInfo(); - pmInfo1.activityInfo.packageName = "aaa"; - - ResolvedComponentInfo r1 = new ResolvedComponentInfo( - new ComponentName("package", "class"), new Intent(), pmInfo1); + ResolvedComponentInfo r1 = createResolvedComponentInfo( + new ComponentName("package", "class")); r1.setPinned(true); - ResolveInfo pmInfo2 = new ResolveInfo(); - pmInfo2.activityInfo = new ActivityInfo(); - pmInfo2.activityInfo.packageName = "zzz"; - ResolvedComponentInfo r2 = new ResolvedComponentInfo( - new ComponentName("zackage", "zlass"), new Intent(), pmInfo2); + ResolvedComponentInfo r2 = createResolvedComponentInfo( + new ComponentName("zackage", "zlass")); r2.setPinned(true); Context context = InstrumentationRegistry.getTargetContext(); - AbstractResolverComparator comparator = getTestComparator(context); + AbstractResolverComparator comparator = getTestComparator(context, null); assertEquals("Both pinned should rank alphabetically", -1, comparator.compare(r1, r2)); } - private AbstractResolverComparator getTestComparator(Context context) { + @Test + public void testPromoteToFirst() { + ComponentName promoteToFirst = new ComponentName("promoted-package", "class"); + ResolvedComponentInfo r1 = createResolvedComponentInfo(promoteToFirst); + + ResolvedComponentInfo r2 = createResolvedComponentInfo( + new ComponentName("package", "class")); + + Context context = InstrumentationRegistry.getTargetContext(); + AbstractResolverComparator comparator = getTestComparator(context, promoteToFirst); + + assertEquals("PromoteToFirst ranks over non-cemented", -1, comparator.compare(r1, r2)); + assertEquals("Non-cemented ranks under PromoteToFirst", 1, comparator.compare(r2, r1)); + } + + @Test + public void testPromoteToFirstOverPinned() { + ComponentName cementedComponent = new ComponentName("promoted-package", "class"); + ResolvedComponentInfo r1 = createResolvedComponentInfo(cementedComponent); + + ResolvedComponentInfo r2 = createResolvedComponentInfo( + new ComponentName("package", "class")); + r2.setPinned(true); + + Context context = InstrumentationRegistry.getTargetContext(); + AbstractResolverComparator comparator = getTestComparator(context, cementedComponent); + + assertEquals("PromoteToFirst ranks over pinned", -1, comparator.compare(r1, r2)); + assertEquals("Pinned ranks under PromoteToFirst", 1, comparator.compare(r2, r1)); + } + + private ResolvedComponentInfo createResolvedComponentInfo(ComponentName component) { + ResolveInfo info = new ResolveInfo(); + info.activityInfo = new ActivityInfo(); + info.activityInfo.packageName = component.getPackageName(); + info.activityInfo.name = component.getClassName(); + return new ResolvedComponentInfo(component, new Intent(), info); + } + + private AbstractResolverComparator getTestComparator( + Context context, ComponentName promoteToFirst) { Intent intent = new Intent(); AbstractResolverComparator testComparator = new AbstractResolverComparator(context, intent, - Lists.newArrayList(context.getUser())) { + Lists.newArrayList(context.getUser()), promoteToFirst) { @Override int compare(ResolveInfo lhs, ResolveInfo rhs) { -- cgit v1.2.3-59-g8ed1b