Merge "Enable a shortcut selection test." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-11-09 00:35:50 +00:00
committed by Android (Google) Code Review
4 changed files with 49 additions and 25 deletions

View File

@@ -2096,7 +2096,8 @@ public class ChooserActivity extends ResolverActivity implements
return matchingShortcuts; return matchingShortcuts;
} }
private void sendShortcutManagerShareTargetResults( @VisibleForTesting
protected void sendShortcutManagerShareTargetResults(
int shortcutType, ServiceResultInfo[] results) { int shortcutType, ServiceResultInfo[] results) {
final Message msg = Message.obtain(); final Message msg = Message.obtain();
msg.what = ChooserHandler.SHORTCUT_MANAGER_ALL_SHARE_TARGET_RESULTS; 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 DisplayResolveInfo originalTarget;
public final List<ChooserTarget> resultTargets; public final List<ChooserTarget> resultTargets;
public final UserHandle userHandle; public final UserHandle userHandle;

View File

@@ -24,11 +24,13 @@ import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Pair;
import com.android.internal.app.chooser.TargetInfo; import com.android.internal.app.chooser.TargetInfo;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import java.util.List; import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
/** /**
@@ -50,6 +52,9 @@ public class ChooserActivityOverrideData {
public Function<PackageManager, PackageManager> createPackageManager; public Function<PackageManager, PackageManager> createPackageManager;
public Function<TargetInfo, Boolean> onSafelyStartCallback; public Function<TargetInfo, Boolean> onSafelyStartCallback;
public Function<ChooserListAdapter, Void> onQueryDirectShareTargets; public Function<ChooserListAdapter, Void> onQueryDirectShareTargets;
public BiFunction<
IChooserWrapper, ChooserListAdapter, Pair<Integer, ChooserActivity.ServiceResultInfo[]>>
directShareTargets;
public ResolverListController resolverListController; public ResolverListController resolverListController;
public ResolverListController workResolverListController; public ResolverListController workResolverListController;
public Boolean isVoiceInteraction; public Boolean isVoiceInteraction;
@@ -72,6 +77,7 @@ public class ChooserActivityOverrideData {
public void reset() { public void reset() {
onSafelyStartCallback = null; onSafelyStartCallback = null;
onQueryDirectShareTargets = null; onQueryDirectShareTargets = null;
directShareTargets = null;
isVoiceInteraction = null; isVoiceInteraction = null;
createPackageManager = null; createPackageManager = null;
previewThumbnail = null; previewThumbnail = null;
@@ -112,4 +118,3 @@ public class ChooserActivityOverrideData {
private ChooserActivityOverrideData() {} private ChooserActivityOverrideData() {}
} }

View File

@@ -81,6 +81,7 @@ import android.net.Uri;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.DeviceConfig; import android.provider.DeviceConfig;
import android.service.chooser.ChooserTarget; import android.service.chooser.ChooserTarget;
import android.util.Pair;
import android.view.View; import android.view.View;
import androidx.annotation.CallSuper; import androidx.annotation.CallSuper;
@@ -89,6 +90,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import com.android.internal.R; import com.android.internal.R;
import com.android.internal.app.ChooserActivity.ServiceResultInfo;
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
import com.android.internal.app.chooser.DisplayResolveInfo; import com.android.internal.app.chooser.DisplayResolveInfo;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
@@ -2166,8 +2168,8 @@ public class ChooserActivityTest {
assertThat(logger.numCalls(), is(6)); assertThat(logger.numCalls(), is(6));
} }
@Test @Ignore @Test
public void testDirectTargetLogging() throws InterruptedException { public void testDirectTargetLogging() {
Intent sendIntent = createSendTextIntent(); Intent sendIntent = createSendTextIntent();
// We need app targets for direct targets to get displayed // We need app targets for direct targets to get displayed
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2); List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -2187,29 +2189,34 @@ public class ChooserActivityTest {
resolvedComponentInfos.get(0).getResolveInfoAt(0).activityInfo.packageName); resolvedComponentInfos.get(0).getResolveInfoAt(0).activityInfo.packageName);
ResolveInfo ri = ResolverDataProvider.createResolveInfo(3, 0); ResolveInfo ri = ResolverDataProvider.createResolveInfo(3, 0);
// Start activity ChooserActivityOverrideData
final IChooserWrapper activity = (IChooserWrapper) .getInstance()
mActivityRule.launchActivity(Intent.createChooser(sendIntent, null)); .directShareTargets = (activity, adapter) -> {
DisplayResolveInfo displayInfo = activity.createTestDisplayResolveInfo(
// Insert the direct share target sendIntent,
Map<ChooserTarget, ShortcutInfo> directShareToShortcutInfos = new HashMap<>();
directShareToShortcutInfos.put(serviceTargets.get(0), null);
InstrumentationRegistry.getInstrumentation().runOnMainSync(
() -> activity.getAdapter().addServiceResults(
activity.createTestDisplayResolveInfo(sendIntent,
ri, ri,
"testLabel", "testLabel",
"testInfo", "testInfo",
sendIntent, sendIntent,
/* resolveInfoPresentationGetter */ null), /* resolveInfoPresentationGetter */ null);
ServiceResultInfo[] results = {
new ServiceResultInfo(
displayInfo,
serviceTargets, serviceTargets,
TARGET_TYPE_CHOOSER_TARGET, adapter.getUserHandle())};
directShareToShortcutInfos) // TODO: consider covering the other type.
); // Only 2 types are expected out of the shortcut loading logic:
// Thread.sleep shouldn't be a thing in an integration test but it's // - TARGET_TYPE_SHORTCUTS_FROM_SHORTCUT_MANAGER, if shortcuts were loaded from
// necessary here because of the way the code is structured // the ShortcutManager, and;
// TODO: restructure the tests b/129870719 // - TARGET_TYPE_SHORTCUTS_FROM_PREDICTION_SERVICE, if shortcuts were loaded
Thread.sleep(((ChooserActivity) activity).mListViewUpdateDelayMs); // 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));
assertThat("Chooser should have 3 targets (2 apps, 1 direct)", assertThat("Chooser should have 3 targets (2 apps, 1 direct)",
activity.getAdapter().getCount(), is(3)); activity.getAdapter().getCount(), is(3));

View File

@@ -31,6 +31,7 @@ import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Pair;
import android.util.Size; import android.util.Size;
import com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter; import com.android.internal.app.ResolverListAdapter.ResolveInfoPresentationGetter;
@@ -239,6 +240,12 @@ public class ChooserWrapperActivity extends ChooserActivity implements IChooserW
@Override @Override
protected void queryDirectShareTargets(ChooserListAdapter adapter, protected void queryDirectShareTargets(ChooserListAdapter adapter,
boolean skipAppPredictionService) { 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) { if (sOverrides.onQueryDirectShareTargets != null) {
sOverrides.onQueryDirectShareTargets.apply(adapter); sOverrides.onQueryDirectShareTargets.apply(adapter);
} }