package edu.fsu.cs.contextprovider.monitor;
import java.util.Date;
import java.util.Set;
import net.smart_entity.EntityManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.os.Bundle;
import android.util.Log;
/**
* A BroadcastReceiver that listens for relevantedu.fsu.cs.contextprovider. system updates and saves them
* to the content provider.
*/
public class SystemMonitor extends BroadcastReceiver {
private static final String TAG = "SystemBroadcastMonitor";
private boolean DEBUG = true;
// system monitor status
private static long userLastPresent = 0;
private static boolean powerPlugged = false;
private static boolean umsPlugged = false;
private static boolean batteryLow = false;
private static int batteryLevel = 0;
private static long batteryLastPlugged = 0;
private static int signalLevel = 0;
EntityManager entityManager;
// direct user/device interaction
private static String SCREEN_OFF = "android.intent.action.SCREEN_OFF";
private static String SCREEN_ON = "android.intent.action.SCREEN_ON";
private static String USER_PRESENT = "android.intent.action.USER_PRESENT";
// power intents/connections
private static String BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
private static String BATTERY_LOW = "android.intent.action.BATTERY_LOW";
private static String BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
private static String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
private static String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
private static String UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
private static String UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
// private static String HEADSET_PLUG = "android.intent.action.HEADSET_PLUG";
// private static String DOCK_EVENT = "android.intent.action.DOCK_EVENT";
// private static String MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
// private static String CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON";
// private static String INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
// private static String AIRPLANE_MODE = "android.intent.action.AIRPLANE_MODE";
// private static String ALARM_CHANGED = "android.intent.action.ALARM_CHANGED";
// private static String CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED";
// private static String LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
//
// // date/time intents
// private static String TIME_TICK = "android.intent.action.TIME_TICK";
// private static String TIME_SET = "android.intent.action.TIME_SET";
// private static String DATE_CHANGED = "android.intent.action.DATE_CHANGED";
// private static String TIMEZONE_CHANGED = "android.intent.action.TIMEZONE_CHANGED";
// services
// private static String SYNC_STATE_CHANGED = "android.intent.action.SYNC_STATE_CHANGED";
// private static String GTALK_CONNECTED = "android.intent.action.GTALK_CONNECTED";
// private static String GTALK_DISCONNECTED = "android.intent.action.GTALK_DISCONNECTED";
// private static String PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
// private static String NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
// actual system intents
// private static String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
// private static String CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
// private static String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";
// private static String ACTION_REQUEST_SHUTDOWN = "android.intent.action.ACTION_REQUEST_SHUTDOWN";
// private static String REBOOT = "android.intent.action.REBOOT";
// private static String REMOTE_INTENT = "android.intent.action.REMOTE_INTENT";
// private static String PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED";
// application intents
// private static String PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
// private static String PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
// private static String PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
// private static String PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
// private static String PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
// private static String PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
// private static String PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
// storage intents
// private static String DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW";
// private static String DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK";
// private static String MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
// private static String MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
// private static String MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
// private static String MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING";
// private static String MEDIA_NOFS = "android.intent.action.MEDIA_NOFS";
// private static String MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED";
// private static String MEDIA_SHARED = "android.intent.action.MEDIA_SHARED";
// private static String MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
// private static String MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
// private static String MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
// private static String MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED";
// private static String MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED";
// private static String MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FILE";
// non-system system intents
private static String WIFI_STATE_CHANGED = "android.net.wifi.WIFI_STATE_CHANGED";
private static String BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
private static String BT_STATE_CHANGED = "android.bluetooth.adapter.action.STATE_CHANGED";
private static String RINGER_MODE_CHANGED = "android.media.RINGER_MODE_CHANGED";
private static String SYNC_CONN_STATUS_CHANGED = "com.android.sync.SYNC_CONN_STATUS_CHANGED";
private static String state;
private static String SSID;
private static String signal;
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) {
Log.d(TAG, "B/C intent=" + intent);
}
String intentName = intent.getAction();
Bundle extras = intent.getExtras();
if (intentName == USER_PRESENT || intentName == SCREEN_ON || intentName == SCREEN_OFF)
{
userLastPresent = System.currentTimeMillis();
}
else if (intentName == ACTION_POWER_CONNECTED)
{
powerPlugged = true;
}
else if (intentName == UMS_CONNECTED)
{
umsPlugged = true;
}
else if (intentName == ACTION_POWER_DISCONNECTED)
{
powerPlugged = false;
batteryLastPlugged = System.currentTimeMillis();
}
else if (intentName == UMS_DISCONNECTED)
{
umsPlugged = false;
}
else if (intentName == BATTERY_CHANGED)
{
batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
}
else if (intentName == BATTERY_LOW)
{
batteryLow = true;
}
else if (intentName == BATTERY_OKAY)
{
batteryLow = false;
}
}
private static final String extrasToString(Bundle extras) {
if (extras == null)
return "";
String val = "";
Set<String> keys = extras.keySet();
for (String key : keys)
val += key + "=" + extras.get(key);
return val;
}
public static long getUserLastPresent() {
return userLastPresent;
}
public static Date getUserLastPresentDate() {
return new Date(userLastPresent);
}
public static void setUserLastPresent(long userLastPresent) {
SystemMonitor.userLastPresent = userLastPresent;
}
public static boolean isBatteryPlugged() {
return powerPlugged;
}
public static String isBatteryPluggedString() {
return String.valueOf(powerPlugged);
}
public static boolean isUMSPlugged() {
return umsPlugged;
}
public static String isUMSPluggedString() {
return String.valueOf(umsPlugged);
}
public static void setBatteryPlugged(boolean batteryPlugged) {
SystemMonitor.powerPlugged = batteryPlugged;
}
public static boolean isBatteryLow() {
return batteryLow;
}
public static void setBatteryLow(boolean batteryLow) {
SystemMonitor.batteryLow = batteryLow;
}
public static int getBatteryLevel() {
return batteryLevel;
}
public static void setBatteryLevel(int batteryLevel) {
SystemMonitor.batteryLevel = batteryLevel;
}
public static long getBatteryLastPlugged() {
return batteryLastPlugged;
}
public static Date getBatteryLastPluggedDate() {
return new Date(batteryLastPlugged);
}
public static void setBatteryLastPlugged(long batteryLastPlugged) {
SystemMonitor.batteryLastPlugged = batteryLastPlugged;
}
public static String getState() {
return state;
}
public static String getSSID() {
return SSID;
}
public static Integer getSignal() {
return signalLevel;
}
}