76 lines
2.8 KiB
Java
76 lines
2.8 KiB
Java
// 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);
|
|
}
|
|
}
|