Home | History | Annotate | Download | only in jni
      1 /* //device/libs/android_runtime/android_os_Power.cpp
      2 **
      3 ** Copyright 2006, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #include "JNIHelp.h"
     19 #include "jni.h"
     20 #include "android_runtime/AndroidRuntime.h"
     21 #include <utils/misc.h>
     22 #include <hardware_legacy/power.h>
     23 #include <cutils/android_reboot.h>
     24 
     25 namespace android
     26 {
     27 
     28 static void
     29 acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj)
     30 {
     31     if (idObj == NULL) {
     32         jniThrowNullPointerException(env, "id is null");
     33         return ;
     34     }
     35 
     36     const char *id = env->GetStringUTFChars(idObj, NULL);
     37 
     38     acquire_wake_lock(lock, id);
     39 
     40     env->ReleaseStringUTFChars(idObj, id);
     41 }
     42 
     43 static void
     44 releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj)
     45 {
     46     if (idObj == NULL) {
     47         jniThrowNullPointerException(env, "id is null");
     48         return ;
     49     }
     50 
     51     const char *id = env->GetStringUTFChars(idObj, NULL);
     52 
     53     release_wake_lock(id);
     54 
     55     env->ReleaseStringUTFChars(idObj, id);
     56 
     57 }
     58 
     59 static int
     60 setLastUserActivityTimeout(JNIEnv *env, jobject clazz, jlong timeMS)
     61 {
     62     return set_last_user_activity_timeout(timeMS/1000);
     63 }
     64 
     65 static int
     66 setScreenState(JNIEnv *env, jobject clazz, jboolean on)
     67 {
     68     return set_screen_state(on);
     69 }
     70 
     71 static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
     72 {
     73     android_reboot(ANDROID_RB_POWEROFF, 0, 0);
     74 }
     75 
     76 static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason)
     77 {
     78     if (reason == NULL) {
     79         android_reboot(ANDROID_RB_RESTART, 0, 0);
     80     } else {
     81         const char *chars = env->GetStringUTFChars(reason, NULL);
     82         android_reboot(ANDROID_RB_RESTART2, 0, (char *) chars);
     83         env->ReleaseStringUTFChars(reason, chars);  // In case it fails.
     84     }
     85     jniThrowIOException(env, errno);
     86 }
     87 
     88 static JNINativeMethod method_table[] = {
     89     { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock },
     90     { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock },
     91     { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout },
     92     { "setScreenState", "(Z)I", (void*)setScreenState },
     93     { "shutdown", "()V", (void*)android_os_Power_shutdown },
     94     { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
     95 };
     96 
     97 int register_android_os_Power(JNIEnv *env)
     98 {
     99     return AndroidRuntime::registerNativeMethods(
    100         env, "android/os/Power",
    101         method_table, NELEM(method_table));
    102 }
    103 
    104 };
    105