diff options
author | 2023-04-19 02:31:52 +0000 | |
---|---|---|
committer | 2023-04-19 02:31:52 +0000 | |
commit | 7de412dce7e98131740b281e87641ef0f792d6b1 (patch) | |
tree | 25fab3230054eebf65577aae7e0eb3c882a9e7a4 | |
parent | cd42caeb00aa0bdd33f565816bdbfb46ccbbad24 (diff) |
Revert "Move Nearby to the front of the app list."
This reverts commit cd42caeb00aa0bdd33f565816bdbfb46ccbbad24.
Reason for revert: ACA session : https://android-build.googleplex.com/builds/culprit-assistant/run/4189ac3b-b57c-43f8-acb6-3467d8140574
Bug id: b/278790605
Change-Id: I3398de7f7699a129f47cb047ce206493931aa00e
13 files changed, 203 insertions, 94 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java index f355d9d4..23e04560 100644 --- a/java/src/com/android/intentresolver/ChooserActionFactory.java +++ b/java/src/com/android/intentresolver/ChooserActionFactory.java @@ -26,9 +26,12 @@ 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; @@ -89,6 +92,8 @@ 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<ChooserAction> mCustomActions; private final @Nullable ChooserAction mModifyShareAction; private final Consumer<Boolean> mExcludeSharedTextAction; @@ -139,6 +144,18 @@ 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, @@ -154,6 +171,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio Runnable onCopyButtonClicked, TargetInfo editSharingTarget, Runnable onEditButtonClicked, + TargetInfo nearbySharingTarget, + Runnable onNearbyButtonClicked, List<ChooserAction> customActions, @Nullable ChooserAction modifyShareAction, Consumer<Boolean> onUpdateSharedTextIsExcluded, @@ -165,6 +184,8 @@ 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; @@ -197,6 +218,21 @@ 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<ActionRow.Action> createCustomActions() { @@ -367,6 +403,64 @@ 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<Integer> 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 ab2ba91e..404d6da3 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -239,6 +239,7 @@ public class ChooserActivity extends ResolverActivity implements getIntent(), getReferrerPackageName(), getReferrer(), + mIntegratedDeviceComponents, mFeatureFlagRepository); } catch (IllegalArgumentException e) { Log.e(TAG, "Caller provided invalid Chooser request parameters", e); @@ -1260,8 +1261,7 @@ public class ChooserActivity extends ResolverActivity implements AbstractResolverComparator resolverComparator; if (appPredictor != null) { resolverComparator = new AppPredictionServiceResolverComparator(this, getTargetIntent(), - getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger(), - getIntegratedDeviceComponents().getNearbySharingComponent()); + getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger()); } else { resolverComparator = new ResolverRankerServiceResolverComparator( @@ -1270,8 +1270,7 @@ public class ChooserActivity extends ResolverActivity implements getReferrerPackageName(), null, getChooserActivityLogger(), - getResolverRankerServiceUserHandleList(userHandle), - getIntegratedDeviceComponents().getNearbySharingComponent()); + getResolverRankerServiceUserHandleList(userHandle)); } return new ChooserListController( diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java index 039f50e9..f9004a9b 100644 --- a/java/src/com/android/intentresolver/ChooserRequestParameters.java +++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java @@ -69,6 +69,7 @@ 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<CharSequence, Integer> mTitleSpec; private final Intent mReferrerFillInIntent; @@ -103,11 +104,14 @@ 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( @@ -129,11 +133,8 @@ public class ChooserRequestParameters { mRefinementIntentSender = clientIntent.getParcelableExtra( Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER); - ComponentName[] filteredComponents = clientIntent.getParcelableArrayExtra( - Intent.EXTRA_EXCLUDE_COMPONENTS, ComponentName.class); - mFilteredComponentNames = filteredComponents != null - ? ImmutableList.copyOf(filteredComponents) - : ImmutableList.of(); + mFilteredComponentNames = getFilteredComponentNames( + clientIntent, mIntegratedDeviceComponents.getNearbySharingComponent()); mCallerChooserTargets = parseCallerTargetsFromClientIntent(clientIntent); @@ -251,6 +252,10 @@ 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)); } @@ -304,6 +309,23 @@ public class ChooserRequestParameters { return Pair.create(requestedTitle, defaultTitleRes); } + private static ImmutableList<ComponentName> getFilteredComponentNames( + Intent clientIntent, @Nullable ComponentName nearbySharingComponent) { + Stream<ComponentName> 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<ChooserTarget> parseCallerTargetsFromClientIntent( Intent clientIntent) { return diff --git a/java/src/com/android/intentresolver/ResolverActivity.java b/java/src/com/android/intentresolver/ResolverActivity.java index 66eae92d..3b9d2a53 100644 --- a/java/src/com/android/intentresolver/ResolverActivity.java +++ b/java/src/com/android/intentresolver/ResolverActivity.java @@ -871,8 +871,7 @@ public class ResolverActivity extends FragmentActivity implements getReferrerPackageName(), null, null, - getResolverRankerServiceUserHandleList(userHandle), - null); + getResolverRankerServiceUserHandleList(userHandle)); 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 3c2ee343..56027a16 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -66,6 +66,10 @@ public final class ChooserContentPreviewUi { @Nullable ActionRow.Action createEditButton(); + /** Create an "Share to Nearby" action. */ + @Nullable + ActionRow.Action createNearbyButton(); + /** Create custom actions */ List<ActionRow.Action> createCustomActions(); diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java index cae9403a..e9d65eed 100644 --- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java @@ -103,8 +103,21 @@ class FileContentPreviewUi extends ContentPreviewUi { final ActionRow actionRow = contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); actionRow.setActions( - createActions(new ArrayList<>(), mActionFactory.createCustomActions())); + createActions( + createFilePreviewActions(), + mActionFactory.createCustomActions())); return contentPreviewLayout; } + + private List<ActionRow.Action> createFilePreviewActions() { + List<ActionRow.Action> 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 44a9e654..ece0c312 100644 --- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java @@ -125,6 +125,10 @@ class TextContentPreviewUi extends ContentPreviewUi { private List<ActionRow.Action> createTextPreviewActions() { ArrayList<ActionRow.Action> 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 ebf9bf11..9ce875c8 100644 --- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java @@ -152,10 +152,14 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { } private List<ActionRow.Action> createImagePreviewActions() { - ArrayList<ActionRow.Action> actions = new ArrayList<>(1); + ArrayList<ActionRow.Action> actions = new ArrayList<>(2); //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())) { - ActionRow.Action action = mActionFactory.createEditButton(); + 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 bc54e01e..7357fde9 100644 --- a/java/src/com/android/intentresolver/model/AbstractResolverComparator.java +++ b/java/src/com/android/intentresolver/model/AbstractResolverComparator.java @@ -16,7 +16,6 @@ package com.android.intentresolver.model; -import android.annotation.Nullable; import android.app.usage.UsageStatsManager; import android.content.ComponentName; import android.content.Context; @@ -35,6 +34,8 @@ 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; @@ -58,7 +59,6 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC protected final Map<UserHandle, UsageStatsManager> 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; @@ -109,18 +109,32 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * Constructor to initialize the comparator. * @param launchedFromContext the activity calling this comparator * @param intent original intent + * @param resolvedActivityUserSpace refers to the userSpace used by the comparator for + * fetching activity stats and recording activity selection. + * The latter could be different from the userSpace provided by + * context. + */ + public AbstractResolverComparator( + Context launchedFromContext, + Intent intent, + UserHandle resolvedActivityUserSpace) { + this(launchedFromContext, intent, Lists.newArrayList(resolvedActivityUserSpace)); + } + + + /** + * Constructor to initialize the comparator. + * @param launchedFromContext the activity calling this comparator + * @param intent original intent * @param resolvedActivityUserSpaceList refers to the userSpace(s) used by the comparator for * fetching activity stats and recording activity * selection. The latter could be different from the * userSpace provided by context. - * @param promoteToFirst a component to be moved to the front of the app list if it's being - * ranked. Unlike pinned apps, this cannot be modified by the user. */ public AbstractResolverComparator( Context launchedFromContext, Intent intent, - List<UserHandle> resolvedActivityUserSpaceList, - @Nullable ComponentName promoteToFirst) { + List<UserHandle> resolvedActivityUserSpaceList) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); mContentType = intent.getType(); @@ -133,7 +147,6 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC (UsageStatsManager) userContext.getSystemService(Context.USAGE_STATS_SERVICE)); } mAzComparator = new AzInfoComparator(launchedFromContext); - mPromoteToFirst = promoteToFirst; } // get annotations of content from intent. @@ -189,16 +202,6 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC return -1; } - if (mPromoteToFirst != null) { - // A single component can be cemented to the front of the list. If it is seen, let it - // always get priority. - if (mPromoteToFirst.equals(lhs.activityInfo.getComponentName())) { - return -1; - } else if (mPromoteToFirst.equals(rhs.activityInfo.getComponentName())) { - return 1; - } - } - if (mHttp) { final boolean lhsSpecific = ResolverActivity.isSpecificUriMatch(lhs.match); final boolean rhsSpecific = ResolverActivity.isSpecificUriMatch(rhs.match); diff --git a/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java b/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java index ba054731..84dca3ff 100644 --- a/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java +++ b/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java @@ -72,9 +72,8 @@ public class AppPredictionServiceResolverComparator extends AbstractResolverComp String referrerPackage, AppPredictor appPredictor, UserHandle user, - ChooserActivityLogger chooserActivityLogger, - @Nullable ComponentName promoteToFirst) { - super(context, intent, Lists.newArrayList(user), promoteToFirst); + ChooserActivityLogger chooserActivityLogger) { + super(context, intent, Lists.newArrayList(user)); mContext = context; mIntent = intent; mAppPredictor = appPredictor; @@ -117,8 +116,7 @@ public class AppPredictionServiceResolverComparator extends AbstractResolverComp mReferrerPackage, () -> mHandler.sendEmptyMessage(RANKER_SERVICE_RESULT), getChooserActivityLogger(), - mUser, - mPromoteToFirst); + mUser); 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 ebaffc36..725212e4 100644 --- a/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java +++ b/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java @@ -102,10 +102,9 @@ public class ResolverRankerServiceResolverComparator extends AbstractResolverCom */ public ResolverRankerServiceResolverComparator(Context launchedFromContext, Intent intent, String referrerPackage, Runnable afterCompute, - ChooserActivityLogger chooserActivityLogger, UserHandle targetUserSpace, - ComponentName promoteToFirst) { + ChooserActivityLogger chooserActivityLogger, UserHandle targetUserSpace) { this(launchedFromContext, intent, referrerPackage, afterCompute, chooserActivityLogger, - Lists.newArrayList(targetUserSpace), promoteToFirst); + Lists.newArrayList(targetUserSpace)); } /** @@ -118,9 +117,8 @@ public class ResolverRankerServiceResolverComparator extends AbstractResolverCom */ public ResolverRankerServiceResolverComparator(Context launchedFromContext, Intent intent, String referrerPackage, Runnable afterCompute, - ChooserActivityLogger chooserActivityLogger, List<UserHandle> targetUserSpaceList, - @Nullable ComponentName promoteToFirst) { - super(launchedFromContext, intent, targetUserSpaceList, promoteToFirst); + ChooserActivityLogger chooserActivityLogger, List<UserHandle> targetUserSpaceList) { + super(launchedFromContext, intent, targetUserSpaceList); 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 a7273a86..7b9a0ce6 100644 --- a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt +++ b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt @@ -53,6 +53,7 @@ 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<ActionRow.Action> = emptyList() override fun getModifyShareAction(): ActionRow.Action? = null override fun getExcludeSharedTextAction(): Consumer<Boolean> = Consumer<Boolean> {} diff --git a/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java index 5f0ead7b..892a2e28 100644 --- a/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java +++ b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java @@ -40,82 +40,52 @@ public class AbstractResolverComparatorTest { @Test public void testPinned() { - ResolvedComponentInfo r1 = createResolvedComponentInfo( - new ComponentName("package", "class")); + ResolvedComponentInfo r1 = new ResolvedComponentInfo( + new ComponentName("package", "class"), new Intent(), new ResolveInfo() + ); r1.setPinned(true); - ResolvedComponentInfo r2 = createResolvedComponentInfo( - new ComponentName("zackage", "zlass")); + ResolvedComponentInfo r2 = new ResolvedComponentInfo( + new ComponentName("zackage", "zlass"), new Intent(), new ResolveInfo() + ); Context context = InstrumentationRegistry.getTargetContext(); - AbstractResolverComparator comparator = getTestComparator(context, null); + AbstractResolverComparator comparator = getTestComparator(context); assertEquals("Pinned ranks over unpinned", -1, comparator.compare(r1, r2)); assertEquals("Unpinned ranks under pinned", 1, comparator.compare(r2, r1)); } + @Test public void testBothPinned() { - ResolvedComponentInfo r1 = createResolvedComponentInfo( - new ComponentName("package", "class")); + ResolveInfo pmInfo1 = new ResolveInfo(); + pmInfo1.activityInfo = new ActivityInfo(); + pmInfo1.activityInfo.packageName = "aaa"; + + ResolvedComponentInfo r1 = new ResolvedComponentInfo( + new ComponentName("package", "class"), new Intent(), pmInfo1); r1.setPinned(true); - ResolvedComponentInfo r2 = createResolvedComponentInfo( - new ComponentName("zackage", "zlass")); + ResolveInfo pmInfo2 = new ResolveInfo(); + pmInfo2.activityInfo = new ActivityInfo(); + pmInfo2.activityInfo.packageName = "zzz"; + ResolvedComponentInfo r2 = new ResolvedComponentInfo( + new ComponentName("zackage", "zlass"), new Intent(), pmInfo2); r2.setPinned(true); Context context = InstrumentationRegistry.getTargetContext(); - AbstractResolverComparator comparator = getTestComparator(context, null); + AbstractResolverComparator comparator = getTestComparator(context); assertEquals("Both pinned should rank alphabetically", -1, comparator.compare(r1, r2)); } - @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) { + private AbstractResolverComparator getTestComparator(Context context) { Intent intent = new Intent(); AbstractResolverComparator testComparator = new AbstractResolverComparator(context, intent, - Lists.newArrayList(context.getUser()), promoteToFirst) { + Lists.newArrayList(context.getUser())) { @Override int compare(ResolveInfo lhs, ResolveInfo rhs) { |