From 917ab11ed1fc2f078a8c6a763cf6c63ad3e125ba Mon Sep 17 00:00:00 2001 From: menghanli Date: Mon, 28 Mar 2022 12:30:29 +0800 Subject: [PATCH] Fix Caption preview SubtitleView textSize cannot update correctly Root caue: When received #OnLayoutChangeListener callback, the mPainText size keeps "zero" after called setTextSize() because the requestLayout() does not trigger the whole view re-measure & re-layout in not ui thread. Solution: Post #refreshPreviewText to ui thread to get correct bounds to measure & layout. Bug: 223696269 Bug: 211178478 Test: Manually test Change-Id: Idcbeba52876171e5f3641eafc77d203764c78788 --- .../settings/accessibility/CaptionAppearanceFragment.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java index 7eceb7d5b28..13055be0c07 100644 --- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java +++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java @@ -22,6 +22,8 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.provider.Settings; import android.view.View; import android.view.accessibility.CaptioningManager; @@ -92,6 +94,7 @@ public class CaptionAppearanceFragment extends DashboardFragment private final List mPreferenceList = new ArrayList<>(); + private final Handler mHandler = new Handler(Looper.getMainLooper()); private final View.OnLayoutChangeListener mLayoutChangeListener = new View.OnLayoutChangeListener() { @Override @@ -99,7 +102,7 @@ public class CaptionAppearanceFragment extends DashboardFragment int oldLeft, int oldTop, int oldRight, int oldBottom) { // Remove the listener once the callback is triggered. mPreviewViewport.removeOnLayoutChangeListener(this); - refreshPreviewText(); + mHandler.post(() ->refreshPreviewText()); } };