summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Matt Casey <mrcasey@google.com> 2023-04-20 18:09:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-20 18:09:01 +0000
commitea8dec13ac8e826f19c4ff11f56a3684a7857f9d (patch)
treebdd7f21bd2851ec3841e108fc2d9dc0c77c7cbf7 /java
parent5dc88b10d6417394ee0ccf301fb56ffdd01a688d (diff)
parent7da4cd780a8cad1c84426efdd470f25ba73908ce (diff)
Merge "Revert "Revert "Move Nearby to the front of the app list.""" into udc-dev
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/intentresolver/ChooserActionFactory.java94
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java7
-rw-r--r--java/src/com/android/intentresolver/ChooserRequestParameters.java32
-rw-r--r--java/src/com/android/intentresolver/ResolverActivity.java3
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java4
-rw-r--r--java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java15
-rw-r--r--java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java4
-rw-r--r--java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java8
-rw-r--r--java/src/com/android/intentresolver/model/AbstractResolverComparator.java37
-rw-r--r--java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java8
-rw-r--r--java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java10
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt1
-rw-r--r--java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java74
13 files changed, 94 insertions, 203 deletions
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<ChooserAction> mCustomActions;
private final @Nullable ChooserAction mModifyShareAction;
private final Consumer<Boolean> 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<ChooserAction> customActions,
@Nullable ChooserAction modifyShareAction,
Consumer<Boolean> 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<ActionRow.Action> 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<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 318e9b91..97161452 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -240,7 +240,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);
@@ -1262,7 +1261,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(
@@ -1271,7 +1271,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<CharSequence, Integer> 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<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 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 21930fdb..69d8c49f 100644
--- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
@@ -65,10 +65,6 @@ 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 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<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 6bf9a1cc..746da49e 100644
--- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java
@@ -124,10 +124,6 @@ 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 6f1be116..f52d233d 100644
--- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
@@ -137,14 +137,10 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
}
private List<ActionRow.Action> createImagePreviewActions() {
- ArrayList<ActionRow.Action> actions = new ArrayList<>(2);
+ ArrayList<ActionRow.Action> 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<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,32 +109,18 @@ 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) {
+ List<UserHandle> 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<ResolvedC
(UsageStatsManager) userContext.getSystemService(Context.USAGE_STATS_SERVICE));
}
mAzComparator = new AzInfoComparator(launchedFromContext);
+ mPromoteToFirst = promoteToFirst;
}
// get annotations of content from intent.
@@ -202,6 +189,16 @@ 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 84dca3ff..ba054731 100644
--- a/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java
+++ b/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java
@@ -72,8 +72,9 @@ public class AppPredictionServiceResolverComparator extends AbstractResolverComp
String referrerPackage,
AppPredictor appPredictor,
UserHandle user,
- ChooserActivityLogger chooserActivityLogger) {
- super(context, intent, Lists.newArrayList(user));
+ ChooserActivityLogger chooserActivityLogger,
+ @Nullable ComponentName promoteToFirst) {
+ super(context, intent, Lists.newArrayList(user), promoteToFirst);
mContext = context;
mIntent = intent;
mAppPredictor = appPredictor;
@@ -116,7 +117,8 @@ public class AppPredictionServiceResolverComparator extends AbstractResolverComp
mReferrerPackage,
() -> 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<UserHandle> targetUserSpaceList) {
- super(launchedFromContext, intent, targetUserSpaceList);
+ ChooserActivityLogger chooserActivityLogger, List<UserHandle> 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 8eec289e..f29fac84 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
@@ -52,7 +52,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<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 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) {