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

Merge TabFeatureUtilities into TabUiFeatureUtilities

Bug: 1012975
Change-Id: Id5ad8e66deda9819e54b656a1b27b1906c849052
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2114397Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarHenrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753150}
parent ecb092dc
......@@ -1581,7 +1581,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/tab/TabCreationState.java",
"java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java",
"java/src/org/chromium/chrome/browser/tab/TabFavicon.java",
"java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java",
"java/src/org/chromium/chrome/browser/tab/TabHelpers.java",
"java/src/org/chromium/chrome/browser/tab/TabHidingType.java",
"java/src/org/chromium/chrome/browser/tab/TabIdManager.java",
......
......@@ -34,7 +34,6 @@ import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer;
import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
......@@ -122,7 +121,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The Tab-to-GTS animation is done, and it's time to renew the thumbnail without causing
// janky frames.
// When animation is off, the thumbnail is already updated when showing the GTS.
if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) {
// Delay thumbnail taking a bit more to make it less likely to happen before the
// thumbnail taking triggered by ThumbnailFetcher. See crbug.com/996385 for details.
new Handler().postDelayed(() -> {
......@@ -140,7 +139,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The Android View version of GTS overview is hidden.
// If not doing GTS-to-Tab transition animation, we show the fade-out instead, which was
// already done.
if (!TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
if (!TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) {
postHiding();
return;
}
......@@ -179,8 +178,8 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// Skip shrinking animation when there is no tab in current tab model.
boolean isCurrentTabModelEmpty = mTabModelSelector.getCurrentModel().getCount() == 0;
boolean showShrinkingAnimation = animate && TabFeatureUtilities.isTabToGtsAnimationEnabled()
&& !isCurrentTabModelEmpty;
boolean showShrinkingAnimation = animate
&& TabUiFeatureUtilities.isTabToGtsAnimationEnabled() && !isCurrentTabModelEmpty;
boolean quick = mTabListDelegate.prepareOverview();
boolean skipSlowZooming = TabUiFeatureUtilities.SKIP_SLOW_ZOOMING.getValue();
Log.d(TAG, "SkipSlowZooming = " + skipSlowZooming);
......@@ -241,7 +240,7 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
updateCacheVisibleIds(new LinkedList<>(Arrays.asList(sourceTabId)));
mIsAnimating = true;
mController.hideOverview(!TabFeatureUtilities.isTabToGtsAnimationEnabled());
mController.hideOverview(!TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
}
@Override
......@@ -465,8 +464,9 @@ public class StartSurfaceLayout extends Layout implements StartSurface.OverviewM
// The content viewport is intentionally sent as both params below.
mSceneLayer.pushLayers(getContext(), contentViewport, contentViewport, this,
layerTitleCache, tabContentManager, resourceManager, fullscreenManager,
TabFeatureUtilities.isTabToGtsAnimationEnabled() ? mTabListDelegate.getResourceId()
: 0,
TabUiFeatureUtilities.isTabToGtsAnimationEnabled()
? mTabListDelegate.getResourceId()
: 0,
mBackgroundAlpha, mStartSurface.getTabListDelegate().getTabListTopOffset());
mFrameCount++;
if (mLastFrameTime != 0) {
......
......@@ -39,8 +39,8 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
......@@ -111,7 +111,7 @@ public class StartSurfaceLayoutPerfTest {
mWaitingTime = 1000;
mTabNumCap = 0;
}
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
CriteriaHelper.pollUiThread(Criteria.equals(true,
mActivityTestRule.getActivity()
......
......@@ -84,7 +84,6 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tasks.tab_management.TabProperties;
import org.chromium.chrome.browser.tasks.tab_management.TabSelectionEditorTestingRobot;
......@@ -275,7 +274,7 @@ public class StartSurfaceLayoutTest {
@FlakyTest(message = "crbug.com/1064157 This test is flaky")
public void testRenderGrid_3NativeTabs() throws InterruptedException, IOException {
// clang-format on
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
// Prepare some incognito native tabs and enter tab switcher.
// NTP in incognito mode is chosen for its consistency in look, and we don't have to mock
// away the MV tiles, login promo, feed, etc.
......@@ -294,7 +293,7 @@ public class StartSurfaceLayoutTest {
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
@CommandLineFlags.Add({BASE_PARAMS})
public void testTabToGridFromLiveTab() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting());
assertEquals(0, mTabListDelegate.getCleanupDelayForTesting());
......@@ -309,7 +308,7 @@ public class StartSurfaceLayoutTest {
@MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
@DisabledTest(message = "crbug.com/991852 This test is flaky")
public void testTabToGridFromLiveTabAnimation() throws InterruptedException {
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, NTP_URL);
testTabToGrid(mUrl);
......@@ -320,7 +319,7 @@ public class StartSurfaceLayoutTest {
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
@CommandLineFlags.Add({BASE_PARAMS + "/soft-cleanup-delay/2000/cleanup-delay/10000"})
public void testTabToGridFromLiveTabWarm() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
assertEquals(2000, mTabListDelegate.getSoftCleanupDelayForTesting());
assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting());
......@@ -334,7 +333,7 @@ public class StartSurfaceLayoutTest {
@CommandLineFlags.Add({BASE_PARAMS + "/soft-cleanup-delay/2000/cleanup-delay/10000"})
@MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction.
public void testTabToGridFromLiveTabWarmAnimation() throws InterruptedException {
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, NTP_URL);
testTabToGrid(mUrl);
}
......@@ -344,7 +343,7 @@ public class StartSurfaceLayoutTest {
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
@CommandLineFlags.Add({BASE_PARAMS + "/cleanup-delay/10000"})
public void testTabToGridFromLiveTabSoft() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting());
assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting());
......@@ -358,7 +357,7 @@ public class StartSurfaceLayoutTest {
@CommandLineFlags.Add({BASE_PARAMS + "/cleanup-delay/10000"})
@MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction.
public void testTabToGridFromLiveTabSoftAnimation() throws InterruptedException {
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, NTP_URL);
testTabToGrid(mUrl);
}
......@@ -415,7 +414,7 @@ public class StartSurfaceLayoutTest {
@MediumTest
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
public void testGridToTabToCurrentLive() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(1, 0, mUrl);
testGridToTab(false, false);
}
......@@ -438,7 +437,7 @@ public class StartSurfaceLayoutTest {
@MediumTest
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
public void testGridToTabToCurrentLiveDetached() throws Exception {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
// This works on emulators but not on real devices. See crbug.com/986047.
if (!isEmulator()) return;
......@@ -479,7 +478,7 @@ public class StartSurfaceLayoutTest {
@MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
@DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X")
public void testGridToTabToCurrentLiveWithAnimation() throws InterruptedException {
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(1, 0, mUrl);
testGridToTab(false, false);
}
......@@ -488,7 +487,7 @@ public class StartSurfaceLayoutTest {
@MediumTest
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
public void testGridToTabToOtherLive() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, mUrl);
testGridToTab(true, false);
}
......@@ -499,7 +498,7 @@ public class StartSurfaceLayoutTest {
@MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
@DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X")
public void testGridToTabToOtherLiveWithAnimation() throws InterruptedException {
assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, mUrl);
testGridToTab(true, false);
}
......@@ -508,7 +507,7 @@ public class StartSurfaceLayoutTest {
@MediumTest
@DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
public void testGridToTabToOtherFrozen() throws InterruptedException {
assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled());
assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
prepareTabs(2, 0, mUrl);
testGridToTab(true, true);
}
......
......@@ -45,7 +45,6 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabObserver;
......@@ -870,7 +869,7 @@ class TabListMediator {
* The selected border should re-appear in the final fading-in stage.
*/
void prepareOverview() {
if (!TabFeatureUtilities.isTabToGtsAnimationEnabled()
if (!TabUiFeatureUtilities.isTabToGtsAnimationEnabled()
|| !mTabModelSelector.getTabModelFilterProvider()
.getCurrentTabModelFilter()
.isTabModelRestored()) {
......@@ -1017,7 +1016,7 @@ class TabListMediator {
&& (mModel.get(index).model.get(TabProperties.THUMBNAIL_FETCHER) == null
|| forceUpdate || isUpdatingId)) {
ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, forceUpdate,
forceUpdate && !TabFeatureUtilities.isTabToGtsAnimationEnabled());
forceUpdate && !TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
mModel.get(index).model.set(TabProperties.THUMBNAIL_FETCHER, callback);
}
}
......@@ -1249,7 +1248,7 @@ class TabListMediator {
if (mThumbnailProvider != null && mVisible) {
ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, isSelected,
isSelected && !TabFeatureUtilities.isTabToGtsAnimationEnabled());
isSelected && !TabUiFeatureUtilities.isTabToGtsAnimationEnabled());
tabInfo.set(TabProperties.THUMBNAIL_FETCHER, callback);
}
tab.addObserver(mTabObserver);
......
......@@ -36,7 +36,6 @@ import androidx.recyclerview.widget.RecyclerView;
import org.chromium.base.Log;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.tab_ui.R;
import org.chromium.ui.interpolators.BakedBezierInterpolator;
......@@ -160,7 +159,7 @@ class TabListRecyclerView
assert mFadeOutAnimator == null;
mListener.startedShowing(animate);
long duration = TabFeatureUtilities.isTabToGtsAnimationEnabled()
long duration = TabUiFeatureUtilities.isTabToGtsAnimationEnabled()
? FINAL_FADE_IN_DURATION_MS
: BASE_ANIMATION_DURATION_MS;
......@@ -183,7 +182,7 @@ class TabListRecyclerView
unregisterDynamicView();
}
// TODO(crbug.com/972157): remove this band-aid after we know why GTS is invisible.
if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) {
requestLayout();
}
}
......
......@@ -36,7 +36,6 @@ import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.init.FirstDrawDetector;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
......@@ -509,7 +508,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
TabModelFilter currentTabModelFilter =
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter();
if (currentTabModelFilter != null && currentTabModelFilter.isTabModelRestored()) {
if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) {
if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) {
quick = mResetHandler.resetWithTabList(
currentTabModelFilter, false, mShowTabsInMruOrder);
}
......@@ -535,7 +534,7 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
.isTabModelRestored()) {
mResetHandler.resetWithTabList(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
TabFeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder);
TabUiFeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder);
}
if (!animate) mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, false);
setVisibility(true);
......
......@@ -4,16 +4,21 @@
package org.chromium.chrome.browser.tasks.tab_management;
import android.os.Build;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.SysUtils;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter;
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.DoubleCachedFieldTrialParameter;
import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter;
import org.chromium.chrome.browser.flags.StringCachedFieldTrialParameter;
import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
import org.chromium.ui.base.DeviceFormFactor;
......@@ -26,6 +31,8 @@ import java.util.List;
* A class to handle the state of flags for tab_management.
*/
public class TabUiFeatureUtilities {
private static final String TAG = "TabFeatureUtilities";
// Field trial parameters:
public static final String SKIP_SLOW_ZOOMING_PARAM = "skip-slow-zooming";
public static final BooleanCachedFieldTrialParameter SKIP_SLOW_ZOOMING =
......@@ -53,7 +60,19 @@ public class TabUiFeatureUtilities {
new BooleanCachedFieldTrialParameter(
ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, SEARCH_CHIP_ADAPTIVE_PARAM, false);
// Field trial parameter for the minimum Android SDK version to enable zooming animation.
public static final String MIN_SDK_PARAM = "zooming-min-sdk-version";
public static final IntCachedFieldTrialParameter ZOOMING_MIN_SDK =
new IntCachedFieldTrialParameter(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM, Build.VERSION_CODES.O);
// Field trial parameter for the minimum physical memory size to enable zooming animation.
public static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb";
public static final IntCachedFieldTrialParameter ZOOMING_MIN_MEMORY =
new IntCachedFieldTrialParameter(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_MEMORY_MB_PARAM, 2048);
private static Boolean sTabManagementModuleSupportedForTesting;
private static Boolean sIsTabToGtsAnimationEnabled;
/**
* Set whether the tab management module is supported for testing.
......@@ -138,4 +157,28 @@ public class TabUiFeatureUtilities {
public static boolean isTabGridLayoutAndroidNewTabTileEnabled() {
return TextUtils.equals(TAB_GRID_LAYOUT_ANDROID_NEW_TAB_TILE.getValue(), "NewTabTile");
}
/**
* Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to
* null after the test has finished.
*/
@VisibleForTesting
public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) {
sIsTabToGtsAnimationEnabled = enabled;
}
/**
* @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled.
*/
public static boolean isTabToGtsAnimationEnabled() {
if (sIsTabToGtsAnimationEnabled != null) {
Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled);
return sIsTabToGtsAnimationEnabled;
}
Log.d(TAG, "GTS.MinSdkVersion = " + ZOOMING_MIN_SDK.getValue());
Log.d(TAG, "GTS.MinMemoryMB = " + ZOOMING_MIN_MEMORY.getValue());
return CachedFeatureFlags.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
&& Build.VERSION.SDK_INT >= ZOOMING_MIN_SDK.getValue()
&& SysUtils.amountOfPhysicalMemoryKB() / 1024 >= ZOOMING_MIN_MEMORY.getValue();
}
}
......@@ -28,7 +28,6 @@ import org.junit.rules.TestRule;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.tab_ui.R;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
......@@ -99,7 +98,7 @@ public class MessageCardProviderTest extends DummyUiActivityTestCase {
public void setUpTest() throws Exception {
super.setUpTest();
MockitoAnnotations.initMocks(this);
TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false);
TabUiFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false);
// TODO(meiliang): Replace with TabSwitcher instead when ready to integrate with
// TabSwitcher.
ViewGroup view = new FrameLayout(getActivity());
......@@ -140,7 +139,7 @@ public class MessageCardProviderTest extends DummyUiActivityTestCase {
@After
public void tearDown() {
TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null);
TabUiFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null);
}
@Test
......
......@@ -11,7 +11,6 @@ import org.chromium.chrome.browser.flags.CachedFieldTrialParameter;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.browser.toolbar.bottom.BottomToolbarVariationManager;
import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
......@@ -74,8 +73,8 @@ public class ChromeCachedFlags {
StartSurfaceConfiguration.START_SURFACE_HIDE_INCOGNITO_SWITCH,
StartSurfaceConfiguration.START_SURFACE_VARIATION,
TabContentManager.ALLOW_TO_REFETCH_TAB_THUMBNAIL_VARIATION,
TabFeatureUtilities.ZOOMING_MIN_MEMORY,
TabFeatureUtilities.ZOOMING_MIN_SDK,
TabUiFeatureUtilities.ZOOMING_MIN_MEMORY,
TabUiFeatureUtilities.ZOOMING_MIN_SDK,
TabUiFeatureUtilities.SKIP_SLOW_ZOOMING,
TabUiFeatureUtilities.TAB_GRID_LAYOUT_ANDROID_NEW_TAB_TILE,
TabUiFeatureUtilities.THUMBNAIL_ASPECT_RATIO);
......
// 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.tab;
import android.os.Build;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Log;
import org.chromium.base.SysUtils;
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter;
/**
* Contains logic that decides whether to enable features related to tabs.
*/
public class TabFeatureUtilities {
private static final String TAG = "TabFeatureUtilities";
private static final int DEFAULT_MIN_SDK = Build.VERSION_CODES.O;
private static final int DEFAULT_MIN_MEMORY_MB = 2048;
// Field trial parameter for the minimum Android SDK version to enable zooming animation.
public static final String MIN_SDK_PARAM = "zooming-min-sdk-version";
public static final IntCachedFieldTrialParameter ZOOMING_MIN_SDK =
new IntCachedFieldTrialParameter(
ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM, DEFAULT_MIN_SDK);
// Field trial parameter for the minimum physical memory size to enable zooming animation.
public static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb";
public static final IntCachedFieldTrialParameter ZOOMING_MIN_MEMORY =
new IntCachedFieldTrialParameter(ChromeFeatureList.TAB_TO_GTS_ANIMATION,
MIN_MEMORY_MB_PARAM, DEFAULT_MIN_MEMORY_MB);
private static Boolean sIsTabToGtsAnimationEnabled;
/**
* Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to
* null after the test has finished.
*/
@VisibleForTesting
public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) {
sIsTabToGtsAnimationEnabled = enabled;
}
/**
* @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled.
*/
public static boolean isTabToGtsAnimationEnabled() {
if (sIsTabToGtsAnimationEnabled != null) {
Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled);
return sIsTabToGtsAnimationEnabled;
}
Log.d(TAG, "GTS.MinSdkVersion = " + GridTabSwitcherUtil.getMinSdkVersion());
Log.d(TAG, "GTS.MinMemoryMB = " + GridTabSwitcherUtil.getMinMemoryMB());
return CachedFeatureFlags.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
&& Build.VERSION.SDK_INT >= GridTabSwitcherUtil.getMinSdkVersion()
&& SysUtils.amountOfPhysicalMemoryKB() / 1024
>= GridTabSwitcherUtil.getMinMemoryMB();
}
private static class GridTabSwitcherUtil {
private static int getMinSdkVersion() {
return TabFeatureUtilities.ZOOMING_MIN_SDK.getValue();
}
private static int getMinMemoryMB() {
return TabFeatureUtilities.ZOOMING_MIN_MEMORY.getValue();
}
}
}
......@@ -21,7 +21,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.browser.toolbar.IncognitoStateProvider;
import org.chromium.chrome.browser.toolbar.MenuButton;
import org.chromium.chrome.browser.toolbar.NewTabButton;
......@@ -262,7 +262,7 @@ class StartSurfaceToolbarView extends RelativeLayout {
setVisibility(View.VISIBLE);
boolean showZoomingAnimation =
animateToTab && TabFeatureUtilities.isTabToGtsAnimationEnabled();
animateToTab && TabUiFeatureUtilities.isTabToGtsAnimationEnabled();
final long duration = showZoomingAnimation
? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS
: TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS;
......
......@@ -21,7 +21,6 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.incognito.IncognitoUtils;
import org.chromium.chrome.browser.tab.TabFeatureUtilities;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.browser.toolbar.IncognitoStateProvider;
......@@ -138,7 +137,7 @@ public class TabSwitcherModeTTPhone extends OptimizedFrameLayout
setAlpha(inTabSwitcherMode ? 0.0f : 1.0f);
boolean showZoomingAnimation = TabUiFeatureUtilities.isGridTabSwitcherEnabled()
&& TabFeatureUtilities.isTabToGtsAnimationEnabled();
&& TabUiFeatureUtilities.isTabToGtsAnimationEnabled();
long duration = showZoomingAnimation
? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS
: TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS;
......
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