Merge "Notify the correct position when removing the last item"
This commit is contained in:
commit
0fa3a152a7
|
@ -193,7 +193,8 @@ public class ItemGroup extends AbstractItemHierarchy implements ItemInflater.Ite
|
|||
}
|
||||
|
||||
/**
|
||||
* @return The "Item Position" of the given child, or -1 if the child is empty or not found.
|
||||
* @return The "Item Position" of the given child, or -1 if the child is not found. If the given
|
||||
* child is empty, position of the next visible item is returned.
|
||||
*/
|
||||
private int getChildPosition(ItemHierarchy child) {
|
||||
// Check the identity of the child rather than using .equals(), because here we want
|
||||
|
@ -204,7 +205,14 @@ public class ItemGroup extends AbstractItemHierarchy implements ItemInflater.Ite
|
|||
private int getChildPosition(int childIndex) {
|
||||
updateDataIfNeeded();
|
||||
if (childIndex != -1) {
|
||||
return mHierarchyStart.get(childIndex, -1);
|
||||
int childPos = -1;
|
||||
int childCount = mChildren.size();
|
||||
for (int i = childIndex; childPos < 0 && i < childCount; i++) {
|
||||
// Find the position of the first visible child after childIndex. This is required
|
||||
// when removing the last item from a nested ItemGroup.
|
||||
childPos = mHierarchyStart.get(i, -1);
|
||||
}
|
||||
return childPos;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -123,6 +123,52 @@ public class ItemGroupTest {
|
|||
verifyNoMoreInteractions(mObserver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNestedGroupClearNotification() {
|
||||
ItemGroup parentGroup = new ItemGroup();
|
||||
ItemGroup childGroup = new ItemGroup();
|
||||
parentGroup.registerObserver(mObserver);
|
||||
|
||||
parentGroup.addChild(CHILD_1);
|
||||
childGroup.addChild(CHILD_2);
|
||||
childGroup.addChild(CHILD_3);
|
||||
parentGroup.addChild(childGroup);
|
||||
parentGroup.addChild(CHILD_4);
|
||||
|
||||
childGroup.clear();
|
||||
|
||||
final InOrder inOrder = inOrder(mObserver);
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1));
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2));
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(3), eq(1));
|
||||
verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(1), eq(2));
|
||||
verifyNoMoreInteractions(mObserver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNestedGroupRemoveNotification() {
|
||||
ItemGroup parentGroup = new ItemGroup();
|
||||
ItemGroup childGroup = new ItemGroup();
|
||||
parentGroup.registerObserver(mObserver);
|
||||
|
||||
parentGroup.addChild(CHILD_1);
|
||||
childGroup.addChild(CHILD_2);
|
||||
childGroup.addChild(CHILD_3);
|
||||
parentGroup.addChild(childGroup);
|
||||
parentGroup.addChild(CHILD_4);
|
||||
|
||||
childGroup.removeChild(CHILD_3);
|
||||
childGroup.removeChild(CHILD_2);
|
||||
|
||||
final InOrder inOrder = inOrder(mObserver);
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1));
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2));
|
||||
inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(3), eq(1));
|
||||
inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(2), eq(1));
|
||||
inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(1), eq(1));
|
||||
verifyNoMoreInteractions(mObserver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotifyChange() {
|
||||
mItemGroup.addChild(CHILD_1);
|
||||
|
|
Loading…
Reference in a new issue