Commit 0197d393 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Download Home : Fixed an issue in the mutator

Fixed a bug in the onItemUpdated of the mutator which was not
propagating the updated item to its internal data structure.

Bug: 904548
Change-Id: I64298c1aa591709edcf73736e207474fb3b8b062
Reviewed-on: https://chromium-review.googlesource.com/c/1332408Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607443}
parent feeeabcd
......@@ -77,13 +77,7 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
@Override
public void onItemsAdded(Collection<OfflineItem> items) {
for (OfflineItem item : items) {
Date date = getSectionDateFromOfflineItem(item);
DateGroup dateGroup = mDateGroups.get(date);
if (dateGroup == null) {
dateGroup = new DateGroup();
mDateGroups.put(date, dateGroup);
}
dateGroup.addItem(item);
addOrUpdateItemToDateGroups(item);
}
pushItemsToModel();
......@@ -117,6 +111,8 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
onItemsRemoved(CollectionUtil.newArrayList(oldItem));
onItemsAdded(CollectionUtil.newArrayList(item));
} else {
addOrUpdateItemToDateGroups(item);
int sectionHeaderIndex = -1;
for (int i = 0; i < mModel.size(); i++) {
ListItem listItem = mModel.get(i);
......@@ -136,6 +132,16 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
mModel.dispatchLastEvent();
}
private void addOrUpdateItemToDateGroups(OfflineItem item) {
Date date = getSectionDateFromOfflineItem(item);
DateGroup dateGroup = mDateGroups.get(date);
if (dateGroup == null) {
dateGroup = new DateGroup();
mDateGroups.put(date, dateGroup);
}
dateGroup.addOrUpdateItem(item);
}
private void updateSectionHeader(int sectionHeaderIndex, int offlineItemIndex) {
if (sectionHeaderIndex < 0) return;
......@@ -218,13 +224,13 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
Filters.fromOfflineItem(lhs), Filters.fromOfflineItem(rhs));
});
public void addItem(OfflineItem item) {
public void addOrUpdateItem(OfflineItem item) {
Section section = sections.get(item.filter);
if (section == null) {
section = new Section();
sections.put(item.filter, section);
}
section.addItem(item);
section.addOrUpdateItem(item);
}
public void removeItem(OfflineItem item) {
......@@ -252,7 +258,7 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
public Map<Date, OfflineItem> items =
new TreeMap<>((lhs, rhs) -> { return rhs.compareTo(lhs); });
public void addItem(OfflineItem item) {
public void addOrUpdateItem(OfflineItem item) {
items.put(new Date(item.creationTimeMs), item);
}
......
......@@ -781,6 +781,55 @@ public class DateOrderedListMutatorTest {
assertOfflineItem(mModel.get(5), buildCalendar(2018, 1, 1, 4), item2);
}
/**
* Action List
* 1. Set(item1 @ 6:00 IN_PROGRESS 1/1/2018) [ DATE @ 0:00 1/1/2018,
* SECTION @ Video,
* item1 @ 3:00 1/1/2018 IN_PROGRESS]
*
* 2. Update(item1 @ 6:00 COMPLETE 1/1/2018)
*
* 3. Add(item2 @ 4:00 IN_PROGRESS 1/1/2018) [ SECTION @ Video,
* DATE @ 0:00 1/1/2018,
* item1 @ 6:00 1/1/2018 COMPLETE,
* item2 @ 4:00 1/1/2018 IN_PROGRESS]
*/
@Test
public void testFirstItemUpdatedAfterSecondItemAdded() {
when(mSource.getItems()).thenReturn(Collections.emptySet());
DateOrderedListMutator list = createMutatorWithoutJustNowProvider();
mModel.addObserver(mObserver);
OfflineItem item1 =
buildItem("1", buildCalendar(2018, 1, 1, 6), OfflineItemFilter.FILTER_VIDEO);
when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1));
list.onItemsAdded(CollectionUtil.newArrayList(item1));
Assert.assertEquals(2, mModel.size());
assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 1, 0),
OfflineItemFilter.FILTER_VIDEO, true, false);
assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 6), item1);
// Complete the download.
OfflineItem update1 =
buildItem("1", buildCalendar(2018, 1, 1, 6), OfflineItemFilter.FILTER_VIDEO);
update1.state = OfflineItemState.COMPLETE;
when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(update1));
list.onItemUpdated(item1, update1);
// Add a new download.
OfflineItem item2 =
buildItem("2", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.FILTER_VIDEO);
list.onItemsAdded(CollectionUtil.newArrayList(item2));
Assert.assertEquals(3, mModel.size());
assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 1, 0),
OfflineItemFilter.FILTER_VIDEO, true, false);
assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 6), update1);
assertOfflineItem(mModel.get(2), buildCalendar(2018, 1, 1, 4), item2);
}
/**
* Action List
* 2. Set(item1 @ 6:00 1/1/2018, [ DATE @ 0:00 1/2/2018,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment