Refresh DisplayContext to prevent getting stale DisplayMetrics

Bug: 176656141
Test: Change font size or display size, it should reflect on home screen icon/text sizes.
Change-Id: I39bb9d11d246c7ccea1ea4d5af37fba3ce0001be
This commit is contained in:
Alex Chau
2021-02-12 12:12:56 +00:00
parent 4d6b0270ab
commit d25e87a6a3
2 changed files with 22 additions and 10 deletions

View File

@@ -29,6 +29,7 @@ import android.util.Log;
import android.util.SparseArray;
import android.view.Display;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.launcher3.Utilities;
@@ -182,20 +183,26 @@ public class DisplayController implements DisplayListener {
}
/** Creates and up-to-date DisplayController.Info for the given context. */
@Nullable
public Info createInfoForContext(Context context) {
Display display = Utilities.ATLEAST_R
? context.getDisplay()
: context
.getSystemService(DisplayManager.class)
.getDisplay(mId);
return display == null
? new Info(context)
: new Info(context, display);
Display display = Utilities.ATLEAST_R ? context.getDisplay() : null;
if (display == null) {
display = context.getSystemService(DisplayManager.class).getDisplay(mId);
}
if (display == null) {
return null;
}
// Refresh the Context the prevent stale DisplayMetrics.
Context displayContext = context.getApplicationContext().createDisplayContext(display);
return new Info(displayContext, display);
}
protected void handleOnChange() {
Info oldInfo = mInfo;
Info newInfo = createInfoForContext(mDisplayContext);
if (newInfo == null) {
return;
}
int change = 0;
if (newInfo.hasDifferentSize(oldInfo)) {