Merge "Fix npe on setSquishinessFraction" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-09-13 18:56:07 +00:00
committed by Android (Google) Code Review
2 changed files with 17 additions and 2 deletions

View File

@@ -49,7 +49,6 @@ import com.android.systemui.tuner.TunerService.Tunable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/** View that represents the quick settings tile panel (when expanded/pulled down). **/
public class QSPanel extends LinearLayout implements Tunable {
@@ -291,7 +290,16 @@ public class QSPanel extends LinearLayout implements Tunable {
} else {
topOffset = tileHeightOffset;
}
int top = Objects.requireNonNull(mChildrenLayoutTop.get(child));
// Animation can occur before the layout pass, meaning setSquishinessFraction() gets
// called before onLayout(). So, a child view could be null because it has not
// been added to mChildrenLayoutTop yet (which happens in onLayout()).
// We use a continue statement here to catch this NPE because, on the layout pass,
// this code will be called again from onLayout() with the populated children views.
Integer childLayoutTop = mChildrenLayoutTop.get(child);
if (childLayoutTop == null) {
continue;
}
int top = childLayoutTop;
child.setLeftTopRightBottom(child.getLeft(), top + topOffset,
child.getRight(), top + topOffset + child.getHeight());
}

View File

@@ -158,6 +158,13 @@ class QSPanelTest : SysuiTestCase() {
assertThat(qsPanel.paddingBottom).isEqualTo(padding)
}
@Test
fun testSetSquishinessFraction_noCrash() {
qsPanel.addView(qsPanel.mTileLayout as View, 0)
qsPanel.addView(FrameLayout(context))
qsPanel.setSquishinessFraction(0.5f)
}
private infix fun View.isLeftOf(other: View): Boolean {
val rect = Rect()
getBoundsOnScreen(rect)