diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /core/jni/android_os_Power.cpp | |
parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
download | frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.zip frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.gz frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'core/jni/android_os_Power.cpp')
-rw-r--r-- | core/jni/android_os_Power.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/core/jni/android_os_Power.cpp b/core/jni/android_os_Power.cpp new file mode 100644 index 0000000..c2d75b1 --- /dev/null +++ b/core/jni/android_os_Power.cpp @@ -0,0 +1,125 @@ +/* //device/libs/android_runtime/android_os_Power.cpp +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include "JNIHelp.h" +#include "jni.h" +#include "android_runtime/AndroidRuntime.h" +#include <utils/misc.h> +#include <hardware_legacy/power.h> +#include <sys/reboot.h> + +namespace android +{ + +static void throw_NullPointerException(JNIEnv *env, const char* msg) +{ + jclass clazz; + clazz = env->FindClass("java/lang/NullPointerException"); + env->ThrowNew(clazz, msg); +} + +static void +acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj) +{ + if (idObj == NULL) { + throw_NullPointerException(env, "id is null"); + return ; + } + + const char *id = env->GetStringUTFChars(idObj, NULL); + + acquire_wake_lock(lock, id); + + env->ReleaseStringUTFChars(idObj, id); +} + +static void +releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj) +{ + if (idObj == NULL) { + throw_NullPointerException(env, "id is null"); + return ; + } + + const char *id = env->GetStringUTFChars(idObj, NULL); + + release_wake_lock(id); + + env->ReleaseStringUTFChars(idObj, id); + +} + +static int +setLastUserActivityTimeout(JNIEnv *env, jobject clazz, jlong timeMS) +{ + return set_last_user_activity_timeout(timeMS/1000); +} + +static int +setLightBrightness(JNIEnv *env, jobject clazz, jint mask, jint brightness) +{ + return set_light_brightness(mask, brightness); +} + +static int +setScreenState(JNIEnv *env, jobject clazz, jboolean on) +{ + return set_screen_state(on); +} + +static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) +{ + sync(); +#ifdef HAVE_ANDROID_OS + reboot(RB_POWER_OFF); +#endif +} + +static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason) +{ + sync(); +#ifdef HAVE_ANDROID_OS + if (reason == NULL) { + reboot(RB_AUTOBOOT); + } else { + const char *chars = env->GetStringUTFChars(reason, NULL); + __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, + LINUX_REBOOT_CMD_RESTART2, (char*) chars); + env->ReleaseStringUTFChars(reason, chars); // In case it fails. + } + jniThrowIOException(env, errno); +#endif +} + +static JNINativeMethod method_table[] = { + { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock }, + { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock }, + { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout }, + { "setLightBrightness", "(II)I", (void*)setLightBrightness }, + { "setScreenState", "(Z)I", (void*)setScreenState }, + { "shutdown", "()V", (void*)android_os_Power_shutdown }, + { "reboot", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot }, +}; + +int register_android_os_Power(JNIEnv *env) +{ + return AndroidRuntime::registerNativeMethods( + env, "android/os/Power", + method_table, NELEM(method_table)); +} + +}; |