Add isCaptivePortalLoginFeatureNotChickenedOut

The implementation is similar to isNetworkStackFeatureNotChickenedOut.

Test: atest
Flag: EXEMPT BUGFIX
Change-Id: I65db78b4f707232c0fdadb580494cfa556d62295
This commit is contained in:
Remi NGUYEN VAN 2025-09-12 10:17:30 +09:00
commit 9be6957f37
2 changed files with 34 additions and 0 deletions

View file

@ -229,6 +229,24 @@ public final class DeviceConfigUtils {
() -> getPackageVersion(context));
}
/**
* Check whether one specific experimental feature in CaptivePortalLogin module from
* {@link DeviceConfig} is not disabled.
* If the feature is enabled by default and disabled by flag push (kill switch), this method
* should be used.
* If the feature is disabled by default and enabled by flag push,
* {@link #isCaptivePortalLoginFeatureEnabled(Context, String)} should be used.
*
* @param context The global context information about an app environment.
* @param name The name of the property in CaptivePortalLogin module to look up.
* @return true if this feature is enabled, or false if disabled.
*/
public static boolean isCaptivePortalLoginFeatureNotChickenedOut(@NonNull Context context,
@NonNull String name) {
return isFeatureEnabled(NAMESPACE_CAPTIVEPORTALLOGIN, name, true /* defaultEnabled */,
() -> getPackageVersion(context));
}
private static boolean isFeatureEnabled(@NonNull String namespace,
String name, boolean defaultEnabled, Supplier<Long> packageVersionSupplier) {
final int flagValue = getDeviceConfigPropertyInt(namespace, name, 0 /* default value */);

View file

@ -536,10 +536,14 @@ public class DeviceConfigUtilsTest {
TEST_EXPERIMENT_FLAG));
doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING,
TEST_EXPERIMENT_FLAG));
doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(
NAMESPACE_CAPTIVEPORTALLOGIN, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isNetworkStackFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isCaptivePortalLoginFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
}
@Test
@ -548,10 +552,14 @@ public class DeviceConfigUtilsTest {
TEST_EXPERIMENT_FLAG));
doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING,
TEST_EXPERIMENT_FLAG));
doReturn(null).when(() -> DeviceConfig.getProperty(NAMESPACE_CAPTIVEPORTALLOGIN,
TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isNetworkStackFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isCaptivePortalLoginFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
// If the flag is unset, package info is not queried
verify(mContext, never()).getPackageManager();
@ -565,10 +573,14 @@ public class DeviceConfigUtilsTest {
TEST_EXPERIMENT_FLAG));
doReturn("1").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING,
TEST_EXPERIMENT_FLAG));
doReturn("1").when(() -> DeviceConfig.getProperty(NAMESPACE_CAPTIVEPORTALLOGIN,
TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isNetworkStackFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertTrue(DeviceConfigUtils.isCaptivePortalLoginFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
// If the feature is force enabled, package info is not queried
verify(mContext, never()).getPackageManager();
@ -582,10 +594,14 @@ public class DeviceConfigUtilsTest {
TEST_EXPERIMENT_FLAG));
doReturn("-1").when(() -> DeviceConfig.getProperty(NAMESPACE_TETHERING,
TEST_EXPERIMENT_FLAG));
doReturn("-1").when(() -> DeviceConfig.getProperty(NAMESPACE_CAPTIVEPORTALLOGIN,
TEST_EXPERIMENT_FLAG));
assertFalse(DeviceConfigUtils.isNetworkStackFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertFalse(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
assertFalse(DeviceConfigUtils.isCaptivePortalLoginFeatureNotChickenedOut(
mContext, TEST_EXPERIMENT_FLAG));
// If the feature is force disabled, package info is not queried
verify(mContext, never()).getPackageManager();