summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/app/ChooserActivity.java9
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java7
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java51
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java7
4 files changed, 49 insertions, 25 deletions
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index f5ba275b604b..2676396cb997 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -2096,7 +2096,8 @@ public class ChooserActivity extends ResolverActivity implements
return matchingShortcuts;
}
- private void sendShortcutManagerShareTargetResults(
+ @VisibleForTesting
+ protected void sendShortcutManagerShareTargetResults(
int shortcutType, ServiceResultInfo[] results) {
final Message msg = Message.obtain();
msg.what = ChooserHandler.SHORTCUT_MANAGER_ALL_SHARE_TARGET_RESULTS;
@@ -3873,7 +3874,11 @@ public class ChooserActivity extends ResolverActivity implements
}
}
- static class ServiceResultInfo {
+ /**
+ * Shortcuts grouped by application.
+ */
+ @VisibleForTesting
+ public static class ServiceResultInfo {
public final DisplayResolveInfo originalTarget;
public final List<ChooserTarget> resultTargets;
public final UserHandle userHandle;
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java
index 499f7a55996b..875cd0bb4e16 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java
@@ -24,11 +24,13 @@ import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.UserHandle;
+import android.util.Pair;
import com.android.internal.app.chooser.TargetInfo;
import com.android.internal.logging.MetricsLogger;
import java.util.List;
+import java.util.function.BiFunction;
import java.util.function.Function;
/**
@@ -50,6 +52,9 @@ public class ChooserActivityOverrideData {
public Function<PackageManager, PackageManager> createPackageManager;
public Function<TargetInfo, Boolean> onSafelyStartCallback;
public Function<ChooserListAdapter, Void> onQueryDirectShareTargets;
+ public BiFunction<
+ IChooserWrapper, ChooserListAdapter, Pair<Integer, ChooserActivity.ServiceResultInfo[]>>
+ directShareTargets;
public ResolverListController resolverListController;
public ResolverListController workResolverListController;
public Boolean isVoiceInteraction;
@@ -72,6 +77,7 @@ public class ChooserActivityOverrideData {
public void reset() {
onSafelyStartCallback = null;
onQueryDirectShareTargets = null;
+ directShareTargets = null;
isVoiceInteraction = null;
createPackageManager = null;
previewThumbnail = null;
@@ -112,4 +118,3 @@ public class ChooserActivityOverrideData {
private ChooserActivityOverrideData() {}
}
-
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
index e8c7ce0b312b..d656678c16ee 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -81,6 +81,7 @@ import android.net.Uri;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.service.chooser.ChooserTarget;
+import android.util.Pair;
import android.view.View;
import androidx.annotation.CallSuper;
@@ -89,6 +90,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import com.android.internal.R;
+import com.android.internal.app.ChooserActivity.ServiceResultInfo;
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
import com.android.internal.app.chooser.DisplayResolveInfo;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
@@ -2166,8 +2168,8 @@ public class ChooserActivityTest {
assertThat(logger.numCalls(), is(6));
}
- @Test @Ignore
- public void testDirectTargetLogging() throws InterruptedException {
+ @Test
+ public void testDirectTargetLogging() {
Intent sendIntent = createSendTextIntent();
// We need app targets for direct targets to get displayed
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -2187,30 +2189,35 @@ public class ChooserActivityTest {
resolvedComponentInfos.get(0).getResolveInfoAt(0).activityInfo.packageName);
ResolveInfo ri = ResolverDataProvider.createResolveInfo(3, 0);
+ ChooserActivityOverrideData
+ .getInstance()
+ .directShareTargets = (activity, adapter) -> {
+ DisplayResolveInfo displayInfo = activity.createTestDisplayResolveInfo(
+ sendIntent,
+ ri,
+ "testLabel",
+ "testInfo",
+ sendIntent,
+ /* resolveInfoPresentationGetter */ null);
+ ServiceResultInfo[] results = {
+ new ServiceResultInfo(
+ displayInfo,
+ serviceTargets,
+ adapter.getUserHandle())};
+ // TODO: consider covering the other type.
+ // Only 2 types are expected out of the shortcut loading logic:
+ // - TARGET_TYPE_SHORTCUTS_FROM_SHORTCUT_MANAGER, if shortcuts were loaded from
+ // the ShortcutManager, and;
+ // - TARGET_TYPE_SHORTCUTS_FROM_PREDICTION_SERVICE, if shortcuts were loaded
+ // from AppPredictor.
+ // Ideally, our tests should cover all of them.
+ return new Pair<>(TARGET_TYPE_SHORTCUTS_FROM_SHORTCUT_MANAGER, results);
+ };
+
// Start activity
final IChooserWrapper activity = (IChooserWrapper)
mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
- // Insert the direct share target
- Map<ChooserTarget, ShortcutInfo> directShareToShortcutInfos = new HashMap<>();
- directShareToShortcutInfos.put(serviceTargets.get(0), null);
- InstrumentationRegistry.getInstrumentation().runOnMainSync(
- () -> activity.getAdapter().addServiceResults(
- activity.createTestDisplayResolveInfo(sendIntent,
- ri,
- "testLabel",
- "testInfo",
- sendIntent,
- /* resolveInfoPresentationGetter */ null),
- serviceTargets,
- TARGET_TYPE_CHOOSER_TARGET,
- directShareToShortcutInfos)
- );
- // Thread.sleep shouldn't be a thing in an integration test but it's
- // necessary here because of the way the code is structured
- // TODO: restructure the tests b/129870719
- Thread.sleep(((ChooserActivity) activity).mListViewUpdateDelayMs);
-
assertThat("Chooser should have 3 targets (2 apps, 1 direct)",
activity.getAdapter().getCount(), is(3));
assertThat("Chooser should have exactly one selectable direct target",
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
index 7f8598217ec6..4c3235ca8ac0 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
@@ -31,6 +31,7 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.UserHandle;
+import android.util.Pair;
import android.util.Size;
import com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
@@ -239,6 +240,12 @@ public class ChooserWrapperActivity extends ChooserActivity implements IChooserW
@Override
protected void queryDirectShareTargets(ChooserListAdapter adapter,
boolean skipAppPredictionService) {
+ if (sOverrides.directShareTargets != null) {
+ Pair<Integer, ServiceResultInfo[]> result =
+ sOverrides.directShareTargets.apply(this, adapter);
+ sendShortcutManagerShareTargetResults(result.first, result.second);
+ return;
+ }
if (sOverrides.onQueryDirectShareTargets != null) {
sOverrides.onQueryDirectShareTargets.apply(adapter);
}