diff options
-rw-r--r-- | core/java/com/android/internal/graphics/fonts/DynamicMetrics.java | 24 |
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; + } } |