diff --git a/core/java/android/view/textclassifier/TextClassificationConstants.java b/core/java/android/view/textclassifier/TextClassificationConstants.java index d0ed8eef7749fb24c6063cfc1b79135b01b25b24..7dd77191cb0882f17a08e9234057d3212d402c0d 100644 --- a/core/java/android/view/textclassifier/TextClassificationConstants.java +++ b/core/java/android/view/textclassifier/TextClassificationConstants.java @@ -137,10 +137,6 @@ public final class TextClassificationConstants { properties.getBoolean( LOCAL_TEXT_CLASSIFIER_ENABLED, LOCAL_TEXT_CLASSIFIER_ENABLED_DEFAULT); - sSystemTextClassifierEnabled = - properties.getBoolean( - SYSTEM_TEXT_CLASSIFIER_ENABLED, - SYSTEM_TEXT_CLASSIFIER_ENABLED_DEFAULT); sModelDarkLaunchEnabled = properties.getBoolean( MODEL_DARK_LAUNCH_ENABLED, @@ -199,8 +195,11 @@ public final class TextClassificationConstants { } public boolean isSystemTextClassifierEnabled() { - ensureMemoizedValues(); - return sSystemTextClassifierEnabled; + // Don't memoize this value because we want to be able to receive config + // updates at runtime. + return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, + SYSTEM_TEXT_CLASSIFIER_ENABLED, + SYSTEM_TEXT_CLASSIFIER_ENABLED_DEFAULT); } public boolean isModelDarkLaunchEnabled() { diff --git a/core/tests/coretests/src/android/view/textclassifier/TextClassificationConstantsTest.java b/core/tests/coretests/src/android/view/textclassifier/TextClassificationConstantsTest.java index a567b4bd5a482bf0d00c736d6f83d2f02af1f542..20a876809ba08002b3aeadd082104cc6d61cc152 100644 --- a/core/tests/coretests/src/android/view/textclassifier/TextClassificationConstantsTest.java +++ b/core/tests/coretests/src/android/view/textclassifier/TextClassificationConstantsTest.java @@ -28,6 +28,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.function.Consumer; +import java.util.function.Predicate; @SmallTest @RunWith(AndroidJUnit4.class) @@ -74,6 +75,13 @@ public class TextClassificationConstantsTest { .isEqualTo(1)); } + @Test + public void runtimeMutableSettings() { + assertOverride( + TextClassificationConstants.SYSTEM_TEXT_CLASSIFIER_ENABLED, + settings -> settings.isSystemTextClassifierEnabled()); + } + private static void assertSettings( String key, String value, Consumer<TextClassificationConstants> settingsConsumer) { final String originalValue = @@ -87,6 +95,21 @@ public class TextClassificationConstantsTest { } } + private static void assertOverride( + String key, Predicate<TextClassificationConstants> settingsPredicate) { + final String originalValue = + DeviceConfig.getProperty(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key); + TextClassificationConstants settings = new TextClassificationConstants(); + try { + setDeviceConfig(key, "true"); + assertThat(settingsPredicate.test(settings)).isTrue(); + setDeviceConfig(key, "false"); + assertThat(settingsPredicate.test(settings)).isFalse(); + } finally { + setDeviceConfig(key, originalValue); + } + } + private static void setDeviceConfig(String key, String value) { DeviceConfig.setProperty( DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key, value, /* makeDefault */ false);