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.Bundle; import android.os.PowerManager; /** * A sensor for if the screen is on or off. * * @author nick <palmer@cs.vu.nl> * */ public class ScreenSensor extends AbstractSwanSensor { public static final String TAG = "ScreenSensor"; /** * 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.screen_preferences; } } /** * Is screen on field. */ public static final String IS_SCREEN_ON_FIELD = "is_screen_on"; /** * The receiver of screen information. */ private BroadcastReceiver screenReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { long now = System.currentTimeMillis(); if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { putValueTrimSize(IS_SCREEN_ON_FIELD, null, now, "false"); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { putValueTrimSize(IS_SCREEN_ON_FIELD, null, now, "true"); } } }; @Override public final String[] getValuePaths() { return new String[] { IS_SCREEN_ON_FIELD }; } @Override public void initDefaultConfiguration(final Bundle defaults) { } @Override public final void onConnected() { SENSOR_NAME = "Screen Sensor"; } @Override public final void register(final String id, final String valuePath, final Bundle configuration) { if (registeredConfigurations.size() == 1) { PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); putValueTrimSize(IS_SCREEN_ON_FIELD, null, System.currentTimeMillis(), pm.isScreenOn()); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(screenReceiver, filter); } } @Override public final void unregister(final String id) { if (registeredConfigurations.size() == 0) { unregisterReceiver(screenReceiver); } } @Override public final void onDestroySensor() { unregisterReceiver(screenReceiver); super.onDestroySensor(); } }