Loading core/java/com/android/internal/app/ChooserActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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; Loading @@ -72,6 +77,7 @@ public class ChooserActivityOverrideData { public void reset() { onSafelyStartCallback = null; onQueryDirectShareTargets = null; directShareTargets = null; isVoiceInteraction = null; createPackageManager = null; previewThumbnail = null; Loading Loading @@ -112,4 +118,3 @@ public class ChooserActivityOverrideData { private ChooserActivityOverrideData() {} } core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +29 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -2187,29 +2189,34 @@ public class ChooserActivityTest { resolvedComponentInfos.get(0).getResolveInfoAt(0).activityInfo.packageName); ResolveInfo ri = ResolverDataProvider.createResolveInfo(3, 0); // 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, ChooserActivityOverrideData .getInstance() .directShareTargets = (activity, adapter) -> { DisplayResolveInfo displayInfo = activity.createTestDisplayResolveInfo( sendIntent, ri, "testLabel", "testInfo", sendIntent, /* resolveInfoPresentationGetter */ null), /* resolveInfoPresentationGetter */ null); ServiceResultInfo[] results = { new ServiceResultInfo( displayInfo, 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); 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)); assertThat("Chooser should have 3 targets (2 apps, 1 direct)", activity.getAdapter().getCount(), is(3)); Loading core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading
core/java/com/android/internal/app/ChooserActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
core/tests/coretests/src/com/android/internal/app/ChooserActivityOverrideData.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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; Loading @@ -72,6 +77,7 @@ public class ChooserActivityOverrideData { public void reset() { onSafelyStartCallback = null; onQueryDirectShareTargets = null; directShareTargets = null; isVoiceInteraction = null; createPackageManager = null; previewThumbnail = null; Loading Loading @@ -112,4 +118,3 @@ public class ChooserActivityOverrideData { private ChooserActivityOverrideData() {} }
core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +29 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -2187,29 +2189,34 @@ public class ChooserActivityTest { resolvedComponentInfos.get(0).getResolveInfoAt(0).activityInfo.packageName); ResolveInfo ri = ResolverDataProvider.createResolveInfo(3, 0); // 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, ChooserActivityOverrideData .getInstance() .directShareTargets = (activity, adapter) -> { DisplayResolveInfo displayInfo = activity.createTestDisplayResolveInfo( sendIntent, ri, "testLabel", "testInfo", sendIntent, /* resolveInfoPresentationGetter */ null), /* resolveInfoPresentationGetter */ null); ServiceResultInfo[] results = { new ServiceResultInfo( displayInfo, 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); 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)); assertThat("Chooser should have 3 targets (2 apps, 1 direct)", activity.getAdapter().getCount(), is(3)); Loading
core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading