Commit db17390b authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

Remove ShareSheet dependency on ActivityTabProvider

Use a Supplier<Tab> instead of ActivityTabProvider to access
the current tab from the share sheet.

Bug: 1022172
Change-Id: Iadc972986713f436bcdbb036d6e0f3629eca18eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2225332
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#774151}
parent 240627bd
......@@ -14,8 +14,8 @@ import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
......@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController.SheetState;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver;
import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.printing.PrintManagerDelegateImpl;
import org.chromium.printing.PrintingController;
import org.chromium.printing.PrintingControllerImpl;
......@@ -52,7 +51,7 @@ import java.util.Set;
*/
class ChromeProvidedSharingOptionsProvider {
private final Activity mActivity;
private final ActivityTabProvider mActivityTabProvider;
private final Supplier<Tab> mTabProvider;
private final BottomSheetController mBottomSheetController;
private final ShareSheetBottomSheetContent mBottomSheetContent;
private final PrefServiceBridge mPrefServiceBridge;
......@@ -64,7 +63,7 @@ class ChromeProvidedSharingOptionsProvider {
* Constructs a new {@link ChromeProvidedSharingOptionsProvider}.
*
* @param activity The current {@link Activity}.
* @param activityTabProvider The {@link ActivityTabProvider} for the current visible tab.
* @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.
......@@ -72,12 +71,12 @@ class ChromeProvidedSharingOptionsProvider {
* preferences.
* @param shareStartTime The start time of the current share.
*/
ChromeProvidedSharingOptionsProvider(Activity activity, ActivityTabProvider activityTabProvider,
ChromeProvidedSharingOptionsProvider(Activity activity, Supplier<Tab> tabProvider,
BottomSheetController bottomSheetController,
ShareSheetBottomSheetContent bottomSheetContent, PrefServiceBridge prefServiceBridge,
long shareStartTime) {
mActivity = activity;
mActivityTabProvider = activityTabProvider;
mTabProvider = tabProvider;
mBottomSheetController = bottomSheetController;
mBottomSheetContent = bottomSheetContent;
mPrefServiceBridge = prefServiceBridge;
......@@ -169,7 +168,7 @@ class ChromeProvidedSharingOptionsProvider {
"Sharing.SharingHubAndroid.TimeToShare",
System.currentTimeMillis() - mShareStartTime);
mScreenshotCoordinator =
new ScreenshotCoordinator(mActivity, mActivityTabProvider.get());
new ScreenshotCoordinator(mActivity, mTabProvider.get());
// Capture a screenshot once the bottom sheet is fully hidden. The observer
// will then remove itself.
mBottomSheetController.addObserver(mSheetObserver);
......@@ -187,12 +186,18 @@ class ChromeProvidedSharingOptionsProvider {
"Sharing.SharingHubAndroid.TimeToShare",
System.currentTimeMillis() - mShareStartTime);
mBottomSheetController.hideContent(mBottomSheetContent, true);
Tab tab = mActivityTabProvider.get();
NavigationEntry entry =
tab.getWebContents().getNavigationController().getVisibleEntry();
Tab tab = mTabProvider.get();
String title = tab.getWebContents()
.getNavigationController()
.getVisibleEntry()
.getTitle();
String url = tab.getWebContents()
.getNavigationController()
.getVisibleEntry()
.getUrl();
ClipboardManager clipboard = (ClipboardManager) mActivity.getSystemService(
Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(entry.getTitle(), entry.getUrl());
ClipData clip = ClipData.newPlainText(title, url);
clipboard.setPrimaryClip(clip);
Toast toast =
Toast.makeText(mActivity, R.string.link_copied, Toast.LENGTH_SHORT);
......@@ -212,11 +217,11 @@ class ChromeProvidedSharingOptionsProvider {
System.currentTimeMillis() - mShareStartTime);
mBottomSheetController.hideContent(mBottomSheetContent, true);
SendTabToSelfShareActivity.actionHandler(mActivity,
mActivityTabProvider.get()
mTabProvider.get()
.getWebContents()
.getNavigationController()
.getVisibleEntry(),
mBottomSheetController, mActivityTabProvider.get().getWebContents());
mBottomSheetController, mTabProvider.get().getWebContents());
},
/*isFirstParty=*/true);
}
......@@ -251,7 +256,7 @@ class ChromeProvidedSharingOptionsProvider {
mBottomSheetController.hideContent(mBottomSheetContent, true);
PrintingController printingController = PrintingControllerImpl.getInstance();
if (printingController != null && !printingController.isBusy()) {
printingController.startPrint(new TabPrinter(mActivityTabProvider.get()),
printingController.startPrint(new TabPrinter(mTabProvider.get()),
new PrintManagerDelegateImpl(mActivity));
}
},
......@@ -268,4 +273,4 @@ class ChromeProvidedSharingOptionsProvider {
int QR_CODE = 3;
int PRINT = 4;
}
}
\ No newline at end of file
}
......@@ -14,7 +14,7 @@ import org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.feature_engagement.ScreenshotTabObserver;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
......@@ -45,7 +45,7 @@ public class ShareDelegateImpl implements ShareDelegate {
private final BottomSheetController mBottomSheetController;
private final ShareSheetDelegate mDelegate;
private final ActivityTabProvider mActivityTabProvider;
private final Supplier<Tab> mTabProvider;
private long mShareStartTime;
private static boolean sScreenshotCaptureSkippedForTesting;
......@@ -54,14 +54,14 @@ public class ShareDelegateImpl implements ShareDelegate {
* Constructs a new {@link ShareDelegateImpl}.
*
* @param controller The BottomSheetController for the current activity.
* @param tabProvider The ActivityTabProvider for the current visible tab.
* @param tabProvider Supplier for the current activity tab.
* @param delegate The ShareSheetDelegate for the current activity.
*/
public ShareDelegateImpl(BottomSheetController controller, ActivityTabProvider tabProvider,
public ShareDelegateImpl(BottomSheetController controller, Supplier<Tab> tabProvider,
ShareSheetDelegate delegate) {
mBottomSheetController = controller;
mDelegate = delegate;
mActivityTabProvider = tabProvider;
mTabProvider = tabProvider;
}
// ShareDelegate implementation.
......@@ -70,8 +70,8 @@ public class ShareDelegateImpl implements ShareDelegate {
if (mShareStartTime == 0L) {
mShareStartTime = System.currentTimeMillis();
}
mDelegate.share(params, chromeShareExtras, mBottomSheetController, mActivityTabProvider,
mShareStartTime);
mDelegate.share(
params, chromeShareExtras, mBottomSheetController, mTabProvider, mShareStartTime);
mShareStartTime = 0;
}
......@@ -258,8 +258,7 @@ public class ShareDelegateImpl implements ShareDelegate {
* Trigger the share action for the specified params.
*/
void share(ShareParams params, ChromeShareExtras chromeShareExtras,
BottomSheetController controller, ActivityTabProvider tabProvider,
long shareStartTime) {
BottomSheetController controller, Supplier<Tab> tabProvider, long shareStartTime) {
if (chromeShareExtras.shareDirectly()) {
ShareHelper.shareWithLastUsedComponent(params);
} else if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB)) {
......
......@@ -12,9 +12,10 @@ import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.ui.modelutil.PropertyModel;
......@@ -31,7 +32,7 @@ import java.util.List;
*/
class ShareSheetCoordinator {
private final BottomSheetController mBottomSheetController;
private final ActivityTabProvider mActivityTabProvider;
private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
private final PrefServiceBridge mPrefServiceBridge;
private long mShareStartTime;
......@@ -41,15 +42,15 @@ class ShareSheetCoordinator {
* Constructs a new ShareSheetCoordinator.
*
* @param controller The {@link BottomSheetController} for the current activity.
* @param provider The {@link ActivityTabProvider} for the current visible tab.
* @param tabProvider Supplier for the current activity tab.
* @param modelBuilder The {@link ShareSheetPropertyModelBuilder} for the share sheet.
* @param prefServiceBridge The {@link PrefServiceBridge} singleton. This provides preferences
* for the Chrome-provided property models.
*/
ShareSheetCoordinator(BottomSheetController controller, ActivityTabProvider provider,
ShareSheetCoordinator(BottomSheetController controller, Supplier<Tab> tabProvider,
ShareSheetPropertyModelBuilder modelBuilder, PrefServiceBridge prefServiceBridge) {
mBottomSheetController = controller;
mActivityTabProvider = provider;
mTabProvider = tabProvider;
mPropertyModelBuilder = modelBuilder;
mExcludeFirstParty = false;
mPrefServiceBridge = prefServiceBridge;
......@@ -91,7 +92,7 @@ class ShareSheetCoordinator {
return new ArrayList<>();
}
ChromeProvidedSharingOptionsProvider chromeProvidedSharingOptionsProvider =
new ChromeProvidedSharingOptionsProvider(activity, mActivityTabProvider,
new ChromeProvidedSharingOptionsProvider(activity, mTabProvider,
mBottomSheetController, bottomSheet, mPrefServiceBridge, mShareStartTime);
return chromeProvidedSharingOptionsProvider.createPropertyModels(new HashSet<>(
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE,
......
......@@ -13,13 +13,14 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.supplier.Supplier;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.MetricsUtils.HistogramDelta;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.share.ShareDelegateImpl.ShareSheetDelegate;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
......@@ -115,7 +116,7 @@ public class ShareDelegateImplIntegrationTest {
ShareSheetDelegate delegate = new ShareSheetDelegate() {
@Override
void share(ShareParams params, ChromeShareExtras chromeShareParams,
BottomSheetController controller, ActivityTabProvider tabProvider,
BottomSheetController controller, Supplier<Tab> tabProvider,
long shareStartTime) {
paramsRef.set(params);
helper.notifyCalled();
......
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