Resource memory optimization.

Don't ever need the cached UTF-16 string conversions on the
device.  Don't need to create those strings, and don't need
to create the lookup array for them at all.  This requires
fixing all of the remaining places in the platform where we
interacted with the resources with the blind assumption that
the strings are UTF-16.

Change-Id: Ia0e5a150499837471e494e85b23b05fa06e0cf1d
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 32f6ecf..2c23f9d 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -586,7 +586,7 @@
     }
 
     ResTable::resource_name name;
-    if (!am->getResources().getResourceName(resid, &name)) {
+    if (!am->getResources().getResourceName(resid, true, &name)) {
         return NULL;
     }
 
@@ -594,19 +594,27 @@
     if (name.package != NULL) {
         str.setTo(name.package, name.packageLen);
     }
-    if (name.type != NULL) {
+    if (name.type8 != NULL || name.type != NULL) {
         if (str.size() > 0) {
             char16_t div = ':';
             str.append(&div, 1);
         }
-        str.append(name.type, name.typeLen);
+        if (name.type8 != NULL) {
+            str.append(String16(name.type8, name.typeLen));
+        } else {
+            str.append(name.type, name.typeLen);
+        }
     }
-    if (name.name != NULL) {
+    if (name.name8 != NULL || name.name != NULL) {
         if (str.size() > 0) {
             char16_t div = '/';
             str.append(&div, 1);
         }
-        str.append(name.name, name.nameLen);
+        if (name.name8 != NULL) {
+            str.append(String16(name.name8, name.nameLen));
+        } else {
+            str.append(name.name, name.nameLen);
+        }
     }
 
     return env->NewString((const jchar*)str.string(), str.size());
@@ -621,7 +629,7 @@
     }
 
     ResTable::resource_name name;
-    if (!am->getResources().getResourceName(resid, &name)) {
+    if (!am->getResources().getResourceName(resid, true, &name)) {
         return NULL;
     }
 
@@ -641,10 +649,14 @@
     }
 
     ResTable::resource_name name;
-    if (!am->getResources().getResourceName(resid, &name)) {
+    if (!am->getResources().getResourceName(resid, true, &name)) {
         return NULL;
     }
 
+    if (name.type8 != NULL) {
+        return env->NewStringUTF(name.type8);
+    }
+
     if (name.type != NULL) {
         return env->NewString((const jchar*)name.type, name.typeLen);
     }
@@ -661,10 +673,14 @@
     }
 
     ResTable::resource_name name;
-    if (!am->getResources().getResourceName(resid, &name)) {
+    if (!am->getResources().getResourceName(resid, true, &name)) {
         return NULL;
     }
 
+    if (name.name8 != NULL) {
+        return env->NewStringUTF(name.name8);
+    }
+
     if (name.name != NULL) {
         return env->NewString((const jchar*)name.name, name.nameLen);
     }
@@ -680,7 +696,7 @@
 {
     if (outValue == NULL) {
          jniThrowNullPointerException(env, "outValue");
-         return NULL;
+         return 0;
     }
     AssetManager* am = assetManagerForJavaObject(env, clazz);
     if (am == NULL) {