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"
212279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h>
22ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#include <core_jni_helpers.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
34896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhatstatic jlong 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);
50de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    ResXMLTree* osb = new ResXMLTree();
51de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    osb->setTo(b+off, len, true);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    env->ReleaseByteArrayElements(bArray, b, 0);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
54de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski    if (osb->getError() != NO_ERROR) {
558451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return reinterpret_cast<jlong>(osb);
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
62896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhatstatic jlong android_content_XmlBlock_nativeGetStringBlock(JNIEnv* env, jobject clazz,
63896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                       jlong token)
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
65896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLTree* osb = reinterpret_cast<ResXMLTree*>(token);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
678451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
71896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return reinterpret_cast<jlong>(&osb->getStrings());
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
74896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhatstatic jlong android_content_XmlBlock_nativeCreateParseState(JNIEnv* env, jobject clazz,
75896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                          jlong token)
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
77896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLTree* osb = reinterpret_cast<ResXMLTree*>(token);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
798451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ResXMLParser* st = new ResXMLParser(*osb);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
858451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    st->restart();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
91896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return reinterpret_cast<jlong>(st);
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeNext(JNIEnv* env, jobject clazz,
95896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                             jlong token)
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
97896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ResXMLParser::END_DOCUMENT;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    do {
103896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat        ResXMLParser::event_code_t code = st->next();
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (code) {
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::START_TAG:
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 2;
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::END_TAG:
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 3;
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::TEXT:
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 4;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::START_DOCUMENT:
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 0;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::END_DOCUMENT:
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return 1;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case ResXMLParser::BAD_DOCUMENT:
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                goto bad;
117de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski            default:
118de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski                break;
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } while (true);
1218451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbad:
1238451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jniThrowException(env, "org/xmlpull/v1/XmlPullParserException",
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "Corrupt XML binary file");
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ResXMLParser::BAD_DOCUMENT;
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetNamespace(JNIEnv* env, jobject clazz,
129896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                   jlong token)
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
131896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1358451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
136896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getElementNamespaceID());
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetName(JNIEnv* env, jobject clazz,
140896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                jlong token)
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
142896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
147896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getElementNameID());
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetText(JNIEnv* env, jobject clazz,
151896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                jlong token)
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
153896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return -1;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
158896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getTextID());
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetLineNumber(JNIEnv* env, jobject clazz,
162896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                         jlong token)
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
164896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1668451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
170896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getLineNumber());
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeCount(JNIEnv* env, jobject clazz,
174896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                          jlong token)
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
176896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1788451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
182896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeCount());
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeNamespace(JNIEnv* env, jobject clazz,
186896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                                 jlong token, jint idx)
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
188896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
1908451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1938451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
194896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeNamespaceID(idx));
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeName(JNIEnv* env, jobject clazz,
198896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                         jlong token, jint idx)
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
200896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2028451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
206896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeNameID(idx));
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeResource(JNIEnv* env, jobject clazz,
210896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                             jlong token, jint idx)
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
212896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2148451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
218896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeNameResID(idx));
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeDataType(JNIEnv* env, jobject clazz,
222896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                                jlong token, jint idx)
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
224896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2268451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
230896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeDataType(idx));
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeData(JNIEnv* env, jobject clazz,
234896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                            jlong token, jint idx)
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
236896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2388451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
242896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeData(idx));
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeStringValue(JNIEnv* env, jobject clazz,
246896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                                   jlong token, jint idx)
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
248896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2508451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
254896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return static_cast<jint>(st->getAttributeValueStringID(idx));
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetAttributeIndex(JNIEnv* env, jobject clazz,
258896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                             jlong token,
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             jstring ns, jstring name)
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
261896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL || name == NULL) {
2638451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const char16_t* ns16 = NULL;
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jsize nsLen = 0;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (ns) {
2706698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert        ns16 = reinterpret_cast<const char16_t*>(env->GetStringChars(ns, NULL));
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        nsLen = env->GetStringLength(ns);
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2738451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
2746698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert    const char16_t* name16 = reinterpret_cast<const char16_t*>(
2756698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert        env->GetStringChars(name, NULL));
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    jsize nameLen = env->GetStringLength(name);
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
278896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    jint idx = static_cast<jint>(st->indexOfAttribute(ns16, nsLen, name16, nameLen));
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (ns) {
2816698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert        env->ReleaseStringChars(ns, reinterpret_cast<const jchar*>(ns16));
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2836698749dd4d4d6513b26aa9071af290b956b68a7Dan Albert    env->ReleaseStringChars(name, reinterpret_cast<const jchar*>(name16));
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return idx;
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetIdAttribute(JNIEnv* env, jobject clazz,
289896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                          jlong token)
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
291896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
2938451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfID();
298896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return idx >= 0 ? static_cast<jint>(st->getAttributeValueStringID(idx)) : -1;
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetClassAttribute(JNIEnv* env, jobject clazz,
302896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                             jlong token)
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
304896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3068451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3098451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfClass();
311896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    return idx >= 0 ? static_cast<jint>(st->getAttributeValueStringID(idx)) : -1;
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jint android_content_XmlBlock_nativeGetStyleAttribute(JNIEnv* env, jobject clazz,
315896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                             jlong token)
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
317896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3198451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t idx = st->indexOfStyle();
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (idx < 0) {
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Res_value value;
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st->getAttributeValue(idx, &value) < 0) {
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3338451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    return value.dataType == value.TYPE_REFERENCE
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        || value.dataType == value.TYPE_ATTRIBUTE
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ? value.data : 0;
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void android_content_XmlBlock_nativeDestroyParseState(JNIEnv* env, jobject clazz,
339896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                          jlong token)
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
341896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLParser* st = reinterpret_cast<ResXMLParser*>(token);
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (st == NULL) {
3438451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return;
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    delete st;
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void android_content_XmlBlock_nativeDestroy(JNIEnv* env, jobject clazz,
351896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat                                                   jlong token)
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
353896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    ResXMLTree* osb = reinterpret_cast<ResXMLTree*>(token);
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (osb == NULL) {
3558451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        jniThrowNullPointerException(env, NULL);
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return;
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    delete osb;
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration.
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
36776f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gXmlBlockMethods[] = {
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* name, signature, funcPtr */
369896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    { "nativeCreate",               "([BII)J",
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeCreate },
371896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    { "nativeGetStringBlock",       "(J)J",
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetStringBlock },
373896043d67d3ac75760bd99db8a1561e31ebee1e1Ashok Bhat    { "nativeCreateParseState",     "(J)J",
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeCreateParseState },
37532995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeDestroyParseState",    "(J)V",
37632995223a85a3b774789091d97987dfacc1e9ef3John Reck            (void*) android_content_XmlBlock_nativeDestroyParseState },
37732995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeDestroy",              "(J)V",
37832995223a85a3b774789091d97987dfacc1e9ef3John Reck            (void*) android_content_XmlBlock_nativeDestroy },
37932995223a85a3b774789091d97987dfacc1e9ef3John Reck
38032995223a85a3b774789091d97987dfacc1e9ef3John Reck    // ------------------- @FastNative ----------------------
38132995223a85a3b774789091d97987dfacc1e9ef3John Reck
38232995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeNext",                 "(J)I",
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeNext },
38432995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetNamespace",         "(J)I",
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetNamespace },
38632995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetName",              "(J)I",
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetName },
38832995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetText",              "(J)I",
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetText },
39032995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetLineNumber",        "(J)I",
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetLineNumber },
39232995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeCount",    "(J)I",
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeCount },
39432995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeNamespace","(JI)I",
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeNamespace },
39632995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeName",     "(JI)I",
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeName },
39832995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeResource", "(JI)I",
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeResource },
40032995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeDataType", "(JI)I",
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeDataType },
40232995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeData",    "(JI)I",
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeData },
40432995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeStringValue", "(JI)I",
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeStringValue },
40632995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetAttributeIndex",    "(JLjava/lang/String;Ljava/lang/String;)I",
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetAttributeIndex },
40832995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetIdAttribute",      "(J)I",
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetIdAttribute },
41032995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetClassAttribute",   "(J)I",
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetClassAttribute },
41232995223a85a3b774789091d97987dfacc1e9ef3John Reck    { "nativeGetStyleAttribute",   "(J)I",
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            (void*) android_content_XmlBlock_nativeGetStyleAttribute },
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_content_XmlBlock(JNIEnv* env)
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
418ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe    return RegisterMethodsOrDie(env,
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "android/content/res/XmlBlock", gXmlBlockMethods, NELEM(gXmlBlockMethods));
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
423