Commit 5aa8889c authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Downloads OCP : Implemented GetVisualsForItem

Completed the implementation for DownloadsOfflineContentProvider::GetVisualsForItem.

Bug: 855330
Change-Id: If7b9018c7758e3d857b6c34bc709ae517e182e2e
Reviewed-on: https://chromium-review.googlesource.com/1113941
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarXing Liu <xingliu@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571674}
parent 2b81eb8c
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/download/image_thumbnail_request.h"
#include "chrome/browser/download/offline_item_utils.h" #include "chrome/browser/download/offline_item_utils.h"
#include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h" #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -15,14 +16,21 @@ ...@@ -15,14 +16,21 @@
#include "components/offline_items_collection/core/offline_content_aggregator.h" #include "components/offline_items_collection/core/offline_content_aggregator.h"
#include "components/offline_items_collection/core/offline_item.h" #include "components/offline_items_collection/core/offline_item.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
using OfflineItemFilter = offline_items_collection::OfflineItemFilter; using OfflineItemFilter = offline_items_collection::OfflineItemFilter;
using OfflineItemState = offline_items_collection::OfflineItemState; using OfflineItemState = offline_items_collection::OfflineItemState;
using OfflineItemProgressUnit = using OfflineItemProgressUnit =
offline_items_collection::OfflineItemProgressUnit; offline_items_collection::OfflineItemProgressUnit;
using OfflineItemVisuals = offline_items_collection::OfflineItemVisuals;
namespace { namespace {
// Thumbnail size used for generating thumbnails for image files.
const int kThumbnailSizeInDP = 64;
bool ShouldShowDownloadItem(const download::DownloadItem* item) { bool ShouldShowDownloadItem(const download::DownloadItem* item) {
return !item->IsTemporary() && !item->IsTransient() && !item->IsDangerous(); return !item->IsTemporary() && !item->IsTransient() && !item->IsDangerous();
} }
...@@ -114,8 +122,32 @@ void DownloadOfflineContentProvider::GetVisualsForItem( ...@@ -114,8 +122,32 @@ void DownloadOfflineContentProvider::GetVisualsForItem(
const ContentId& id, const ContentId& id,
const VisualsCallback& callback) { const VisualsCallback& callback) {
// TODO(crbug.com/855330) Supply thumbnail if item is visible. // TODO(crbug.com/855330) Supply thumbnail if item is visible.
DownloadItem* item = manager_->GetDownloadByGuid(id.id);
if (!item)
return;
display::Display display = display::Screen::GetScreen()->GetPrimaryDisplay();
int icon_size = kThumbnailSizeInDP * display.device_scale_factor();
auto request = std::make_unique<ImageThumbnailRequest>(
icon_size,
base::BindOnce(&DownloadOfflineContentProvider::OnThumbnailRetrieved,
weak_ptr_factory_.GetWeakPtr(), id, callback));
request->Start(item->GetTargetFilePath());
// Dropping ownership of |request| here because it will clean itself up once
// the started request finishes.
request.release();
}
void DownloadOfflineContentProvider::OnThumbnailRetrieved(
const ContentId& id,
const VisualsCallback& callback,
const SkBitmap& bitmap) {
auto visuals = std::make_unique<OfflineItemVisuals>();
visuals->icon = gfx::Image::CreateFrom1xBitmap(bitmap);
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(callback, id, nullptr)); FROM_HERE, base::BindOnce(std::move(callback), id, std::move(visuals)));
} }
void DownloadOfflineContentProvider::AddObserver( void DownloadOfflineContentProvider::AddObserver(
......
...@@ -21,6 +21,8 @@ using OfflineContentProvider = offline_items_collection::OfflineContentProvider; ...@@ -21,6 +21,8 @@ using OfflineContentProvider = offline_items_collection::OfflineContentProvider;
using OfflineContentAggregator = using OfflineContentAggregator =
offline_items_collection::OfflineContentAggregator; offline_items_collection::OfflineContentAggregator;
class SkBitmap;
// This class handles the task of observing a single DownloadManager and // This class handles the task of observing a single DownloadManager and
// notifies UI about updates about various downloads. // notifies UI about updates about various downloads.
class DownloadOfflineContentProvider class DownloadOfflineContentProvider
...@@ -52,6 +54,10 @@ class DownloadOfflineContentProvider ...@@ -52,6 +54,10 @@ class DownloadOfflineContentProvider
void OnDownloadUpdated(DownloadManager* manager, DownloadItem* item) override; void OnDownloadUpdated(DownloadManager* manager, DownloadItem* item) override;
void OnDownloadRemoved(DownloadManager* manager, DownloadItem* item) override; void OnDownloadRemoved(DownloadManager* manager, DownloadItem* item) override;
void OnThumbnailRetrieved(const ContentId& id,
const VisualsCallback& callback,
const SkBitmap& bitmap);
DownloadManager* manager_; DownloadManager* manager_;
download::AllDownloadItemNotifier download_notifier_; download::AllDownloadItemNotifier download_notifier_;
base::ObserverList<OfflineContentProvider::Observer> observers_; base::ObserverList<OfflineContentProvider::Observer> observers_;
......
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