diff --git a/build.gradle b/build.gradle index e6359b3..e0deb1f 100755 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.0' } } @@ -45,14 +45,14 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.1.0' - compile 'com.android.support:recyclerview-v7:25.1.0' - compile 'com.android.support:cardview-v7:25.1.0' - compile 'com.google.android.gms:play-services-location:10.0.1' - compile 'com.google.android.gms:play-services-maps:10.0.1' - compile 'com.google.android.gms:play-services-nearby:10.0.1' - compile 'com.google.android.gms:play-services-places:10.0.1' - compile 'com.google.android.gms:play-services-awareness:10.0.1' + compile 'com.android.support:appcompat-v7:25.2.0' + compile 'com.android.support:recyclerview-v7:25.2.0' + compile 'com.android.support:cardview-v7:25.2.0' + compile 'com.google.android.gms:play-services-location:10.2.0' + compile 'com.google.android.gms:play-services-maps:10.2.0' + compile 'com.google.android.gms:play-services-nearby:10.2.0' + compile 'com.google.android.gms:play-services-places:10.2.0' + compile 'com.google.android.gms:play-services-awareness:10.2.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/activities/DataStreamActivity.java b/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java index 04e416c..881a6fe 100755 --- a/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java +++ b/src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java @@ -65,7 +65,7 @@ protected void onPause() { } @Override - public void onGeneratorUpdated(String identifier, Bundle data) { + public void onGeneratorUpdated(String identifier, long timestamp, Bundle data) { final DataStreamActivity me = this; this.runOnUiThread(new Runnable() { diff --git a/src/com/audacious_software/passive_data_kit/generators/Generator.java b/src/com/audacious_software/passive_data_kit/generators/Generator.java index abb0938..1d8835d 100755 --- a/src/com/audacious_software/passive_data_kit/generators/Generator.java +++ b/src/com/audacious_software/passive_data_kit/generators/Generator.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.database.MatrixCursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.LayoutInflater; @@ -105,6 +106,12 @@ public static String formatTimestamp(Context context, double timestamp) { public abstract List fetchPayloads(); + public Cursor queryHistory(String[] cols, String where, String[] args, String orderBy) { + Cursor c = new MatrixCursor(cols); + + return c; + } + protected int getDatabaseVersion(SQLiteDatabase db) { String where = "type = ? AND name = ?"; String[] args = { "table", Generator.TABLE_METADATA }; diff --git a/src/com/audacious_software/passive_data_kit/generators/Generators.java b/src/com/audacious_software/passive_data_kit/generators/Generators.java index 42b4cd9..fd35553 100755 --- a/src/com/audacious_software/passive_data_kit/generators/Generators.java +++ b/src/com/audacious_software/passive_data_kit/generators/Generators.java @@ -237,9 +237,17 @@ public List> activeGenerators() { return active; } + public void notifyGeneratorUpdated(String identifier, long timestamp, Bundle bundle) { + for (GeneratorUpdatedListener listener : this.mGeneratorUpdatedListeners) { + listener.onGeneratorUpdated(identifier, timestamp, bundle); + } + } + public void notifyGeneratorUpdated(String identifier, Bundle bundle) { + long timestamp = System.currentTimeMillis(); + for (GeneratorUpdatedListener listener : this.mGeneratorUpdatedListeners) { - listener.onGeneratorUpdated(identifier, bundle); + listener.onGeneratorUpdated(identifier, timestamp, bundle); } } @@ -269,6 +277,6 @@ public void removeGeneratorUpdatedListener(Generators.GeneratorUpdatedListener l } public interface GeneratorUpdatedListener { - void onGeneratorUpdated(String identifier, Bundle data); + void onGeneratorUpdated(String identifier, long timestamp, Bundle data); } } diff --git a/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java b/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java index f72cbe8..cea19b6 100755 --- a/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java +++ b/src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java @@ -171,130 +171,132 @@ public void run() { Cursor c = me.mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, where, args, CallLog.Calls.DATE); - while (c.moveToNext()) { - ContentValues values = new ContentValues(); - values.put(PhoneCalls.HISTORY_OBSERVED, c.getLong(c.getColumnIndex(CallLog.Calls.DATE))); - values.put(PhoneCalls.HISTORY_DURATION, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); - values.put(PhoneCalls.HISTORY_NUMBER, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); - values.put(PhoneCalls.HISTORY_IS_NEW, (c.getInt(c.getColumnIndex(CallLog.Calls.NEW)) != 0)); - - Bundle bundle = new Bundle(); - bundle.putLong(PhoneCalls.CALL_DATE_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DATE))); - bundle.putLong(PhoneCalls.CALL_DURATION_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); - bundle.putString(PhoneCalls.CALL_NUMBER_KEY, c.getString(c.getColumnIndex(CallLog.Calls.NUMBER))); - bundle.putBoolean(PhoneCalls.CALL_IS_NEW_KEY, (c.getInt(c.getColumnIndex(CallLog.Calls.NEW)) != 0)); - - int features = 0; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - features = c.getInt(c.getColumnIndex(CallLog.Calls.FEATURES)); - } + if (c != null) { + while (c.moveToNext()) { + ContentValues values = new ContentValues(); + values.put(PhoneCalls.HISTORY_OBSERVED, c.getLong(c.getColumnIndex(CallLog.Calls.DATE))); + values.put(PhoneCalls.HISTORY_DURATION, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); + values.put(PhoneCalls.HISTORY_NUMBER, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); + values.put(PhoneCalls.HISTORY_IS_NEW, (c.getInt(c.getColumnIndex(CallLog.Calls.NEW)) != 0)); + + Bundle bundle = new Bundle(); + bundle.putLong(PhoneCalls.CALL_DATE_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DATE))); + bundle.putLong(PhoneCalls.CALL_DURATION_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DURATION))); + bundle.putString(PhoneCalls.CALL_NUMBER_KEY, c.getString(c.getColumnIndex(CallLog.Calls.NUMBER))); + bundle.putBoolean(PhoneCalls.CALL_IS_NEW_KEY, (c.getInt(c.getColumnIndex(CallLog.Calls.NEW)) != 0)); + + int features = 0; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + features = c.getInt(c.getColumnIndex(CallLog.Calls.FEATURES)); + } - int typeInt = c.getInt(c.getColumnIndex(CallLog.Calls.TYPE)); - String type = PhoneCalls.CALL_TYPE_UNKNOWN; + int typeInt = c.getInt(c.getColumnIndex(CallLog.Calls.TYPE)); + String type = PhoneCalls.CALL_TYPE_UNKNOWN; + + switch (Build.VERSION.SDK_INT) { + case 25: + if (typeInt == CallLog.Calls.ANSWERED_EXTERNALLY_TYPE) { + type = PhoneCalls.CALL_TYPE_ANSWERED_EXTERNALLY; + } + + bundle.putBoolean(PhoneCalls.CALL_PULLED_EXTERNALLY_KEY, ((features & CallLog.Calls.FEATURES_PULLED_EXTERNALLY) == CallLog.Calls.FEATURES_PULLED_EXTERNALLY)); + + values.put(PhoneCalls.HISTORY_PULLED_EXTERNALLY, ((features & CallLog.Calls.FEATURES_PULLED_EXTERNALLY) == CallLog.Calls.FEATURES_PULLED_EXTERNALLY)); + case 24: + if (typeInt == CallLog.Calls.REJECTED_TYPE) { + type = PhoneCalls.CALL_TYPE_REJECTED; + } else if (typeInt == CallLog.Calls.BLOCKED_TYPE) { + type = PhoneCalls.CALL_TYPE_BLOCKED; + } + + bundle.putString(PhoneCalls.CALL_POST_DIAL_DIGITS_KEY, c.getString(c.getColumnIndex(CallLog.Calls.POST_DIAL_DIGITS))); + bundle.putString(PhoneCalls.CALL_VIA_NUMBER_KEY, c.getString(c.getColumnIndex(CallLog.Calls.VIA_NUMBER))); + + values.put(PhoneCalls.HISTORY_POST_DIAL_DIGITS, c.getString(c.getColumnIndex(CallLog.Calls.POST_DIAL_DIGITS))); + values.put(PhoneCalls.HISTORY_VIA_NUMBER, c.getString(c.getColumnIndex(CallLog.Calls.VIA_NUMBER))); + case 21: + if (typeInt == CallLog.Calls.VOICEMAIL_TYPE) { + type = PhoneCalls.CALL_TYPE_VOICEMAIL; + } + + bundle.putString(PhoneCalls.CALL_COUNTRY_ISO_KEY, c.getString(c.getColumnIndex(CallLog.Calls.COUNTRY_ISO))); + bundle.putLong(PhoneCalls.CALL_DATA_USAGE_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DATA_USAGE))); + bundle.putString(PhoneCalls.CALL_GEOCODED_LOCATION_KEY, c.getString(c.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION))); + bundle.putBoolean(PhoneCalls.CALL_VIDEO_KEY, ((features & CallLog.Calls.FEATURES_VIDEO) == CallLog.Calls.FEATURES_VIDEO)); + + values.put(PhoneCalls.HISTORY_COUNTRY_ISO, c.getString(c.getColumnIndex(CallLog.Calls.COUNTRY_ISO))); + values.put(PhoneCalls.HISTORY_DATA_USAGE, c.getLong(c.getColumnIndex(CallLog.Calls.DATA_USAGE))); + values.put(PhoneCalls.HISTORY_GEOCODED_LOCATION, c.getString(c.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION))); + values.put(PhoneCalls.HISTORY_VIDEO, ((features & CallLog.Calls.FEATURES_VIDEO) == CallLog.Calls.FEATURES_VIDEO)); - switch(Build.VERSION.SDK_INT) { - case 25: - if (typeInt == CallLog.Calls.ANSWERED_EXTERNALLY_TYPE) { - type = PhoneCalls.CALL_TYPE_ANSWERED_EXTERNALLY; - } - - bundle.putBoolean(PhoneCalls.CALL_PULLED_EXTERNALLY_KEY, ((features & CallLog.Calls.FEATURES_PULLED_EXTERNALLY) == CallLog.Calls.FEATURES_PULLED_EXTERNALLY)); +// bundle.putString(PhoneCalls.CALL_TRANSCRIPTION_KEY, c.getString(c.getColumnIndex(CallLog.Calls.TRANSCRIPTION))); + case 19: + switch (c.getInt(c.getColumnIndex(CallLog.Calls.NUMBER_PRESENTATION))) { + case CallLog.Calls.PRESENTATION_ALLOWED: + bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_ALLOWED); + values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_ALLOWED); + break; + case CallLog.Calls.PRESENTATION_RESTRICTED: + bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_RESTRICTED); + values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_RESTRICTED); + break; + case CallLog.Calls.PRESENTATION_PAYPHONE: + bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_PAYPHONE); + values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_PAYPHONE); + break; + case CallLog.Calls.PRESENTATION_UNKNOWN: + bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_UNKNOWN); + values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_UNKNOWN); + break; + } + case 14: + bundle.putBoolean(PhoneCalls.CALL_IS_READ_KEY, (c.getInt(c.getColumnIndex(CallLog.Calls.IS_READ)) != 0)); + values.put(PhoneCalls.HISTORY_IS_READ, (c.getInt(c.getColumnIndex(CallLog.Calls.IS_READ)) != 0)); + case 1: + if (typeInt == CallLog.Calls.INCOMING_TYPE) { + type = PhoneCalls.CALL_TYPE_INCOMING; + } else if (typeInt == CallLog.Calls.OUTGOING_TYPE) { + type = PhoneCalls.CALL_TYPE_OUTGOING; + } else if (typeInt == CallLog.Calls.MISSED_TYPE) { + type = PhoneCalls.CALL_TYPE_MISSED; + } + } - values.put(PhoneCalls.HISTORY_PULLED_EXTERNALLY, ((features & CallLog.Calls.FEATURES_PULLED_EXTERNALLY) == CallLog.Calls.FEATURES_PULLED_EXTERNALLY)); - case 24: - if (typeInt == CallLog.Calls.REJECTED_TYPE) { - type = PhoneCalls.CALL_TYPE_REJECTED; - } else if (typeInt == CallLog.Calls.BLOCKED_TYPE) { - type = PhoneCalls.CALL_TYPE_BLOCKED; - } + bundle.putString(PhoneCalls.CALL_TYPE_KEY, type); + values.put(PhoneCalls.HISTORY_CALL_TYPE, type); - bundle.putString(PhoneCalls.CALL_POST_DIAL_DIGITS_KEY, c.getString(c.getColumnIndex(CallLog.Calls.POST_DIAL_DIGITS))); - bundle.putString(PhoneCalls.CALL_VIA_NUMBER_KEY, c.getString(c.getColumnIndex(CallLog.Calls.VIA_NUMBER))); + String[] sensitiveFields = { + PhoneCalls.CALL_NUMBER_KEY, + PhoneCalls.CALL_POST_DIAL_DIGITS_KEY, + PhoneCalls.CALL_VIA_NUMBER_KEY, + }; - values.put(PhoneCalls.HISTORY_POST_DIAL_DIGITS, c.getString(c.getColumnIndex(CallLog.Calls.POST_DIAL_DIGITS))); - values.put(PhoneCalls.HISTORY_VIA_NUMBER, c.getString(c.getColumnIndex(CallLog.Calls.VIA_NUMBER))); - case 21: - if (typeInt == CallLog.Calls.VOICEMAIL_TYPE) { - type = PhoneCalls.CALL_TYPE_VOICEMAIL; + for (String field : sensitiveFields) { + if (bundle.containsKey(field)) { + bundle.putString(field, new String(Hex.encodeHex(DigestUtils.sha256(bundle.getString(field))))); } + } - bundle.putString(PhoneCalls.CALL_COUNTRY_ISO_KEY, c.getString(c.getColumnIndex(CallLog.Calls.COUNTRY_ISO))); - bundle.putLong(PhoneCalls.CALL_DATA_USAGE_KEY, c.getLong(c.getColumnIndex(CallLog.Calls.DATA_USAGE))); - bundle.putString(PhoneCalls.CALL_GEOCODED_LOCATION_KEY, c.getString(c.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION))); - bundle.putBoolean(PhoneCalls.CALL_VIDEO_KEY, ((features & CallLog.Calls.FEATURES_VIDEO) == CallLog.Calls.FEATURES_VIDEO)); - - values.put(PhoneCalls.HISTORY_COUNTRY_ISO, c.getString(c.getColumnIndex(CallLog.Calls.COUNTRY_ISO))); - values.put(PhoneCalls.HISTORY_DATA_USAGE, c.getLong(c.getColumnIndex(CallLog.Calls.DATA_USAGE))); - values.put(PhoneCalls.HISTORY_GEOCODED_LOCATION, c.getString(c.getColumnIndex(CallLog.Calls.GEOCODED_LOCATION))); - values.put(PhoneCalls.HISTORY_VIDEO, ((features & CallLog.Calls.FEATURES_VIDEO) == CallLog.Calls.FEATURES_VIDEO)); + String[] valueSensitiveFields = { + PhoneCalls.HISTORY_NUMBER, + PhoneCalls.HISTORY_POST_DIAL_DIGITS, + PhoneCalls.HISTORY_VIA_NUMBER, + }; -// bundle.putString(PhoneCalls.CALL_TRANSCRIPTION_KEY, c.getString(c.getColumnIndex(CallLog.Calls.TRANSCRIPTION))); - case 19: - switch (c.getInt(c.getColumnIndex(CallLog.Calls.NUMBER_PRESENTATION))) { - case CallLog.Calls.PRESENTATION_ALLOWED: - bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_ALLOWED); - values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_ALLOWED); - break; - case CallLog.Calls.PRESENTATION_RESTRICTED: - bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_RESTRICTED); - values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_RESTRICTED); - break; - case CallLog.Calls.PRESENTATION_PAYPHONE: - bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_PAYPHONE); - values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_PAYPHONE); - break; - case CallLog.Calls.PRESENTATION_UNKNOWN: - bundle.putString(PhoneCalls.CALL_PRESENTATION_KEY, PhoneCalls.CALL_PRESENTATION_UNKNOWN); - values.put(PhoneCalls.HISTORY_PRESENTATION, PhoneCalls.CALL_PRESENTATION_UNKNOWN); - break; + for (String field : valueSensitiveFields) { + if (values.containsKey(field)) { + values.put(field, new String(Hex.encodeHex(DigestUtils.sha256(values.getAsString(field))))); } - case 14: - bundle.putBoolean(PhoneCalls.CALL_IS_READ_KEY, (c.getInt(c.getColumnIndex(CallLog.Calls.IS_READ)) != 0)); - values.put(PhoneCalls.HISTORY_IS_READ, (c.getInt(c.getColumnIndex(CallLog.Calls.IS_READ)) != 0)); - case 1: - if (typeInt == CallLog.Calls.INCOMING_TYPE) { - type = PhoneCalls.CALL_TYPE_INCOMING; - } else if (typeInt == CallLog.Calls.OUTGOING_TYPE) { - type = PhoneCalls.CALL_TYPE_OUTGOING; - } else if (typeInt == CallLog.Calls.MISSED_TYPE) { - type = PhoneCalls.CALL_TYPE_MISSED; - } - } - - bundle.putString(PhoneCalls.CALL_TYPE_KEY, type); - values.put(PhoneCalls.HISTORY_CALL_TYPE, type); - - String[] sensitiveFields = { - PhoneCalls.CALL_NUMBER_KEY, - PhoneCalls.CALL_POST_DIAL_DIGITS_KEY, - PhoneCalls.CALL_VIA_NUMBER_KEY, - }; - - for (String field : sensitiveFields) { - if (bundle.containsKey(field)) { - bundle.putString(field, new String(Hex.encodeHex(DigestUtils.sha256(bundle.getString(field))))); } - } - String[] valueSensitiveFields = { - PhoneCalls.HISTORY_NUMBER, - PhoneCalls.HISTORY_POST_DIAL_DIGITS, - PhoneCalls.HISTORY_VIA_NUMBER, - }; + me.mDatabase.insert(PhoneCalls.TABLE_HISTORY, null, values); - for (String field : valueSensitiveFields) { - if (values.containsKey(field)) { - values.put(field, new String(Hex.encodeHex(DigestUtils.sha256(values.getAsString(field))))); - } + Generators.getInstance(me.mContext).notifyGeneratorUpdated(PhoneCalls.GENERATOR_IDENTIFIER, bundle); } - me.mDatabase.insert(PhoneCalls.TABLE_HISTORY, null, values); - - Generators.getInstance(me.mContext).notifyGeneratorUpdated(PhoneCalls.GENERATOR_IDENTIFIER, bundle); + c.close(); } - - c.close(); } if (me.mHandler != null) { 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 f00204c..12ab3b8 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 @@ -9,6 +9,7 @@ import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.database.Cursor; +import android.database.MatrixCursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; @@ -88,15 +89,15 @@ public class Location extends Generator implements GoogleApiClient.ConnectionCal private static int DATABASE_VERSION = 1; private static final String TABLE_HISTORY = "history"; - private static final String HISTORY_OBSERVED = "observed"; - private static final String HISTORY_LATITUDE = "latitude"; - private static final String HISTORY_LONGITUDE = "longitude"; - private static final String HISTORY_ALTITUDE = "altitude"; - private static final String HISTORY_BEARING = "bearing"; - private static final String HISTORY_SPEED = "speed"; - private static final String HISTORY_PROVIDER = "provider"; - private static final String HISTORY_LOCATION_TIMESTAMP = "location_timestamp"; - private static final String HISTORY_ACCURACY = "accuracy"; + public static final String HISTORY_OBSERVED = "observed"; + public static final String HISTORY_LATITUDE = "latitude"; + public static final String HISTORY_LONGITUDE = "longitude"; + public static final String HISTORY_ALTITUDE = "altitude"; + public static final String HISTORY_BEARING = "bearing"; + public static final String HISTORY_SPEED = "speed"; + public static final String HISTORY_PROVIDER = "provider"; + public static final String HISTORY_LOCATION_TIMESTAMP = "location_timestamp"; + public static final String HISTORY_ACCURACY = "accuracy"; public static Location getInstance(Context context) { if (Location.sInstance == null) { @@ -282,8 +283,6 @@ public void onConnectionFailed(ConnectionResult connectionResult) { @Override public void onLocationChanged(android.location.Location location) { - Log.e("PDK", "LOCATION CHANGED"); - if (location == null) return; @@ -552,4 +551,8 @@ public void setUpdateInterval(long interval) { this.stopGenerator(); this.startGenerator(); } + + public Cursor queryHistory(String[] cols, String where, String[] args, String orderBy) { + return this.mDatabase.query(Location.TABLE_HISTORY, cols, where, args, null, null, orderBy); + } } diff --git a/src/com/audacious_software/passive_data_kit/generators/device/ScreenState.java b/src/com/audacious_software/passive_data_kit/generators/device/ScreenState.java index 2107447..d8a7432 100755 --- a/src/com/audacious_software/passive_data_kit/generators/device/ScreenState.java +++ b/src/com/audacious_software/passive_data_kit/generators/device/ScreenState.java @@ -37,17 +37,18 @@ public class ScreenState extends Generator{ private static final String ENABLED = "com.audacious_software.passive_data_kit.generators.device.ScreenState.ENABLED"; private static final boolean ENABLED_DEFAULT = true; - private static final String STATE_DOZE = "doze"; - private static final String STATE_DOZE_SUSPEND = "doze_suspend"; - private static final String STATE_ON = "on"; - private static final String STATE_OFF = "off"; - private static final String STATE_UNKNOWN = "unknown"; + public static final String STATE_DOZE = "doze"; + public static final String STATE_DOZE_SUSPEND = "doze_suspend"; + public static final String STATE_ON = "on"; + public static final String STATE_OFF = "off"; + public static final String STATE_UNKNOWN = "unknown"; private static final String DATABASE_PATH = "pdk-screen-state.sqlite"; private static final int DATABASE_VERSION = 2; - private static final String HISTORY_OBSERVED = "observed"; - private static final String HISTORY_STATE = "state"; - private static final String TABLE_HISTORY = "history"; + + public static final String HISTORY_OBSERVED = "observed"; + public static final String HISTORY_STATE = "state"; + public static final String TABLE_HISTORY = "history"; private static ScreenState sInstance = null; @@ -439,4 +440,8 @@ public static long latestPointGenerated(Context context) { return timestamp; } + + public Cursor queryHistory(String[] cols, String where, String[] args, String orderBy) { + return this.mDatabase.query(ScreenState.TABLE_HISTORY, cols, where, args, null, null, orderBy); + } } diff --git a/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java b/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java index 863d30e..1d9a2cb 100755 --- a/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java +++ b/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java @@ -424,10 +424,9 @@ public long transmittedSize() { } @Override - public void onGeneratorUpdated(String identifier, Bundle data) { + public void onGeneratorUpdated(String identifier, long timestamp, Bundle data) { if (data.keySet().size() > 1) { // Only transmit non-empty bundles... - double now = (double) System.currentTimeMillis(); - now = now / 1000; // Convert to seconds... + timestamp = timestamp / 1000; // Convert to seconds... Generators generators = Generators.getInstance(this.mContext); @@ -438,7 +437,7 @@ public void onGeneratorUpdated(String identifier, Bundle data) { } metadata.putString(Generator.IDENTIFIER, identifier); - metadata.putDouble(Generator.TIMESTAMP, now); + metadata.putDouble(Generator.TIMESTAMP, timestamp); metadata.putString(Generator.GENERATOR, generators.getGeneratorFullName(identifier)); metadata.putString(Generator.SOURCE, generators.getSource()); metadata.putString(Generator.SOURCE, this.mUserId);