From 7bae0f83e64c3fae8701c48b473280963f3209a6 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 25 Oct 2022 17:26:42 +0800 Subject: [PATCH] Add SettingsFontFamily for SpaLib So we could get the font family from config and apply them to SPA. Bug: 235727273 Test: Manual with Settings App Change-Id: I2af44e3a73db2c1a1d21630b6c16cb58a745c4b1 --- .../spa/framework/theme/SettingsFontFamily.kt | 65 +++++++++++++++++++ .../spa/framework/theme/SettingsTypography.kt | 10 +-- 2 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsFontFamily.kt diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsFontFamily.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsFontFamily.kt new file mode 100644 index 0000000000000..8e8805aa49d24 --- /dev/null +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsFontFamily.kt @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2022 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. + */ + +@file:OptIn(ExperimentalTextApi::class) + +package com.android.settingslib.spa.framework.theme + +import android.annotation.SuppressLint +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.text.ExperimentalTextApi +import androidx.compose.ui.text.font.DeviceFontFamilyName +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight + +internal data class SettingsFontFamily( + val brand: FontFamily = FontFamily.Default, + val plain: FontFamily = FontFamily.Default, +) + +private fun Context.getSettingsFontFamily(inInspection: Boolean): SettingsFontFamily { + if (inInspection) { + return SettingsFontFamily() + } + return SettingsFontFamily( + brand = FontFamily( + Font(getFontFamilyName("config_headlineFontFamily"), FontWeight.Normal), + Font(getFontFamilyName("config_headlineFontFamilyMedium"), FontWeight.Medium), + ), + plain = FontFamily( + Font(getFontFamilyName("config_bodyFontFamily"), FontWeight.Normal), + Font(getFontFamilyName("config_bodyFontFamilyMedium"), FontWeight.Medium), + ), + ) +} + +private fun Context.getFontFamilyName(configName: String): DeviceFontFamilyName { + @SuppressLint("DiscouragedApi") + val configId = resources.getIdentifier(configName, "string", "android") + return DeviceFontFamilyName(resources.getString(configId)) +} + +@Composable +internal fun rememberSettingsFontFamily(): SettingsFontFamily { + val context = LocalContext.current + val inInspection = LocalInspectionMode.current + return remember { context.getSettingsFontFamily(inInspection) } +} diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTypography.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTypography.kt index 07f09ba95ca31..03699bf4d4c00 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTypography.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsTypography.kt @@ -20,14 +20,13 @@ import androidx.compose.material3.Typography import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.em import androidx.compose.ui.unit.sp -private class SettingsTypography { - private val brand = FontFamily.Default - private val plain = FontFamily.Default +private class SettingsTypography(settingsFontFamily: SettingsFontFamily) { + private val brand = settingsFontFamily.brand + private val plain = settingsFontFamily.plain val typography = Typography( displayLarge = TextStyle( @@ -140,5 +139,6 @@ private class SettingsTypography { @Composable internal fun rememberSettingsTypography(): Typography { - return remember { SettingsTypography().typography } + val settingsFontFamily = rememberSettingsFontFamily() + return remember { SettingsTypography(settingsFontFamily).typography } }