| /* //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 <cutils/android_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 |
| setScreenState(JNIEnv *env, jobject clazz, jboolean on) |
| { |
| return set_screen_state(on); |
| } |
| |
| static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) |
| { |
| #ifdef HAVE_ANDROID_OS |
| android_reboot(ANDROID_RB_POWEROFF, 0, 0); |
| #else |
| sync(); |
| #endif |
| } |
| |
| static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason) |
| { |
| #ifdef HAVE_ANDROID_OS |
| if (reason == NULL) { |
| android_reboot(ANDROID_RB_RESTART, 0, 0); |
| } else { |
| const char *chars = env->GetStringUTFChars(reason, NULL); |
| android_reboot(ANDROID_RB_RESTART2, 0, (char *) chars); |
| env->ReleaseStringUTFChars(reason, chars); // In case it fails. |
| } |
| jniThrowIOException(env, errno); |
| #else |
| sync(); |
| #endif |
| } |
| |
| static JNINativeMethod method_table[] = { |
| { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock }, |
| { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock }, |
| { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout }, |
| { "setScreenState", "(Z)I", (void*)setScreenState }, |
| { "shutdown", "()V", (void*)android_os_Power_shutdown }, |
| { "rebootNative", "(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)); |
| } |
| |
| }; |