/**
* Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
* This file is part of CSipSimple.
*
* CSipSimple is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* If you own a pjsip commercial license you can also redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License
* as an android library.
*
* CSipSimple is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CSipSimple. If not, see <http://www.gnu.org/licenses/>.
*/
/**
*
*/
package com.csipsimple.pjsip.earlylock;
import android.content.Context;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import com.csipsimple.api.SipProfile;
import com.csipsimple.pjsip.PjSipService.PjsipModule;
import com.csipsimple.utils.Log;
import org.pjsip.pjsua.EarlyLockCallback;
import org.pjsip.pjsua.pjsua;
/**
* @author r3gis3r
*/
public class EarlyLockModule implements PjsipModule {
private static final String THIS_FILE = "EarlyLockModule";
private EarlyLocker locker;
private PowerManager pm;
/*
* (non-Javadoc)
* @see
* com.csipsimple.pjsip.PjSipService.PjsipModule#setContext(android.content
* .Context)
*/
@Override
public void setContext(Context ctxt) {
pm = (PowerManager) ctxt.getSystemService(
Context.POWER_SERVICE);
}
/*
* (non-Javadoc)
* @see com.csipsimple.pjsip.PjSipService.PjsipModule#onBeforeStartPjsip()
*/
@Override
public void onBeforeStartPjsip() {
pjsua.mod_earlylock_init();
locker = new EarlyLocker();
pjsua.mod_earlylock_set_callback(locker);
}
/*
* (non-Javadoc)
* @see com.csipsimple.pjsip.PjSipService.PjsipModule#
* onBeforeAccountStartRegistration(int, com.csipsimple.api.SipProfile)
*/
@Override
public void onBeforeAccountStartRegistration(int pjId, SipProfile acc) {
// Nothing to do here
}
private class WorkLocker extends Thread {
private final long lockTime;
private WakeLock wl;
WorkLocker(long time) {
lockTime = time;
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.csipsimple.earlylock");
wl.acquire();
}
/*
* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
try {
Log.d(THIS_FILE, "We entered a partial early lock");
sleep(lockTime);
} catch (InterruptedException e) {
Log.e(THIS_FILE, "Unable to lock");
}
wl.release();
}
}
private class EarlyLocker extends EarlyLockCallback {
public void on_create_early_lock() {
WorkLocker wl = new WorkLocker(2000);
wl.start();
}
}
}