Commit f3ae7e47 authored by Wei-Yin Chen (陳威尹)'s avatar Wei-Yin Chen (陳威尹) Committed by Commit Bot

Fix initial scroll for TabSwitcherOnReturn

INITIAL_SCROLL_INDEX_OFFSET was not properly set if tab restoration
finishes after tab switcher is shown.

Bug: 1022289
Change-Id: I63d18d0fae7b6e6d40865667f7bd0fecdd684f4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1903526
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Reviewed-by: default avatarYue Zhang <yuezhanggg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714023}
parent cfaa0a6d
...@@ -234,6 +234,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -234,6 +234,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
mResetHandler.resetWithTabList( mResetHandler.resetWithTabList(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
false, mShowTabsInMruOrder); false, mShowTabsInMruOrder);
setInitialScrollIndexOffset();
} }
}; };
...@@ -420,15 +421,20 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -420,15 +421,20 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
mHandler.removeCallbacks(mSoftClearTabListRunnable); mHandler.removeCallbacks(mSoftClearTabListRunnable);
mHandler.removeCallbacks(mClearTabListRunnable); mHandler.removeCallbacks(mClearTabListRunnable);
boolean quick = false; boolean quick = false;
if (TabFeatureUtilities.isTabToGtsAnimationEnabled() if (mTabModelSelector.getTabModelFilterProvider()
&& mTabModelSelector.getTabModelFilterProvider() .getCurrentTabModelFilter()
.getCurrentTabModelFilter() .isTabModelRestored()) {
.isTabModelRestored()) { if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
quick = mResetHandler.resetWithTabList( quick = mResetHandler.resetWithTabList(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), false, mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
mShowTabsInMruOrder); false, mShowTabsInMruOrder);
}
setInitialScrollIndexOffset();
} }
return quick;
}
private void setInitialScrollIndexOffset() {
int initialPosition = Math.max( int initialPosition = Math.max(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter().index() mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter().index()
- INITIAL_SCROLL_INDEX_OFFSET, - INITIAL_SCROLL_INDEX_OFFSET,
...@@ -436,7 +442,6 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView ...@@ -436,7 +442,6 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
// In MRU order, selected Tab is always at the first position. // In MRU order, selected Tab is always at the first position.
if (mShowTabsInMruOrder) initialPosition = 0; if (mShowTabsInMruOrder) initialPosition = 0;
mContainerViewModel.set(INITIAL_SCROLL_INDEX, initialPosition); mContainerViewModel.set(INITIAL_SCROLL_INDEX, initialPosition);
return quick;
} }
@Override @Override
......
...@@ -466,6 +466,18 @@ public class TabSwitcherMediatorUnitTest { ...@@ -466,6 +466,18 @@ public class TabSwitcherMediatorUnitTest {
verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false); verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false);
} }
@Test
public void setInitialScrollIndexOnRestoreCompleted() {
initAndAssertAllProperties();
mMediator.showOverview(true);
assertThat(mModel.get(TabListContainerProperties.IS_VISIBLE), equalTo(true));
mModel.set(TabListContainerProperties.INITIAL_SCROLL_INDEX, 1);
mTabModelObserverCaptor.getValue().restoreCompleted();
assertThat(mModel.get(TabListContainerProperties.INITIAL_SCROLL_INDEX), equalTo(0));
}
@Test @Test
public void showOverviewDoesNotUpdateResetHandlerBeforeRestoreCompleted() { public void showOverviewDoesNotUpdateResetHandlerBeforeRestoreCompleted() {
initAndAssertAllProperties(); initAndAssertAllProperties();
...@@ -508,6 +520,17 @@ public class TabSwitcherMediatorUnitTest { ...@@ -508,6 +520,17 @@ public class TabSwitcherMediatorUnitTest {
verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false); verify(mResetHandler).resetWithTabList(mTabModelFilter, false, false);
} }
@Test
public void prepareOverviewSetsInitialScrollIndexAfterRestoreCompleted() {
initAndAssertAllProperties();
doReturn(true).when(mTabModelFilter).isTabModelRestored();
mModel.set(TabListContainerProperties.INITIAL_SCROLL_INDEX, 1);
mMediator.prepareOverview();
assertThat(mModel.get(TabListContainerProperties.INITIAL_SCROLL_INDEX), equalTo(0));
}
@Test @Test
@DisableFeatures(ChromeFeatureList.TAB_GROUPS_UI_IMPROVEMENTS_ANDROID) @DisableFeatures(ChromeFeatureList.TAB_GROUPS_UI_IMPROVEMENTS_ANDROID)
public void openDialogButton_FlagDisabled() { public void openDialogButton_FlagDisabled() {
......
...@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper; ...@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.ApplicationTestUtils; import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.RenderTestRule;
import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.EmbeddedTestServer;
...@@ -49,6 +50,9 @@ public class ReturnToChromeTest { ...@@ -49,6 +50,9 @@ public class ReturnToChromeTest {
private String mUrl; private String mUrl;
@Rule
public RenderTestRule mRenderTestRule = new RenderTestRule();
@Before @Before
public void setUp() { public void setUp() {
FeatureUtilities.setGridTabSwitcherEnabledForTesting(true); FeatureUtilities.setGridTabSwitcherEnabledForTesting(true);
...@@ -101,4 +105,30 @@ public class ReturnToChromeTest { ...@@ -101,4 +105,30 @@ public class ReturnToChromeTest {
assertEquals(2, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount()); assertEquals(2, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount());
} }
@Test
@SmallTest
@Feature({"ReturnToChrome", "RenderTest"})
@CommandLineFlags.Add({BASE_PARAMS + "/" + TAB_SWITCHER_ON_RETURN_MS + "/0"})
public void testInitialScrollIndex() throws Exception {
TabUiTestHelper.prepareTabsWithThumbnail(mActivityTestRule, 10, 0, mUrl);
ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity());
mActivityTestRule.startMainActivityFromLauncher();
Assert.assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible());
CriteriaHelper.pollUiThread(Criteria.equals(true,
mActivityTestRule.getActivity()
.getTabModelSelector()
.getTabModelFilterProvider()
.getCurrentTabModelFilter()::isTabModelRestored));
assertEquals(10, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount());
assertEquals(9, mActivityTestRule.getActivity().getCurrentTabModel().index());
// Make sure the grid tab switcher is scrolled down to show the selected tab.
mRenderTestRule.render(mActivityTestRule.getActivity().findViewById(
org.chromium.chrome.tab_ui.R.id.tab_list_view),
"10_web_tabs-select_last");
}
} }
ca7317919b3080d8417090e4dca23f1329353842
\ No newline at end of file
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