package interdroid.swan.sensors.impl; import interdroid.swan.R; import interdroid.swan.sensors.AbstractConfigurationActivity; import interdroid.swan.sensors.AbstractSwanSensor; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import android.os.Bundle; import android.util.Log; /** * A sensor for battery temperature, level and voltage. * * @author nick <palmer@cs.vu.nl> * */ public class BatterySensor extends AbstractSwanSensor { public static final String TAG = "BatterySensor"; /** * 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.battery_preferences; } } /** * The level field. */ public static final String LEVEL_FIELD = "level"; /** * The voltage field. */ public static final String VOLTAGE_FIELD = "voltage"; /** * The temperature field. */ public static final String TEMPERATURE_FIELD = "temperature"; /** * The plugged field */ public static final String PLUGGED_FIELD = "plugged"; /** * The pluggedText field */ public static final String STATUS_TEXT_FIELD = "status_text"; /** * The receiver for battery events. */ private BroadcastReceiver batteryReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) { long now = System.currentTimeMillis(); Log.d(TAG, "New level: " + intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)); putValueTrimSize(LEVEL_FIELD, null, now, intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)); putValueTrimSize(TEMPERATURE_FIELD, null, now, intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0)); putValueTrimSize(VOLTAGE_FIELD, null, now, intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0)); putValueTrimSize(PLUGGED_FIELD, null, now, intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)); putValueTrimSize(STATUS_TEXT_FIELD, null, now, intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)); } } }; @Override public final String[] getValuePaths() { return new String[] { TEMPERATURE_FIELD, LEVEL_FIELD, VOLTAGE_FIELD, PLUGGED_FIELD, STATUS_TEXT_FIELD }; } @Override public void initDefaultConfiguration(final Bundle defaults) { } @Override public void onConnected() { SENSOR_NAME = "Battery Sensor"; } @Override public final void register(final String id, final String valuePath, final Bundle configuration) { if (registeredConfigurations.size() == 1) { registerReceiver(batteryReceiver, new IntentFilter( Intent.ACTION_BATTERY_CHANGED)); } } @Override public final void unregister(final String id) { if (registeredConfigurations.size() == 0) { unregisterReceiver(batteryReceiver); } } @Override public final void onDestroySensor() { if (registeredConfigurations.size() > 0) { unregisterReceiver(batteryReceiver); } super.onDestroySensor(); } }