Commit 732c168a authored by Rayan Kanso's avatar Rayan Kanso Committed by Commit Bot

Update Android notification UI when offline item is complete.

This change updates the OfflineContentProvider onItemUpdated observer
function to include whether the visuals need to be updated.
This allows to change the notification icon from the offline item.

Bug: 865063
Change-Id: I47fb04700c550fb630fefa328b634c979c25cd27
Reviewed-on: https://chromium-review.googlesource.com/1156592Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Reviewed-by: default avatarCathy Li <chili@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Commit-Queue: Rayan Kanso <rayankans@chromium.org>
Cr-Commit-Position: refs/heads/master@{#581313}
parent 9e1dd148
......@@ -124,6 +124,7 @@ public class OfflineContentAggregatorNotificationBridgeUi
public void destroyServiceDelegate() {}
private void getVisualsAndUpdateItem(OfflineItem item) {
if (item.refreshVisuals) mVisualsCache.remove(item.id);
if (needsVisualsForUi(item)) {
if (!mVisualsCache.containsKey(item.id)) {
// We don't have any visuals for this item yet. Stash the current OfflineItem and,
......@@ -214,8 +215,9 @@ public class OfflineContentAggregatorNotificationBridgeUi
case OfflineItemState.PENDING:
case OfflineItemState.INTERRUPTED:
case OfflineItemState.PAUSED:
case OfflineItemState.COMPLETE:
return true;
// OfflineItemState.FAILED, OfflineItemState.COMPLETE,
// OfflineItemState.FAILED,
// OfflineItemState.CANCELLED
default:
return false;
......
......@@ -272,6 +272,7 @@ public class OfflineContentAggregatorNotificationBridgeUiTest {
{
add(buildOfflineItem(new ContentId("1", "A"), OfflineItemState.IN_PROGRESS));
add(buildOfflineItem(new ContentId("2", "B"), OfflineItemState.PENDING));
add(buildOfflineItem(new ContentId("3", "C"), OfflineItemState.COMPLETE));
add(buildOfflineItem(new ContentId("5", "E"), OfflineItemState.INTERRUPTED));
add(buildOfflineItem(new ContentId("7", "G"), OfflineItemState.PAUSED));
}
......@@ -279,7 +280,6 @@ public class OfflineContentAggregatorNotificationBridgeUiTest {
ArrayList<OfflineItem> uninterestingItems = new ArrayList<OfflineItem>() {
{
add(buildOfflineItem(new ContentId("3", "C"), OfflineItemState.COMPLETE));
add(buildOfflineItem(new ContentId("6", "F"), OfflineItemState.FAILED));
}
};
......
......@@ -103,8 +103,6 @@ void BackgroundFetchDelegateImpl::JobDetails::UpdateOfflineItem() {
} else {
offline_item.state = OfflineItemState::IN_PROGRESS;
}
// TODO(crbug.com/865063): Update the icon.
}
bool BackgroundFetchDelegateImpl::JobDetails::ShouldReportProgressBySize() {
......@@ -229,8 +227,10 @@ void BackgroundFetchDelegateImpl::UpdateUI(
if (title && job_details.fetch_description->title != *title)
job_details.fetch_description->title = *title;
if (icon)
if (icon) {
job_details.fetch_description->icon = *icon;
job_details.offline_item.refresh_visuals = true;
}
UpdateOfflineItemAndUpdateObservers(&job_details);
}
......@@ -525,6 +525,7 @@ void BackgroundFetchDelegateImpl::GetVisualsForItem(
if (it != job_details_map_.end()) {
visuals->icon =
gfx::Image::CreateFrom1xBitmap(it->second.fetch_description->icon);
it->second.offline_item.refresh_visuals = false;
}
base::ThreadTaskRunnerHandle::Get()->PostTask(
......
......@@ -74,6 +74,7 @@ public class OfflineItem implements Cloneable {
public boolean isTransient;
public boolean isSuggested;
public boolean isAccelerated;
public boolean refreshVisuals;
// Content Metadata.
public long totalSizeBytes;
......@@ -119,6 +120,7 @@ public class OfflineItem implements Cloneable {
clone.isTransient = isTransient;
clone.isSuggested = isSuggested;
clone.isAccelerated = isAccelerated;
clone.refreshVisuals = refreshVisuals;
clone.totalSizeBytes = totalSizeBytes;
clone.externallyRemoved = externallyRemoved;
clone.creationTimeMs = creationTimeMs;
......
......@@ -45,11 +45,12 @@ public final class OfflineItemBridge {
private static OfflineItem createOfflineItemAndMaybeAddToList(ArrayList<OfflineItem> list,
String nameSpace, String id, String title, String description,
@OfflineItemFilter int filter, boolean isTransient, boolean isSuggested,
boolean isAccelerated, long totalSizeBytes, boolean externallyRemoved,
long creationTimeMs, long lastAccessedTimeMs, boolean isOpenable, String filePath,
String mimeType, String pageUrl, String originalUrl, boolean isOffTheRecord,
@OfflineItemState int state, @PendingState int pendingState, boolean isResumable,
boolean allowMetered, long receivedBytes, long progressValue, long progressMax,
boolean isAccelerated, boolean refreshVisuals, long totalSizeBytes,
boolean externallyRemoved, long creationTimeMs, long lastAccessedTimeMs,
boolean isOpenable, String filePath, String mimeType, String pageUrl,
String originalUrl, boolean isOffTheRecord, @OfflineItemState int state,
@PendingState int pendingState, boolean isResumable, boolean allowMetered,
long receivedBytes, long progressValue, long progressMax,
@OfflineItemProgressUnit int progressUnit, long timeRemainingMs, boolean isDangerous) {
OfflineItem item = new OfflineItem();
item.id.namespace = nameSpace;
......@@ -60,6 +61,7 @@ public final class OfflineItemBridge {
item.isTransient = isTransient;
item.isSuggested = isSuggested;
item.isAccelerated = isAccelerated;
item.refreshVisuals = refreshVisuals;
item.totalSizeBytes = totalSizeBytes;
item.externallyRemoved = externallyRemoved;
item.creationTimeMs = creationTimeMs;
......
......@@ -33,9 +33,10 @@ JNI_OfflineItemBridge_createOfflineItemAndMaybeAddToList(
ConvertUTF8ToJavaString(env, item.title),
ConvertUTF8ToJavaString(env, item.description),
static_cast<jint>(item.filter), item.is_transient, item.is_suggested,
item.is_accelerated, item.total_size_bytes, item.externally_removed,
item.creation_time.ToJavaTime(), item.last_accessed_time.ToJavaTime(),
item.is_openable, ConvertUTF8ToJavaString(env, item.file_path.value()),
item.is_accelerated, item.refresh_visuals, item.total_size_bytes,
item.externally_removed, item.creation_time.ToJavaTime(),
item.last_accessed_time.ToJavaTime(), item.is_openable,
ConvertUTF8ToJavaString(env, item.file_path.value()),
ConvertUTF8ToJavaString(env, item.mime_type),
ConvertUTF8ToJavaString(env, item.page_url.spec()),
ConvertUTF8ToJavaString(env, item.original_url.spec()),
......
......@@ -43,6 +43,7 @@ OfflineItem::OfflineItem()
is_transient(false),
is_suggested(false),
is_accelerated(false),
refresh_visuals(false),
total_size_bytes(0),
externally_removed(false),
is_openable(false),
......@@ -71,6 +72,7 @@ bool OfflineItem::operator==(const OfflineItem& offline_item) const {
is_transient == offline_item.is_transient &&
is_suggested == offline_item.is_suggested &&
is_accelerated == offline_item.is_accelerated &&
refresh_visuals == offline_item.refresh_visuals &&
total_size_bytes == offline_item.total_size_bytes &&
externally_removed == offline_item.externally_removed &&
creation_time == offline_item.creation_time &&
......
......@@ -116,6 +116,9 @@ struct OfflineItem {
// Whether this item is going through accelerated download.
bool is_accelerated;
// Whether there are new visuals available.
bool refresh_visuals;
// TODO(dtrainor): Build out custom per-item icon support.
// Content Metadata.
......
......@@ -22,6 +22,7 @@ std::ostream& operator<<(std::ostream& os, const OfflineItem& item) {
os << ", is_transient: " << item.is_transient;
os << ", is_suggested: " << item.is_suggested;
os << ", is_accelerated: " << item.is_accelerated;
os << ", refresh_visuals: " << item.refresh_visuals;
os << ", total_size_bytes: " << item.total_size_bytes;
os << ", externally_removed: " << item.externally_removed;
os << ", creation_time: " << item.creation_time;
......
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