| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.base; |
| |
| import org.jni_zero.JNINamespace; |
| import org.jni_zero.NativeMethods; |
| |
| /** |
| * A class that serves as a bridge to native code to check the status of feature switches. |
| * |
| * Each subclass represents a set of related features. Each instance of such a class correlates to a |
| * single C++ Feature. |
| */ |
| @JNINamespace("base::android") |
| public abstract class Features { |
| private final String mName; |
| |
| protected Features(String name) { |
| mName = name; |
| } |
| |
| /** Returns the string value which is the `name` field in the native Feature object. */ |
| public String getName() { |
| return mName; |
| } |
| |
| /** Returns true if the given feature is enabled. */ |
| public boolean isEnabled() { |
| // FeatureFlags set for testing override the native default value. |
| Boolean testValue = FeatureList.getTestValueForFeature(getName()); |
| if (testValue != null) return testValue; |
| return FeaturesJni.get().isEnabled(getFeaturePointer()); |
| } |
| |
| /** |
| * Returns a field trial param as a boolean for the specified feature. |
| * |
| * @param paramName The name of the param. |
| * @param defaultValue The boolean value to use if the param is not available. |
| * @return The parameter value as a boolean. Default value if the feature does not exist or the |
| * specified parameter does not exist or its string value is neither "true" nor "false". |
| */ |
| public boolean getFieldTrialParamByFeatureAsBoolean(String paramName, boolean defaultValue) { |
| return FeaturesJni.get() |
| .getFieldTrialParamByFeatureAsBoolean(getFeaturePointer(), paramName, defaultValue); |
| } |
| |
| /** |
| * Returns a field trial param as a string for the specified feature. |
| * |
| * @param paramName The name of the param. |
| * @param defaultValue The String value to use if the param is not available. |
| * @return The parameter value as a String. Empty string if the feature does not exist or the |
| * specified parameter does not exist. |
| */ |
| public String getFieldTrialParamByFeatureAsString(String paramName) { |
| return FeaturesJni.get() |
| .getFieldTrialParamByFeatureAsString(getFeaturePointer(), paramName); |
| } |
| |
| /** Returns a pointer to the native Feature object represented by this object instance. */ |
| protected abstract long getFeaturePointer(); |
| |
| @NativeMethods |
| interface Natives { |
| boolean isEnabled(long featurePointer); |
| |
| boolean getFieldTrialParamByFeatureAsBoolean( |
| long featurePointer, String paramName, boolean defaultValue); |
| |
| String getFieldTrialParamByFeatureAsString(long featurePointer, String paramName); |
| } |
| } |