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 { ...@@ -77,13 +77,7 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
@Override @Override
public void onItemsAdded(Collection<OfflineItem> items) { public void onItemsAdded(Collection<OfflineItem> items) {
for (OfflineItem item : items) { for (OfflineItem item : items) {
Date date = getSectionDateFromOfflineItem(item); addOrUpdateItemToDateGroups(item);
DateGroup dateGroup = mDateGroups.get(date);
if (dateGroup == null) {
dateGroup = new DateGroup();
mDateGroups.put(date, dateGroup);
}
dateGroup.addItem(item);
} }
pushItemsToModel(); pushItemsToModel();
...@@ -117,6 +111,8 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -117,6 +111,8 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
onItemsRemoved(CollectionUtil.newArrayList(oldItem)); onItemsRemoved(CollectionUtil.newArrayList(oldItem));
onItemsAdded(CollectionUtil.newArrayList(item)); onItemsAdded(CollectionUtil.newArrayList(item));
} else { } else {
addOrUpdateItemToDateGroups(item);
int sectionHeaderIndex = -1; int sectionHeaderIndex = -1;
for (int i = 0; i < mModel.size(); i++) { for (int i = 0; i < mModel.size(); i++) {
ListItem listItem = mModel.get(i); ListItem listItem = mModel.get(i);
...@@ -136,6 +132,16 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -136,6 +132,16 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
mModel.dispatchLastEvent(); 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) { private void updateSectionHeader(int sectionHeaderIndex, int offlineItemIndex) {
if (sectionHeaderIndex < 0) return; if (sectionHeaderIndex < 0) return;
...@@ -218,13 +224,13 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -218,13 +224,13 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
Filters.fromOfflineItem(lhs), Filters.fromOfflineItem(rhs)); Filters.fromOfflineItem(lhs), Filters.fromOfflineItem(rhs));
}); });
public void addItem(OfflineItem item) { public void addOrUpdateItem(OfflineItem item) {
Section section = sections.get(item.filter); Section section = sections.get(item.filter);
if (section == null) { if (section == null) {
section = new Section(); section = new Section();
sections.put(item.filter, section); sections.put(item.filter, section);
} }
section.addItem(item); section.addOrUpdateItem(item);
} }
public void removeItem(OfflineItem item) { public void removeItem(OfflineItem item) {
...@@ -252,7 +258,7 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -252,7 +258,7 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
public Map<Date, OfflineItem> items = public Map<Date, OfflineItem> items =
new TreeMap<>((lhs, rhs) -> { return rhs.compareTo(lhs); }); 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); items.put(new Date(item.creationTimeMs), item);
} }
......
...@@ -781,6 +781,55 @@ public class DateOrderedListMutatorTest { ...@@ -781,6 +781,55 @@ public class DateOrderedListMutatorTest {
assertOfflineItem(mModel.get(5), buildCalendar(2018, 1, 1, 4), item2); 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 * Action List
* 2. Set(item1 @ 6:00 1/1/2018, [ DATE @ 0:00 1/2/2018, * 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