Power HAL PowerManagerService hookup

Use PowerHAL to set system awake/suspend state.

Change-Id: If58a6f548564ea141b68f304455997d9ff04eace
Signed-off-by: Todd Poynor <toddpoynor@google.com>
diff --git a/core/java/android/os/Power.java b/core/java/android/os/Power.java
index 5a79215..58df940 100644
--- a/core/java/android/os/Power.java
+++ b/core/java/android/os/Power.java
@@ -104,4 +104,6 @@
     }
 
     private static native void rebootNative(String reason) throws IOException ;
+
+    public static native int powerInitNative();
 }
diff --git a/core/jni/android_os_Power.cpp b/core/jni/android_os_Power.cpp
index dc16990..48845f6 100644
--- a/core/jni/android_os_Power.cpp
+++ b/core/jni/android_os_Power.cpp
@@ -15,13 +15,18 @@
 ** limitations under the License.
 */
 
+#define LOG_TAG "Power-JNI"
+
 #include "JNIHelp.h"
 #include "jni.h"
 #include "android_runtime/AndroidRuntime.h"
 #include <utils/misc.h>
+#include <hardware/power.h>
 #include <hardware_legacy/power.h>
 #include <cutils/android_reboot.h>
 
+static struct power_module *sPowerModule;
+
 namespace android
 {
 
@@ -65,7 +70,9 @@
 static int
 setScreenState(JNIEnv *env, jobject clazz, jboolean on)
 {
-    return set_screen_state(on);
+    if (sPowerModule)
+        sPowerModule->setInteractive(sPowerModule, on);
+    return 0;
 }
 
 static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
@@ -85,12 +92,26 @@
     jniThrowIOException(env, errno);
 }
 
+static int android_os_Power_init(JNIEnv *env, jobject clazz)
+{
+    status_t err = hw_get_module(POWER_HARDWARE_MODULE_ID,
+        (hw_module_t const**)&sPowerModule);
+    ALOGE_IF(err, "couldn't load %s module (%s)",
+             POWER_HARDWARE_MODULE_ID, strerror(-err));
+
+    if (!err)
+        sPowerModule->init(sPowerModule);
+
+    return err;
+}
+
 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 },
+    { "powerInitNative", "()I", (void*)android_os_Power_init },
     { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
 };
 
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index e953355..7b4372f 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -583,6 +583,7 @@
         }
         
         nativeInit();
+        Power.powerInitNative();
         synchronized (mLocks) {
             updateNativePowerStateLocked();
             // We make sure to start out with the screen on due to user activity.