Homogenize caching and checking of flags in FeatureUtilities.
This a step to make FeatureUtilities easier to maintain.
- Move most static variables in FeatureUtilities to a static Map.
- Deduplicate code into isFlagEnabledWithDefaultFalse(),
isFlagEnabledWithDefaultTrue(), and cacheFlag()
- Keep the public API intact for now
This is not a final solution, but it highlights the quirks in each
usage so they can be clearly refactored out, and makes it easier to
migrate to the solution we decide for.
Bug: 1012975
Change-Id: Id155ec60dbcb1170ef39bc6e3f1b759ef7b63692
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1850820
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Reviewed-by: Theresa <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704864}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
index eaff0c3..c988892 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -37,7 +37,9 @@
import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.ui.base.DeviceFormFactor;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* A utility {@code class} meant to help determine whether or not certain features are supported by
@@ -69,29 +71,11 @@
public class FeatureUtilities {
private static final String TAG = "FeatureUtilities";
+ private static Map<String, Boolean> sFlags = new HashMap<>();
private static Boolean sHasGoogleAccountAuthenticator;
private static Boolean sHasRecognitionIntentHandler;
-
- private static Boolean sIsBottomToolbarEnabled;
- private static Boolean sIsAdaptiveToolbarEnabled;
- private static Boolean sIsLabeledBottomToolbarEnabled;
- private static Boolean sIsNightModeAvailable;
- private static Boolean sNightModeDefaultToLight;
- private static Boolean sIsNightModeForCustomTabsAvailable;
- private static Boolean sShouldPrioritizeBootstrapTasks;
- private static Boolean sIsGridTabSwitcherEnabled;
- private static Boolean sIsStartSurfaceEnabled;
private static Boolean sIsTabGroupsAndroidEnabled;
private static Boolean sIsTabToGtsAnimationEnabled;
- private static Boolean sFeedEnabled;
- private static Boolean sServiceManagerForBackgroundPrefetch;
- private static Boolean sIsNetworkServiceWarmUpEnabled;
- private static Boolean sIsImmersiveUiModeEnabled;
- private static Boolean sServiceManagerForDownloadResumption;
- private static Boolean sIsClickToCallOpenDialerDirectlyEnabled;
-
- private static Boolean sDownloadAutoResumptionEnabledInNative;
-
private static String sReachedCodeProfilerTrialGroup;
/**
@@ -216,47 +200,30 @@
}
private static void cacheServiceManagerForDownloadResumption() {
- boolean resumptionDownloadInReducedMode =
- ChromeFeatureList.isEnabled(ChromeFeatureList.SERVICE_MANAGER_FOR_DOWNLOAD);
-
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.SERVICE_MANAGER_FOR_DOWNLOAD_RESUMPTION_KEY,
- resumptionDownloadInReducedMode);
+ cacheFlag(ChromePreferenceManager.SERVICE_MANAGER_FOR_DOWNLOAD_RESUMPTION_KEY,
+ ChromeFeatureList.SERVICE_MANAGER_FOR_DOWNLOAD);
}
/**
* @return if DownloadResumptionBackgroundTask should load native in service manager only mode.
*/
public static boolean isServiceManagerForDownloadResumptionEnabled() {
- if (sServiceManagerForDownloadResumption == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sServiceManagerForDownloadResumption = prefManager.readBoolean(
- ChromePreferenceManager.SERVICE_MANAGER_FOR_DOWNLOAD_RESUMPTION_KEY, false);
- }
- return sServiceManagerForDownloadResumption;
+ return isFlagEnabled(
+ ChromePreferenceManager.SERVICE_MANAGER_FOR_DOWNLOAD_RESUMPTION_KEY, false);
}
public static void cacheServiceManagerForBackgroundPrefetch() {
- boolean backgroundPrefetchInReducedMode = ChromeFeatureList.isEnabled(
+ cacheFlag(ChromePreferenceManager.SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH_KEY,
ChromeFeatureList.SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH);
-
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH_KEY,
- backgroundPrefetchInReducedMode);
}
/**
* @return if PrefetchBackgroundTask should load native in service manager only mode.
*/
public static boolean isServiceManagerForBackgroundPrefetchEnabled() {
- if (sServiceManagerForBackgroundPrefetch == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sServiceManagerForBackgroundPrefetch = prefManager.readBoolean(
- ChromePreferenceManager.SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH_KEY, false);
- }
- return sServiceManagerForBackgroundPrefetch && isFeedEnabled();
+ return isFlagEnabled(
+ ChromePreferenceManager.SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH_KEY, false)
+ && isFeedEnabled();
}
/**
@@ -264,25 +231,15 @@
* native is loaded.
*/
public static void cacheFeedEnabled() {
- boolean feedEnabled =
- ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS);
-
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.INTEREST_FEED_CONTENT_SUGGESTIONS_KEY, feedEnabled);
- sFeedEnabled = feedEnabled;
+ cacheFlag(ChromePreferenceManager.INTEREST_FEED_CONTENT_SUGGESTIONS_KEY,
+ ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS);
}
/**
* @return Whether or not the Feed is enabled (based on the cached value in SharedPrefs).
*/
public static boolean isFeedEnabled() {
- if (sFeedEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sFeedEnabled = prefManager.readBoolean(
- ChromePreferenceManager.INTEREST_FEED_CONTENT_SUGGESTIONS_KEY, false);
- }
- return sFeedEnabled;
+ return isFlagEnabled(ChromePreferenceManager.INTEREST_FEED_CONTENT_SUGGESTIONS_KEY, false);
}
/**
@@ -290,13 +247,7 @@
*/
@CalledByNative
public static boolean isDownloadAutoResumptionEnabledInNative() {
- if (sDownloadAutoResumptionEnabledInNative == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sDownloadAutoResumptionEnabledInNative = prefManager.readBoolean(
- ChromePreferenceManager.DOWNLOAD_AUTO_RESUMPTION_IN_NATIVE_KEY, true);
- }
- return sDownloadAutoResumptionEnabledInNative;
+ return isFlagEnabled(ChromePreferenceManager.DOWNLOAD_AUTO_RESUMPTION_IN_NATIVE_KEY, true);
}
/**
@@ -304,9 +255,8 @@
* be made available immediately.
*/
public static void cacheBottomToolbarEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.BOTTOM_TOOLBAR_ENABLED_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_DUET));
+ cacheFlag(
+ ChromePreferenceManager.BOTTOM_TOOLBAR_ENABLED_KEY, ChromeFeatureList.CHROME_DUET);
}
/**
@@ -314,9 +264,8 @@
* be made available immediately.
*/
public static void cacheAdaptiveToolbarEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.ADAPTIVE_TOOLBAR_ENABLED_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_DUET_ADAPTIVE));
+ cacheFlag(ChromePreferenceManager.ADAPTIVE_TOOLBAR_ENABLED_KEY,
+ ChromeFeatureList.CHROME_DUET_ADAPTIVE);
}
/**
@@ -324,9 +273,8 @@
* be made available immediately.
*/
public static void cacheLabeledBottomToolbarEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.LABELED_BOTTOM_TOOLBAR_ENABLED_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_DUET_LABELED));
+ cacheFlag(ChromePreferenceManager.LABELED_BOTTOM_TOOLBAR_ENABLED_KEY,
+ ChromeFeatureList.CHROME_DUET_LABELED);
}
/**
@@ -334,23 +282,16 @@
* value can be made available immediately.
*/
private static void cacheDownloadAutoResumptionEnabledInNative() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.DOWNLOAD_AUTO_RESUMPTION_IN_NATIVE_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.DOWNLOADS_AUTO_RESUMPTION_NATIVE));
+ cacheFlag(ChromePreferenceManager.DOWNLOAD_AUTO_RESUMPTION_IN_NATIVE_KEY,
+ ChromeFeatureList.DOWNLOADS_AUTO_RESUMPTION_NATIVE);
}
/**
* @return Whether or not the bottom toolbar is enabled.
*/
public static boolean isBottomToolbarEnabled() {
- if (sIsBottomToolbarEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsBottomToolbarEnabled = prefManager.readBoolean(
- ChromePreferenceManager.BOTTOM_TOOLBAR_ENABLED_KEY, false);
- }
// TODO(crbug.com/944228): TabGroupsAndroid and ChromeDuet are incompatible for now.
- return sIsBottomToolbarEnabled
+ return isFlagEnabled(ChromePreferenceManager.BOTTOM_TOOLBAR_ENABLED_KEY, false)
&& !DeviceFormFactor.isNonMultiDisplayContextOnTablet(
ContextUtils.getApplicationContext())
&& !isTabGroupsAndroidEnabled();
@@ -360,33 +301,23 @@
* Set whether the bottom toolbar is enabled for tests. Reset to null at the end of tests.
*/
public static void setIsBottomToolbarEnabledForTests(Boolean enabled) {
- sIsBottomToolbarEnabled = enabled;
+ sFlags.put(ChromePreferenceManager.BOTTOM_TOOLBAR_ENABLED_KEY, enabled);
}
/**
* @return Whether or not the adaptive toolbar is enabled.
*/
public static boolean isAdaptiveToolbarEnabled() {
- if (sIsAdaptiveToolbarEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsAdaptiveToolbarEnabled = prefManager.readBoolean(
- ChromePreferenceManager.ADAPTIVE_TOOLBAR_ENABLED_KEY, true);
- }
- return sIsAdaptiveToolbarEnabled && isBottomToolbarEnabled() && !isGridTabSwitcherEnabled();
+ return isFlagEnabled(ChromePreferenceManager.ADAPTIVE_TOOLBAR_ENABLED_KEY, true)
+ && isBottomToolbarEnabled() && !isGridTabSwitcherEnabled();
}
/**
* @return Whether or not the labeled bottom toolbar is enabled.
*/
public static boolean isLabeledBottomToolbarEnabled() {
- if (sIsLabeledBottomToolbarEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsLabeledBottomToolbarEnabled = prefManager.readBoolean(
- ChromePreferenceManager.LABELED_BOTTOM_TOOLBAR_ENABLED_KEY, false);
- }
- return sIsLabeledBottomToolbarEnabled && isBottomToolbarEnabled();
+ return isFlagEnabled(ChromePreferenceManager.LABELED_BOTTOM_TOOLBAR_ENABLED_KEY, false)
+ && isBottomToolbarEnabled();
}
/**
@@ -406,13 +337,7 @@
* enabled).
*/
public static boolean isNightModeAvailable() {
- if (sIsNightModeAvailable == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsNightModeAvailable = prefManager.readBoolean(
- ChromePreferenceManager.NIGHT_MODE_AVAILABLE_KEY, false);
- }
- return sIsNightModeAvailable;
+ return isFlagEnabled(ChromePreferenceManager.NIGHT_MODE_AVAILABLE_KEY, false);
}
/**
@@ -421,7 +346,7 @@
*/
@VisibleForTesting
public static void setNightModeAvailableForTesting(@Nullable Boolean available) {
- sIsNightModeAvailable = available;
+ sFlags.put(ChromePreferenceManager.NIGHT_MODE_AVAILABLE_KEY, available);
}
/**
@@ -447,16 +372,10 @@
* @return Whether or not to default to the light theme when the night mode feature is enabled.
*/
public static boolean isNightModeDefaultToLight() {
- if (BuildInfo.isAtLeastQ()) sNightModeDefaultToLight = false;
-
- if (sNightModeDefaultToLight == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sNightModeDefaultToLight = prefManager.readBoolean(
- ChromePreferenceManager.NIGHT_MODE_DEFAULT_TO_LIGHT, false);
+ if (BuildInfo.isAtLeastQ()) {
+ return false;
}
-
- return sNightModeDefaultToLight;
+ return isFlagEnabled(ChromePreferenceManager.NIGHT_MODE_DEFAULT_TO_LIGHT, false);
}
/**
@@ -465,7 +384,7 @@
*/
@VisibleForTesting
public static void setNightModeDefaultToLightForTesting(@Nullable Boolean available) {
- sNightModeDefaultToLight = available;
+ sFlags.put(ChromePreferenceManager.NIGHT_MODE_DEFAULT_TO_LIGHT, available);
}
/**
@@ -473,9 +392,8 @@
* enabled), so the value is immediately available on next start-up.
*/
public static void cacheNightModeForCustomTabsAvailable() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.NIGHT_MODE_CCT_AVAILABLE_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_NIGHT_MODE_CCT));
+ cacheFlag(ChromePreferenceManager.NIGHT_MODE_CCT_AVAILABLE_KEY,
+ ChromeFeatureList.ANDROID_NIGHT_MODE_CCT);
}
/**
@@ -483,13 +401,7 @@
* enabled) for custom tabs.
*/
public static boolean isNightModeForCustomTabsAvailable() {
- if (sIsNightModeForCustomTabsAvailable == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsNightModeForCustomTabsAvailable = prefManager.readBoolean(
- ChromePreferenceManager.NIGHT_MODE_CCT_AVAILABLE_KEY, true);
- }
- return sIsNightModeForCustomTabsAvailable;
+ return isFlagEnabled(ChromePreferenceManager.NIGHT_MODE_CCT_AVAILABLE_KEY, true);
}
/**
@@ -497,18 +409,15 @@
* testing. Should be reset back to NULL after the test has finished.
*/
public static void setNightModeForCustomTabsAvailableForTesting(Boolean available) {
- sIsNightModeForCustomTabsAvailable = available;
+ sFlags.put(ChromePreferenceManager.NIGHT_MODE_CCT_AVAILABLE_KEY, available);
}
/**
* Cache whether or not command line is enabled on non-rooted devices.
*/
private static void cacheCommandLineOnNonRootedEnabled() {
- boolean isCommandLineOnNonRootedEnabled =
- ChromeFeatureList.isEnabled(ChromeFeatureList.COMMAND_LINE_ON_NON_ROOTED);
- ChromePreferenceManager manager = ChromePreferenceManager.getInstance();
- manager.writeBoolean(ChromePreferenceManager.COMMAND_LINE_ON_NON_ROOTED_ENABLED_KEY,
- isCommandLineOnNonRootedEnabled);
+ cacheFlag(ChromePreferenceManager.COMMAND_LINE_ON_NON_ROOTED_ENABLED_KEY,
+ ChromeFeatureList.COMMAND_LINE_ON_NON_ROOTED);
}
/**
@@ -519,22 +428,15 @@
}
private static void cacheStartSurfaceEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.START_SURFACE_ENABLED_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.START_SURFACE_ANDROID));
+ cacheFlag(ChromePreferenceManager.START_SURFACE_ENABLED_KEY,
+ ChromeFeatureList.START_SURFACE_ANDROID);
}
/**
* @return Whether the Start Surface is enabled.
*/
public static boolean isStartSurfaceEnabled() {
- if (sIsStartSurfaceEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsStartSurfaceEnabled = prefManager.readBoolean(
- ChromePreferenceManager.START_SURFACE_ENABLED_KEY, false);
- }
- return sIsStartSurfaceEnabled;
+ return isFlagEnabled(ChromePreferenceManager.START_SURFACE_ENABLED_KEY, false);
}
private static void cacheGridTabSwitcherEnabled() {
@@ -553,16 +455,11 @@
* @return Whether the Grid Tab Switcher UI is enabled and available for use.
*/
public static boolean isGridTabSwitcherEnabled() {
- if (sIsGridTabSwitcherEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sIsGridTabSwitcherEnabled = prefManager.readBoolean(
- ChromePreferenceManager.GRID_TAB_SWITCHER_ENABLED_KEY, false);
- }
// TODO(yusufo): AccessibilityLayout check should not be here and the flow should support
// changing that setting while Chrome is alive.
// Having Tab Groups implies Grid Tab Switcher.
- return sIsGridTabSwitcherEnabled || isTabGroupsAndroidEnabled();
+ return isFlagEnabled(ChromePreferenceManager.GRID_TAB_SWITCHER_ENABLED_KEY, false)
+ || isTabGroupsAndroidEnabled();
}
/**
@@ -571,7 +468,7 @@
*/
@VisibleForTesting
public static void setGridTabSwitcherEnabledForTesting(@Nullable Boolean enabled) {
- sIsGridTabSwitcherEnabled = enabled;
+ sFlags.put(ChromePreferenceManager.GRID_TAB_SWITCHER_ENABLED_KEY, enabled);
}
private static void cacheTabGroupsAndroidEnabled() {
@@ -664,9 +561,8 @@
* can be made available immediately.
*/
public static void cachePrioritizeBootstrapTasks() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.PRIORITIZE_BOOTSTRAP_TASKS_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.PRIORITIZE_BOOTSTRAP_TASKS));
+ cacheFlag(ChromePreferenceManager.PRIORITIZE_BOOTSTRAP_TASKS_KEY,
+ ChromeFeatureList.PRIORITIZE_BOOTSTRAP_TASKS);
}
/**
@@ -674,13 +570,7 @@
* prioritization experiment is enabled).
*/
public static boolean shouldPrioritizeBootstrapTasks() {
- if (sShouldPrioritizeBootstrapTasks == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
-
- sShouldPrioritizeBootstrapTasks = prefManager.readBoolean(
- ChromePreferenceManager.PRIORITIZE_BOOTSTRAP_TASKS_KEY, true);
- }
- return sShouldPrioritizeBootstrapTasks;
+ return isFlagEnabled(ChromePreferenceManager.PRIORITIZE_BOOTSTRAP_TASKS_KEY, true);
}
/**
@@ -697,30 +587,19 @@
* @return whether warming up network service is enabled.
*/
public static boolean isNetworkServiceWarmUpEnabled() {
- if (sIsNetworkServiceWarmUpEnabled == null) {
- ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance();
- sIsNetworkServiceWarmUpEnabled = prefManager.readBoolean(
- ChromePreferenceManager.NETWORK_SERVICE_WARM_UP_ENABLED_KEY, false);
- }
- return sIsNetworkServiceWarmUpEnabled;
+ return isFlagEnabled(ChromePreferenceManager.NETWORK_SERVICE_WARM_UP_ENABLED_KEY, false);
}
private static void cacheImmersiveUiModeEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.IMMERSIVE_UI_MODE_ENABLED,
- ChromeFeatureList.isEnabled(ChromeFeatureList.IMMERSIVE_UI_MODE));
+ cacheFlag(ChromePreferenceManager.IMMERSIVE_UI_MODE_ENABLED,
+ ChromeFeatureList.IMMERSIVE_UI_MODE);
}
/**
* @return Whether immersive ui mode is enabled.
*/
public static boolean isImmersiveUiModeEnabled() {
- if (sIsImmersiveUiModeEnabled == null) {
- sIsImmersiveUiModeEnabled = ChromePreferenceManager.getInstance().readBoolean(
- ChromePreferenceManager.IMMERSIVE_UI_MODE_ENABLED, false);
- }
-
- return sIsImmersiveUiModeEnabled;
+ return isFlagEnabled(ChromePreferenceManager.IMMERSIVE_UI_MODE_ENABLED, false);
}
/**
@@ -733,19 +612,16 @@
}
public static void cacheSwapPixelFormatToFixConvertFromTranslucentEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT,
- ChromeFeatureList.isEnabled(
- ChromeFeatureList.SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT));
+ cacheFlag(ChromePreferenceManager.SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT,
+ ChromeFeatureList.SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT);
}
/**
* Cache the value of the flag whether or not to directly open the dialer for click to call.
*/
public static void cacheClickToCallOpenDialerDirectlyEnabled() {
- ChromePreferenceManager.getInstance().writeBoolean(
- ChromePreferenceManager.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY_KEY,
- ChromeFeatureList.isEnabled(ChromeFeatureList.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY));
+ cacheFlag(ChromePreferenceManager.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY_KEY,
+ ChromeFeatureList.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY);
}
/**
@@ -753,12 +629,7 @@
* value in SharedPrefs).
*/
public static boolean isClickToCallOpenDialerDirectlyEnabled() {
- if (sIsClickToCallOpenDialerDirectlyEnabled == null) {
- sIsClickToCallOpenDialerDirectlyEnabled =
- ChromePreferenceManager.getInstance().readBoolean(
- ChromePreferenceManager.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY_KEY, false);
- }
- return sIsClickToCallOpenDialerDirectlyEnabled;
+ return isFlagEnabled(ChromePreferenceManager.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY_KEY, false);
}
/**
@@ -768,7 +639,7 @@
@VisibleForTesting
public static void setIsClickToCallOpenDialerDirectlyEnabledForTesting(
@Nullable Boolean isEnabled) {
- sIsClickToCallOpenDialerDirectlyEnabled = isEnabled;
+ sFlags.put(ChromePreferenceManager.CLICK_TO_CALL_OPEN_DIALER_DIRECTLY_KEY, isEnabled);
}
/**
@@ -828,6 +699,20 @@
}
}
+ private static void cacheFlag(String preferenceName, String featureName) {
+ ChromePreferenceManager.getInstance().writeBoolean(
+ preferenceName, ChromeFeatureList.isEnabled(featureName));
+ }
+
+ private static boolean isFlagEnabled(String preferenceName, boolean defaultValue) {
+ Boolean flag = sFlags.get(preferenceName);
+ if (flag == null) {
+ flag = ChromePreferenceManager.getInstance().readBoolean(preferenceName, defaultValue);
+ sFlags.put(preferenceName, flag);
+ }
+ return flag;
+ }
+
@NativeMethods
interface Natives {
void setCustomTabVisible(boolean visible);