if (m_wakeLock != NULL && m_activity != NULL)
{
- JNIEnv* env = xbmc_jnienv();
- env->DeleteGlobalRef(m_wakeLock);
+ delete m_wakeLock;
m_wakeLock = NULL;
}
}
return;
}
m_window = window;
- acquireWakeLock();
+ if (getWakeLock() && m_wakeLock)
+ m_wakeLock->acquire();
if(!m_firstrun)
{
XBMC_SetupDisplay();
XBMC_Pause(true);
}
- releaseWakeLock();
+ if (m_wakeLock)
+ m_wakeLock->release();
+
m_window=NULL;
}
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()