Merge "Remove complication id from entry mapping on removal." into tm-dev

This commit is contained in:
Bryce Lee
2022-03-24 20:28:46 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 4 deletions

View File

@@ -540,13 +540,15 @@ public class ComplicationLayoutEngine implements Complication.VisibilityControll
/**
* Removes a complication by {@link ComplicationId}.
*/
public void removeComplication(ComplicationId id) {
if (!mEntries.containsKey(id)) {
public boolean removeComplication(ComplicationId id) {
final ViewEntry entry = mEntries.remove(id);
if (entry == null) {
Log.e(TAG, "could not find id:" + id);
return;
return false;
}
final ViewEntry entry = mEntries.get(id);
entry.remove();
return true;
}
}

View File

@@ -18,6 +18,7 @@ package com.android.systemui.dreams.complication;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -414,4 +415,37 @@ public class ComplicationLayoutEngineTest extends SysuiTestCase {
assertThat(lp.endToEnd == ConstraintLayout.LayoutParams.PARENT_ID).isTrue();
});
}
/**
* Ensures a second removal of a complication is a no-op.
*/
@Test
public void testDoubleRemoval() {
final ComplicationLayoutEngine engine =
new ComplicationLayoutEngine(mLayout, 0, mTouchSession, 0, 0);
final ViewInfo firstViewInfo = new ViewInfo(
new ComplicationLayoutParams(
100,
100,
ComplicationLayoutParams.POSITION_TOP
| ComplicationLayoutParams.POSITION_END,
ComplicationLayoutParams.DIRECTION_DOWN,
0),
Complication.CATEGORY_STANDARD,
mLayout);
engine.addComplication(firstViewInfo.id, firstViewInfo.view, firstViewInfo.lp,
firstViewInfo.category);
verify(mLayout).addView(firstViewInfo.view);
assertThat(engine.removeComplication(firstViewInfo.id)).isTrue();
verify(firstViewInfo.view).getParent();
verify(mLayout).removeView(firstViewInfo.view);
Mockito.clearInvocations(mLayout, firstViewInfo.view);
assertThat(engine.removeComplication(firstViewInfo.id)).isFalse();
verify(firstViewInfo.view, never()).getParent();
verify(mLayout, never()).removeView(firstViewInfo.view);
}
}