Commit 22394cdc authored by Mia Glaese's avatar Mia Glaese Committed by Commit Bot

[Start Surface] Move logic to show Start Surface for NTP to Tabcreator

TabCreator:
-selects TabModel and shows StartSurface HomePage instead of launching NTP if applicable.

ChromeTabbedActivity:
-restores active tab if StartSurface is shown on start and not incognito.
-InternalIntentDelegate and shouldShowTabSwitcherOnStart updated

StartSurfaceMediator:
-trigger tabswitcher update when active tab is restored to load tab carousel

Change-Id: I45809c1cd604bd035c008375c1b68a2aba8ba715
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2032038
Commit-Queue: Mia Glaese <glamia@chromium.org>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#743594}
parent c3390f00
......@@ -204,6 +204,16 @@ class StartSurfaceMediator
setTabCarouselVisibility(true);
}
}
@Override
public void restoreCompleted() {
if (!(mPropertyModel.get(IS_SHOWING_OVERVIEW)
&& mOverviewModeState == OverviewModeState.SHOWN_HOMEPAGE)) {
return;
}
setTabCarouselVisibility(
mTabModelSelector.getModel(false).getCount() > 0 && !mIsIncognito);
}
};
mFullScreenListener = new ChromeFullscreenManager.FullscreenListener() {
......
......@@ -668,16 +668,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
}
};
OnClickListener newTabClickHandler = v -> {
// If Start Surface should be shown as the home page, show the start surface home
// page.
if (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()) {
showOverview(OverviewModeState.SHOWING_HOMEPAGE);
} else {
getTabModelSelector().getModel(false).commitAllTabClosures();
// This assumes that the keyboard can not be seen at the same time as the
// newtab button on the toolbar.
getCurrentTabCreator().launchNTP();
}
getTabModelSelector().getModel(false).commitAllTabClosures();
// This assumes that the keyboard can not be seen at the same time as the
// newtab button on the toolbar.
getCurrentTabCreator().launchNTP();
mLocaleManager.showSearchEnginePromoIfNeeded(ChromeTabbedActivity.this, null);
if (getTabModelSelector().isIncognitoSelected()) {
RecordUserAction.record("MobileToolbarStackViewNewIncognitoTab");
......@@ -697,7 +691,6 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
Supplier<Boolean> showStartSurfaceSupplier = () -> {
if (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()
&& !isTablet()) {
assert ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage();
showOverview(OverviewModeState.SHOWING_HOMEPAGE);
return true;
}
......@@ -988,7 +981,6 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
TAB_COUNT_ON_RETURN, getCurrentTabModel().getCount());
}
if (CachedFeatureFlags.isGridTabSwitcherEnabled() && !isTablet()) {
assert !getCurrentTabModel().isIncognito();
mStartSurface.getController().enableRecordingFirstMeaningfulPaint(
getOnCreateTimestampMs());
}
......@@ -1006,12 +998,18 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
}
private boolean shouldShowTabSwitcherOnStart() {
if (!isMainIntentFromLauncher(getIntent())) return false;
if (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()) {
String intentUrl = IntentHandler.getUrlFromIntent(getIntent());
if (NewTabPage.isNTPUrl(intentUrl)
|| (isMainIntentFromLauncher(getIntent())
&& (getTabModelSelector().getTotalTabCount() <= 0))) {
return true;
}
}
long lastBackgroundedTimeMillis = mInactivityTracker.getLastBackgroundedTimeMs();
return (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()
&& getTabModelSelector().getTotalTabCount() <= 0)
|| ReturnToChromeExperimentsUtil.shouldShowTabSwitcher(lastBackgroundedTimeMillis);
return isMainIntentFromLauncher(getIntent())
&& ReturnToChromeExperimentsUtil.shouldShowTabSwitcher(lastBackgroundedTimeMillis);
}
private boolean isMainIntentFromLauncher(Intent intent) {
......@@ -1100,7 +1098,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
// We always need to try to restore tabs. The set of tabs might be empty, but at least
// it will trigger the notification that tab restore is complete which is needed by
// other parts of Chrome such as sync.
boolean activeTabBeingRestored = !mIntentWithEffect;
boolean activeTabBeingRestored = !mIntentWithEffect
|| (shouldShowTabSwitcherOnStart()
&& !mTabModelSelectorImpl.isIncognitoSelected());
mMainIntentMetrics.setIgnoreEvents(true);
mTabModelSelectorImpl.restoreTabs(activeTabBeingRestored);
......@@ -1375,7 +1375,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
focus ? LocationBar.OmniboxFocusReason.LAUNCH_NEW_INCOGNITO_TAB
: LocationBar.OmniboxFocusReason.UNFOCUS);
if (tabModel.getCount() > 0 && isInOverviewMode() && !isTablet()) {
if (tabModel.getCount() > 0 && isInOverviewMode() && !isTablet()
&& !shouldShowTabSwitcherOnStart()) {
mOverviewModeController.hideOverview(true);
}
}
......@@ -1568,10 +1569,21 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
return new TabbedModeTabDelegateFactory(
this, getAppBrowserControlsVisibilityDelegate(), getShareDelegateSupplier());
};
ChromeTabCreator.OverviewNTPCreator overviewNTPCreator = null;
if (CachedFeatureFlags.isStartSurfaceEnabled()) {
overviewNTPCreator = new ChromeTabCreator.OverviewNTPCreator() {
@Override
public boolean handleCreateNTPIfNeeded(boolean isNTP, boolean incognito) {
return showStartSurfaceHomeForNTP(isNTP, incognito);
}
};
}
return Pair.create(new ChromeTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
tabDelegateFactorySupplier, false),
tabDelegateFactorySupplier, false, overviewNTPCreator),
new ChromeTabCreator(this, getWindowAndroid(), getStartupTabPreloader(),
tabDelegateFactorySupplier, true));
tabDelegateFactorySupplier, true, overviewNTPCreator));
}
@Override
......@@ -1623,13 +1635,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
reportNewTabShortcutUsed(false);
if (fromMenu) RecordUserAction.record("MobileMenuNewTab.AppMenu");
// If Start Surface should be shown as the home page, show the start surface home page.
if (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()) {
getTabModelSelector().selectModel(false);
showOverview(OverviewModeState.SHOWING_HOMEPAGE);
} else {
getTabCreator(false).launchNTP();
}
getTabCreator(false).launchNTP();
mLocaleManager.showSearchEnginePromoIfNeeded(this, null);
} else if (id == R.id.new_incognito_tab_menu_id) {
......@@ -1641,15 +1647,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
RecordUserAction.record("MobileNewTabOpened");
reportNewTabShortcutUsed(true);
if (fromMenu) RecordUserAction.record("MobileMenuNewIncognitoTab.AppMenu");
// If Start Surface should be shown as the home page, show the start surface home
// page.
if (ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()) {
getTabModelSelector().selectModel(true);
showOverview(OverviewModeState.SHOWING_HOMEPAGE);
} else {
getTabCreator(true).launchNTP();
}
getTabCreator(true).launchNTP();
}
} else if (id == R.id.all_bookmarks_menu_id) {
// Note that 'currentTab' could be null in overview mode when start surface is
......@@ -1969,6 +1967,16 @@ public class ChromeTabbedActivity extends ChromeActivity implements Accessibilit
}
}
private boolean showStartSurfaceHomeForNTP(boolean isNTP, boolean incognito) {
if (isNTP && ReturnToChromeExperimentsUtil.shouldShowStartSurfaceAsTheHomePage()
&& !isTablet()) {
getTabModelSelector().selectModel(incognito);
showOverview(OverviewModeState.SHOWING_HOMEPAGE);
return true;
}
return false;
}
private void updateAccessibilityState(boolean enabled) {
Tab currentTab = getActivityTab();
WebContents webContents = currentTab != null ? currentTab.getWebContents() : null;
......
......@@ -87,7 +87,7 @@ public class CustomTabActivityTabFactory {
private ChromeTabCreator createTabCreator(boolean incognito) {
return new ChromeTabCreator(mActivity, mActivityWindowAndroid.get(), mStartupTabPreloader,
mCustomTabDelegateFactory::get, incognito);
mCustomTabDelegateFactory::get, incognito, null);
}
/** Creates a new tab for a Custom Tab activity */
......
......@@ -17,6 +17,7 @@ import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.ServiceTabLauncher;
import org.chromium.chrome.browser.init.StartupTabPreloader;
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabAssociatedApp;
import org.chromium.chrome.browser.tab.TabBuilder;
......@@ -40,6 +41,16 @@ import org.chromium.url.GURL;
* This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
*/
public class ChromeTabCreator extends TabCreatorManager.TabCreator {
/**Interface to handle showing overview instead of NTP if needed. */
public interface OverviewNTPCreator {
/**
* Handles showing the StartSurface instead of the NTP if needed.
* @param isNTPUrl Whether tab with NTP should be created.
* @param isIncognito Whether tab is created in incognito.
* @return Whether NTP creation was handled.
*/
boolean handleCreateNTPIfNeeded(boolean isNTP, boolean incognito);
}
private final ChromeActivity mActivity;
private final StartupTabPreloader mStartupTabPreloader;
......@@ -49,15 +60,19 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
private TabModel mTabModel;
private TabModelOrderController mOrderController;
private Supplier<TabDelegateFactory> mTabDelegateFactorySupplier;
@Nullable
private OverviewNTPCreator mOverviewNTPCreator;
public ChromeTabCreator(ChromeActivity activity, WindowAndroid nativeWindow,
StartupTabPreloader startupTabPreloader,
Supplier<TabDelegateFactory> tabDelegateFactory, boolean incognito) {
Supplier<TabDelegateFactory> tabDelegateFactory, boolean incognito,
OverviewNTPCreator overviewNTPCreator) {
mActivity = activity;
mStartupTabPreloader = startupTabPreloader;
mNativeWindow = nativeWindow;
mTabDelegateFactorySupplier = tabDelegateFactory;
mIncognito = incognito;
mOverviewNTPCreator = overviewNTPCreator;
}
@Override
......@@ -106,6 +121,11 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator {
*/
private Tab createNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent,
int position, Intent intent) {
if (mOverviewNTPCreator != null
&& mOverviewNTPCreator.handleCreateNTPIfNeeded(
NewTabPage.isNTPUrl(loadUrlParams.getUrl()), mIncognito)) {
return null;
}
try {
TraceEvent.begin("ChromeTabCreator.createNewTab");
int parentId = parent != null ? parent.getId() : Tab.INVALID_TAB_ID;
......
......@@ -171,7 +171,7 @@ public class StartupTabPreloaderUnitTest {
@Override
public TabCreatorManager.TabCreator getTabCreator(boolean incognito) {
Assert.assertFalse(incognito);
return new ChromeTabCreator(null, null, null, null, false);
return new ChromeTabCreator(null, null, null, null, false, null);
}
}
......
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