summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java34
2 files changed, 40 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
index aa433832d462..4065a25dac80 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
@@ -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;
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java
index d1d9ec3af711..35bcfcd39fca 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java
@@ -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);
+ }
}