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

Unified Diff: content/browser/android/system_ui_resource_manager_impl.cc

Issue 679493002: [Android] Add a native pull-to-refresh overscroll effect (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix findbugs... Created 6 years, 1 month 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: content/browser/android/system_ui_resource_manager_impl.cc
diff --git a/content/browser/android/system_ui_resource_manager_impl.cc b/content/browser/android/system_ui_resource_manager_impl.cc
index 57ef6f2055df923e74423b881a3a6ea21f063aca..ea64c80272229acea54c4d26dbf59a2e66842519 100644
--- a/content/browser/android/system_ui_resource_manager_impl.cc
+++ b/content/browser/android/system_ui_resource_manager_impl.cc
@@ -13,6 +13,8 @@
#include "cc/resources/ui_resource_bitmap.h"
#include "content/public/browser/android/ui_resource_client_android.h"
#include "content/public/browser/android/ui_resource_provider.h"
+#include "jni/UIResources_jni.h"
+#include "skia/ext/image_operations.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPaint.h"
@@ -48,24 +50,45 @@ SkBitmap CreateOverscrollGlowLBitmap(const gfx::Size& screen_size) {
return glow_bitmap;
}
-void LoadBitmap(ui::SystemUIResourceManager::ResourceType type,
+SkBitmap LoadJavaBitmap(ui::SystemUIResourceType type, const gfx::Size& size) {
+ ScopedJavaLocalRef<jobject> jobj =
+ Java_UIResources_getBitmap(base::android::AttachCurrentThread(),
+ base::android::GetApplicationContext(), type,
+ size.width(), size.height());
+ if (jobj.is_null())
+ return SkBitmap();
+
+ SkBitmap bitmap = CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(jobj.obj()));
+ if (bitmap.isNull())
+ return bitmap;
+
+ if (size.IsEmpty())
+ return bitmap;
+
+ return skia::ImageOperations::Resize(
+ bitmap, skia::ImageOperations::RESIZE_BOX, size.width(), size.height());
+}
+
+void LoadBitmap(ui::SystemUIResourceType type,
SkBitmap* bitmap_holder,
const gfx::Size& screen_size) {
TRACE_EVENT1(
"browser", "SystemUIResourceManagerImpl::LoadBitmap", "type", type);
SkBitmap bitmap;
switch (type) {
- case ui::SystemUIResourceManager::OVERSCROLL_EDGE:
- bitmap = gfx::CreateSkBitmapFromAndroidResource(
- "android:drawable/overscroll_edge", gfx::Size(128, 12));
+ case ui::OVERSCROLL_EDGE:
+ bitmap = LoadJavaBitmap(type, gfx::Size(128, 12));
break;
- case ui::SystemUIResourceManager::OVERSCROLL_GLOW:
- bitmap = gfx::CreateSkBitmapFromAndroidResource(
- "android:drawable/overscroll_glow", gfx::Size(128, 64));
+ case ui::OVERSCROLL_GLOW:
+ bitmap = LoadJavaBitmap(type, gfx::Size(128, 64));
break;
- case ui::SystemUIResourceManager::OVERSCROLL_GLOW_L:
+ case ui::OVERSCROLL_GLOW_L:
bitmap = CreateOverscrollGlowLBitmap(screen_size);
break;
+ case ui::OVERSCROLL_REFRESH_IDLE:
+ case ui::OVERSCROLL_REFRESH_ACTIVE:
+ bitmap = LoadJavaBitmap(type, gfx::Size());
+ break;
}
bitmap.setImmutable();
*bitmap_holder = bitmap;
@@ -80,7 +103,7 @@ class SystemUIResourceManagerImpl::Entry
DCHECK(provider);
}
- virtual ~Entry() {
+ ~Entry() override {
if (id_)
provider_->DeleteUIResource(id_);
id_ = 0;
@@ -102,14 +125,14 @@ class SystemUIResourceManagerImpl::Entry
}
// content::UIResourceClient implementation.
- virtual cc::UIResourceBitmap GetBitmap(cc::UIResourceId uid,
- bool resource_lost) override {
+ cc::UIResourceBitmap GetBitmap(cc::UIResourceId uid,
+ bool resource_lost) override {
DCHECK(!bitmap_.empty());
return cc::UIResourceBitmap(bitmap_);
}
// content::UIResourceClientAndroid implementation.
- virtual void UIResourceIsInvalid() override { id_ = 0; }
+ void UIResourceIsInvalid() override { id_ = 0; }
const SkBitmap& bitmap() const { return bitmap_; }
@@ -129,19 +152,20 @@ SystemUIResourceManagerImpl::SystemUIResourceManagerImpl(
SystemUIResourceManagerImpl::~SystemUIResourceManagerImpl() {
}
-void SystemUIResourceManagerImpl::PreloadResource(ResourceType type) {
+void SystemUIResourceManagerImpl::PreloadResource(
+ ui::SystemUIResourceType type) {
GetEntry(type);
}
cc::UIResourceId SystemUIResourceManagerImpl::GetUIResourceId(
- ResourceType type) {
+ ui::SystemUIResourceType type) {
return GetEntry(type)->GetUIResourceId();
}
SystemUIResourceManagerImpl::Entry* SystemUIResourceManagerImpl::GetEntry(
- ResourceType type) {
- DCHECK_GE(type, RESOURCE_TYPE_FIRST);
- DCHECK_LE(type, RESOURCE_TYPE_LAST);
+ ui::SystemUIResourceType type) {
+ DCHECK_GE(type, ui::SYSTEM_UI_RESOURCE_TYPE_FIRST);
+ DCHECK_LE(type, ui::SYSTEM_UI_RESOURCE_TYPE_LAST);
if (!resource_map_[type]) {
resource_map_[type].reset(new Entry(ui_resource_provider_));
// Lazily build the resource.
@@ -150,7 +174,7 @@ SystemUIResourceManagerImpl::Entry* SystemUIResourceManagerImpl::GetEntry(
return resource_map_[type].get();
}
-void SystemUIResourceManagerImpl::BuildResource(ResourceType type) {
+void SystemUIResourceManagerImpl::BuildResource(ui::SystemUIResourceType type) {
DCHECK(GetEntry(type)->bitmap().empty());
// Instead of blocking the main thread, we post a task to load the bitmap.
@@ -169,10 +193,15 @@ void SystemUIResourceManagerImpl::BuildResource(ResourceType type) {
}
void SystemUIResourceManagerImpl::OnFinishedLoadBitmap(
- ResourceType type,
+ ui::SystemUIResourceType type,
SkBitmap* bitmap_holder) {
DCHECK(bitmap_holder);
GetEntry(type)->SetBitmap(*bitmap_holder);
}
+// static
+bool SystemUIResourceManagerImpl::RegisterUIResources(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698