diff options
| author | 2023-09-19 15:27:23 +0900 | |
|---|---|---|
| committer | 2023-09-20 11:12:13 +0000 | |
| commit | 473adff6c968a2ed946924c9826dc39247983298 (patch) | |
| tree | 9b6998ca7ff92f27bf044ecb6852662be12e6d8f | |
| parent | 17f466ce22bda86daab5104d98949a70f734eaff (diff) | |
Use CoreSettingsObserver for accessing text flags
Bug: 300140938
Test: manually done
Change-Id: I5cee3f4a53038b5f7dcf7b160371279362725595
| -rw-r--r-- | core/java/android/text/ClientFlags.java | 58 | ||||
| -rw-r--r-- | core/java/android/text/TextFlags.java | 29 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/CoreSettingsObserver.java | 10 |
4 files changed, 99 insertions, 1 deletions
diff --git a/core/java/android/text/ClientFlags.java b/core/java/android/text/ClientFlags.java new file mode 100644 index 000000000000..46fa5017106b --- /dev/null +++ b/core/java/android/text/ClientFlags.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text; + +import com.android.text.flags.Flags; + +/** + * An aconfig feature flags that can be accessible from application process without + * ContentProvider IPCs. + * + * When you add new flags, you have to add flag string to {@link TextFlags#TEXT_ACONFIGS_FLAGS}. + * + * @hide + */ +public class ClientFlags { + + /** + * @see Flags#deprecateFontsXml() + */ + public static boolean deprecateFontsXml() { + return TextFlags.isFeatureEnabled(Flags.FLAG_DEPRECATE_FONTS_XML); + } + + /** + * @see Flags#noBreakNoHyphenationSpan() + */ + public static boolean noBreakNoHyphenationSpan() { + return TextFlags.isFeatureEnabled(Flags.FLAG_NO_BREAK_NO_HYPHENATION_SPAN); + } + + /** + * @see Flags#phraseStrictFallback() + */ + public static boolean phraseStrictFallback() { + return TextFlags.isFeatureEnabled(Flags.FLAG_PHRASE_STRICT_FALLBACK); + } + + /** + * @see Flags#useBoundsForWidth() + */ + public static boolean useBoundsForWidth() { + return TextFlags.isFeatureEnabled(Flags.FLAG_USE_BOUNDS_FOR_WIDTH); + } +} diff --git a/core/java/android/text/TextFlags.java b/core/java/android/text/TextFlags.java index 4be6a8def852..536e3ccd98f6 100644 --- a/core/java/android/text/TextFlags.java +++ b/core/java/android/text/TextFlags.java @@ -16,6 +16,11 @@ package android.text; +import android.annotation.NonNull; +import android.app.AppGlobals; + +import com.android.text.flags.Flags; + /** * Flags in the "text" namespace. * @@ -46,4 +51,28 @@ public final class TextFlags { */ public static final boolean ENABLE_NEW_CONTEXT_MENU_DEFAULT = true; + /** + * List of text flags to be transferred to the application process. + */ + public static final String[] TEXT_ACONFIGS_FLAGS = { + Flags.FLAG_DEPRECATE_FONTS_XML, + Flags.FLAG_NO_BREAK_NO_HYPHENATION_SPAN, + Flags.FLAG_PHRASE_STRICT_FALLBACK, + Flags.FLAG_USE_BOUNDS_FOR_WIDTH, + }; + + /** + * Get a key for the feature flag. + */ + public static String getKeyForFlag(@NonNull String flag) { + return "text__" + flag; + } + + /** + * Return true if the feature flag is enabled. + */ + public static boolean isFeatureEnabled(@NonNull String flag) { + return AppGlobals.getIntCoreSetting( + getKeyForFlag(flag), 0 /* aconfig is false by default */) != 0; + } } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index ac0e493cb3c1..2afcbbfe5b61 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -103,6 +103,7 @@ import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; import android.text.BoringLayout; +import android.text.ClientFlags; import android.text.DynamicLayout; import android.text.Editable; import android.text.GetChars; @@ -1634,7 +1635,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } if (CompatChanges.isChangeEnabled(USE_BOUNDS_FOR_WIDTH)) { - mUseBoundsForWidth = false; // TODO: Connect to the flag. + mUseBoundsForWidth = ClientFlags.useBoundsForWidth(); } else { mUseBoundsForWidth = false; } diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java index e84fed7e0a4d..4b622f589adb 100644 --- a/services/core/java/com/android/server/am/CoreSettingsObserver.java +++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java @@ -173,6 +173,16 @@ final class CoreSettingsObserver extends ContentObserver { TextFlags.NAMESPACE, TextFlags.ENABLE_NEW_CONTEXT_MENU, TextFlags.KEY_ENABLE_NEW_CONTEXT_MENU, boolean.class, TextFlags.ENABLE_NEW_CONTEXT_MENU_DEFAULT)); + + // Register all text aconfig flags. + for (String flag : TextFlags.TEXT_ACONFIGS_FLAGS) { + sDeviceConfigEntries.add(new DeviceConfigEntry<Boolean>( + TextFlags.NAMESPACE, + flag, + TextFlags.getKeyForFlag(flag), + boolean.class, + false)); // All aconfig flags are false by default. + } // add other device configs here... } private static volatile boolean sDeviceConfigContextEntriesLoaded = false; |