Commit 82612a95 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

Remove ShareSheet dependency on TabPrinter

Pass in a Callback<Tab> that handles creating all the objects needed
to print the provided Tab.

Bug: 1022172
Change-Id: I9941ca0d168110bccde7b393007e05f5593dfabb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2228109
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarTanya Gupta <tgupta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#776188}
parent 283c9b80
......@@ -12,6 +12,7 @@ import android.content.Context;
import androidx.annotation.IntDef;
import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.Callback;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
......@@ -19,7 +20,6 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.printing.TabPrinter;
import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity;
import org.chromium.chrome.browser.share.ShareSheetPropertyModelBuilder.ContentType;
import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator;
......@@ -30,9 +30,6 @@ import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController.Shee
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver;
import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.printing.PrintManagerDelegateImpl;
import org.chromium.printing.PrintingController;
import org.chromium.printing.PrintingControllerImpl;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.widget.Toast;
......@@ -57,6 +54,7 @@ class ChromeProvidedSharingOptionsProvider {
private final ShareSheetBottomSheetContent mBottomSheetContent;
private final PrefServiceBridge mPrefServiceBridge;
private final ShareParams mShareParams;
private final Callback<Tab> mPrintTabCallback;
private final long mShareStartTime;
private ScreenshotCoordinator mScreenshotCoordinator;
private Map<Integer, Set<Integer>> mSharingOptionToContentTypes;
......@@ -72,18 +70,20 @@ class ChromeProvidedSharingOptionsProvider {
* @param prefServiceBridge The {@link PrefServiceBridge} singleton. This provides printing
* preferences.
* @param shareParams The {@link ShareParams} for the current share.
* @param printTab A {@link Callback} that will print a given Tab.
* @param shareStartTime The start time of the current share.
*/
ChromeProvidedSharingOptionsProvider(Activity activity, Supplier<Tab> tabProvider,
BottomSheetController bottomSheetController,
ShareSheetBottomSheetContent bottomSheetContent, PrefServiceBridge prefServiceBridge,
ShareParams shareParams, long shareStartTime) {
ShareParams shareParams, Callback<Tab> printTab, long shareStartTime) {
mActivity = activity;
mTabProvider = tabProvider;
mBottomSheetController = bottomSheetController;
mBottomSheetContent = bottomSheetContent;
mPrefServiceBridge = prefServiceBridge;
mShareParams = shareParams;
mPrintTabCallback = printTab;
mShareStartTime = shareStartTime;
mSharingOptionToContentTypes = createSharingOptionToContentTypesMap();
}
......@@ -249,11 +249,7 @@ class ChromeProvidedSharingOptionsProvider {
"Sharing.SharingHubAndroid.TimeToShare",
System.currentTimeMillis() - mShareStartTime);
mBottomSheetController.hideContent(mBottomSheetContent, true);
PrintingController printingController = PrintingControllerImpl.getInstance();
if (printingController != null && !printingController.isBusy()) {
printingController.startPrint(new TabPrinter(mTabProvider.get()),
new PrintManagerDelegateImpl(mActivity));
}
mPrintTabCallback.onResult(mTabProvider.get());
},
/*isFirstParty=*/true);
}
......
......@@ -20,6 +20,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.printing.PrintShareActivity;
import org.chromium.chrome.browser.printing.TabPrinter;
import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity;
import org.chromium.chrome.browser.share.qrcode.QrCodeShareActivity;
import org.chromium.chrome.browser.tab.SadTab;
......@@ -32,6 +33,9 @@ import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.ui_metrics.CanonicalURLResult;
import org.chromium.content_public.browser.WebContents;
import org.chromium.net.GURLUtils;
import org.chromium.printing.PrintManagerDelegateImpl;
import org.chromium.printing.PrintingController;
import org.chromium.printing.PrintingControllerImpl;
import org.chromium.ui.base.WindowAndroid;
import java.util.ArrayList;
......@@ -70,8 +74,8 @@ public class ShareDelegateImpl implements ShareDelegate {
if (mShareStartTime == 0L) {
mShareStartTime = System.currentTimeMillis();
}
mDelegate.share(
params, chromeShareExtras, mBottomSheetController, mTabProvider, mShareStartTime);
mDelegate.share(params, chromeShareExtras, mBottomSheetController, mTabProvider,
this::printTab, mShareStartTime);
mShareStartTime = 0;
}
......@@ -255,6 +259,15 @@ public class ShareDelegateImpl implements ShareDelegate {
}
}
private void printTab(Tab tab) {
Activity activity = mTabProvider.get().getWindowAndroid().getActivity().get();
PrintingController printingController = PrintingControllerImpl.getInstance();
if (printingController != null && !printingController.isBusy()) {
printingController.startPrint(
new TabPrinter(mTabProvider.get()), new PrintManagerDelegateImpl(activity));
}
}
/**
* Delegate for share handling.
*/
......@@ -263,7 +276,8 @@ public class ShareDelegateImpl implements ShareDelegate {
* Trigger the share action for the specified params.
*/
void share(ShareParams params, ChromeShareExtras chromeShareExtras,
BottomSheetController controller, Supplier<Tab> tabProvider, long shareStartTime) {
BottomSheetController controller, Supplier<Tab> tabProvider,
Callback<Tab> printCallback, long shareStartTime) {
if (chromeShareExtras.shareDirectly()) {
ShareHelper.shareWithLastUsedComponent(params);
} else if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB)) {
......@@ -271,7 +285,7 @@ public class ShareDelegateImpl implements ShareDelegate {
new ShareSheetCoordinator(controller, tabProvider,
new ShareSheetPropertyModelBuilder(controller,
ContextUtils.getApplicationContext().getPackageManager()),
PrefServiceBridge.getInstance());
PrefServiceBridge.getInstance(), printCallback);
// TODO(crbug/1009124): open custom share sheet.
coordinator.showShareSheet(params, chromeShareExtras, shareStartTime);
} else {
......
......@@ -9,6 +9,7 @@ import android.app.Activity;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.Callback;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
......@@ -31,6 +32,7 @@ class ShareSheetCoordinator {
private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
private final PrefServiceBridge mPrefServiceBridge;
private final Callback<Tab> mPrintTabCallback;
private long mShareStartTime;
private boolean mExcludeFirstParty;
......@@ -44,12 +46,14 @@ class ShareSheetCoordinator {
* for the Chrome-provided property models.
*/
ShareSheetCoordinator(BottomSheetController controller, Supplier<Tab> tabProvider,
ShareSheetPropertyModelBuilder modelBuilder, PrefServiceBridge prefServiceBridge) {
ShareSheetPropertyModelBuilder modelBuilder, PrefServiceBridge prefServiceBridge,
Callback<Tab> printTab) {
mBottomSheetController = controller;
mTabProvider = tabProvider;
mPropertyModelBuilder = modelBuilder;
mExcludeFirstParty = false;
mPrefServiceBridge = prefServiceBridge;
mPrintTabCallback = printTab;
}
void showShareSheet(
......@@ -94,7 +98,7 @@ class ShareSheetCoordinator {
ChromeProvidedSharingOptionsProvider chromeProvidedSharingOptionsProvider =
new ChromeProvidedSharingOptionsProvider(activity, mTabProvider,
mBottomSheetController, bottomSheet, mPrefServiceBridge, shareParams,
mShareStartTime);
mPrintTabCallback, mShareStartTime);
return chromeProvidedSharingOptionsProvider.createPropertyModels(contentTypes);
}
......
......@@ -65,7 +65,9 @@ public class ChromeProvidedSharingOptionsProviderTest {
mChromeProvidedSharingOptionsProvider = new ChromeProvidedSharingOptionsProvider(mActivity,
/*activityTabProvider=*/null, /*bottomSheetController=*/null,
new ShareSheetBottomSheetContent(mActivity), mPrefServiceBridge,
/*shareParams=*/null, /*shareStartTime=*/0);
/*shareParams=*/null,
/*TabPrinterDelegate=*/null,
/*shareStartTime=*/0);
// Return false to indicate printing is disabled.
Mockito.when(mPrefServiceBridge.getBoolean(anyString())).thenReturn(false);
......
......@@ -13,6 +13,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.Callback;
import org.chromium.base.supplier.Supplier;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
......@@ -117,7 +118,7 @@ public class ShareDelegateImplIntegrationTest {
@Override
void share(ShareParams params, ChromeShareExtras chromeShareParams,
BottomSheetController controller, Supplier<Tab> tabProvider,
long shareStartTime) {
Callback<Tab> printCallback, long shareStartTime) {
paramsRef.set(params);
helper.notifyCalled();
}
......
......@@ -74,7 +74,8 @@ public final class ShareSheetCoordinatorTest {
any(), any(), anyBoolean(), anyLong()))
.thenReturn(thirdPartyPropertyModels);
mShareSheetCoordinator = new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null);
mShareSheetCoordinator =
new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null, null);
}
@Test
......
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