summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
+ }
}