summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorDanny Lin <danny@kdrag0n.dev>2022-04-10 23:59:12 -0700
committeralk3pInjection <webmaster@raspii.tech>2022-05-07 00:20:58 +0800
commitc5a81e7adda1acced39c23fca2117acf065b39ff (patch)
treeca5bc0e56e4104c01f40d306779c60deb0fe4df4 /core
parente4fa94a25e4cd63e6e70bf537c0f8e65388649fb (diff)
fonts: Respect font scale for dynamic tracking calculations
This fixes clipped/truncated text in some apps, such as buttons in Shop. Change-Id: I9a34bcb4faff822ce0dcb66a50f96083126d1b5f
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/graphics/fonts/DynamicMetrics.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/core/java/com/android/internal/graphics/fonts/DynamicMetrics.java b/core/java/com/android/internal/graphics/fonts/DynamicMetrics.java
index a3adcdfc0b63..5d723fd5f364 100644
--- a/core/java/com/android/internal/graphics/fonts/DynamicMetrics.java
+++ b/core/java/com/android/internal/graphics/fonts/DynamicMetrics.java
@@ -17,7 +17,9 @@
package com.android.internal.graphics.fonts;
import android.app.ActivityThread;
+import android.content.ComponentCallbacks;
import android.content.Context;
+import android.content.res.Configuration;
import android.graphics.Typeface;
public class DynamicMetrics {
@@ -99,6 +101,16 @@ public class DynamicMetrics {
/* 32.0dp */ -0.02160486150154747f,
};
+ private static final ComponentCallbacks callbacks = new ComponentCallbacks() {
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ sDensity = getDensity();
+ }
+
+ @Override
+ public void onLowMemory() {}
+ };
+
private DynamicMetrics() {}
public static float calcTracking(float sizePx) {
@@ -108,7 +120,8 @@ public class DynamicMetrics {
return 0.0f;
}
- sDensity = context.getResources().getDisplayMetrics().density;
+ sDensity = getDensity();
+ context.registerComponentCallbacks(callbacks);
}
// Pixels -> sp
@@ -126,4 +139,13 @@ public class DynamicMetrics {
public static boolean shouldModifyFont(Typeface typeface) {
return typeface == null || typeface.isSystemFont();
}
+
+ private static float getDensity() {
+ Context context = ActivityThread.currentApplication();
+ if (context == null) {
+ return 1.0f;
+ }
+
+ return context.getResources().getDisplayMetrics().scaledDensity;
+ }
}