Index: ui/android/resources/resource_manager.cc |
diff --git a/ui/android/resources/resource_manager.cc b/ui/android/resources/resource_manager.cc |
index 557661f74307b0de6229bf45fb387ef622a68769..38ac9e480c8aee29ec6dfab3730152ae69d3235e 100644 |
--- a/ui/android/resources/resource_manager.cc |
+++ b/ui/android/resources/resource_manager.cc |
@@ -4,9 +4,10 @@ |
#include "ui/android/resources/resource_manager.h" |
-#include "content/public/browser/android/ui_resource_provider.h" |
+#include "base/android/jni_string.h" |
#include "jni/ResourceManager_jni.h" |
#include "ui/android/resources/ui_resource_android.h" |
+#include "ui/android/resources/ui_resource_provider.h" |
#include "ui/gfx/android/java_bitmap.h" |
#include "ui/gfx/geometry/insets_f.h" |
@@ -45,8 +46,7 @@ ResourceManager* ResourceManager::FromJavaObject(jobject jobj) { |
base::android::AttachCurrentThread(), jobj)); |
} |
-ResourceManager::ResourceManager( |
- content::UIResourceProvider* ui_resource_provider) |
+ResourceManager::ResourceManager(ui::UIResourceProvider* ui_resource_provider) |
: ui_resource_provider_(ui_resource_provider) { |
JNIEnv* env = base::android::AttachCurrentThread(); |
java_obj_.Reset(env, Java_ResourceManager_create( |
@@ -65,6 +65,25 @@ base::android::ScopedJavaLocalRef<jobject> ResourceManager::GetJavaObject( |
return base::android::ScopedJavaLocalRef<jobject>(java_obj_); |
} |
+void ResourceManager::PreloadResource(ui::SystemUIResourceType type) { |
+ DCHECK_GE(type, ui::SYSTEM_UI_RESOURCE_TYPE_FIRST); |
+ DCHECK_LE(type, ui::SYSTEM_UI_RESOURCE_TYPE_LAST); |
+ |
+ PreloadResource(ui::ANDROID_RESOURCE_TYPE_SYSTEM, type); |
+} |
+ |
+cc::UIResourceId ResourceManager::GetUIResourceId( |
+ ui::SystemUIResourceType type) { |
+ DCHECK_GE(type, ui::SYSTEM_UI_RESOURCE_TYPE_FIRST); |
+ DCHECK_LE(type, ui::SYSTEM_UI_RESOURCE_TYPE_LAST); |
+ |
+ ui::ResourceManager::Resource* resource = |
+ GetResource(ui::ANDROID_RESOURCE_TYPE_SYSTEM, type); |
+ if (!resource->ui_resource) |
+ return 0; |
+ return resource->ui_resource->id(); |
+} |
+ |
ResourceManager::Resource* ResourceManager::GetResource( |
AndroidResourceType res_type, |
int res_id) { |
@@ -75,14 +94,19 @@ ResourceManager::Resource* ResourceManager::GetResource( |
if (!resource || res_type == ANDROID_RESOURCE_TYPE_DYNAMIC || |
res_type == ANDROID_RESOURCE_TYPE_DYNAMIC_BITMAP) { |
- Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(), |
- java_obj_.obj(), res_type, res_id); |
+ RequestResourceFromJava(res_type, res_id); |
resource = resources_[res_type].Lookup(res_id); |
} |
return resource; |
} |
+ResourceManager::Resource* ResourceManager::GetResource( |
+ AndroidResourceType res_type, |
+ std::string res_name) { |
+ return GetResource(res_type, GetAndroidResourceIdFromString(res_name)); |
+} |
+ |
void ResourceManager::PreloadResource(AndroidResourceType res_type, |
int res_id) { |
DCHECK_GE(res_type, ANDROID_RESOURCE_TYPE_FIRST); |
@@ -92,8 +116,12 @@ void ResourceManager::PreloadResource(AndroidResourceType res_type, |
if (resources_[res_type].Lookup(res_id)) |
return; |
- Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(), |
- java_obj_.obj(), res_type, res_id); |
+ PreloadResourceFromJava(res_type, res_id); |
+} |
+ |
+void ResourceManager::PreloadResource(AndroidResourceType res_type, |
+ std::string res_name) { |
+ PreloadResource(res_type, GetAndroidResourceIdFromString(res_name)); |
} |
void ResourceManager::OnResourceReady(JNIEnv* env, |
@@ -135,4 +163,29 @@ bool ResourceManager::RegisterResourceManager(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |
+int ResourceManager::GetAndroidResourceIdFromString(std::string res_name) { |
+ if (android_res_name_to_res_id_map_.find(res_name) == |
+ android_res_name_to_res_id_map_.end()) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ ScopedJavaLocalRef<jstring> jstring_url = |
+ base::android::ConvertUTF8ToJavaString(env, res_name); |
+ android_res_name_to_res_id_map_[res_name] = |
+ Java_ResourceManager_getAndroidResourceIdFromString( |
+ env, java_obj_.obj(), jstring_url.obj()); |
+ } |
+ return android_res_name_to_res_id_map_[res_name]; |
+} |
+ |
+void ResourceManager::PreloadResourceFromJava(AndroidResourceType res_type, |
+ int res_id) { |
+ Java_ResourceManager_preloadResource(base::android::AttachCurrentThread(), |
+ java_obj_.obj(), res_type, res_id); |
+} |
+ |
+void ResourceManager::RequestResourceFromJava(AndroidResourceType res_type, |
+ int res_id) { |
+ Java_ResourceManager_resourceRequested(base::android::AttachCurrentThread(), |
+ java_obj_.obj(), res_type, res_id); |
+} |
+ |
} // namespace ui |