diff --git a/build.gradle b/build.gradle index 53faebb..9e706f9 100755 --- a/build.gradle +++ b/build.gradle @@ -3,13 +3,16 @@ apply plugin: 'com.android.library' buildscript { repositories { jcenter() + maven { + url "https://maven.google.com" + } flatDir { dirs 'libs' } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' } } @@ -55,11 +58,11 @@ android { compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' - compile 'com.google.android.gms:play-services-location:10.2.6' - compile 'com.google.android.gms:play-services-maps:10.2.6' - compile 'com.google.android.gms:play-services-nearby:10.2.6' - compile 'com.google.android.gms:play-services-places:10.2.6' - compile 'com.google.android.gms:play-services-awareness:10.2.6' + compile 'com.google.android.gms:play-services-location:11.0.0' + compile 'com.google.android.gms:play-services-maps:11.0.0' + compile 'com.google.android.gms:play-services-nearby:11.0.0' + compile 'com.google.android.gms:play-services-places:11.0.0' + compile 'com.google.android.gms:play-services-awareness:11.0.0' compile 'com.google.maps.android:android-maps-utils:0.4' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'commons-io:commons-io:2.4' diff --git a/src/com/audacious_software/passive_data_kit/generators/device/Battery.java b/src/com/audacious_software/passive_data_kit/generators/device/Battery.java index 2806444..0cb78e6 100755 --- a/src/com/audacious_software/passive_data_kit/generators/device/Battery.java +++ b/src/com/audacious_software/passive_data_kit/generators/device/Battery.java @@ -93,6 +93,22 @@ public class Battery extends Generator { private long mCleanupInterval = (24 * 60 * 60 * 1000); private long mLastCleanup = 0; + private boolean mMonitorsVoltage = false; + private boolean mMonitorsHealth = false; + private boolean mMonitorsPlugged = false; + private boolean mMonitorsTemperature= false; + + private long mMinUpdateInterval = (5 * 60 * 1000); + + private int mLastLevel = -1; + private int mLastStatus = BatteryManager.BATTERY_STATUS_UNKNOWN; + + private int mLastHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN; + private int mLastPlugged = -1; + private int mLastVoltage = -1; + private int mLastTemperature = -1; + public long mLastUpdate = 0; + @SuppressWarnings("unused") public static String generatorIdentifier() { return Battery.GENERATOR_IDENTIFIER; @@ -121,6 +137,7 @@ private void startGenerator() { final Battery me = this; this.mReceiver = new BroadcastReceiver() { + @Override public void onReceive(final Context context, Intent intent) { if (me.mDatabase == null) { @@ -133,116 +150,168 @@ public void onReceive(final Context context, Intent intent) { me.mLastTimestamp = now; - ContentValues values = new ContentValues(); - values.put(Battery.HISTORY_OBSERVED, now); - - Bundle update = new Bundle(); - update.putLong(Battery.HISTORY_OBSERVED, now); - - switch (intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)) { - case BatteryManager.BATTERY_HEALTH_COLD: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_COLD); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_COLD); - break; - case BatteryManager.BATTERY_HEALTH_DEAD: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_DEAD); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_DEAD); - break; - case BatteryManager.BATTERY_HEALTH_GOOD: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_GOOD); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_GOOD); - break; - case BatteryManager.BATTERY_HEALTH_OVERHEAT: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_OVERHEAT); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_OVERHEAT); - break; - case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_OVER_VOLTAGE); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_OVER_VOLTAGE); - break; - case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_UNSPECIFIED_FAILURE); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_UNSPECIFIED_FAILURE); - break; - default: - values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_UNKNOWN); - update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_UNKNOWN); - break; - } + boolean emitUpdate = false; - switch (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)) { - case BatteryManager.BATTERY_PLUGGED_AC: - values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_AC); - update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_AC); - break; - case BatteryManager.BATTERY_PLUGGED_USB: - values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_USB); - update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_USB); - break; - case BatteryManager.BATTERY_PLUGGED_WIRELESS: - values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_WIRELESS); - update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_WIRELESS); - break; - default: - values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_UNKNOWN); - update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_UNKNOWN); - break; - } + int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); - switch (intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)) { - case BatteryManager.BATTERY_STATUS_CHARGING: - values.put(Battery.HISTORY_STATUS, Battery.STATUS_CHARGING); - update.putString(Battery.HISTORY_STATUS, Battery.STATUS_CHARGING); - break; - case BatteryManager.BATTERY_STATUS_DISCHARGING: - values.put(Battery.HISTORY_STATUS, Battery.STATUS_DISCHARGING); - update.putString(Battery.HISTORY_STATUS, Battery.STATUS_DISCHARGING); - break; - case BatteryManager.BATTERY_STATUS_FULL: - values.put(Battery.HISTORY_STATUS, Battery.STATUS_FULL); - update.putString(Battery.HISTORY_STATUS, Battery.STATUS_FULL); - break; - case BatteryManager.BATTERY_STATUS_NOT_CHARGING: - values.put(Battery.HISTORY_STATUS, Battery.STATUS_NOT_CHARGING); - update.putString(Battery.HISTORY_STATUS, Battery.STATUS_NOT_CHARGING); - break; - default: - values.put(Battery.HISTORY_STATUS, Battery.STATUS_UNKNOWN); - update.putString(Battery.HISTORY_STATUS, Battery.STATUS_UNKNOWN); - break; + if (level != me.mLastLevel) { + emitUpdate = true; } - values.put(Battery.HISTORY_PRESENT, intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false)); - update.putBoolean(Battery.HISTORY_PRESENT, intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false)); + int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); - values.put(Battery.HISTORY_LEVEL, intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)); - update.putInt(Battery.HISTORY_LEVEL, intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)); + if (status != me.mLastStatus) { + emitUpdate = true; + } - values.put(Battery.HISTORY_SCALE, intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)); - update.putInt(Battery.HISTORY_SCALE, intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)); + if (now - me.mLastUpdate > me.mMinUpdateInterval) { + emitUpdate = true; + } - values.put(Battery.HISTORY_TEMPERATURE, intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)); - update.putInt(Battery.HISTORY_TEMPERATURE, intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)); + int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); - values.put(Battery.HISTORY_VOLTAGE, intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1)); - update.putInt(Battery.HISTORY_VOLTAGE, intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1)); + if (me.mMonitorsHealth && health != me.mLastHealth) { + emitUpdate = true; + } - values.put(Battery.HISTORY_TECHNOLOGY, Battery.TECHNOLOGY_UNKNOWN); - update.putString(Battery.HISTORY_TECHNOLOGY, Battery.TECHNOLOGY_UNKNOWN); + int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); - me.mDatabase.insert(Battery.TABLE_HISTORY, null, values); + if (me.mMonitorsPlugged && plugged != me.mLastPlugged) { + emitUpdate = true; + } - Generators.getInstance(context).notifyGeneratorUpdated(Battery.GENERATOR_IDENTIFIER, update); + int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); - if (now - me.mLastCleanup > me.mCleanupInterval) { - me.mLastCleanup = now; + if (me.mMonitorsVoltage && voltage != me.mLastVoltage) { + emitUpdate = true; + } - long start = now - (24 * 60 * 60 * 1000); + int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); - String where = Battery.HISTORY_OBSERVED + " < ?"; - String[] args = { "" + start }; + if (me.mMonitorsTemperature && temperature != me.mLastTemperature) { + emitUpdate = true; + } - me.mDatabase.delete(Battery.TABLE_HISTORY, where, args); + if (emitUpdate) { + ContentValues values = new ContentValues(); + values.put(Battery.HISTORY_OBSERVED, now); + + Bundle update = new Bundle(); + update.putLong(Battery.HISTORY_OBSERVED, now); + + switch (health) { + case BatteryManager.BATTERY_HEALTH_COLD: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_COLD); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_COLD); + break; + case BatteryManager.BATTERY_HEALTH_DEAD: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_DEAD); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_DEAD); + break; + case BatteryManager.BATTERY_HEALTH_GOOD: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_GOOD); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_GOOD); + break; + case BatteryManager.BATTERY_HEALTH_OVERHEAT: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_OVERHEAT); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_OVERHEAT); + break; + case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_OVER_VOLTAGE); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_OVER_VOLTAGE); + break; + case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_UNSPECIFIED_FAILURE); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_UNSPECIFIED_FAILURE); + break; + default: + values.put(Battery.HISTORY_HEALTH, Battery.HEALTH_UNKNOWN); + update.putString(Battery.HISTORY_HEALTH, Battery.HEALTH_UNKNOWN); + break; + } + + switch (plugged) { + case BatteryManager.BATTERY_PLUGGED_AC: + values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_AC); + update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_AC); + break; + case BatteryManager.BATTERY_PLUGGED_USB: + values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_USB); + update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_USB); + break; + case BatteryManager.BATTERY_PLUGGED_WIRELESS: + values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_WIRELESS); + update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_WIRELESS); + break; + default: + values.put(Battery.HISTORY_PLUGGED, Battery.PLUGGED_UNKNOWN); + update.putString(Battery.HISTORY_PLUGGED, Battery.PLUGGED_UNKNOWN); + break; + } + + switch (status) { + case BatteryManager.BATTERY_STATUS_CHARGING: + values.put(Battery.HISTORY_STATUS, Battery.STATUS_CHARGING); + update.putString(Battery.HISTORY_STATUS, Battery.STATUS_CHARGING); + break; + case BatteryManager.BATTERY_STATUS_DISCHARGING: + values.put(Battery.HISTORY_STATUS, Battery.STATUS_DISCHARGING); + update.putString(Battery.HISTORY_STATUS, Battery.STATUS_DISCHARGING); + break; + case BatteryManager.BATTERY_STATUS_FULL: + values.put(Battery.HISTORY_STATUS, Battery.STATUS_FULL); + update.putString(Battery.HISTORY_STATUS, Battery.STATUS_FULL); + break; + case BatteryManager.BATTERY_STATUS_NOT_CHARGING: + values.put(Battery.HISTORY_STATUS, Battery.STATUS_NOT_CHARGING); + update.putString(Battery.HISTORY_STATUS, Battery.STATUS_NOT_CHARGING); + break; + default: + values.put(Battery.HISTORY_STATUS, Battery.STATUS_UNKNOWN); + update.putString(Battery.HISTORY_STATUS, Battery.STATUS_UNKNOWN); + break; + } + + values.put(Battery.HISTORY_PRESENT, intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false)); + update.putBoolean(Battery.HISTORY_PRESENT, intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false)); + + values.put(Battery.HISTORY_LEVEL, level); + update.putInt(Battery.HISTORY_LEVEL, level); + + values.put(Battery.HISTORY_SCALE, intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)); + update.putInt(Battery.HISTORY_SCALE, intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)); + + values.put(Battery.HISTORY_TEMPERATURE, temperature); + update.putInt(Battery.HISTORY_TEMPERATURE, temperature); + + values.put(Battery.HISTORY_VOLTAGE, voltage); + update.putInt(Battery.HISTORY_VOLTAGE, voltage); + + values.put(Battery.HISTORY_TECHNOLOGY, Battery.TECHNOLOGY_UNKNOWN); + update.putString(Battery.HISTORY_TECHNOLOGY, Battery.TECHNOLOGY_UNKNOWN); + + me.mDatabase.insert(Battery.TABLE_HISTORY, null, values); + + Generators.getInstance(context).notifyGeneratorUpdated(Battery.GENERATOR_IDENTIFIER, update); + + if (now - me.mLastCleanup > me.mCleanupInterval) { + me.mLastCleanup = now; + + long start = now - (24 * 60 * 60 * 1000); + + String where = Battery.HISTORY_OBSERVED + " < ?"; + String[] args = {"" + start}; + + me.mDatabase.delete(Battery.TABLE_HISTORY, where, args); + } + + me.mLastLevel = level; + me.mLastStatus = status; + me.mLastHealth = health; + me.mLastPlugged = plugged; + me.mLastVoltage = voltage; + me.mLastTemperature = temperature; + me.mLastUpdate = now; } } }; @@ -416,8 +485,7 @@ public String getFormattedValue(float value, AxisBase axis) { } @SuppressWarnings("unused") - public static View fetchView(ViewGroup parent) - { + public static View fetchView(ViewGroup parent) { return LayoutInflater.from(parent.getContext()).inflate(R.layout.card_generator_device_battery, parent, false); } @@ -446,4 +514,24 @@ public static long latestPointGenerated(Context context) { public Cursor queryHistory(String[] cols, String where, String[] args, String orderBy) { return this.mDatabase.query(Battery.TABLE_HISTORY, cols, where, args, null, null, orderBy); } + + public void setMonitorsVoltage(boolean monitorVoltage) { + this.mMonitorsVoltage = monitorVoltage; + } + + public void setMonitorsHealth(boolean monitorHealth) { + this.mMonitorsHealth = monitorHealth; + } + + public void setMonitorsPlugged(boolean monitorPlugged) { + this.mMonitorsPlugged = monitorPlugged; + } + + public void setMonitorsTemperature(boolean monitorTemperature) { + this.mMonitorsTemperature = monitorTemperature; + } + + public void setMinUpdateInterval(long updateInterval) { + this.mMinUpdateInterval = updateInterval; + } } diff --git a/src/com/audacious_software/passive_data_kit/generators/device/ForegroundApplication.java b/src/com/audacious_software/passive_data_kit/generators/device/ForegroundApplication.java index ca6065f..ac93f94 100755 --- a/src/com/audacious_software/passive_data_kit/generators/device/ForegroundApplication.java +++ b/src/com/audacious_software/passive_data_kit/generators/device/ForegroundApplication.java @@ -13,6 +13,7 @@ import android.os.Build; import android.os.Bundle; import android.provider.Settings; +import android.util.Log; import android.view.Display; import android.view.LayoutInflater; import android.view.View; @@ -125,6 +126,9 @@ public void onForeground(String process) { update.putLong(ForegroundApplication.HISTORY_OBSERVED, now); update.putString(ForegroundApplication.HISTORY_APPLICATION, process); update.putLong(ForegroundApplication.HISTORY_DURATION, me.mSampleInterval); + update.putBoolean(ForegroundApplication.HISTORY_SCREEN_ACTIVE, screenActive); + + Log.e("SLEEP-SIGHT", "TRANSMIT BUNDLE: " + update); Generators.getInstance(me.mContext).notifyGeneratorUpdated(ForegroundApplication.GENERATOR_IDENTIFIER, update); } diff --git a/src/com/audacious_software/passive_data_kit/generators/device/Location.java b/src/com/audacious_software/passive_data_kit/generators/device/Location.java index 8cff135..73b47cb 100755 --- a/src/com/audacious_software/passive_data_kit/generators/device/Location.java +++ b/src/com/audacious_software/passive_data_kit/generators/device/Location.java @@ -98,10 +98,10 @@ public class Location extends Generator implements GoogleApiClient.ConnectionCal private static final String ACCURACY_MODE = "com.audacious_software.passive_data_kit.generators.device.Location.ACCURACY_MODE"; - private static final int ACCURACY_BEST = 0; - private static final int ACCURACY_RANDOMIZED = 1; - private static final int ACCURACY_USER = 2; - private static final int ACCURACY_DISABLED = 3; + public static final int ACCURACY_BEST = 0; + public static final int ACCURACY_RANDOMIZED = 1; + public static final int ACCURACY_USER = 2; + public static final int ACCURACY_DISABLED = 3; private static final String ACCURACY_MODE_RANDOMIZED_RANGE = "com.audacious_software.passive_data_kit.generators.device.Location.ACCURACY_MODE_RANDOMIZED_RANGE"; private static final long ACCURACY_MODE_RANDOMIZED_RANGE_DEFAULT = 100; @@ -1021,4 +1021,22 @@ public void setUpdateInterval(long interval) { public Cursor queryHistory(String[] cols, String where, String[] args, String orderBy) { return this.mDatabase.query(Location.TABLE_HISTORY, cols, where, args, null, null, orderBy); } + + public void setAccuracyMode(int accuracyMode) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.mContext); + SharedPreferences.Editor e = prefs.edit(); + + e.putInt(Location.ACCURACY_MODE, accuracyMode); + + e.apply(); + } + + public void setRandomizationRange(long meters) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.mContext); + SharedPreferences.Editor e = prefs.edit(); + + e.putLong(Location.ACCURACY_MODE_RANDOMIZED_RANGE, meters); + + e.apply(); + } }