Commit 9593ee49 authored by Tanya Gupta's avatar Tanya Gupta Committed by Commit Bot

[SharingHub] Changed the way firstPartyOptions are created.

They will not be created on demand. This simplifies the logic to decide
which options are relevant given the current state of the Chrome app.

Change-Id: I9b3ebf3030cfaa48088d7c1d0082d659b47f28cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2485838
Commit-Queue: Tanya Gupta <tgupta@chromium.org>
Reviewed-by: default avatarKyle Milka <kmilka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821914}
parent fae7adc6
......@@ -44,132 +44,142 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* Provides {@code PropertyModel}s of Chrome-provided sharing options.
*/
class ChromeProvidedSharingOptionsProvider {
private final Activity mActivity;
private Activity mActivity;
private final Supplier<Tab> mTabProvider;
private final BottomSheetController mBottomSheetController;
private final ShareSheetBottomSheetContent mBottomSheetContent;
private final ShareParams mShareParams;
private final Callback<Tab> mPrintTabCallback;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
private final long mShareStartTime;
private final List<FirstPartyOption> mOrderedFirstPartyOptions;
private final ChromeOptionShareCallback mChromeOptionShareCallback;
private ShareParams mShareParams;
private ChromeShareExtras mChromeShareExtras;
private Callback<Tab> mPrintTabCallback;
private SettingsLauncher mSettingsLauncher;
private boolean mIsSyncEnabled;
private long mShareStartTime;
private ChromeOptionShareCallback mChromeOptionShareCallback;
private ScreenshotCoordinator mScreenshotCoordinator;
private final String mUrl;
private String mUrl;
private boolean mIsMultiWindow;
private Collection<Integer> mContentTypes;
/**
* Constructs a new {@link ChromeProvidedSharingOptionsProvider}.
*
* @param activity The current {@link Activity}.
* @param tabProvider Supplier for the current activity tab.
* @param bottomSheetController The {@link BottomSheetController} for the current activity.
* @param bottomSheetContent The {@link ShareSheetBottomSheetContent} for the current
* activity.
* @param bottomSheetContent The {@link ShareSheetBottomSheetContent} for the current activity.
*/
ChromeProvidedSharingOptionsProvider(Supplier<Tab> tabProvider,
BottomSheetController bottomSheetController,
ShareSheetBottomSheetContent bottomSheetContent) {
mTabProvider = tabProvider;
mBottomSheetController = bottomSheetController;
mBottomSheetContent = bottomSheetContent;
}
/**
* Sets params related to the share itself.
*
* @param shareParams The {@link ShareParams} for the current share.
* @param chromeShareExtras The {@link ChromeShareExtras} for the current share.
* @param printTab A {@link Callback} that will print a given Tab.
* @param shareStartTime The start time of the current share.
* @param chromeOptionShareCallback A ChromeOptionShareCallback that can be used by
* Chrome-provided sharing options.
* @param contentTypes The contentTypes the share is comprised of.
*/
ChromeProvidedSharingOptionsProvider(Activity activity, Supplier<Tab> tabProvider,
BottomSheetController bottomSheetController,
ShareSheetBottomSheetContent bottomSheetContent, ShareParams shareParams,
ChromeShareExtras chromeShareExtras, Callback<Tab> printTab,
SettingsLauncher settingsLauncher, boolean isSyncEnabled, long shareStartTime,
ChromeOptionShareCallback chromeOptionShareCallback) {
mActivity = activity;
mTabProvider = tabProvider;
mBottomSheetController = bottomSheetController;
mBottomSheetContent = bottomSheetContent;
void setShareRelatedParams(ShareParams shareParams, ChromeShareExtras chromeShareExtras,
long shareStartTime, ChromeOptionShareCallback chromeOptionShareCallback,
Collection<Integer> contentTypes) {
mShareParams = shareParams;
mShareStartTime = shareStartTime;
mChromeShareExtras = chromeShareExtras;
mActivity = mShareParams.getWindow().getActivity().get();
mChromeOptionShareCallback = chromeOptionShareCallback;
mContentTypes = contentTypes;
}
/**
* Set params needed by the individual sharing features.
*
* @param printTab A {@link Callback} that will print a given Tab.
* @param settingsLauncher Launches Chrome settings.
* @param isSyncEnabled Whether the user has enabled sync.
*/
void setFeatureSpecificParams(
Callback<Tab> printTab, SettingsLauncher settingsLauncher, boolean isSyncEnabled) {
mPrintTabCallback = printTab;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
mShareStartTime = shareStartTime;
mOrderedFirstPartyOptions = new ArrayList<>();
initializeFirstPartyOptionsInOrder();
mChromeOptionShareCallback = chromeOptionShareCallback;
mUrl = getUrlToShare(shareParams, chromeShareExtras,
mTabProvider.get().isInitialized() ? mTabProvider.get().getUrl().getSpec() : "");
}
/**
* Encapsulates a {@link PropertyModel} and the {@link ContentType}s it should be shown for.
* Set whether Chrome is in multiWindow mode.
*/
private static class FirstPartyOption {
final Collection<Integer> mContentTypes;
final Collection<Integer> mContentTypesToDisableFor;
final PropertyModel mPropertyModel;
final boolean mDisableForMultiWindow;
void setIsMultiWindow(boolean isMultiWindow) {
mIsMultiWindow = isMultiWindow;
}
/**
* Should only be used when the default property model constructed in the builder does not
* fit the feature's needs. This should be rare.
* Calculates the property models to display for the Share.
*
* <p>New share features should add a call to this function. The order of the functions
* determine the order in which they appear in the share sheet. Each feature is gated on the
* supported {@link ContentType}(s).
*
* @param model Property model for the first party option.
* @param contentTypes Content types to trigger for.
* @param contentTypesToDisableFor Content types to disable for.
* @param disableForMultiWindow If the feature should be disabled if in multi-window mode.
* @return the set of ChromeProvidedSharingOptions for the share.
*/
FirstPartyOption(PropertyModel model, Collection<Integer> contentTypes,
Collection<Integer> contentTypesToDisableFor, boolean disableForMultiWindow) {
mPropertyModel = model;
mContentTypes = contentTypes;
mContentTypesToDisableFor = contentTypesToDisableFor;
mDisableForMultiWindow = disableForMultiWindow;
List<PropertyModel> calculatePropertyModels() {
mUrl = getUrlToShare(mShareParams, mChromeShareExtras,
mTabProvider.get().isInitialized() ? mTabProvider.get().getUrl().getSpec() : "");
List<PropertyModel> propertyModels = new ArrayList<>();
if (mContentTypes == null || mContentTypes.isEmpty()) {
return propertyModels;
}
maybeAddScreenshotOption(propertyModels);
maybeAddCopyLinkOption(propertyModels);
maybeCopyImageOption(propertyModels);
maybeAddCopyTextAndLinkOption(propertyModels);
maybeAddCopyTextOption(propertyModels);
maybeAddSendTabToSelfOption(propertyModels);
maybeAddHighlightsOption(propertyModels);
maybeAddQrCodeOption(propertyModels);
maybeAddPrintingOption(propertyModels);
return propertyModels;
}
private class FirstPartyOptionBuilder {
private class PropertyModelBuilder {
private int mIcon;
private int mIconLabel;
private String mFeatureNameForMetrics;
private Callback<View> mOnClickCallback;
private boolean mDisableForMultiWindow;
private Integer[] mContentTypesToDisableFor;
private final Integer[] mContentTypesInBuilder;
FirstPartyOptionBuilder(Integer... contentTypes) {
mContentTypesInBuilder = contentTypes;
mContentTypesToDisableFor = new Integer[] {};
}
FirstPartyOptionBuilder setIcon(int icon, int iconLabel) {
PropertyModelBuilder setIcon(int icon, int iconLabel) {
mIcon = icon;
mIconLabel = iconLabel;
return this;
}
FirstPartyOptionBuilder setFeatureNameForMetrics(String featureName) {
PropertyModelBuilder setFeatureNameForMetrics(String featureName) {
mFeatureNameForMetrics = featureName;
return this;
}
FirstPartyOptionBuilder setOnClickCallback(Callback<View> onClickCallback) {
PropertyModelBuilder setOnClickCallback(Callback<View> onClickCallback) {
mOnClickCallback = onClickCallback;
return this;
}
FirstPartyOptionBuilder setContentTypesToDisableFor(Integer... contentTypesToDisableFor) {
mContentTypesToDisableFor = contentTypesToDisableFor;
return this;
}
FirstPartyOptionBuilder setDisableForMultiWindow(boolean disableForMultiWindow) {
mDisableForMultiWindow = disableForMultiWindow;
return this;
}
FirstPartyOption build() {
PropertyModel model = ShareSheetPropertyModelBuilder.createPropertyModel(
PropertyModel build() {
return ShareSheetPropertyModelBuilder.createPropertyModel(
AppCompatResources.getDrawable(mActivity, mIcon),
mActivity.getResources().getString(mIconLabel), (view) -> {
RecordUserAction.record(mFeatureNameForMetrics);
......@@ -177,57 +187,6 @@ class ChromeProvidedSharingOptionsProvider {
mBottomSheetController.hideContent(mBottomSheetContent, true);
mOnClickCallback.onResult(view);
});
return new FirstPartyOption(model, Arrays.asList(mContentTypesInBuilder),
Arrays.asList(mContentTypesToDisableFor), mDisableForMultiWindow);
}
}
/**
* Returns an ordered list of {@link PropertyModel}s that should be shown given the {@code
* contentTypes} being shared.
*
* @param contentTypes a {@link Set} of {@link ContentType}.
* @param isMultiWindow if in multi-window mode.
* @return a list of {@link PropertyModel}s.
*/
List<PropertyModel> getPropertyModels(Set<Integer> contentTypes, boolean isMultiWindow) {
List<PropertyModel> propertyModels = new ArrayList<>();
for (FirstPartyOption firstPartyOption : mOrderedFirstPartyOptions) {
if (!Collections.disjoint(contentTypes, firstPartyOption.mContentTypes)
&& Collections.disjoint(
contentTypes, firstPartyOption.mContentTypesToDisableFor)
&& !(isMultiWindow && firstPartyOption.mDisableForMultiWindow)) {
propertyModels.add(firstPartyOption.mPropertyModel);
}
}
return propertyModels;
}
/**
* Creates all enabled {@link FirstPartyOption}s and adds them to {@code
* mOrderedFirstPartyOptions} in the order they should appear.
*/
private void initializeFirstPartyOptionsInOrder() {
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)) {
mOrderedFirstPartyOptions.add(createScreenshotFirstPartyOption());
}
mOrderedFirstPartyOptions.add(createCopyLinkFirstPartyOption());
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)) {
mOrderedFirstPartyOptions.add(createCopyImageFirstPartyOption());
mOrderedFirstPartyOptions.add(createCopyFirstPartyOption());
mOrderedFirstPartyOptions.add(createCopyTextFirstPartyOption());
}
mOrderedFirstPartyOptions.add(createSendTabToSelfFirstPartyOption());
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)
&& ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID)) {
mOrderedFirstPartyOptions.add(createHighlightsFirstPartyOption());
}
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_QRCODE)
&& !mTabProvider.get().getWebContents().isIncognito()) {
mOrderedFirstPartyOptions.add(createQrCodeFirstPartyOption());
}
if (UserPrefs.get(Profile.getLastUsedRegularProfile()).getBoolean(Pref.PRINTING_ENABLED)) {
mOrderedFirstPartyOptions.add(createPrintingFirstPartyOption());
}
}
......@@ -247,8 +206,18 @@ class ChromeProvidedSharingOptionsProvider {
}
};
private FirstPartyOption createScreenshotFirstPartyOption() {
PropertyModel propertyModel = ShareSheetPropertyModelBuilder.createPropertyModel(
private void maybeAddScreenshotOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)
|| mIsMultiWindow) {
return;
}
if (Collections.disjoint(mContentTypes,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.TEXT,
ContentType.HIGHLIGHTED_TEXT, ContentType.IMAGE))) {
return;
}
propertyModels.add(ShareSheetPropertyModelBuilder.createPropertyModel(
AppCompatResources.getDrawable(mActivity, R.drawable.screenshot),
mActivity.getResources().getString(R.string.sharing_screenshot), (view) -> {
RecordUserAction.record("SharingHubAndroid.ScreenshotSelected");
......@@ -259,80 +228,113 @@ class ChromeProvidedSharingOptionsProvider {
// observer will then remove itself.
mBottomSheetController.addObserver(mSheetObserver);
mBottomSheetController.hideContent(mBottomSheetContent, true);
});
return new FirstPartyOption(propertyModel,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.TEXT,
ContentType.HIGHLIGHTED_TEXT, ContentType.IMAGE),
/*contentTypesToDisableFor=*/Collections.emptySet(),
/*disableForMultiWindow=*/true);
}));
}
private void maybeAddCopyLinkOption(List<PropertyModel> propertyModels) {
if (mContentTypes.contains(ContentType.LINK_AND_TEXT)
|| Collections.disjoint(mContentTypes,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE,
ContentType.LINK_PAGE_NOT_VISIBLE))) {
return;
}
private FirstPartyOption createCopyLinkFirstPartyOption() {
return new FirstPartyOptionBuilder(
ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE)
.setContentTypesToDisableFor(ContentType.LINK_AND_TEXT)
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.ic_content_copy_black, R.string.sharing_copy_url)
.setFeatureNameForMetrics("SharingHubAndroid.CopyURLSelected")
.setOnClickCallback((view) -> {
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(
ClipboardManager clipboard =
(ClipboardManager) mActivity.getSystemService(
Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(
ClipData.newPlainText(mShareParams.getTitle(), mShareParams.getUrl()));
Toast.makeText(mActivity, R.string.link_copied, Toast.LENGTH_SHORT).show();
clipboard.setPrimaryClip(ClipData.newPlainText(
mShareParams.getTitle(), mShareParams.getUrl()));
Toast.makeText(mActivity, R.string.link_copied, Toast.LENGTH_SHORT)
.show();
})
.build();
.build());
}
private FirstPartyOption createCopyImageFirstPartyOption() {
return new FirstPartyOptionBuilder(ContentType.IMAGE)
private void maybeCopyImageOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)
|| !mContentTypes.contains(ContentType.IMAGE)) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.ic_content_copy_black, R.string.sharing_copy_image)
.setFeatureNameForMetrics("SharingHubAndroid.CopyImageSelected")
.setOnClickCallback((view) -> {
if (!mShareParams.getFileUris().isEmpty()) {
Clipboard.getInstance().setImageUri(mShareParams.getFileUris().get(0));
Toast.makeText(mActivity, R.string.image_copied, Toast.LENGTH_SHORT).show();
Clipboard.getInstance().setImageUri(
mShareParams.getFileUris().get(0));
Toast.makeText(mActivity, R.string.image_copied, Toast.LENGTH_SHORT)
.show();
}
})
.build();
.build());
}
private FirstPartyOption createCopyFirstPartyOption() {
return new FirstPartyOptionBuilder(ContentType.LINK_AND_TEXT)
private void maybeAddCopyTextAndLinkOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)
|| !mContentTypes.contains(ContentType.LINK_AND_TEXT)) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.ic_content_copy_black, R.string.sharing_copy)
.setFeatureNameForMetrics("SharingHubAndroid.CopySelected")
.setOnClickCallback((view) -> {
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(
ClipboardManager clipboard =
(ClipboardManager) mActivity.getSystemService(
Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(ClipData.newPlainText(
mShareParams.getTitle(), mShareParams.getTextAndUrl()));
Toast.makeText(mActivity, R.string.sharing_copied, Toast.LENGTH_SHORT).show();
Toast.makeText(mActivity, R.string.sharing_copied, Toast.LENGTH_SHORT)
.show();
})
.build();
.build());
}
private FirstPartyOption createCopyTextFirstPartyOption() {
return new FirstPartyOptionBuilder(ContentType.TEXT, ContentType.HIGHLIGHTED_TEXT)
.setContentTypesToDisableFor(ContentType.LINK_AND_TEXT)
private void maybeAddCopyTextOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)
|| mContentTypes.contains(ContentType.LINK_AND_TEXT)) {
return;
}
if (Collections.disjoint(
mContentTypes, Arrays.asList(ContentType.TEXT, ContentType.HIGHLIGHTED_TEXT))) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.ic_content_copy_black, R.string.sharing_copy_text)
.setFeatureNameForMetrics("SharingHubAndroid.CopyTextSelected")
.setOnClickCallback((view) -> {
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(
ClipboardManager clipboard =
(ClipboardManager) mActivity.getSystemService(
Context.CLIPBOARD_SERVICE);
clipboard.setPrimaryClip(
ClipData.newPlainText(mShareParams.getTitle(), mShareParams.getText()));
Toast.makeText(mActivity, R.string.text_copied, Toast.LENGTH_SHORT).show();
clipboard.setPrimaryClip(ClipData.newPlainText(
mShareParams.getTitle(), mShareParams.getText()));
Toast.makeText(mActivity, R.string.text_copied, Toast.LENGTH_SHORT)
.show();
})
.build();
.build());
}
private FirstPartyOption createSendTabToSelfFirstPartyOption() {
return new FirstPartyOptionBuilder(
ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.IMAGE)
.setIcon(R.drawable.send_tab, R.string.send_tab_to_self_share_activity_title)
private void maybeAddSendTabToSelfOption(List<PropertyModel> propertyModels) {
if (Collections.disjoint(mContentTypes,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE,
ContentType.IMAGE))) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(
R.drawable.send_tab, R.string.send_tab_to_self_share_activity_title)
.setFeatureNameForMetrics("SharingHubAndroid.SendTabToSelfSelected")
.setOnClickCallback((view) -> {
SendTabToSelfCoordinator sttsCoordinator =
new SendTabToSelfCoordinator(mActivity, mUrl, mShareParams.getTitle(),
SendTabToSelfCoordinator sttsCoordinator = new SendTabToSelfCoordinator(
mActivity, mUrl, mShareParams.getTitle(),
mBottomSheetController, mSettingsLauncher, mIsSyncEnabled,
mTabProvider.get()
.getWebContents()
......@@ -341,45 +343,66 @@ class ChromeProvidedSharingOptionsProvider {
.getTimestamp());
sttsCoordinator.show();
})
.build();
.build());
}
private FirstPartyOption createQrCodeFirstPartyOption() {
return new FirstPartyOptionBuilder(
ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.IMAGE)
private void maybeAddQrCodeOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_QRCODE)
|| mTabProvider.get().getWebContents().isIncognito()) {
return;
}
if (Collections.disjoint(mContentTypes,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE,
ContentType.IMAGE))) {
return;
}
propertyModels.add(new PropertyModelBuilder()
.setIcon(R.drawable.qr_code, R.string.qr_code_share_icon_label)
.setFeatureNameForMetrics("SharingHubAndroid.QRCodeSelected")
.setOnClickCallback((view) -> {
QrCodeCoordinator qrCodeCoordinator = new QrCodeCoordinator(mActivity, mUrl);
QrCodeCoordinator qrCodeCoordinator =
new QrCodeCoordinator(mActivity, mUrl);
qrCodeCoordinator.show();
})
.build();
.build());
}
private FirstPartyOption createPrintingFirstPartyOption() {
return new FirstPartyOptionBuilder(ContentType.LINK_PAGE_VISIBLE)
private void maybeAddPrintingOption(List<PropertyModel> propertyModels) {
if (!UserPrefs.get(Profile.getLastUsedRegularProfile()).getBoolean(Pref.PRINTING_ENABLED)
|| !mContentTypes.contains(ContentType.LINK_PAGE_VISIBLE)) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.sharing_print, R.string.print_share_activity_title)
.setFeatureNameForMetrics("SharingHubAndroid.PrintSelected")
.setOnClickCallback((view) -> { mPrintTabCallback.onResult(mTabProvider.get()); })
.build();
.setOnClickCallback(
(view) -> { mPrintTabCallback.onResult(mTabProvider.get()); })
.build());
}
private FirstPartyOption createHighlightsFirstPartyOption() {
return new FirstPartyOptionBuilder(ContentType.HIGHLIGHTED_TEXT)
private void maybeAddHighlightsOption(List<PropertyModel> propertyModels) {
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)
|| !ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID)
|| !mContentTypes.contains(ContentType.HIGHLIGHTED_TEXT)) {
return;
}
propertyModels.add(
new PropertyModelBuilder()
.setIcon(R.drawable.link, R.string.sharing_highlights)
.setFeatureNameForMetrics("SharingHubAndroid.LinkToTextSelected")
.setOnClickCallback((view) -> {
LinkToTextCoordinator linkToTextCoordinator =
new LinkToTextCoordinator(mActivity, mTabProvider.get(),
mChromeOptionShareCallback, mUrl, mShareParams.getText());
LinkToTextCoordinator linkToTextCoordinator = new LinkToTextCoordinator(
mActivity, mTabProvider.get(), mChromeOptionShareCallback, mUrl,
mShareParams.getText());
})
.build();
.build());
}
/**
* Returns the url to share.
*
* <p>This prioritizes the URL in {@link ShareParams}, but if it does not exist, we look for an
* <p> This prioritizes the URL in {@link ShareParams}, but if it does not exist, we look for an
* image source URL from {@link ChromeShareExtras}. The image source URL is not contained in
* {@link ShareParams#getUrl()} because we do not want to share the image URL with the image
* file in third-party app shares. If both are empty then current tab URL is used. This is
......
......@@ -47,10 +47,6 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
private final BottomSheetController mBottomSheetController;
private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
private final Callback<Tab> mPrintTabCallback;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
private long mShareStartTime;
private boolean mExcludeFirstParty;
private boolean mIsMultiWindow;
private Set<Integer> mContentTypes;
......@@ -82,9 +78,6 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mLifecycleDispatcher.register(this);
mTabProvider = tabProvider;
mPropertyModelBuilder = modelBuilder;
mPrintTabCallback = printTab;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
mBottomSheetObserver = new EmptyBottomSheetObserver() {
@Override
public void onSheetContentChanged(BottomSheetContent bottomSheet) {
......@@ -100,6 +93,11 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
};
mBottomSheetController.addObserver(mBottomSheetObserver);
mIconBridge = iconBridge;
mChromeProvidedSharingOptionsProvider =
new ChromeProvidedSharingOptionsProvider(tabProvider, controller, mBottomSheet);
mChromeProvidedSharingOptionsProvider.setFeatureSpecificParams(
printTab, settingsLauncher, isSyncEnabled);
}
protected void destroy() {
......@@ -117,6 +115,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mLifecycleDispatcher.unregister(this);
mLifecycleDispatcher = null;
}
mChromeProvidedSharingOptionsProvider = null;
}
// TODO(crbug/1022172): Should be package-protected once modularization is complete.
......@@ -135,12 +134,11 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mBottomSheet = new ShareSheetBottomSheetContent(mActivity, mIconBridge, this, params);
mShareStartTime = shareStartTime;
mContentTypes = ShareSheetPropertyModelBuilder.getContentTypes(params, chromeShareExtras);
List<PropertyModel> firstPartyApps =
createFirstPartyPropertyModels(mActivity, params, chromeShareExtras, mContentTypes);
List<PropertyModel> firstPartyApps = createFirstPartyPropertyModels(
mActivity, params, chromeShareExtras, mContentTypes, shareStartTime);
List<PropertyModel> thirdPartyApps = createThirdPartyPropertyModels(
mActivity, params, mContentTypes, chromeShareExtras.saveLastUsed());
mActivity, params, mContentTypes, chromeShareExtras.saveLastUsed(), shareStartTime);
mBottomSheet.createRecyclerViews(
firstPartyApps, thirdPartyApps, mContentTypes, params.getFileContentType());
......@@ -162,25 +160,24 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
}
List<PropertyModel> createFirstPartyPropertyModels(Activity activity, ShareParams shareParams,
ChromeShareExtras chromeShareExtras, Set<Integer> contentTypes) {
ChromeShareExtras chromeShareExtras, Set<Integer> contentTypes, long shareStartTime) {
if (mExcludeFirstParty) {
return new ArrayList<>();
}
mChromeProvidedSharingOptionsProvider = new ChromeProvidedSharingOptionsProvider(activity,
mTabProvider, mBottomSheetController, mBottomSheet, shareParams, chromeShareExtras,
mPrintTabCallback, mSettingsLauncher, mIsSyncEnabled, mShareStartTime, this);
mIsMultiWindow = ApiCompatibilityUtils.isInMultiWindowMode(activity);
return mChromeProvidedSharingOptionsProvider.getPropertyModels(
contentTypes, mIsMultiWindow);
mChromeProvidedSharingOptionsProvider.setShareRelatedParams(
shareParams, chromeShareExtras, shareStartTime, this, contentTypes);
mChromeProvidedSharingOptionsProvider.setIsMultiWindow(mIsMultiWindow);
return mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
}
@VisibleForTesting
List<PropertyModel> createThirdPartyPropertyModels(Activity activity, ShareParams params,
Set<Integer> contentTypes, boolean saveLastUsed) {
Set<Integer> contentTypes, boolean saveLastUsed, long shareStartTime) {
if (params == null) return null;
List<PropertyModel> models = mPropertyModelBuilder.selectThirdPartyApps(mBottomSheet,
contentTypes, params, saveLastUsed, params.getWindow(), mShareStartTime);
contentTypes, params, saveLastUsed, params.getWindow(), shareStartTime);
// More...
PropertyModel morePropertyModel = ShareSheetPropertyModelBuilder.createPropertyModel(
AppCompatResources.getDrawable(activity, R.drawable.sharing_more),
......@@ -218,16 +215,22 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
return;
}
boolean isMultiWindow = ApiCompatibilityUtils.isInMultiWindowMode(mActivity);
// mContentTypes is null if Chrome features should not be shown.
if (mIsMultiWindow == isMultiWindow || mContentTypes == null) {
if (mIsMultiWindow == isMultiWindow) {
return;
}
mIsMultiWindow = isMultiWindow;
mBottomSheet.createFirstPartyRecyclerViews(
mChromeProvidedSharingOptionsProvider.getPropertyModels(
mContentTypes, mIsMultiWindow));
mBottomSheetController.requestShowContent(mBottomSheet, /*animate=*/false);
mChromeProvidedSharingOptionsProvider.setIsMultiWindow(mIsMultiWindow);
List<PropertyModel> firstPartyOptions =
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
// firstPartyOptions is empty if Chrome features should not be shown.
if (firstPartyOptions == null || firstPartyOptions.isEmpty()) {
return;
}
mBottomSheet.createFirstPartyRecyclerViews(firstPartyOptions);
mBottomSheetController.requestShowContent(mBottomSheet, /* animate= */ false);
}
// View.OnLayoutChangeListener
......@@ -242,5 +245,4 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mBottomSheet.getThirdPartyView().invalidate();
mBottomSheet.getThirdPartyView().requestLayout();
}
}
......@@ -40,10 +40,13 @@ import org.chromium.components.prefs.PrefService;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.components.user_prefs.UserPrefsJni;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.ImmutableWeakReference;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity;
import org.chromium.url.GURL;
import java.util.Collection;
import java.util.List;
/**
......@@ -77,6 +80,9 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Mock
private ShareSheetCoordinator mShareSheetCoordinator;
@Mock
private WindowAndroid mWindow;
private Activity mActivity;
private ChromeProvidedSharingOptionsProvider mChromeProvidedSharingOptionsProvider;
......@@ -100,6 +106,7 @@ public class ChromeProvidedSharingOptionsProviderTest {
Mockito.when(mTab.getUrl()).thenReturn(new GURL(URL));
Mockito.when(mWebContents.isIncognito()).thenReturn(false);
mActivity = mActivityTestRule.getActivity();
Mockito.when(mWindow.getActivity()).thenReturn(new ImmutableWeakReference<>(mActivity));
}
@Test
......@@ -109,10 +116,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Features.DisableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_screenshotQrCodeEnabled_includesBoth() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES,
/* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_screenshot),
......@@ -127,10 +135,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_QRCODE, ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_screenshotQrCodeDisabled_doesNotIncludeEither() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES,
/* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(
......@@ -143,10 +152,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_QRCODE, ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_printingEnabled_includesPrinting() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/true);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ true,
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES,
/* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(
......@@ -162,10 +172,10 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID})
public void
getPropertyModels_sharingHub15Enabled_includesCopyText() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.TEXT), /* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.TEXT), /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy_text)));
......@@ -179,13 +189,13 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID})
public void
getPropertyModels_linkAndTextShare() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.LINK_AND_TEXT, ContentType.LINK_PAGE_NOT_VISIBLE,
ContentType.TEXT),
/* isMultiWindow= */ true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.LINK_AND_TEXT,
ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.TEXT),
/*isMultiWindow=*/true);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy),
......@@ -201,12 +211,12 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID})
public void
getPropertyModels_linkShare() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE),
/* isMultiWindow= */ true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE),
/*isMultiWindow=*/true);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy_url),
......@@ -222,12 +232,12 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID})
public void
getPropertyModels_textShare() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.TEXT),
/* isMultiWindow= */ true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.TEXT),
/*isMultiWindow=*/true);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy_text)));
......@@ -241,11 +251,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_multiWindow_doesNotIncludeScreenshot() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /* isMultiWindow= */ true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /*isMultiWindow=*/true);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(
......@@ -259,11 +269,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Features.DisableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_filtersByContentType() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ true,
ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE),
/*isMultiWindow=*/false);
/* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy_url),
......@@ -279,11 +289,11 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Features.DisableFeatures({ChromeFeatureList.CHROME_SHARING_HUB_V15})
public void
getPropertyModels_multipleTypes_filtersByContentType() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/true);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ true,
ImmutableSet.of(ContentType.LINK_PAGE_NOT_VISIBLE, ContentType.IMAGE),
/*isMultiWindow=*/false);
/* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_screenshot),
......@@ -300,10 +310,10 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Features.EnableFeatures({ChromeFeatureList.CHROME_SHARE_HIGHLIGHTS_ANDROID})
public void
getPropertyModels_sharingHub15Disabled_noHighlights() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.TEXT), /* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.TEXT), /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertEquals("Incorrect number of property models.", 0, propertyModels.size());
}
......@@ -315,10 +325,10 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Features.DisableFeatures({ChromeFeatureList.CHROME_SHARE_SCREENSHOT})
public void
getPropertyModels_sharingHub15HighlightsEnabled() {
setUpChromeProvidedSharingOptionsProviderTest(/*printingEnabled=*/false);
setUpChromeProvidedSharingOptionsProviderTest(/* printingEnabled= */ false,
ImmutableSet.of(ContentType.HIGHLIGHTED_TEXT), /* isMultiWindow= */ false);
List<PropertyModel> propertyModels =
mChromeProvidedSharingOptionsProvider.getPropertyModels(
ImmutableSet.of(ContentType.HIGHLIGHTED_TEXT), /*isMultiWindow=*/false);
mChromeProvidedSharingOptionsProvider.calculatePropertyModels();
assertCorrectModelsAreInTheRightOrder(propertyModels,
ImmutableList.of(mActivity.getResources().getString(R.string.sharing_copy_text),
......@@ -328,7 +338,8 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Test
@MediumTest
public void getUrlToShare_noShareParamsUrl_returnsImageUrl() {
ShareParams shareParams = new ShareParams.Builder(null, /*title=*/"", /*url=*/"").build();
ShareParams shareParams =
new ShareParams.Builder(null, /* title= */ "", /* url= */ "").build();
ChromeShareExtras chromeShareExtras =
new ChromeShareExtras.Builder().setImageSrcUrl(URL).build();
......@@ -341,7 +352,7 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Test
@MediumTest
public void getUrlToShare_shareParamsUrlExists_returnsShareParamsUrl() {
ShareParams shareParams = new ShareParams.Builder(null, /*title=*/"", URL).build();
ShareParams shareParams = new ShareParams.Builder(null, /* title= */ "", URL).build();
ChromeShareExtras chromeShareExtras =
new ChromeShareExtras.Builder().setImageSrcUrl("").build();
......@@ -354,7 +365,8 @@ public class ChromeProvidedSharingOptionsProviderTest {
@Test
@MediumTest
public void getUrlToShare_noShareParamsUrl_noImageUrl() {
ShareParams shareParams = new ShareParams.Builder(null, /*title=*/"", /*url=*/"").build();
ShareParams shareParams =
new ShareParams.Builder(null, /* title= */ "", /* url= */ "").build();
ChromeShareExtras chromeShareExtras =
new ChromeShareExtras.Builder().setImageSrcUrl("").build();
......@@ -364,21 +376,24 @@ public class ChromeProvidedSharingOptionsProviderTest {
URL);
}
private void setUpChromeProvidedSharingOptionsProviderTest(boolean printingEnabled) {
private void setUpChromeProvidedSharingOptionsProviderTest(
boolean printingEnabled, Collection<Integer> contentTypes, boolean isMultiWindow) {
Mockito.when(mPrefService.getBoolean(anyString())).thenReturn(printingEnabled);
ShareParams shareParams = new ShareParams.Builder(null, /*title=*/"", /*url=*/"").build();
ShareParams shareParams =
new ShareParams.Builder(mWindow, /* title= */ "", /* url= */ "").build();
mChromeProvidedSharingOptionsProvider =
new ChromeProvidedSharingOptionsProvider(mActivity, mTabProvider,
/*bottomSheetController=*/null,
new ChromeProvidedSharingOptionsProvider(mTabProvider,
/* bottomSheetController= */ null,
new ShareSheetBottomSheetContent(
mActivity, null, mShareSheetCoordinator, shareParams),
new ShareParams.Builder(null, "", "").build(),
new ChromeShareExtras.Builder().build(),
/*TabPrinterDelegate=*/null,
/*settingsLauncher=*/null,
/*syncState=*/false,
/*shareStartTime=*/0, mShareSheetCoordinator);
mActivity, null, mShareSheetCoordinator, shareParams));
mChromeProvidedSharingOptionsProvider.setShareRelatedParams(shareParams,
new ChromeShareExtras.Builder().build(), /* shareStartTime= */ 0,
mShareSheetCoordinator, contentTypes);
mChromeProvidedSharingOptionsProvider.setFeatureSpecificParams(
/* TabPrinterDelegate= */ null, /* settingsLauncher= */ null,
/* syncState= */ false);
mChromeProvidedSharingOptionsProvider.setIsMultiWindow(isMultiWindow);
}
private void assertCorrectModelsAreInTheRightOrder(
......
......@@ -22,6 +22,7 @@ import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.CommandLineFlags;
......@@ -33,6 +34,8 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.ui.base.ImmutableWeakReference;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity;
......@@ -68,6 +71,9 @@ public final class ShareSheetCoordinatorTest {
@Mock
private ShareParams mParams;
@Mock
private WindowAndroid mWindow;
private Activity mActivity;
private ShareSheetCoordinator mShareSheetCoordinator;
......@@ -95,6 +101,9 @@ public final class ShareSheetCoordinatorTest {
mShareSheetCoordinator = new ShareSheetCoordinator(mController, mLifecycleDispatcher, null,
mPropertyModelBuilder, null, null, null, false);
Mockito.when(mParams.getWindow()).thenReturn(mWindow);
Mockito.when(mWindow.getActivity()).thenReturn(new ImmutableWeakReference<>(mActivity));
}
@Test
......@@ -104,7 +113,7 @@ public final class ShareSheetCoordinatorTest {
List<PropertyModel> propertyModels = mShareSheetCoordinator.createFirstPartyPropertyModels(
mActivity, mParams, /*chromeShareExtras=*/null,
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES);
ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES, /*shareStartTime=*/0);
assertEquals("Property model list should be empty.", 0, propertyModels.size());
}
......@@ -113,7 +122,7 @@ public final class ShareSheetCoordinatorTest {
public void testCreateThirdPartyPropertyModels() {
List<PropertyModel> propertyModels = mShareSheetCoordinator.createThirdPartyPropertyModels(
mActivity, mParams, ShareSheetPropertyModelBuilder.ALL_CONTENT_TYPES,
/*saveLastUsed=*/false);
/*saveLastUsed=*/false, /*shareStartTime=*/0);
assertEquals("Incorrect number of property models.", 3, propertyModels.size());
assertEquals("First property model isn't testModel1.", "testModel1",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment