CameraMetadata JNI: Move tag lookup to common utility code

Move tag ID lookup by tag name into CameraMetadata.cpp

Bug:
Change-Id: I1e0d72d08fa6405a0638ef09aa774bfdae09bb91
diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp
index f37fd78..48f6b49 100644
--- a/core/jni/android_hardware_camera2_CameraMetadata.cpp
+++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp
@@ -787,109 +787,16 @@
         // exception thrown by ScopedUtfChars
         return 0;
     }
-    size_t keyLength = strlen(key);
-
     ALOGV("%s (key = '%s')", __FUNCTION__, key);
 
-    sp<VendorTagDescriptor> vTags = VendorTagDescriptor::getGlobalVendorTagDescriptor();
-
-    SortedVector<String8> vendorSections;
-    size_t vendorSectionCount = 0;
-
-    if (vTags != NULL) {
-        vendorSections = vTags->getAllSectionNames();
-        vendorSectionCount = vendorSections.size();
-    }
-
-    // First, find the section by the longest string match
-    const char *section = NULL;
-    size_t sectionIndex = 0;
-    size_t sectionLength = 0;
-    size_t totalSectionCount = ANDROID_SECTION_COUNT + vendorSectionCount;
-    for (size_t i = 0; i < totalSectionCount; ++i) {
-
-        const char *str = (i < ANDROID_SECTION_COUNT) ? camera_metadata_section_names[i] :
-                vendorSections[i - ANDROID_SECTION_COUNT].string();
-        if (kIsDebug) {
-            ALOGV("%s: Trying to match against section '%s'", __FUNCTION__, str);
-        }
-        if (strstr(key, str) == key) { // key begins with the section name
-            size_t strLength = strlen(str);
-
-            if (kIsDebug) {
-                ALOGV("%s: Key begins with section name", __FUNCTION__);
-            }
-
-            // section name is the longest we've found so far
-            if (section == NULL || sectionLength < strLength) {
-                section = str;
-                sectionIndex = i;
-                sectionLength = strLength;
-
-                if (kIsDebug) {
-                    ALOGV("%s: Found new best section (%s)", __FUNCTION__, section);
-                }
-            }
-        }
-    }
-
-    // TODO: Make above get_camera_metadata_section_from_name ?
-
-    if (section == NULL) {
-        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
-                             "Could not find section name for key '%s')", key);
-        return 0;
-    } else {
-        ALOGV("%s: Found matched section '%s' (%zu)",
-              __FUNCTION__, section, sectionIndex);
-    }
-
-    // Get the tag name component of the key
-    const char *keyTagName = key + sectionLength + 1; // x.y.z -> z
-    if (sectionLength + 1 >= keyLength) {
-        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
-                             "Key length too short for key '%s')", key);
-        return 0;
-    }
-
-    // Match rest of name against the tag names in that section only
     uint32_t tag = 0;
-    if (sectionIndex < ANDROID_SECTION_COUNT) {
-        // Match built-in tags (typically android.*)
-        uint32_t tagBegin, tagEnd; // [tagBegin, tagEnd)
-        tagBegin = camera_metadata_section_bounds[sectionIndex][0];
-        tagEnd = camera_metadata_section_bounds[sectionIndex][1];
-
-        for (tag = tagBegin; tag < tagEnd; ++tag) {
-            const char *tagName = get_camera_metadata_tag_name(tag);
-
-            if (strcmp(keyTagName, tagName) == 0) {
-                ALOGV("%s: Found matched tag '%s' (%d)",
-                      __FUNCTION__, tagName, tag);
-                break;
-            }
-        }
-
-        if (tag == tagEnd) {
-            jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
-                                 "Could not find tag name for key '%s')", key);
-            return 0;
-        }
-    } else if (vTags != NULL) {
-        // Match vendor tags (typically com.*)
-        const String8 sectionName(section);
-        const String8 tagName(keyTagName);
-
-        status_t res = OK;
-        if ((res = vTags->lookupTag(tagName, sectionName, &tag)) != OK) {
-            jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
-                    "%s: No vendor tag matches key '%s'", __FUNCTION__, key);
-            return 0;
-        }
+    sp<VendorTagDescriptor> vTags =
+            VendorTagDescriptor::getGlobalVendorTagDescriptor();
+    status_t res = CameraMetadata::getTagFromName(key, vTags.get(), &tag);
+    if (res != OK) {
+        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+                             "Could not find tag for key '%s')", key);
     }
-
-    // TODO: Make above get_camera_metadata_tag_from_name ?
-
     return tag;
 }