Cache Display.Mode so we can ignore refresh rate changes
DisplayCutoutView calls #update() when `onDisplayChanged` is called, but if that were to be called _only_ because the refresh rate changes, then we redraw the displaycutoutview (with no meaningful changes) and this causes the display to change refresh rate again, starting the loop over. Fixes: 155155363 Test: manual Change-Id: Ic885cf24a9f4cc45970a3388653789abb3f592bb
This commit is contained in:
@@ -62,6 +62,7 @@ import android.os.UserHandle;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.Display;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.DisplayCutout.BoundsPosition;
|
||||
import android.view.DisplayInfo;
|
||||
@@ -820,6 +821,7 @@ public class ScreenDecorations extends SystemUI implements Tunable {
|
||||
|
||||
private static final float HIDDEN_CAMERA_PROTECTION_SCALE = 0.5f;
|
||||
|
||||
private Display.Mode mDisplayMode = null;
|
||||
private final DisplayInfo mInfo = new DisplayInfo();
|
||||
private final Paint mPaint = new Paint();
|
||||
private final List<Rect> mBounds = new ArrayList();
|
||||
@@ -904,11 +906,33 @@ public class ScreenDecorations extends SystemUI implements Tunable {
|
||||
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId) {
|
||||
Display.Mode oldMode = mDisplayMode;
|
||||
mDisplayMode = getDisplay().getMode();
|
||||
|
||||
// Display mode hasn't meaningfully changed, we can ignore it
|
||||
if (!modeChanged(oldMode, mDisplayMode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (displayId == getDisplay().getDisplayId()) {
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean modeChanged(Display.Mode oldMode, Display.Mode newMode) {
|
||||
if (oldMode == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean changed = false;
|
||||
changed |= oldMode.getPhysicalHeight() != newMode.getPhysicalHeight();
|
||||
changed |= oldMode.getPhysicalWidth() != newMode.getPhysicalWidth();
|
||||
// We purposely ignore refresh rate and id changes here, because we don't need to
|
||||
// invalidate for those, and they can trigger the refresh rate to increase
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
public void setRotation(int rotation) {
|
||||
mRotation = rotation;
|
||||
update();
|
||||
|
||||
Reference in New Issue
Block a user