Commit 4bd3c358 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

Remove STTS dependency on SettingsLauncherImpl

Pass in a SettingsLauncher when constructing ShareSheetCoordinator that
will eventually be passed to SendTabToSelfShareActivity.

Bug: 1090917
Change-Id: I0690a2b552503e95873b9aec1b993f1a18405476
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2250699Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarJeffrey Cohen <jeffreycohen@chromium.org>
Reviewed-by: default avatarTanya Gupta <tgupta@chromium.org>
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806698}
parent 98d79ac1
...@@ -1347,6 +1347,7 @@ chrome_java_sources = [ ...@@ -1347,6 +1347,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationManager.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationManager.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationSharedPrefManager.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/NotificationSharedPrefManager.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfAndroidBridge.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfAndroidBridge.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfCoordinator.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfEntry.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfEntry.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfInfoBar.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfInfoBar.java",
"java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfInfoBarController.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfInfoBarController.java",
......
...@@ -483,6 +483,7 @@ chrome_test_java_sources = [ ...@@ -483,6 +483,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java", "javatests/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettingsTest.java",
"javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java", "javatests/src/org/chromium/chrome/browser/searchwidget/SearchActivityTest.java",
"javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java", "javatests/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProviderTest.java",
"javatests/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfCoordinatorTest.java",
"javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java", "javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java", "javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java",
"javatests/src/org/chromium/chrome/browser/shape_detection/ShapeDetectionTest.java", "javatests/src/org/chromium/chrome/browser/shape_detection/ShapeDetectionTest.java",
......
...@@ -20,8 +20,6 @@ import org.chromium.chrome.R; ...@@ -20,8 +20,6 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfMetrics.SendTabToSelfShareClickResult; import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfMetrics.SendTabToSelfShareClickResult;
import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.ui.widget.ButtonCompat; import org.chromium.ui.widget.ButtonCompat;
...@@ -46,9 +44,12 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte ...@@ -46,9 +44,12 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte
private final String mUrl; private final String mUrl;
private final String mTitle; private final String mTitle;
private final long mNavigationTime; private final long mNavigationTime;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
public DevicePickerBottomSheetContent(Context context, String url, String title, public DevicePickerBottomSheetContent(Context context, String url, String title,
long navigationTime, BottomSheetController controller) { long navigationTime, BottomSheetController controller,
SettingsLauncher settingsLauncher, boolean isSyncEnabled) {
mContext = context; mContext = context;
mController = controller; mController = controller;
mProfile = Profile.getLastUsedRegularProfile(); mProfile = Profile.getLastUsedRegularProfile();
...@@ -56,6 +57,8 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte ...@@ -56,6 +57,8 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte
mUrl = url; mUrl = url;
mTitle = title; mTitle = title;
mNavigationTime = navigationTime; mNavigationTime = navigationTime;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
createToolbarView(); createToolbarView();
createContentView(); createContentView();
...@@ -72,7 +75,7 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte ...@@ -72,7 +75,7 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte
List<TargetDeviceInfo> targetDeviceList = new ArrayList<TargetDeviceInfo>(); List<TargetDeviceInfo> targetDeviceList = new ArrayList<TargetDeviceInfo>();
SendTabToSelfAndroidBridgeJni.get().getAllTargetDeviceInfos(mProfile, targetDeviceList); SendTabToSelfAndroidBridgeJni.get().getAllTargetDeviceInfos(mProfile, targetDeviceList);
if (!AndroidSyncSettings.get().isChromeSyncEnabled()) { if (!mIsSyncEnabled) {
RecordUserAction.record("SharingHubAndroid.SendTabToSelf.NotSyncing"); RecordUserAction.record("SharingHubAndroid.SendTabToSelf.NotSyncing");
mContentView = (ViewGroup) LayoutInflater.from(mContext).inflate( mContentView = (ViewGroup) LayoutInflater.from(mContext).inflate(
R.layout.send_tab_to_self_feature_unavailable_prompt, null); R.layout.send_tab_to_self_feature_unavailable_prompt, null);
...@@ -96,12 +99,14 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte ...@@ -96,12 +99,14 @@ public class DevicePickerBottomSheetContent implements BottomSheetContent, OnIte
} }
private void enableSettingsButton() { private void enableSettingsButton() {
if (mSettingsLauncher == null) {
return;
}
ButtonCompat chromeSettingsButton = mContentView.findViewById(R.id.chrome_settings); ButtonCompat chromeSettingsButton = mContentView.findViewById(R.id.chrome_settings);
chromeSettingsButton.setVisibility(View.VISIBLE); chromeSettingsButton.setVisibility(View.VISIBLE);
chromeSettingsButton.setOnClickListener(view -> { chromeSettingsButton.setOnClickListener(view -> {
RecordUserAction.record("SharingHubAndroid.SendTabToSelf.ChromeSettingsClicked"); RecordUserAction.record("SharingHubAndroid.SendTabToSelf.ChromeSettingsClicked");
SettingsLauncher settingsLauncher = new SettingsLauncherImpl(); mSettingsLauncher.launchSettingsActivity(ContextUtils.getApplicationContext());
settingsLauncher.launchSettingsActivity(ContextUtils.getApplicationContext());
}); });
} }
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.send_tab_to_self;
import android.content.Context;
import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
/**
* Coordinator for displaying the send tab to self feature.
*/
public class SendTabToSelfCoordinator {
private static BottomSheetContent sBottomSheetContentForTesting;
private final Context mContext;
private final String mUrl;
private final String mTitle;
private final BottomSheetController mController;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
private final long mNavigationTime;
public SendTabToSelfCoordinator(Context context, String url, String title,
BottomSheetController controller, SettingsLauncher settingsLauncher,
boolean isSyncEnabled, long navigationTime) {
mContext = context;
mUrl = url;
mTitle = title;
mController = controller;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
mNavigationTime = navigationTime;
}
public void show() {
mController.requestShowContent(
createBottomSheetContent(mContext, mUrl, mTitle, mNavigationTime, mController,
mSettingsLauncher, mIsSyncEnabled),
true);
// TODO(crbug.com/968246): Remove the need to call this explicitly and instead have it
// automatically show since PeekStateEnabled is set to false.
mController.expandSheet();
}
static BottomSheetContent createBottomSheetContent(Context context, String url, String title,
long navigationTime, BottomSheetController controller,
SettingsLauncher settingsLauncher, boolean isSyncEnabled) {
if (sBottomSheetContentForTesting != null) {
return sBottomSheetContentForTesting;
}
return new DevicePickerBottomSheetContent(
context, url, title, navigationTime, controller, settingsLauncher, isSyncEnabled);
}
@VisibleForTesting
public static void setBottomSheetContentForTesting(BottomSheetContent bottomSheetContent) {
sBottomSheetContentForTesting = bottomSheetContent;
}
}
...@@ -4,14 +4,13 @@ ...@@ -4,14 +4,13 @@
package org.chromium.chrome.browser.send_tab_to_self; package org.chromium.chrome.browser.send_tab_to_self;
import android.content.Context;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.browser.ChromeAccessorActivity; import org.chromium.chrome.browser.ChromeAccessorActivity;
import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider; import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider;
import org.chromium.content_public.browser.NavigationEntry; import org.chromium.content_public.browser.NavigationEntry;
...@@ -21,8 +20,8 @@ import org.chromium.ui.base.WindowAndroid; ...@@ -21,8 +20,8 @@ import org.chromium.ui.base.WindowAndroid;
* A simple activity that allows Chrome to expose send tab to self as an option in the share menu. * A simple activity that allows Chrome to expose send tab to self as an option in the share menu.
*/ */
public class SendTabToSelfShareActivity extends ChromeAccessorActivity { public class SendTabToSelfShareActivity extends ChromeAccessorActivity {
private static BottomSheetContent sBottomSheetContentForTesting;
private static BottomSheetController sBottomSheetControllerForTesting; private static BottomSheetController sBottomSheetControllerForTesting;
private static AndroidSyncSettings sAndroidSyncSettings;
@Override @Override
protected void handleAction(ChromeActivity triggeringActivity) { protected void handleAction(ChromeActivity triggeringActivity) {
...@@ -30,31 +29,23 @@ public class SendTabToSelfShareActivity extends ChromeAccessorActivity { ...@@ -30,31 +29,23 @@ public class SendTabToSelfShareActivity extends ChromeAccessorActivity {
if (tab == null) return; if (tab == null) return;
NavigationEntry entry = tab.getWebContents().getNavigationController().getVisibleEntry(); NavigationEntry entry = tab.getWebContents().getNavigationController().getVisibleEntry();
if (entry == null) return; if (entry == null) return;
actionHandler(triggeringActivity, entry.getUrl(), entry.getTitle(), entry.getTimestamp(), BottomSheetController controller =
getBottomSheetController(triggeringActivity.getWindowAndroid())); getBottomSheetController(triggeringActivity.getWindowAndroid());
}
public static void actionHandler(Context context, String url, String title, long navigationTime,
BottomSheetController controller) {
if (controller == null) { if (controller == null) {
return; return;
} }
boolean isSyncEnabled = getAndroidSyncSettings().isSyncEnabled();
controller.requestShowContent( controller.requestShowContent(
createBottomSheetContent(context, url, title, navigationTime, controller), true); SendTabToSelfCoordinator.createBottomSheetContent(triggeringActivity,
entry.getUrl(), entry.getTitle(), entry.getTimestamp(), controller,
new SettingsLauncherImpl(), isSyncEnabled),
true);
// TODO(crbug.com/968246): Remove the need to call this explicitly and instead have it // TODO(crbug.com/968246): Remove the need to call this explicitly and instead have it
// automatically show since PeekStateEnabled is set to false. // automatically show since PeekStateEnabled is set to false.
controller.expandSheet(); controller.expandSheet();
} }
static BottomSheetContent createBottomSheetContent(Context context, String url, String title,
long navigationTime, BottomSheetController controller) {
if (sBottomSheetContentForTesting != null) {
return sBottomSheetContentForTesting;
}
return new DevicePickerBottomSheetContent(context, url, title, navigationTime, controller);
}
public static boolean featureIsAvailable(Tab currentTab) { public static boolean featureIsAvailable(Tab currentTab) {
return SendTabToSelfAndroidBridge.isFeatureAvailable(currentTab.getWebContents()); return SendTabToSelfAndroidBridge.isFeatureAvailable(currentTab.getWebContents());
} }
...@@ -64,13 +55,18 @@ public class SendTabToSelfShareActivity extends ChromeAccessorActivity { ...@@ -64,13 +55,18 @@ public class SendTabToSelfShareActivity extends ChromeAccessorActivity {
return BottomSheetControllerProvider.from(window); return BottomSheetControllerProvider.from(window);
} }
private AndroidSyncSettings getAndroidSyncSettings() {
if (sAndroidSyncSettings != null) return sAndroidSyncSettings;
return AndroidSyncSettings.get();
}
@VisibleForTesting @VisibleForTesting
public static void setBottomSheetControllerForTesting(BottomSheetController controller) { public static void setBottomSheetControllerForTesting(BottomSheetController controller) {
sBottomSheetControllerForTesting = controller; sBottomSheetControllerForTesting = controller;
} }
@VisibleForTesting @VisibleForTesting
public static void setBottomSheetContentForTesting(BottomSheetContent bottomSheetContent) { public static void setAndroidSyncSettingsForTesting(AndroidSyncSettings syncSettings) {
sBottomSheetContentForTesting = bottomSheetContent; sAndroidSyncSettings = syncSettings;
} }
} }
...@@ -23,8 +23,10 @@ import org.chromium.chrome.browser.printing.PrintShareActivity; ...@@ -23,8 +23,10 @@ import org.chromium.chrome.browser.printing.PrintShareActivity;
import org.chromium.chrome.browser.printing.TabPrinter; import org.chromium.chrome.browser.printing.TabPrinter;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity; import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.share.share_sheet.ShareSheetCoordinator; import org.chromium.chrome.browser.share.share_sheet.ShareSheetCoordinator;
import org.chromium.chrome.browser.share.share_sheet.ShareSheetPropertyModelBuilder; import org.chromium.chrome.browser.share.share_sheet.ShareSheetPropertyModelBuilder;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.tab.SadTab; import org.chromium.chrome.browser.tab.SadTab;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.favicon.LargeIconBridge; import org.chromium.chrome.browser.ui.favicon.LargeIconBridge;
...@@ -86,7 +88,8 @@ public class ShareDelegateImpl implements ShareDelegate { ...@@ -86,7 +88,8 @@ public class ShareDelegateImpl implements ShareDelegate {
mShareStartTime = System.currentTimeMillis(); mShareStartTime = System.currentTimeMillis();
} }
mDelegate.share(params, chromeShareExtras, mBottomSheetController, mLifecycleDispatcher, mDelegate.share(params, chromeShareExtras, mBottomSheetController, mLifecycleDispatcher,
mTabProvider, this::printTab, mShareStartTime, isSharingHubV1Enabled()); mTabProvider, this::printTab, AndroidSyncSettings.get().isSyncEnabled(),
mShareStartTime, isSharingHubV1Enabled());
mShareStartTime = 0; mShareStartTime = 0;
} }
...@@ -295,8 +298,8 @@ public class ShareDelegateImpl implements ShareDelegate { ...@@ -295,8 +298,8 @@ public class ShareDelegateImpl implements ShareDelegate {
*/ */
void share(ShareParams params, ChromeShareExtras chromeShareExtras, void share(ShareParams params, ChromeShareExtras chromeShareExtras,
BottomSheetController controller, ActivityLifecycleDispatcher lifecycleDispatcher, BottomSheetController controller, ActivityLifecycleDispatcher lifecycleDispatcher,
Supplier<Tab> tabProvider, Callback<Tab> printCallback, long shareStartTime, Supplier<Tab> tabProvider, Callback<Tab> printCallback, boolean isSyncEnabled,
boolean sharingHubEnabled) { long shareStartTime, boolean sharingHubEnabled) {
if (chromeShareExtras.shareDirectly()) { if (chromeShareExtras.shareDirectly()) {
ShareHelper.shareWithLastUsedComponent(params); ShareHelper.shareWithLastUsedComponent(params);
} else if (sharingHubEnabled && !chromeShareExtras.sharingTabGroup()) { } else if (sharingHubEnabled && !chromeShareExtras.sharingTabGroup()) {
...@@ -306,7 +309,8 @@ public class ShareDelegateImpl implements ShareDelegate { ...@@ -306,7 +309,8 @@ public class ShareDelegateImpl implements ShareDelegate {
lifecycleDispatcher, tabProvider, lifecycleDispatcher, tabProvider,
new ShareSheetPropertyModelBuilder(controller, new ShareSheetPropertyModelBuilder(controller,
ContextUtils.getApplicationContext().getPackageManager()), ContextUtils.getApplicationContext().getPackageManager()),
printCallback, new LargeIconBridge(Profile.getLastUsedRegularProfile())); printCallback, new LargeIconBridge(Profile.getLastUsedRegularProfile()),
new SettingsLauncherImpl(), isSyncEnabled);
// TODO(crbug/1009124): open custom share sheet. // TODO(crbug/1009124): open custom share sheet.
coordinator.showShareSheet(params, chromeShareExtras, shareStartTime); coordinator.showShareSheet(params, chromeShareExtras, shareStartTime);
} else { } else {
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.send_tab_to_self;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import android.app.Activity;
import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.ui.test.util.DummyUiActivity;
/** Tests for SendTabToSelfCoordinator */
@RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class SendTabToSelfCoordinatorTest {
@Rule
public ActivityTestRule<DummyUiActivity> mActivityTestRule =
new ActivityTestRule<>(DummyUiActivity.class);
@Mock
private BottomSheetController mBottomSheetController;
@Mock
private BottomSheetContent mBottomSheetContent;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
@SmallTest
public void testShow() {
SendTabToSelfCoordinator.setBottomSheetContentForTesting(mBottomSheetContent);
Activity activity = mActivityTestRule.getActivity();
SendTabToSelfCoordinator coordinator = new SendTabToSelfCoordinator(activity, "test",
"test", mBottomSheetController, /*settingsLauncher=*/null,
/*isSyncEnabled=*/true, /*navigationTime=*/0);
coordinator.show();
verify(mBottomSheetController).requestShowContent(any(BottomSheetContent.class), eq(true));
}
}
...@@ -121,7 +121,7 @@ public class ShareDelegateImplIntegrationTest { ...@@ -121,7 +121,7 @@ public class ShareDelegateImplIntegrationTest {
void share(ShareParams params, ChromeShareExtras chromeShareParams, void share(ShareParams params, ChromeShareExtras chromeShareParams,
BottomSheetController controller, BottomSheetController controller,
ActivityLifecycleDispatcher lifecycleDispatcher, Supplier<Tab> tabProvider, ActivityLifecycleDispatcher lifecycleDispatcher, Supplier<Tab> tabProvider,
Callback<Tab> printCallback, long shareStartTime, Callback<Tab> printCallback, boolean syncState, long shareStartTime,
boolean sharingHubEnabled) { boolean sharingHubEnabled) {
paramsRef.set(params); paramsRef.set(params);
helper.notifyCalled(); helper.notifyCalled();
......
...@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.ActivityTabProvider; ...@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.profiles.ProfileJni; import org.chromium.chrome.browser.profiles.ProfileJni;
import org.chromium.chrome.browser.sync.AndroidSyncSettings;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
...@@ -61,6 +62,9 @@ public class SendTabToSelfShareActivityTest { ...@@ -61,6 +62,9 @@ public class SendTabToSelfShareActivityTest {
@Mock @Mock
private BottomSheetController mBottomSheetController; private BottomSheetController mBottomSheetController;
@Mock
private AndroidSyncSettings mSyncSettings;
private Profile mProfile; private Profile mProfile;
@Before @Before
...@@ -94,9 +98,13 @@ public class SendTabToSelfShareActivityTest { ...@@ -94,9 +98,13 @@ public class SendTabToSelfShareActivityTest {
when(mWebContents.getNavigationController()).thenReturn(mNavigationController); when(mWebContents.getNavigationController()).thenReturn(mNavigationController);
when(mNavigationController.getVisibleEntry()).thenReturn(mNavigationEntry); when(mNavigationController.getVisibleEntry()).thenReturn(mNavigationEntry);
// Setup the mocked object for sync settings.
when(mSyncSettings.isSyncEnabled()).thenReturn(true);
SendTabToSelfShareActivity.setAndroidSyncSettingsForTesting(mSyncSettings);
// Setup the mocked object chain to get the bottom controller. // Setup the mocked object chain to get the bottom controller.
SendTabToSelfShareActivity shareActivity = new SendTabToSelfShareActivity(); SendTabToSelfShareActivity shareActivity = new SendTabToSelfShareActivity();
SendTabToSelfShareActivity.setBottomSheetContentForTesting(mBottomSheetContent); SendTabToSelfCoordinator.setBottomSheetContentForTesting(mBottomSheetContent);
SendTabToSelfShareActivity.setBottomSheetControllerForTesting(mBottomSheetController); SendTabToSelfShareActivity.setBottomSheetControllerForTesting(mBottomSheetController);
shareActivity.handleAction(mChromeActivity); shareActivity.handleAction(mChromeActivity);
verify(mBottomSheetController).requestShowContent(any(BottomSheetContent.class), eq(true)); verify(mBottomSheetController).requestShowContent(any(BottomSheetContent.class), eq(true));
......
...@@ -23,5 +23,5 @@ include_rules = [ ...@@ -23,5 +23,5 @@ include_rules = [
"+content/public/android/java/src/org/chromium/content_public/browser/WebContents.java", "+content/public/android/java/src/org/chromium/content_public/browser/WebContents.java",
# TODO(crbug/1090917): Remove this dependency once the STTS java code is moved. # TODO(crbug/1090917): Remove this dependency once the STTS java code is moved.
"+chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java", "+chrome/android/java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfCoordinator.java",
] ]
...@@ -21,7 +21,8 @@ import org.chromium.chrome.R; ...@@ -21,7 +21,8 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity; import org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfCoordinator;
import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator; import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator;
import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator; import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator;
...@@ -55,6 +56,8 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -55,6 +56,8 @@ class ChromeProvidedSharingOptionsProvider {
private final ShareSheetBottomSheetContent mBottomSheetContent; private final ShareSheetBottomSheetContent mBottomSheetContent;
private final ShareParams mShareParams; private final ShareParams mShareParams;
private final Callback<Tab> mPrintTabCallback; private final Callback<Tab> mPrintTabCallback;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
private final long mShareStartTime; private final long mShareStartTime;
private final List<FirstPartyOption> mOrderedFirstPartyOptions; private final List<FirstPartyOption> mOrderedFirstPartyOptions;
private final ChromeOptionShareCallback mChromeOptionShareCallback; private final ChromeOptionShareCallback mChromeOptionShareCallback;
...@@ -79,7 +82,8 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -79,7 +82,8 @@ class ChromeProvidedSharingOptionsProvider {
ChromeProvidedSharingOptionsProvider(Activity activity, Supplier<Tab> tabProvider, ChromeProvidedSharingOptionsProvider(Activity activity, Supplier<Tab> tabProvider,
BottomSheetController bottomSheetController, BottomSheetController bottomSheetController,
ShareSheetBottomSheetContent bottomSheetContent, ShareParams shareParams, ShareSheetBottomSheetContent bottomSheetContent, ShareParams shareParams,
ChromeShareExtras chromeShareExtras, Callback<Tab> printTab, long shareStartTime, ChromeShareExtras chromeShareExtras, Callback<Tab> printTab,
SettingsLauncher settingsLauncher, boolean isSyncEnabled, long shareStartTime,
ChromeOptionShareCallback chromeOptionShareCallback) { ChromeOptionShareCallback chromeOptionShareCallback) {
mActivity = activity; mActivity = activity;
mTabProvider = tabProvider; mTabProvider = tabProvider;
...@@ -87,6 +91,8 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -87,6 +91,8 @@ class ChromeProvidedSharingOptionsProvider {
mBottomSheetContent = bottomSheetContent; mBottomSheetContent = bottomSheetContent;
mShareParams = shareParams; mShareParams = shareParams;
mPrintTabCallback = printTab; mPrintTabCallback = printTab;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
mShareStartTime = shareStartTime; mShareStartTime = shareStartTime;
mOrderedFirstPartyOptions = new ArrayList<>(); mOrderedFirstPartyOptions = new ArrayList<>();
initializeFirstPartyOptionsInOrder(); initializeFirstPartyOptionsInOrder();
...@@ -296,14 +302,15 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -296,14 +302,15 @@ class ChromeProvidedSharingOptionsProvider {
.setIcon(R.drawable.send_tab, R.string.send_tab_to_self_share_activity_title) .setIcon(R.drawable.send_tab, R.string.send_tab_to_self_share_activity_title)
.setFeatureNameForMetrics("SharingHubAndroid.SendTabToSelfSelected") .setFeatureNameForMetrics("SharingHubAndroid.SendTabToSelfSelected")
.setOnClickCallback((view) -> { .setOnClickCallback((view) -> {
SendTabToSelfShareActivity.actionHandler(mActivity, mUrl, SendTabToSelfCoordinator sttsCoordinator =
mShareParams.getTitle(), new SendTabToSelfCoordinator(mActivity, mUrl, mShareParams.getTitle(),
mTabProvider.get() mBottomSheetController, mSettingsLauncher, mIsSyncEnabled,
.getWebContents() mTabProvider.get()
.getNavigationController() .getWebContents()
.getVisibleEntry() .getNavigationController()
.getTimestamp(), .getVisibleEntry()
mBottomSheetController); .getTimestamp());
sttsCoordinator.show();
}) })
.build(); .build();
} }
......
...@@ -23,6 +23,7 @@ import org.chromium.chrome.R; ...@@ -23,6 +23,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.ConfigurationChangedObserver; import org.chromium.chrome.browser.lifecycle.ConfigurationChangedObserver;
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.ShareHelper; import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
...@@ -54,6 +55,8 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -54,6 +55,8 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
private final Supplier<Tab> mTabProvider; private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder; private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
private final Callback<Tab> mPrintTabCallback; private final Callback<Tab> mPrintTabCallback;
private final SettingsLauncher mSettingsLauncher;
private final boolean mIsSyncEnabled;
private long mShareStartTime; private long mShareStartTime;
private boolean mExcludeFirstParty; private boolean mExcludeFirstParty;
private boolean mIsMultiWindow; private boolean mIsMultiWindow;
...@@ -81,13 +84,15 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -81,13 +84,15 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
public ShareSheetCoordinator(BottomSheetController controller, public ShareSheetCoordinator(BottomSheetController controller,
ActivityLifecycleDispatcher lifecycleDispatcher, Supplier<Tab> tabProvider, ActivityLifecycleDispatcher lifecycleDispatcher, Supplier<Tab> tabProvider,
ShareSheetPropertyModelBuilder modelBuilder, Callback<Tab> printTab, ShareSheetPropertyModelBuilder modelBuilder, Callback<Tab> printTab,
LargeIconBridge iconBridge) { LargeIconBridge iconBridge, SettingsLauncher settingsLauncher, boolean isSyncEnabled) {
mBottomSheetController = controller; mBottomSheetController = controller;
mLifecycleDispatcher = lifecycleDispatcher; mLifecycleDispatcher = lifecycleDispatcher;
mLifecycleDispatcher.register(this); mLifecycleDispatcher.register(this);
mTabProvider = tabProvider; mTabProvider = tabProvider;
mPropertyModelBuilder = modelBuilder; mPropertyModelBuilder = modelBuilder;
mPrintTabCallback = printTab; mPrintTabCallback = printTab;
mSettingsLauncher = settingsLauncher;
mIsSyncEnabled = isSyncEnabled;
mBottomSheetObserver = new EmptyBottomSheetObserver() { mBottomSheetObserver = new EmptyBottomSheetObserver() {
@Override @Override
public void onSheetContentChanged(BottomSheetContent bottomSheet) { public void onSheetContentChanged(BottomSheetContent bottomSheet) {
...@@ -178,7 +183,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -178,7 +183,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
} }
mChromeProvidedSharingOptionsProvider = new ChromeProvidedSharingOptionsProvider(activity, mChromeProvidedSharingOptionsProvider = new ChromeProvidedSharingOptionsProvider(activity,
mTabProvider, mBottomSheetController, mBottomSheet, shareParams, chromeShareExtras, mTabProvider, mBottomSheetController, mBottomSheet, shareParams, chromeShareExtras,
mPrintTabCallback, mShareStartTime, this); mPrintTabCallback, mSettingsLauncher, mIsSyncEnabled, mShareStartTime, this);
mIsMultiWindow = MultiWindowUtils.getInstance().isInMultiWindowMode(activity); mIsMultiWindow = MultiWindowUtils.getInstance().isInMultiWindowMode(activity);
return mChromeProvidedSharingOptionsProvider.getPropertyModels( return mChromeProvidedSharingOptionsProvider.getPropertyModels(
......
...@@ -314,6 +314,8 @@ public class ChromeProvidedSharingOptionsProviderTest { ...@@ -314,6 +314,8 @@ public class ChromeProvidedSharingOptionsProviderTest {
new ShareParams.Builder(null, "", "").build(), new ShareParams.Builder(null, "", "").build(),
new ChromeShareExtras.Builder().build(), new ChromeShareExtras.Builder().build(),
/*TabPrinterDelegate=*/null, /*TabPrinterDelegate=*/null,
/*settingsLauncher=*/null,
/*syncState=*/false,
/*shareStartTime=*/0, mShareSheetCoordinator); /*shareStartTime=*/0, mShareSheetCoordinator);
} }
......
...@@ -99,7 +99,7 @@ public final class ShareSheetCoordinatorTest { ...@@ -99,7 +99,7 @@ public final class ShareSheetCoordinatorTest {
.thenReturn(thirdPartyPropertyModels); .thenReturn(thirdPartyPropertyModels);
mShareSheetCoordinator = new ShareSheetCoordinator(mController, mLifecycleDispatcher, null, mShareSheetCoordinator = new ShareSheetCoordinator(mController, mLifecycleDispatcher, null,
mPropertyModelBuilder, null, new MockLargeIconBridge()); mPropertyModelBuilder, null, new MockLargeIconBridge(), null, false);
} }
@Test @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