19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* //device/libs/android_runtime/android_util_XmlBlock.cpp
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
58451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** Licensed under the Apache License, Version 2.0 (the "License");
68451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** you may not use this file except in compliance with the License.
78451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
98451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes**     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
118451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** Unless required by applicable law or agreed to in writing, software
128451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** distributed under the License is distributed on an "AS IS" BASIS,
138451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes** See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "XmlBlock"
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h"
218451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes#include "JNIHelp.h"
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <android_runtime/AndroidRuntime.h>
23b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/AssetManager.h>
24b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ResourceTypes.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h>
26b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <utils/misc.h>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeCreate(JNIEnv* env, jobject clazz,
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                               jbyteArray bArray,
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                               jint off, jint len)
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (bArray == NULL) {
398451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jsize bLen = env->GetArrayLength(bArray);
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (off < 0 || off >= bLen || len < 0 || len > bLen || (off+len) > bLen) {
458451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowException(env, "java/lang/IndexOutOfBoundsException", NULL);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jbyte* b = env->GetByteArrayElements(bArray, NULL);
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLTree* osb = new ResXMLTree(b+off, len, true);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    env->ReleaseByteArrayElements(bArray, b, 0);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL || osb->getError() != NO_ERROR) {
548451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)osb;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetStringBlock(JNIEnv* env, jobject clazz,
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                       jint token)
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLTree* osb = (ResXMLTree*)token;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
668451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)&osb->getStrings();
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeCreateParseState(JNIEnv* env, jobject clazz,
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          jint token)
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLTree* osb = (ResXMLTree*)token;
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
788451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = new ResXMLParser(*osb);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
848451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    st->restart();
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeNext(JNIEnv* env, jobject clazz,
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                             jint token)
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ResXMLParser::END_DOCUMENT;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    do {
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        jint code = (jint)st->next();
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (code) {
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::START_TAG:
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 2;
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::END_TAG:
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 3;
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::TEXT:
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 4;
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::START_DOCUMENT:
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 0;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::END_DOCUMENT:
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 1;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::BAD_DOCUMENT:
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                goto bad;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } while (true);
1188451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbad:
1208451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jniThrowException(env, "org/xmlpull/v1/XmlPullParserException",
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "Corrupt XML binary file");
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ResXMLParser::BAD_DOCUMENT;
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetNamespace(JNIEnv* env, jobject clazz,
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                   jint token)
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1328451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getElementNamespaceID();
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetName(JNIEnv* env, jobject clazz,
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                jint token)
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getElementNameID();
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetText(JNIEnv* env, jobject clazz,
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                jint token)
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getTextID();
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetLineNumber(JNIEnv* env, jobject clazz,
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                         jint token)
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1638451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getLineNumber();
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeCount(JNIEnv* env, jobject clazz,
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          jint token)
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1758451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeCount();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeNamespace(JNIEnv* env, jobject clazz,
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                                 jint token, jint idx)
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1878451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1908451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeNamespaceID(idx);
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeName(JNIEnv* env, jobject clazz,
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                         jint token, jint idx)
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1998451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeNameID(idx);
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeResource(JNIEnv* env, jobject clazz,
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jint token, jint idx)
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2118451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeNameResID(idx);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeDataType(JNIEnv* env, jobject clazz,
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                                jint token, jint idx)
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2238451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeDataType(idx);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeData(JNIEnv* env, jobject clazz,
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                            jint token, jint idx)
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2358451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeData(idx);
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeStringValue(JNIEnv* env, jobject clazz,
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                                   jint token, jint idx)
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2478451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return (jint)st->getAttributeValueStringID(idx);
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeIndex(JNIEnv* env, jobject clazz,
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jint token,
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jstring ns, jstring name)
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL || name == NULL) {
2608451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char16_t* ns16 = NULL;
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jsize nsLen = 0;
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (ns) {
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ns16 = env->GetStringChars(ns, NULL);
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nsLen = env->GetStringLength(ns);
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2708451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char16_t* name16 = env->GetStringChars(name, NULL);
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jsize nameLen = env->GetStringLength(name);
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jint idx = (jint)st->indexOfAttribute(ns16, nsLen, name16, nameLen);
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (ns) {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        env->ReleaseStringChars(ns, ns16);
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    env->ReleaseStringChars(name, name16);
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return idx;
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetIdAttribute(JNIEnv* env, jobject clazz,
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          jint token)
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2898451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfID();
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return idx >= 0 ? (jint)st->getAttributeValueStringID(idx) : -1;
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetClassAttribute(JNIEnv* env, jobject clazz,
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jint token)
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3028451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3058451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfClass();
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return idx >= 0 ? (jint)st->getAttributeValueStringID(idx) : -1;
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetStyleAttribute(JNIEnv* env, jobject clazz,
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jint token)
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3158451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfStyle();
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (idx < 0) {
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Res_value value;
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st->getAttributeValue(idx, &value) < 0) {
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3298451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    return value.dataType == value.TYPE_REFERENCE
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        || value.dataType == value.TYPE_ATTRIBUTE
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ? value.data : 0;
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void android_content_XmlBlock_nativeDestroyParseState(JNIEnv* env, jobject clazz,
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                          jint token)
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = (ResXMLParser*)token;
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3398451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    delete st;
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void android_content_XmlBlock_nativeDestroy(JNIEnv* env, jobject clazz,
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                   jint token)
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLTree* osb = (ResXMLTree*)token;
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
3518451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return;
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    delete osb;
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration.
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gXmlBlockMethods[] = {
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* name, signature, funcPtr */
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeCreate",               "([BII)I",
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeCreate },
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetStringBlock",       "(I)I",
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetStringBlock },
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeCreateParseState",     "(I)I",
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeCreateParseState },
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeNext",                 "(I)I",
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeNext },
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetNamespace",         "(I)I",
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetNamespace },
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetName",              "(I)I",
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetName },
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetText",              "(I)I",
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetText },
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetLineNumber",        "(I)I",
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetLineNumber },
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeCount",    "(I)I",
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeCount },
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeNamespace","(II)I",
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeNamespace },
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeName",     "(II)I",
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeName },
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeResource", "(II)I",
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeResource },
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeDataType", "(II)I",
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeDataType },
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeData",    "(II)I",
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeData },
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeStringValue", "(II)I",
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeStringValue },
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetAttributeIndex",    "(ILjava/lang/String;Ljava/lang/String;)I",
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeIndex },
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetIdAttribute",      "(I)I",
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetIdAttribute },
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetClassAttribute",   "(I)I",
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetClassAttribute },
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeGetStyleAttribute",   "(I)I",
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetStyleAttribute },
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeDestroyParseState",    "(I)V",
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeDestroyParseState },
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    { "nativeDestroy",              "(I)V",
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeDestroy },
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_content_XmlBlock(JNIEnv* env)
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return AndroidRuntime::registerNativeMethods(env,
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "android/content/res/XmlBlock", gXmlBlockMethods, NELEM(gXmlBlockMethods));
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
416