Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: chrome/browser/ui/app_list/search/playstore/playstore_search_result.cc

Issue 2929273002: Add the Play Store app search to the launcher. (Closed)
Patch Set: Merge API and implementation. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/app_list/search/playstore/playstore_search_result.cc
diff --git a/chrome/browser/ui/app_list/search/playstore/playstore_search_result.cc b/chrome/browser/ui/app_list/search/playstore/playstore_search_result.cc
new file mode 100644
index 0000000000000000000000000000000000000000..57d4bc23e102f3313acee40fd2aabc0a8bc8af4f
--- /dev/null
+++ b/chrome/browser/ui/app_list/search/playstore/playstore_search_result.cc
@@ -0,0 +1,134 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/app_list/search/playstore/playstore_search_result.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/grit/component_extension_resources.h"
+#include "components/crx_file/id_util.h"
+#include "content/public/browser/browser_thread.h"
+#include "ui/app_list/app_list_constants.h"
+#include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/image/image_skia_rep.h"
+#include "ui/gfx/image/image_skia_source.h"
+
+using content::BrowserThread;
+
+#if defined(OS_CHROMEOS)
+
+namespace app_list {
+
+////////////////////////////////////////////////////////////////////////////////
+// IconSource
+
+class PlaystoreSearchResult::IconSource : public gfx::ImageSkiaSource {
+ public:
+ IconSource(const base::WeakPtr<PlaystoreSearchResult>& host,
+ int resource_size_in_dip);
+ ~IconSource() override;
Luis Héctor Chávez 2017/06/16 22:24:34 nit: ~IconSource() override = default;
Jiaquan He 2017/06/22 04:30:03 Done.
+
+ private:
+ gfx::ImageSkiaRep GetImageForScale(float scale) override;
+
+ const int resource_size_in_dip_;
+ const base::WeakPtr<PlaystoreSearchResult> host_;
+
+ DISALLOW_COPY_AND_ASSIGN(IconSource);
+};
+
+PlaystoreSearchResult::IconSource::IconSource(
+ const base::WeakPtr<PlaystoreSearchResult>& host,
+ int resource_size_in_dip)
+ : resource_size_in_dip_(resource_size_in_dip), host_(host) {}
+
+PlaystoreSearchResult::IconSource::~IconSource() {}
+
+gfx::ImageSkiaRep PlaystoreSearchResult::IconSource::GetImageForScale(
+ float scale) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ const gfx::ImageSkia* icon_to_scale;
+ if (host_) {
+ icon_to_scale = &host_->decoded_icon_;
+ } else {
+ int resource_id =
+ scale >= 1.5f ? IDR_ARC_SUPPORT_ICON_96 : IDR_ARC_SUPPORT_ICON_48;
+ icon_to_scale =
+ ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id);
+ }
+ CHECK(icon_to_scale);
Luis Héctor Chávez 2017/06/16 22:24:34 Do not use CHECK: https://chromium.googlesource.co
Jiaquan He 2017/06/22 04:30:03 Done.
+
+ gfx::ImageSkia resized_image = gfx::ImageSkiaOperations::CreateResizedImage(
+ *icon_to_scale, skia::ImageOperations::RESIZE_BEST,
+ gfx::Size(resource_size_in_dip_, resource_size_in_dip_));
+ return resized_image.GetRepresentation(scale);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// PlaystoreSearchResult
+
+PlaystoreSearchResult::PlaystoreSearchResult(
+ const std::string& launch_intent_uri,
+ const std::string& install_intent_uri,
+ const std::string& label,
+ bool is_instant_app,
+ bool is_recent,
+ const std::string& publisher_name,
+ const std::vector<uint8_t>& icon_png_data)
+ : launch_intent_uri_(launch_intent_uri),
+ install_intent_uri_(install_intent_uri),
+ label_(label),
+ is_instant_app_(is_instant_app),
+ is_recent_(is_recent),
+ publisher_name_(publisher_name),
+ icon_png_data_(icon_png_data),
+ weak_ptr_factory_(this) {
+ set_title(base::ASCIIToUTF16(label));
Luis Héctor Chávez 2017/06/16 22:24:33 I don't think there's a guarantee that this is ASC
Jiaquan He 2017/06/22 04:30:03 Done.
+ set_id(kPlayAppPrefix + crx_file::id_util::GenerateId(install_intent_uri_));
+ set_display_type(DISPLAY_TILE);
+
+ // Decode the icon
+ SkBitmap decoded_bitmap;
+ if (gfx::PNGCodec::Decode(
Luis Héctor Chávez 2017/06/16 22:24:34 I don't think it's safe to call this from the brow
Jiaquan He 2017/06/22 04:30:03 Done.
+ reinterpret_cast<const unsigned char*>(&(icon_png_data_[0])),
Luis Héctor Chávez 2017/06/16 22:24:34 nit: s/&(icon_png_data_[0])/icon_png_data_.data()/
Jiaquan He 2017/06/22 04:30:03 Done.
+ icon_png_data_.size(), &decoded_bitmap)) {
+ // Now decoded_bitmap holds an icon of its original size.
+ // We store it into decoded_icon_, from which we'll get scaled icons
+ // in the future.
+ decoded_icon_.AddRepresentation(gfx::ImageSkiaRep(
+ decoded_bitmap, ui::GetScaleForScaleFactor(ui::SCALE_FACTOR_100P)));
+
+ int resource_size_in_dip = app_list::kGridIconDimension;
+ source_ =
Luis Héctor Chávez 2017/06/16 22:24:34 You cannot hold to the created IconSource since gf
Jiaquan He 2017/06/22 04:30:03 Done.
+ new IconSource(weak_ptr_factory_.GetWeakPtr(), resource_size_in_dip);
+ gfx::Size resource_size(resource_size_in_dip, resource_size_in_dip);
+ gfx::ImageSkia icon = gfx::ImageSkia(source_, resource_size);
+ icon.EnsureRepsForSupportedScales();
+
+ SetIcon(icon);
+ }
+}
+
+PlaystoreSearchResult::~PlaystoreSearchResult() {}
+
+std::unique_ptr<SearchResult> PlaystoreSearchResult::Duplicate() const {
+ std::unique_ptr<SearchResult> result =
+ base::MakeUnique<PlaystoreSearchResult>(
+ launch_intent_uri_, install_intent_uri_, label_, is_instant_app_,
+ is_recent_, publisher_name_, icon_png_data_);
+ result->SetIcon(icon());
+ return result;
+}
+
+void PlaystoreSearchResult::Open(int event_flags) {
+ arc::mojom::AppInstance* app_instance = GET_APP_INSTANCE(LaunchIntent);
+ if (app_instance == nullptr)
+ return;
+
+ app_instance->LaunchIntent(install_intent_uri_, base::Optional<gfx::Rect>());
+}
+
+} // namespace app_list
+
+#endif

Powered by Google App Engine
This is Rietveld 408576698