jni: use new jni functions for controlling the wakelock
authorCory Fields <theuni-nospam-@xbmc.org>
Thu, 2 May 2013 22:12:56 +0000 (18:12 -0400)
committerCory Fields <theuni-nospam-@xbmc.org>
Fri, 10 May 2013 23:37:50 +0000 (19:37 -0400)
xbmc/android/activity/XBMCApp.cpp
xbmc/android/activity/XBMCApp.h

index 001c940..dfb269c 100644 (file)
@@ -143,8 +143,7 @@ void CXBMCApp::onDestroy()
 
   if (m_wakeLock != NULL && m_activity != NULL)
   {
-    JNIEnv* env = xbmc_jnienv();
-    env->DeleteGlobalRef(m_wakeLock);
+    delete m_wakeLock;
     m_wakeLock = NULL;
   }
 }
@@ -176,7 +175,8 @@ void CXBMCApp::onCreateWindow(ANativeWindow* window)
     return;
   }
   m_window = window;
-  acquireWakeLock();
+  if (getWakeLock() &&  m_wakeLock)
+    m_wakeLock->acquire();
   if(!m_firstrun)
   {
     XBMC_SetupDisplay();
@@ -201,7 +201,9 @@ void CXBMCApp::onDestroyWindow()
     XBMC_Pause(true);
   }
 
-  releaseWakeLock();
+  if (m_wakeLock)
+    m_wakeLock->release();
+
   m_window=NULL;
 }
 
@@ -215,80 +217,14 @@ void CXBMCApp::onLostFocus()
   android_printf("%s: ", __PRETTY_FUNCTION__);
 }
 
-bool CXBMCApp::getWakeLock(JNIEnv *env)
-{
-  android_printf("%s", __PRETTY_FUNCTION__);
-  if (m_activity == NULL)
-  {
-    android_printf("  missing activity => unable to use WakeLocks");
-    return false;
-  }
-
-  if (env == NULL)
-    return false;
-
-  if (m_wakeLock == NULL)
-  {
-    jobject oActivity = m_activity->clazz;
-    jclass cActivity = env->GetObjectClass(oActivity);
-
-    // get the wake lock
-    jmethodID midActivityGetSystemService = env->GetMethodID(cActivity, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
-    jstring sPowerService = env->NewStringUTF("power"); // POWER_SERVICE
-    jobject oPowerManager = env->CallObjectMethod(oActivity, midActivityGetSystemService, sPowerService);
-
-    jclass cPowerManager = env->GetObjectClass(oPowerManager);
-    jmethodID midNewWakeLock = env->GetMethodID(cPowerManager, "newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;");
-    jstring sXbmcPackage = env->NewStringUTF("org.xbmc.xbmc");
-    jobject oWakeLock = env->CallObjectMethod(oPowerManager, midNewWakeLock, (jint)0x1a /* FULL_WAKE_LOCK */, sXbmcPackage);
-    m_wakeLock = env->NewGlobalRef(oWakeLock);
-
-    env->DeleteLocalRef(oWakeLock);
-    env->DeleteLocalRef(cPowerManager);
-    env->DeleteLocalRef(oPowerManager);
-    env->DeleteLocalRef(sPowerService);
-    env->DeleteLocalRef(sXbmcPackage);
-    env->DeleteLocalRef(cActivity);
-  }
-
-  return m_wakeLock != NULL;
-}
-
-void CXBMCApp::acquireWakeLock()
+bool CXBMCApp::getWakeLock()
 {
-  if (m_activity == NULL)
-    return;
-
-  JNIEnv* env = xbmc_jnienv();
-
-  if (!getWakeLock(env))
-  {
-    android_printf("%s: unable to acquire a WakeLock");
-    return;
-  }
-
-  jclass cWakeLock = env->GetObjectClass(m_wakeLock);
-  jmethodID midWakeLockAcquire = env->GetMethodID(cWakeLock, "acquire", "()V");
-  env->CallVoidMethod(m_wakeLock, midWakeLockAcquire);
-  env->DeleteLocalRef(cWakeLock);
-}
-
-void CXBMCApp::releaseWakeLock()
-{
-  if (m_activity == NULL)
-    return;
+  if (m_wakeLock)
+    return true;
 
-  JNIEnv* env = xbmc_jnienv();
-  if (!getWakeLock(env))
-  {
-    android_printf("%s: unable to release a WakeLock");
-    return;
-  }
+  m_wakeLock = new CJNIWakeLock(CJNIPowerManager(getSystemService("power")).newWakeLock("org.xbmc.xbmc"));
 
-  jclass cWakeLock = env->GetObjectClass(m_wakeLock);
-  jmethodID midWakeLockRelease = env->GetMethodID(cWakeLock, "release", "()V");
-  env->CallVoidMethod(m_wakeLock, midWakeLockRelease);
-  env->DeleteLocalRef(cWakeLock);
+  return true;
 }
 
 void CXBMCApp::run()
index 617e5ea..5c6bed7 100644 (file)
@@ -33,6 +33,7 @@
 #include "android/jni/Context.h"
 
 // forward delares
+class CJNIWakeLock;
 class CAESinkAUDIOTRACK;
 typedef struct _JNIEnv JNIEnv;
 
@@ -106,14 +107,12 @@ protected:
 
 private:
   static bool HasLaunchIntent(const std::string &package);
-  bool getWakeLock(JNIEnv *env);
-  void acquireWakeLock();
-  void releaseWakeLock();
+  bool getWakeLock();
   void run();
   void stop();
   void SetupEnv();
   static ANativeActivity *m_activity;
-  jobject m_wakeLock;
+  CJNIWakeLock *m_wakeLock;
   static int m_batteryLevel;  
   bool m_firstrun;
   bool m_exiting;