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