package interdroid.swan.sensors.impl;
import interdroid.swan.R;
import interdroid.swan.sensors.AbstractConfigurationActivity;
import interdroid.swan.sensors.AbstractSwanSensor;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
/**
* Sensor for phone state.
*
* @author nick <palmer@cs.vu.nl>
*
*/
public class CallSensor extends AbstractSwanSensor {
private static final String TAG = "Call Sensor";
/**
* The configuration activity for this sensor.
*
* @author nick <palmer@cs.vu.nl>
*
*/
public static class ConfigurationActivity extends
AbstractConfigurationActivity {
@Override
public final int getPreferencesXML() {
return R.xml.call_preferences;
}
}
/**
* The call state.
*/
public static final String STATE_FIELD = "call_state";
/**
* The phone number associated with the state if any.
*/
public static final String PHONE_NUMBER_FIELD = "phone_number";
/**
* The telephony manager we use.
* */
private TelephonyManager telephonyManager;
/**
* The phone state listener which gets notified on call state changed.
*/
private PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(final int state, final String incomingNumber) {
Log.d(TAG, "Call State: " + state + " " + incomingNumber);
long now = System.currentTimeMillis();
putValueTrimSize(STATE_FIELD, null, now, state);
if (incomingNumber != null && incomingNumber.length() > 0) {
putValueTrimSize(PHONE_NUMBER_FIELD, null, now, incomingNumber);
}
}
};
@Override
public final String[] getValuePaths() {
return new String[] { STATE_FIELD, PHONE_NUMBER_FIELD };
}
@Override
public final void initDefaultConfiguration(final Bundle defaults) {
}
@Override
public final void onConnected() {
SENSOR_NAME = "Call Sensor";
}
@Override
public final void register(final String id, final String valuePath,
final Bundle configuration) {
if (registeredConfigurations.size() == 1) {
telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
}
@Override
public final void unregister(final String id) {
if (registeredConfigurations.size() == 0) {
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_NONE);
}
}
@Override
public void onDestroySensor() {
super.onDestroySensor();
}
}