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 |