19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* //device/libs/android_runtime/android_os_SystemProperties.cpp 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** Licensed under the Apache License, Version 2.0 (the "License"); 669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** you may not use this file except in compliance with the License. 769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 969a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 1169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** Unless required by applicable law or agreed to in writing, software 1269a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** distributed under the License is distributed on an "AS IS" BASIS, 1369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott 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 18a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn#define LOG_TAG "SysPropJNI" 19a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "cutils/properties.h" 21a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn#include "utils/misc.h" 22a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn#include <utils/Log.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h" 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "android_runtime/AndroidRuntime.h" 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <nativehelper/JNIHelp.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jstring SystemProperties_getSS(JNIEnv *env, jobject clazz, 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jstring keyJ, jstring defJ) 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char* key; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char buf[PROPERTY_VALUE_MAX]; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jstring rvJ = NULL; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (keyJ == NULL) { 3969a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes jniThrowNullPointerException(env, "key must not be null."); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto error; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42d1945950451220932f70bac83408c761dcba231fMike Lockwood 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = env->GetStringUTFChars(keyJ, NULL); 44d1945950451220932f70bac83408c761dcba231fMike Lockwood 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project len = property_get(key, buf, ""); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((len <= 0) && (defJ != NULL)) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rvJ = defJ; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (len >= 0) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rvJ = env->NewStringUTF(buf); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rvJ = env->NewStringUTF(""); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 53d1945950451220932f70bac83408c761dcba231fMike Lockwood 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringUTFChars(keyJ, key); 55d1945950451220932f70bac83408c761dcba231fMike Lockwood 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecterror: 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return rvJ; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jstring SystemProperties_getS(JNIEnv *env, jobject clazz, 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jstring keyJ) 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SystemProperties_getSS(env, clazz, keyJ, NULL); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 66d1945950451220932f70bac83408c761dcba231fMike Lockwoodstatic jint SystemProperties_get_int(JNIEnv *env, jobject clazz, 67d1945950451220932f70bac83408c761dcba231fMike Lockwood jstring keyJ, jint defJ) 68d1945950451220932f70bac83408c761dcba231fMike Lockwood{ 69d1945950451220932f70bac83408c761dcba231fMike Lockwood int len; 70d1945950451220932f70bac83408c761dcba231fMike Lockwood const char* key; 71d1945950451220932f70bac83408c761dcba231fMike Lockwood char buf[PROPERTY_VALUE_MAX]; 7283e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn char* end; 73d1945950451220932f70bac83408c761dcba231fMike Lockwood jint result = defJ; 74d1945950451220932f70bac83408c761dcba231fMike Lockwood 75d1945950451220932f70bac83408c761dcba231fMike Lockwood if (keyJ == NULL) { 7669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes jniThrowNullPointerException(env, "key must not be null."); 77d1945950451220932f70bac83408c761dcba231fMike Lockwood goto error; 78d1945950451220932f70bac83408c761dcba231fMike Lockwood } 79d1945950451220932f70bac83408c761dcba231fMike Lockwood 80d1945950451220932f70bac83408c761dcba231fMike Lockwood key = env->GetStringUTFChars(keyJ, NULL); 81d1945950451220932f70bac83408c761dcba231fMike Lockwood 82d1945950451220932f70bac83408c761dcba231fMike Lockwood len = property_get(key, buf, ""); 83d1945950451220932f70bac83408c761dcba231fMike Lockwood if (len > 0) { 8483e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn result = strtol(buf, &end, 0); 8583e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn if (end == buf) { 8683e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn result = defJ; 8783e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn } 88d1945950451220932f70bac83408c761dcba231fMike Lockwood } 89d1945950451220932f70bac83408c761dcba231fMike Lockwood 90d1945950451220932f70bac83408c761dcba231fMike Lockwood env->ReleaseStringUTFChars(keyJ, key); 91d1945950451220932f70bac83408c761dcba231fMike Lockwood 92d1945950451220932f70bac83408c761dcba231fMike Lockwooderror: 93d1945950451220932f70bac83408c761dcba231fMike Lockwood return result; 94d1945950451220932f70bac83408c761dcba231fMike Lockwood} 95d1945950451220932f70bac83408c761dcba231fMike Lockwood 96d1945950451220932f70bac83408c761dcba231fMike Lockwoodstatic jlong SystemProperties_get_long(JNIEnv *env, jobject clazz, 97d1945950451220932f70bac83408c761dcba231fMike Lockwood jstring keyJ, jlong defJ) 98d1945950451220932f70bac83408c761dcba231fMike Lockwood{ 99d1945950451220932f70bac83408c761dcba231fMike Lockwood int len; 100d1945950451220932f70bac83408c761dcba231fMike Lockwood const char* key; 101d1945950451220932f70bac83408c761dcba231fMike Lockwood char buf[PROPERTY_VALUE_MAX]; 10283e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn char* end; 103d1945950451220932f70bac83408c761dcba231fMike Lockwood jlong result = defJ; 104d1945950451220932f70bac83408c761dcba231fMike Lockwood 105d1945950451220932f70bac83408c761dcba231fMike Lockwood if (keyJ == NULL) { 10669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes jniThrowNullPointerException(env, "key must not be null."); 107d1945950451220932f70bac83408c761dcba231fMike Lockwood goto error; 108d1945950451220932f70bac83408c761dcba231fMike Lockwood } 109d1945950451220932f70bac83408c761dcba231fMike Lockwood 110d1945950451220932f70bac83408c761dcba231fMike Lockwood key = env->GetStringUTFChars(keyJ, NULL); 111d1945950451220932f70bac83408c761dcba231fMike Lockwood 112d1945950451220932f70bac83408c761dcba231fMike Lockwood len = property_get(key, buf, ""); 113d1945950451220932f70bac83408c761dcba231fMike Lockwood if (len > 0) { 11483e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn result = strtoll(buf, &end, 0); 11583e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn if (end == buf) { 11683e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn result = defJ; 11783e6eb11d7ec24e7c363beccab0806989ad89ec5Dianne Hackborn } 118d1945950451220932f70bac83408c761dcba231fMike Lockwood } 119d1945950451220932f70bac83408c761dcba231fMike Lockwood 120d1945950451220932f70bac83408c761dcba231fMike Lockwood env->ReleaseStringUTFChars(keyJ, key); 121d1945950451220932f70bac83408c761dcba231fMike Lockwood 122d1945950451220932f70bac83408c761dcba231fMike Lockwooderror: 123d1945950451220932f70bac83408c761dcba231fMike Lockwood return result; 124d1945950451220932f70bac83408c761dcba231fMike Lockwood} 125d1945950451220932f70bac83408c761dcba231fMike Lockwood 126d1945950451220932f70bac83408c761dcba231fMike Lockwoodstatic jboolean SystemProperties_get_boolean(JNIEnv *env, jobject clazz, 127d1945950451220932f70bac83408c761dcba231fMike Lockwood jstring keyJ, jboolean defJ) 128d1945950451220932f70bac83408c761dcba231fMike Lockwood{ 129d1945950451220932f70bac83408c761dcba231fMike Lockwood int len; 130d1945950451220932f70bac83408c761dcba231fMike Lockwood const char* key; 131d1945950451220932f70bac83408c761dcba231fMike Lockwood char buf[PROPERTY_VALUE_MAX]; 132d1945950451220932f70bac83408c761dcba231fMike Lockwood jboolean result = defJ; 133d1945950451220932f70bac83408c761dcba231fMike Lockwood 134d1945950451220932f70bac83408c761dcba231fMike Lockwood if (keyJ == NULL) { 13569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes jniThrowNullPointerException(env, "key must not be null."); 136d1945950451220932f70bac83408c761dcba231fMike Lockwood goto error; 137d1945950451220932f70bac83408c761dcba231fMike Lockwood } 138d1945950451220932f70bac83408c761dcba231fMike Lockwood 139d1945950451220932f70bac83408c761dcba231fMike Lockwood key = env->GetStringUTFChars(keyJ, NULL); 140d1945950451220932f70bac83408c761dcba231fMike Lockwood 141d1945950451220932f70bac83408c761dcba231fMike Lockwood len = property_get(key, buf, ""); 142d1945950451220932f70bac83408c761dcba231fMike Lockwood if (len == 1) { 143d1945950451220932f70bac83408c761dcba231fMike Lockwood char ch = buf[0]; 144d1945950451220932f70bac83408c761dcba231fMike Lockwood if (ch == '0' || ch == 'n') 145d1945950451220932f70bac83408c761dcba231fMike Lockwood result = false; 146d1945950451220932f70bac83408c761dcba231fMike Lockwood else if (ch == '1' || ch == 'y') 147d1945950451220932f70bac83408c761dcba231fMike Lockwood result = true; 148d1945950451220932f70bac83408c761dcba231fMike Lockwood } else if (len > 1) { 149d1945950451220932f70bac83408c761dcba231fMike Lockwood if (!strcmp(buf, "no") || !strcmp(buf, "false") || !strcmp(buf, "off")) { 150d1945950451220932f70bac83408c761dcba231fMike Lockwood result = false; 151d1945950451220932f70bac83408c761dcba231fMike Lockwood } else if (!strcmp(buf, "yes") || !strcmp(buf, "true") || !strcmp(buf, "on")) { 152d1945950451220932f70bac83408c761dcba231fMike Lockwood result = true; 153d1945950451220932f70bac83408c761dcba231fMike Lockwood } 154d1945950451220932f70bac83408c761dcba231fMike Lockwood } 155d1945950451220932f70bac83408c761dcba231fMike Lockwood 156d1945950451220932f70bac83408c761dcba231fMike Lockwood env->ReleaseStringUTFChars(keyJ, key); 157d1945950451220932f70bac83408c761dcba231fMike Lockwood 158d1945950451220932f70bac83408c761dcba231fMike Lockwooderror: 159d1945950451220932f70bac83408c761dcba231fMike Lockwood return result; 160d1945950451220932f70bac83408c761dcba231fMike Lockwood} 161d1945950451220932f70bac83408c761dcba231fMike Lockwood 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void SystemProperties_set(JNIEnv *env, jobject clazz, 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jstring keyJ, jstring valJ) 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int err; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char* key; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char* val; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (keyJ == NULL) { 17069a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes jniThrowNullPointerException(env, "key must not be null."); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project key = env->GetStringUTFChars(keyJ, NULL); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valJ == NULL) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project val = ""; /* NULL pointer not allowed here */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project val = env->GetStringUTFChars(valJ, NULL); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18006f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project err = property_set(key, val); 18206f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringUTFChars(keyJ, key); 18406f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valJ != NULL) { 18606f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick env->ReleaseStringUTFChars(valJ, val); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18806f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick 18906f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick if (err < 0) { 19006f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick jniThrowException(env, "java/lang/RuntimeException", 19106f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick "failed to set system property"); 19206f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick } 19306f367437c88f0960ea093c99388a16d0292121dBrad Fitzpatrick} 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 195a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackbornstatic JavaVM* sVM = NULL; 196a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackbornstatic jclass sClazz = NULL; 197a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackbornstatic jmethodID sCallChangeCallbacks; 198a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn 199a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackbornstatic void do_report_sysprop_change() { 200a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn //ALOGI("Java SystemProperties: VM=%p, Clazz=%p", sVM, sClazz); 201a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn if (sVM != NULL && sClazz != NULL) { 202a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn JNIEnv* env; 203a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn if (sVM->GetEnv((void **)&env, JNI_VERSION_1_4) >= 0) { 204a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn //ALOGI("Java SystemProperties: calling %p", sCallChangeCallbacks); 205a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn env->CallStaticVoidMethod(sClazz, sCallChangeCallbacks); 206a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn } 207a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn } 208a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn} 209a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn 210a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackbornstatic void SystemProperties_add_change_callback(JNIEnv *env, jobject clazz) 211a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn{ 212a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn // This is called with the Java lock held. 213a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn if (sVM == NULL) { 214a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn env->GetJavaVM(&sVM); 215a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn } 216a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn if (sClazz == NULL) { 217a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn sClazz = (jclass) env->NewGlobalRef(clazz); 218a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn sCallChangeCallbacks = env->GetStaticMethodID(sClazz, "callChangeCallbacks", "()V"); 219a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn add_sysprop_change_callback(do_report_sysprop_change, -10000); 220a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn } 221a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn} 222a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod method_table[] = { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "native_get", "(Ljava/lang/String;)Ljava/lang/String;", 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) SystemProperties_getS }, 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "native_get", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) SystemProperties_getSS }, 228d1945950451220932f70bac83408c761dcba231fMike Lockwood { "native_get_int", "(Ljava/lang/String;I)I", 229d1945950451220932f70bac83408c761dcba231fMike Lockwood (void*) SystemProperties_get_int }, 230d1945950451220932f70bac83408c761dcba231fMike Lockwood { "native_get_long", "(Ljava/lang/String;J)J", 231d1945950451220932f70bac83408c761dcba231fMike Lockwood (void*) SystemProperties_get_long }, 232d1945950451220932f70bac83408c761dcba231fMike Lockwood { "native_get_boolean", "(Ljava/lang/String;Z)Z", 233d1945950451220932f70bac83408c761dcba231fMike Lockwood (void*) SystemProperties_get_boolean }, 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "native_set", "(Ljava/lang/String;Ljava/lang/String;)V", 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void*) SystemProperties_set }, 236a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn { "native_add_change_callback", "()V", 237a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn (void*) SystemProperties_add_change_callback }, 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_os_SystemProperties(JNIEnv *env) 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods( 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env, "android/os/SystemProperties", 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project method_table, NELEM(method_table)); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 248