Merge "Create a utility function in WM Shell to set the text font and style of the TextView." into main
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/TypefaceUtils.kt b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/TypefaceUtils.kt
new file mode 100644
index 0000000..9bf56b0
--- /dev/null
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/TypefaceUtils.kt
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2025 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 com.android.wm.shell.shared
+
+import android.graphics.Typeface
+import android.widget.TextView
+import com.android.wm.shell.Flags
+
+/**
+ * Utility class to apply a specified typeface to a [TextView].
+ *
+ * This class provides a method, [setTypeface],
+ * to easily set a pre-defined font family and style to a given [TextView].
+ */
+class TypefaceUtils {
+
+ enum class FontFamily(val value: String) {
+ GSF_DISPLAY_LARGE("variable-display-large"),
+ GSF_DISPLAY_MEDIUM("variable-display-medium"),
+ GSF_DISPLAY_SMALL("variable-display-small"),
+ GSF_HEADLINE_LARGE("variable-headline-large"),
+ GSF_HEADLINE_MEDIUM("variable-headline-medium"),
+ GSF_HEADLINE_SMALL("variable-headline-small"),
+ GSF_TITLE_LARGE("variable-title-large"),
+ GSF_TITLE_MEDIUM("variable-title-medium"),
+ GSF_TITLE_SMALL("variable-title-small"),
+ GSF_LABEL_LARGE("variable-label-large"),
+ GSF_LABEL_MEDIUM("variable-label-medium"),
+ GSF_LABEL_SMALL("variable-label-small"),
+ GSF_BODY_LARGE("variable-body-large"),
+ GSF_BODY_MEDIUM("variable-body-medium"),
+ GSF_BODY_SMALL("variable-body-small"),
+ GSF_DISPLAY_LARGE_EMPHASIZED("variable-display-large-emphasized"),
+ GSF_DISPLAY_MEDIUM_EMPHASIZED("variable-display-medium-emphasized"),
+ GSF_DISPLAY_SMALL_EMPHASIZED("variable-display-small-emphasized"),
+ GSF_HEADLINE_LARGE_EMPHASIZED("variable-headline-large-emphasized"),
+ GSF_HEADLINE_MEDIUM_EMPHASIZED("variable-headline-medium-emphasized"),
+ GSF_HEADLINE_SMALL_EMPHASIZED("variable-headline-small-emphasized"),
+ GSF_TITLE_LARGE_EMPHASIZED("variable-title-large-emphasized"),
+ GSF_TITLE_MEDIUM_EMPHASIZED("variable-title-medium-emphasized"),
+ GSF_TITLE_SMALL_EMPHASIZED("variable-title-small-emphasized"),
+ GSF_LABEL_LARGE_EMPHASIZED("variable-label-large-emphasized"),
+ GSF_LABEL_MEDIUM_EMPHASIZED("variable-label-medium-emphasized"),
+ GSF_LABEL_SMALL_EMPHASIZED("variable-label-small-emphasized"),
+ GSF_BODY_LARGE_EMPHASIZED("variable-body-large-emphasized"),
+ GSF_BODY_MEDIUM_EMPHASIZED("variable-body-medium-emphasized"),
+ GSF_BODY_SMALL_EMPHASIZED("variable-body-small-emphasized"),
+ }
+
+ companion object {
+ /**
+ * Sets the typeface of the provided [textView] to the specified [fontFamily] and [fontStyle].
+ *
+ * The typeface is only applied to the [TextView] when [Flags.enableGsf] is `true`.
+ * If [Flags.enableGsf] is `false`, this method has no effect.
+ *
+ * @param textView The [TextView] to which the typeface should be applied. If `null`, this method does nothing.
+ * @param fontFamily The desired [FontFamily] for the [TextView].
+ * @param fontStyle The desired font style (e.g., [Typeface.NORMAL], [Typeface.BOLD], [Typeface.ITALIC]). Defaults to [Typeface.NORMAL].
+ */
+ @JvmStatic
+ @JvmOverloads
+ fun setTypeface(
+ textView: TextView?,
+ fontFamily: FontFamily,
+ fontStyle: Int = Typeface.NORMAL,
+ ) {
+ if (!Flags.enableGsf()) return
+ textView?.typeface = Typeface.create(fontFamily.name, fontStyle)
+ }
+ }
+}