{"sha":"8b8549dd8140e660a4f3fedac51629cbadc425aa","node_id":"MDY6Q29tbWl0NTQzNTAxMzE6OGI4NTQ5ZGQ4MTQwZTY2MGE0ZjNmZWRhYzUxNjI5Y2JhZGM0MjVhYQ==","commit":{"author":{"name":"Chris J. Karr","email":"chris@audacious-software.com","date":"2019-01-01T21:07:26Z"},"committer":{"name":"Chris J. Karr","email":"chris@audacious-software.com","date":"2019-01-01T21:07:26Z"},"message":"Merge branch 'master' of https://github.com/audaciouscode/PassiveDataKit-Android","tree":{"sha":"8e17628aa0f99aa5d970f330445f1faa0b044923","url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/git/trees/8e17628aa0f99aa5d970f330445f1faa0b044923"},"url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/git/commits/8b8549dd8140e660a4f3fedac51629cbadc425aa","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/8b8549dd8140e660a4f3fedac51629cbadc425aa","html_url":"https://github.com/audacious-software/PassiveDataKit-Android/commit/8b8549dd8140e660a4f3fedac51629cbadc425aa","comments_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/8b8549dd8140e660a4f3fedac51629cbadc425aa/comments","author":{"login":"audaciouscode","id":1141048,"node_id":"MDQ6VXNlcjExNDEwNDg=","avatar_url":"https://avatars.githubusercontent.com/u/1141048?v=4","gravatar_id":"","url":"https://api.github.com/users/audaciouscode","html_url":"https://github.com/audaciouscode","followers_url":"https://api.github.com/users/audaciouscode/followers","following_url":"https://api.github.com/users/audaciouscode/following{/other_user}","gists_url":"https://api.github.com/users/audaciouscode/gists{/gist_id}","starred_url":"https://api.github.com/users/audaciouscode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/audaciouscode/subscriptions","organizations_url":"https://api.github.com/users/audaciouscode/orgs","repos_url":"https://api.github.com/users/audaciouscode/repos","events_url":"https://api.github.com/users/audaciouscode/events{/privacy}","received_events_url":"https://api.github.com/users/audaciouscode/received_events","type":"User","site_admin":false},"committer":{"login":"audaciouscode","id":1141048,"node_id":"MDQ6VXNlcjExNDEwNDg=","avatar_url":"https://avatars.githubusercontent.com/u/1141048?v=4","gravatar_id":"","url":"https://api.github.com/users/audaciouscode","html_url":"https://github.com/audaciouscode","followers_url":"https://api.github.com/users/audaciouscode/followers","following_url":"https://api.github.com/users/audaciouscode/following{/other_user}","gists_url":"https://api.github.com/users/audaciouscode/gists{/gist_id}","starred_url":"https://api.github.com/users/audaciouscode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/audaciouscode/subscriptions","organizations_url":"https://api.github.com/users/audaciouscode/orgs","repos_url":"https://api.github.com/users/audaciouscode/repos","events_url":"https://api.github.com/users/audaciouscode/events{/privacy}","received_events_url":"https://api.github.com/users/audaciouscode/received_events","type":"User","site_admin":false},"parents":[{"sha":"16aa26c7c8f735fdf4786a6c9b2d72832065b972","url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/16aa26c7c8f735fdf4786a6c9b2d72832065b972","html_url":"https://github.com/audacious-software/PassiveDataKit-Android/commit/16aa26c7c8f735fdf4786a6c9b2d72832065b972"},{"sha":"29982010f0aaf0df8bf6191d2e72eff292f61076","url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/29982010f0aaf0df8bf6191d2e72eff292f61076","html_url":"https://github.com/audacious-software/PassiveDataKit-Android/commit/29982010f0aaf0df8bf6191d2e72eff292f61076"}],"stats":{"total":541,"additions":387,"deletions":154},"files":[{"sha":"781987c43d8288249ccb9f9cd28408da4bea8001","filename":".travis.yml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/.travis.yml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/.travis.yml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/.travis.yml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -7,7 +7,7 @@ before_install:\n - unzip gradle-4.6-bin.zip\r\n - export GRADLE_HOME=$PWD/gradle-4.6\r\n - export PATH=$GRADLE_HOME/bin:$PATH\r\n- - yes | sdkmanager \"platforms;android-27\"\r\n+ - yes | sdkmanager \"platforms;android-28\"\r\n - ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk -a --no-ui --filter tool,platform-tool,build-tools-28.0.3\r\n \r\n script:\r"},{"sha":"cf176f178bf3cfdff41bb2c6ed01fa799f564bb1","filename":"AndroidManifest.xml","status":"modified","additions":5,"deletions":1,"changes":6,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/AndroidManifest.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/AndroidManifest.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/AndroidManifest.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -37,7 +37,11 @@\n \r\n \r\n \r\n- \r\n+ \r\n+ \r\n+ \r\n+ \r\n+ \r\n \r\n \r\n \r"},{"sha":"970d61000e7ce0048c727ff2cf3d541079067153","filename":"build.gradle","status":"modified","additions":12,"deletions":6,"changes":18,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/build.gradle","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/build.gradle","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/build.gradle?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -59,22 +59,28 @@ android {\n androidTest.setRoot('tests')\r\n }\r\n \r\n+ lintOptions {\r\n+ abortOnError false\r\n+ }\r\n+\r\n dependencies {\r\n api fileTree(dir: 'libs', include: ['*.jar'])\r\n // testCompile 'junit:junit:4.12'\r\n- api 'com.android.support:appcompat-v7:28.0.0'\r\n- api 'com.android.support:recyclerview-v7:28.0.0'\r\n- api 'com.android.support:support-media-compat:28.0.0'\r\n- api 'com.android.support:support-v4:28.0.0'\r\n- api 'com.android.support:cardview-v7:28.0.0'\r\n- api 'com.android.support:customtabs:28.0.0'\r\n+ api 'androidx.appcompat:appcompat:1.0.2'\r\n+ api 'androidx.recyclerview:recyclerview:1.0.0'\r\n+ api 'androidx.media:media:1.0.0'\r\n+ api 'androidx.legacy:legacy-support-v4:1.0.0'\r\n+ api 'androidx.cardview:cardview:1.0.0'\r\n+ api 'androidx.browser:browser:1.0.0'\r\n api 'com.google.android.gms:play-services-location:16.0.0'\r\n api 'com.google.android.gms:play-services-maps:16.0.0'\r\n api 'com.google.android.gms:play-services-nearby:16.0.0'\r\n api 'com.google.android.gms:play-services-places:16.0.0'\r\n api 'com.google.android.gms:play-services-awareness:16.0.0'\r\n api 'com.google.android.gms:play-services-fitness:16.0.1'\r\n api 'com.google.android.gms:play-services-auth:16.0.1'\r\n+ api 'com.google.firebase:firebase-core:16.0.6'\r\n+ api 'com.google.firebase:firebase-messaging:17.3.4'\r\n api 'com.google.maps.android:android-maps-utils:0.4'\r\n api 'com.squareup.okhttp3:okhttp:3.11.0'\r\n api 'commons-io:commons-io:2.6'\r"},{"sha":"80121f9d8aa41d05213c046400075179bd9ead82","filename":"res/layout/card_diagnostic_action.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_diagnostic_action.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_diagnostic_action.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_diagnostic_action.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"4cd10f1da5483ccad30ad16bfde1b0f15787684b","filename":"res/layout/card_generator_app_event.xml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_app_event.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_app_event.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_app_event.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n- \r\n+ \r\n \r\n \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"0f42de7832369cd33433a2b227828192777e8d5b","filename":"res/layout/card_generator_daydream_vr_controller.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_daydream_vr_controller.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_daydream_vr_controller.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_daydream_vr_controller.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\"\r\n android:layout_margin=\"8dp\">\r\n- \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"b96442ad81bd218d4a8ff48e03b51e9ee94471d6","filename":"res/layout/card_generator_device_battery.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_device_battery.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_device_battery.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_device_battery.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"2933f96ca4f480130cbb97aa7d8c5aae7b778dac","filename":"res/layout/card_generator_diagnostics_system_status.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_diagnostics_system_status.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_diagnostics_system_status.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_diagnostics_system_status.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"750e854c921620f47230725a34996594b165b0f9","filename":"res/layout/card_generator_fitbit.xml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_fitbit.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_fitbit.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_fitbit.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n tools:ignore=\"ContentDescription\"\r\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n- \r\n- \r\n+ \r\n \r\n \r\n- \r\n+ \r\n \r"},{"sha":"6df9a8f83b7bab6c9713bc3d0a75e3daaaa115a8","filename":"res/layout/card_generator_foreground_application.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_foreground_application.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_foreground_application.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_foreground_application.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"0f42de7832369cd33433a2b227828192777e8d5b","filename":"res/layout/card_generator_generic.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_generic.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_generic.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_generic.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\"\r\n android:layout_margin=\"8dp\">\r\n- \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"682d6ea461ba536713b715e32cca8ce1062fe049","filename":"res/layout/card_generator_location_google.xml","status":"modified","additions":3,"deletions":3,"changes":6,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_location_google.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_location_google.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_location_google.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n- \r\n -->\r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"5fe1fe10320af892af0a6797e6ac7b484619a3ce","filename":"res/layout/card_generator_microsoft_band.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_microsoft_band.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_microsoft_band.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_microsoft_band.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n tools:ignore=\"ContentDescription\"\r\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"5350f9477e9029a074fbdd163b3352a3de1d5530","filename":"res/layout/card_generator_nokia_health_device.xml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_nokia_health_device.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_nokia_health_device.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_nokia_health_device.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n tools:ignore=\"ContentDescription\"\r\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n- \r\n- \r\n+ \r\n \r\n \r\n- \r\n+ \r\n \r"},{"sha":"d4dad61b0f6ad9d830b3ac8ce6fbf7a46bd6bdfa","filename":"res/layout/card_generator_phone_calls.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_phone_calls.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_phone_calls.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_phone_calls.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"b817f81f7ecddcdd4686d5746e750966b9173ada","filename":"res/layout/card_generator_screen_state.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_screen_state.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_screen_state.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_screen_state.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"7f6f720f3c462490dadc8c2aa2c6ff03554a54f9","filename":"res/layout/card_generator_sensors_accelerometer.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_sensors_accelerometer.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_sensors_accelerometer.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_sensors_accelerometer.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"02362e1873bbcc40e55c34a80b0bc9cc3f119f66","filename":"res/layout/card_generator_sensors_ambient_light.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_sensors_ambient_light.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_sensors_ambient_light.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_sensors_ambient_light.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"c68f6bedc07eed78c0e463a315257f13adcc2de0","filename":"res/layout/card_generator_text_messages.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_text_messages.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_text_messages.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_text_messages.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"0c66932e788fe8bc13f27b9990895cdcda906c2c","filename":"res/layout/card_generator_time_of_day.xml","status":"modified","additions":2,"deletions":2,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_time_of_day.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_time_of_day.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_time_of_day.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -6,7 +6,7 @@\n android:orientation=\"vertical\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n \r\n \r\n- \r\n+ \r\n \n\\ No newline at end of file"},{"sha":"ae67b8162c1e7a71dff81abb39798d56e9775254","filename":"res/layout/card_generator_withings_device.xml","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_withings_device.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Fcard_generator_withings_device.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Fcard_generator_withings_device.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,7 +5,7 @@\n tools:ignore=\"ContentDescription\"\r\n android:orientation=\"vertical\" android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\">\r\n- \r\n- \r\n- \r\n+ \r\n \r\n \r\n- \r\n+ \r\n \r"},{"sha":"eb803b0bbf247ad059c8c978bd4f45ffc790bfe4","filename":"res/layout/layout_data_disclosure_pdk.xml","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Flayout_data_disclosure_pdk.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/res%2Flayout%2Flayout_data_disclosure_pdk.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Flayout%2Flayout_data_disclosure_pdk.xml?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -20,7 +20,7 @@\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"0dp\"\r\n android:layout_weight=\"1\">\r\n- \r\n-\r\n- payload = new HashMap<>();\r\n+ payload.put(\"token\", token);\r\n+\r\n+ Logger.getInstance(this.mContext).log(\"pdk-firebase-token\", payload);\r\n+ }\r\n+ }\r\n+ }\r\n+\r\n private static class PassiveDataKitHolder {\r\n @SuppressLint(\"StaticFieldLeak\")\r\n public static final PassiveDataKit instance = new PassiveDataKit();\r"},{"sha":"3ce34cddbe1a84f56157448c217658275db7f5b8","filename":"src/com/audacious_software/passive_data_kit/PassiveDataKitApplication.java","status":"added","additions":5,"deletions":0,"changes":5,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2FPassiveDataKitApplication.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2FPassiveDataKitApplication.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2FPassiveDataKitApplication.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -0,0 +1,5 @@\n+package com.audacious_software.passive_data_kit;\r\n+\r\n+public interface PassiveDataKitApplication {\r\n+ void doBackgroundWork();\r\n+}\r"},{"sha":"afcba09b2f24968bb5f5aecae115315025c4cbc4","filename":"src/com/audacious_software/passive_data_kit/activities/DataDisclosureActivity.java","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureActivity.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -1,15 +1,16 @@\n package com.audacious_software.passive_data_kit.activities;\r\n \r\n import android.os.Bundle;\r\n-import android.support.v7.app.AppCompatActivity;\r\n-import android.support.v7.widget.LinearLayoutManager;\r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.MenuItem;\r\n import android.widget.FrameLayout;\r\n \r\n import com.audacious_software.passive_data_kit.activities.generators.GeneratorsAdapter;\r\n import com.audacious_software.pdk.passivedatakit.R;\r\n \r\n+import androidx.appcompat.app.AppCompatActivity;\r\n+import androidx.recyclerview.widget.LinearLayoutManager;\r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n public class DataDisclosureActivity extends AppCompatActivity {\r\n @SuppressWarnings(\"ConstantConditions\")\r\n protected void onCreate(Bundle savedInstanceState) {\r"},{"sha":"9b69032d966c7d44784082f773a7eb9f05ac55c5","filename":"src/com/audacious_software/passive_data_kit/activities/DataDisclosureDetailActivity.java","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureDetailActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureDetailActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataDisclosureDetailActivity.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -3,8 +3,6 @@\n import android.annotation.SuppressLint;\r\n import android.content.Context;\r\n import android.os.Bundle;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v7.app.AppCompatActivity;\r\n import android.view.LayoutInflater;\r\n import android.view.MenuItem;\r\n import android.view.View;\r\n@@ -23,6 +21,9 @@\n import java.lang.reflect.Method;\r\n import java.util.List;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.appcompat.app.AppCompatActivity;\r\n+\r\n public class DataDisclosureDetailActivity extends AppCompatActivity {\r\n public static class Action {\r\n public String title;\r"},{"sha":"a60138fc93efdf491f21c1c80983593390de342a","filename":"src/com/audacious_software/passive_data_kit/activities/DataStreamActivity.java","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataStreamActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataStreamActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDataStreamActivity.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,16 +5,17 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.v7.app.AppCompatActivity;\r\n-import android.support.v7.widget.LinearLayoutManager;\r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.Menu;\r\n import android.view.MenuItem;\r\n \r\n import com.audacious_software.passive_data_kit.activities.generators.DataPointsAdapter;\r\n import com.audacious_software.passive_data_kit.generators.Generators;\r\n import com.audacious_software.pdk.passivedatakit.R;\r\n \r\n+import androidx.appcompat.app.AppCompatActivity;\r\n+import androidx.recyclerview.widget.LinearLayoutManager;\r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n @SuppressWarnings(\"PointlessBooleanExpression\")\r\n public class DataStreamActivity extends AppCompatActivity implements Generators.GeneratorUpdatedListener {\r\n private DataPointsAdapter mAdapter = null;\r"},{"sha":"befe0678b470bca93a158842190bae950f4c0b50","filename":"src/com/audacious_software/passive_data_kit/activities/DiagnosticsActivity.java","status":"modified","additions":4,"deletions":3,"changes":7,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDiagnosticsActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDiagnosticsActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FDiagnosticsActivity.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -4,9 +4,6 @@\n import android.app.Activity;\r\n import android.content.Intent;\r\n import android.os.Bundle;\r\n-import android.support.v7.app.AppCompatActivity;\r\n-import android.support.v7.widget.LinearLayoutManager;\r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.LayoutInflater;\r\n import android.view.Menu;\r\n import android.view.MenuItem;\r\n@@ -20,6 +17,10 @@\n \r\n import java.util.ArrayList;\r\n \r\n+import androidx.appcompat.app.AppCompatActivity;\r\n+import androidx.recyclerview.widget.LinearLayoutManager;\r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n @SuppressWarnings(\"unused\")\r\n public class DiagnosticsActivity extends AppCompatActivity {\r\n @SuppressWarnings(\"SameParameterValue\")\r"},{"sha":"b0a4a1e3efe4cddc92824009f5f8b8252eefd8ca","filename":"src/com/audacious_software/passive_data_kit/activities/PdkActivity.java","status":"removed","additions":0,"deletions":8,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/16aa26c7c8f735fdf4786a6c9b2d72832065b972/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FPdkActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/16aa26c7c8f735fdf4786a6c9b2d72832065b972/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FPdkActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2FPdkActivity.java?ref=16aa26c7c8f735fdf4786a6c9b2d72832065b972","patch":"@@ -1,8 +0,0 @@\n-package com.audacious_software.passive_data_kit.activities;\r\n-\r\n-import android.support.v7.app.AppCompatActivity;\r\n-\r\n-public abstract class PdkActivity extends AppCompatActivity\r\n-{\r\n-\r\n-}\r"},{"sha":"8529a2fc01c0a6aec440f1ce0840fdcceb4772c7","filename":"src/com/audacious_software/passive_data_kit/activities/generators/DataPointViewHolder.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointViewHolder.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointViewHolder.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointViewHolder.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -1,8 +1,9 @@\n package com.audacious_software.passive_data_kit.activities.generators;\r\n \r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.View;\r\n \r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n public class DataPointViewHolder extends RecyclerView.ViewHolder {\r\n public DataPointViewHolder(View itemView) {\r\n super(itemView);\r"},{"sha":"d25d9141623a9f2632e0db35147692aa4bf32db7","filename":"src/com/audacious_software/passive_data_kit/activities/generators/DataPointsAdapter.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointsAdapter.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointsAdapter.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FDataPointsAdapter.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -3,7 +3,6 @@\n import android.content.Context;\r\n import android.content.SharedPreferences;\r\n import android.preference.PreferenceManager;\r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n \r\n@@ -19,6 +18,8 @@\n import java.util.Comparator;\r\n import java.util.List;\r\n \r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n public class DataPointsAdapter extends RecyclerView.Adapter {\r\n public static final String SORT_BY_UPDATED = \"com.audacious_software.passive_data_kit.activities.generators.DataPointsAdapter\";\r\n public static final boolean SORT_BY_UPDATED_DEFAULT = true;\r"},{"sha":"315ef06ca1fc76b24c0b8da91834732ec475c161","filename":"src/com/audacious_software/passive_data_kit/activities/generators/GeneratorViewHolder.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorViewHolder.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorViewHolder.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorViewHolder.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -1,8 +1,9 @@\n package com.audacious_software.passive_data_kit.activities.generators;\r\n \r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.View;\r\n \r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n public class GeneratorViewHolder extends RecyclerView.ViewHolder {\r\n public GeneratorViewHolder(View itemView) {\r\n super(itemView);\r"},{"sha":"c1f83351809f29be50cf769c5f11b07be3d56542","filename":"src/com/audacious_software/passive_data_kit/activities/generators/GeneratorsAdapter.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorsAdapter.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorsAdapter.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FGeneratorsAdapter.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -3,7 +3,6 @@\n import android.annotation.SuppressLint;\r\n import android.content.Context;\r\n import android.content.Intent;\r\n-import android.support.v7.widget.RecyclerView;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -24,6 +23,8 @@\n import java.util.List;\r\n import java.util.regex.Pattern;\r\n \r\n+import androidx.recyclerview.widget.RecyclerView;\r\n+\r\n public class GeneratorsAdapter extends RecyclerView.Adapter {\r\n private Context mContext = null;\r\n private FrameLayout mDataView = null;\r"},{"sha":"b8f687a6f3014d9b8059d9d0273b4bebd544100b","filename":"src/com/audacious_software/passive_data_kit/activities/generators/RequestPermissionActivity.java","status":"modified","additions":39,"deletions":18,"changes":57,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FRequestPermissionActivity.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FRequestPermissionActivity.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Factivities%2Fgenerators%2FRequestPermissionActivity.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -3,42 +3,57 @@\n import android.app.Activity;\r\n import android.content.Intent;\r\n import android.os.Bundle;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.app.ActivityCompat;\r\n \r\n+import com.audacious_software.passive_data_kit.Logger;\r\n import com.audacious_software.passive_data_kit.generators.services.GoogleFit;\r\n import com.google.android.gms.auth.api.signin.GoogleSignIn;\r\n import com.google.android.gms.fitness.FitnessOptions;\r\n import com.google.android.gms.fitness.data.DataType;\r\n \r\n+import java.util.HashMap;\r\n+\r\n+import androidx.annotation.NonNull;\r\n+import androidx.core.app.ActivityCompat;\r\n+\r\n public class RequestPermissionActivity extends Activity\r\n {\r\n public static final String PERMISSION = \"com.audacious_software.passive_data_kit.activities.generators.RequestPermissionActivity.PERMISSION\";\r\n \r\n private static final int GOOGLE_FIT_PERMISSIONS_REQUEST_CODE = 86753;\r\n \r\n- protected void onResume()\r\n- {\r\n+ private boolean mIsRequesting = false;\r\n+\r\n+ protected void onCreate(Bundle data) {\r\n+ super.onCreate(data);\r\n+\r\n+ this.mIsRequesting = false;\r\n+ }\r\n+\r\n+ protected void onResume() {\r\n super.onResume();\r\n \r\n- Bundle extras = this.getIntent().getExtras();\r\n+ if (this.mIsRequesting == false) {\r\n+ this.mIsRequesting = true;\r\n+\r\n+ Bundle extras = this.getIntent().getExtras();\r\n \r\n- String permission = extras.getString(RequestPermissionActivity.PERMISSION);\r\n+ String permission = extras.getString(RequestPermissionActivity.PERMISSION);\r\n \r\n- if (GoogleFit.GOOGLE_FIT_PERMISSIONS.equals(permission)) {\r\n- FitnessOptions.Builder builder = FitnessOptions.builder();\r\n+ if (GoogleFit.GOOGLE_FIT_PERMISSIONS.equals(permission)) {\r\n+ FitnessOptions.Builder builder = FitnessOptions.builder();\r\n \r\n- for (DataType type : GoogleFit.getInstance(this).allDataTypes()) {\r\n- if (extras.getBoolean(type.getName(), false)) {\r\n- builder.addDataType(type, FitnessOptions.ACCESS_READ);\r\n+ for (DataType type : GoogleFit.getInstance(this).allDataTypes()) {\r\n+ if (extras.getBoolean(type.getName(), false)) {\r\n+ builder.addDataType(type, FitnessOptions.ACCESS_READ);\r\n+ }\r\n }\r\n- }\r\n \r\n- FitnessOptions options = builder.build();\r\n+ FitnessOptions options = builder.build();\r\n \r\n- GoogleSignIn.requestPermissions(this, RequestPermissionActivity.GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, GoogleSignIn.getLastSignedInAccount(this), options);\r\n- } else {\r\n- ActivityCompat.requestPermissions(this, new String[]{permission}, 0);\r\n+ GoogleSignIn.requestPermissions(this, RequestPermissionActivity.GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, GoogleSignIn.getLastSignedInAccount(this), options);\r\n+ } else {\r\n+ ActivityCompat.requestPermissions(this, new String[]{permission}, 0);\r\n+ }\r\n }\r\n }\r\n \r\n@@ -49,12 +64,18 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String permissi\n \r\n @Override\r\n protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r\n- if (resultCode == Activity.RESULT_OK) {\r\n- if (requestCode == GOOGLE_FIT_PERMISSIONS_REQUEST_CODE) {\r\n+ if (requestCode == GOOGLE_FIT_PERMISSIONS_REQUEST_CODE) {\r\n+ if (resultCode == Activity.RESULT_OK) {\r\n GoogleFit.stop(this);\r\n GoogleFit.start(this);\r\n \r\n this.finish();\r\n+ } else {\r\n+ HashMap payload = new HashMap<>();\r\n+ payload.put(\"request-code\", requestCode);\r\n+ payload.put(\"result-code\", resultCode);\r\n+\r\n+ Logger.getInstance(this).log(\"pdk-fit-permission-failed\", payload);\r\n }\r\n }\r\n }\r"},{"sha":"cb5515810823de4e3fcd0d3a3b2a500127706a8c","filename":"src/com/audacious_software/passive_data_kit/generators/Generator.java","status":"modified","additions":15,"deletions":10,"changes":25,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerator.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerator.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerator.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,6 +5,7 @@\n import android.database.Cursor;\r\n import android.database.MatrixCursor;\r\n import android.database.sqlite.SQLiteDatabase;\r\n+import android.database.sqlite.SQLiteException;\r\n import android.os.Bundle;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n@@ -19,8 +20,7 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n-public abstract class Generator\r\n-{\r\n+public abstract class Generator {\r\n public static final String PDK_METADATA = \"passive-data-metadata\";\r\n public static final String IDENTIFIER = \"generator-id\";\r\n public static final String TIMESTAMP = \"timestamp\";\r\n@@ -41,8 +41,7 @@ public abstract class Generator\n \r\n protected Context mContext = null;\r\n \r\n- public Generator(Context context)\r\n- {\r\n+ public Generator(Context context) {\r\n this.mContext = context.getApplicationContext();\r\n }\r\n \r\n@@ -78,7 +77,8 @@ public static View fetchView(ViewGroup parent) {\n \r\n @SuppressWarnings(\"unused\")\r\n public static void bindViewHolder(DataPointViewHolder holder) {\r\n- Class currentClass = new Object() { }.getClass().getEnclosingClass();\r\n+ Class currentClass = new Object() {\r\n+ }.getClass().getEnclosingClass();\r\n \r\n String identifier = currentClass.getCanonicalName();\r\n \r\n@@ -93,7 +93,8 @@ public static View fetchDisclosureView(ViewGroup parent) {\n \r\n @SuppressWarnings(\"unused\")\r\n public static void bindDisclosureViewHolder(GeneratorViewHolder holder) {\r\n- Class currentClass = new Object() { }.getClass().getEnclosingClass();\r\n+ Class currentClass = new Object() {\r\n+ }.getClass().getEnclosingClass();\r\n \r\n String identifier = currentClass.getCanonicalName();\r\n \r\n@@ -133,18 +134,22 @@ public Cursor queryHistory(String[] cols, String where, String[] args, String or\n \r\n protected int getDatabaseVersion(SQLiteDatabase db) {\r\n String where = \"type = ? AND name = ?\";\r\n- String[] args = { \"table\", Generator.TABLE_METADATA };\r\n+ String[] args = {\"table\", Generator.TABLE_METADATA};\r\n \r\n Cursor c = db.query(Generator.TABLE_SQLITE_MASTER, null, where, args, null, null, null);\r\n \r\n if (c.getCount() == 0) {\r\n- db.execSQL(this.mContext.getString(R.string.pdk_generator_create_version_table));\r\n+ try {\r\n+ db.execSQL(this.mContext.getString(R.string.pdk_generator_create_version_table));\r\n+ } catch (SQLiteException e) {\r\n+ // Table already exists.\r\n+ }\r\n }\r\n \r\n c.close();\r\n \r\n String versionWhere = Generator.TABLE_METADATA_KEY + \" = ?\";\r\n- String[] versionArgs = { \"version\" };\r\n+ String[] versionArgs = {\"version\"};\r\n \r\n c = db.query(Generator.TABLE_METADATA, null, versionWhere, versionArgs, null, null, Generator.TABLE_METADATA_LAST_UPDATED + \" DESC\");\r\n \r\n@@ -163,7 +168,7 @@ protected void setDatabaseVersion(SQLiteDatabase db, int newVersion) {\n boolean keyExists = false;\r\n \r\n String versionWhere = Generator.TABLE_METADATA_KEY + \" = ?\";\r\n- String[] versionArgs = { \"version\" };\r\n+ String[] versionArgs = {\"version\"};\r\n \r\n Cursor c = db.query(Generator.TABLE_METADATA, null, versionWhere, versionArgs, null, null, Generator.TABLE_METADATA_LAST_UPDATED + \" DESC\");\r\n \r"},{"sha":"ffd12e1d05b7ab615d8dc7ad2458cde985acd085","filename":"src/com/audacious_software/passive_data_kit/generators/Generators.java","status":"modified","additions":73,"deletions":0,"changes":73,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerators.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerators.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2FGenerators.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -5,19 +5,29 @@\n import android.content.SharedPreferences;\r\n import android.content.pm.PackageInfo;\r\n import android.content.pm.PackageManager;\r\n+import android.net.Uri;\r\n import android.os.Build;\r\n import android.os.Bundle;\r\n import android.os.PowerManager;\r\n import android.preference.PreferenceManager;\r\n+import android.util.Base64;\r\n import android.util.Log;\r\n import android.util.SparseArray;\r\n+import android.webkit.MimeTypeMap;\r\n \r\n import com.audacious_software.passive_data_kit.Logger;\r\n import com.audacious_software.passive_data_kit.diagnostics.DiagnosticAction;\r\n import com.audacious_software.passive_data_kit.generators.diagnostics.AppEvent;\r\n import com.audacious_software.passive_data_kit.transmitters.Transmitter;\r\n import com.audacious_software.pdk.passivedatakit.R;\r\n \r\n+import org.apache.commons.io.output.ByteArrayOutputStream;\r\n+import org.json.JSONArray;\r\n+import org.json.JSONException;\r\n+\r\n+import java.io.FileNotFoundException;\r\n+import java.io.IOException;\r\n+import java.io.InputStream;\r\n import java.lang.reflect.InvocationTargetException;\r\n import java.lang.reflect.Method;\r\n import java.util.ArrayList;\r\n@@ -295,6 +305,69 @@ public void releaseWakeLock(String tag) {\n }\r\n }\r\n \r\n+ public ArrayList bundleForFiles(String media) {\r\n+ ArrayList bundles = new ArrayList<>();\r\n+\r\n+ try {\r\n+ JSONArray mediaUrls = new JSONArray(media);\r\n+\r\n+ for (int i = 0; i < mediaUrls.length(); i++) {\r\n+ Bundle bundle = new Bundle();\r\n+\r\n+ String url = mediaUrls.getString(i);\r\n+\r\n+ Uri uri = Uri.parse(url);\r\n+\r\n+ bundle.putString(\"source-url\", url);\r\n+\r\n+ String filename = uri.getLastPathSegment();\r\n+ bundle.putString(\"filename\", filename);\r\n+\r\n+ String contentType = \"application/octet-stream\";\r\n+\r\n+ String extension = MimeTypeMap.getFileExtensionFromUrl(url);\r\n+\r\n+ if (extension != null) {\r\n+ contentType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);\r\n+ }\r\n+\r\n+ bundle.putString(\"content-type\", contentType);\r\n+\r\n+ ByteArrayOutputStream baos = new ByteArrayOutputStream();\r\n+\r\n+ try {\r\n+ InputStream in = this.mContext.getContentResolver().openInputStream(uri);\r\n+\r\n+ byte[] buf = new byte[1024];\r\n+\r\n+ int n;\r\n+\r\n+ while (-1 != (n = in.read(buf))) {\r\n+ baos.write(buf, 0, n);\r\n+ }\r\n+\r\n+ byte[] bytes = baos.toByteArray();\r\n+\r\n+ String encoded = Base64.encodeToString(bytes, Base64.NO_WRAP);\r\n+\r\n+ bundle.putString(\"data\", encoded);\r\n+ } catch (FileNotFoundException e) {\r\n+ e.printStackTrace();\r\n+ } catch (IOException e) {\r\n+ e.printStackTrace();\r\n+ }\r\n+\r\n+ Log.e(\"ENVIRO\", \"MEDIA URL: \" + url);\r\n+\r\n+ bundles.add(bundle);\r\n+ }\r\n+ } catch (JSONException e) {\r\n+ e.printStackTrace();\r\n+ }\r\n+\r\n+ return bundles;\r\n+ }\r\n+\r\n private static class GeneratorsHolder {\r\n @SuppressLint(\"StaticFieldLeak\")\r\n public static final Generators instance = new Generators();\r"},{"sha":"19bda065ae184195af75428a5fda34f8a5963879","filename":"src/com/audacious_software/passive_data_kit/generators/communication/PhoneCalls.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FPhoneCalls.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FPhoneCalls.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FPhoneCalls.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -16,7 +16,6 @@\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n import android.provider.CallLog;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -45,6 +44,8 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings(\"SimplifiableIfStatement\")\r\n @SuppressLint(\"InlinedApi\")\r\n public class PhoneCalls extends Generator {\r"},{"sha":"5ef717459408c9b3ef42a815aebfaf52fc9d53fa","filename":"src/com/audacious_software/passive_data_kit/generators/communication/TextMessages.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FTextMessages.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FTextMessages.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fcommunication%2FTextMessages.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -16,7 +16,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -48,6 +47,8 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings(\"SimplifiableIfStatement\")\r\n public class TextMessages extends Generator {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-text-messages\";\r"},{"sha":"17f283d11efc2e8259598b23c07d92fac29e1df5","filename":"src/com/audacious_software/passive_data_kit/generators/device/Battery.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FBattery.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FBattery.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FBattery.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -12,7 +12,6 @@\n import android.os.BatteryManager;\r\n import android.os.Bundle;\r\n import android.preference.PreferenceManager;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -40,6 +39,8 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings(\"SimplifiableIfStatement\")\r\n public class Battery extends Generator {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-device-battery\";\r"},{"sha":"acee91d4ede1c1ff06c6ca61ce3ece7e06d891b4","filename":"src/com/audacious_software/passive_data_kit/generators/device/ForegroundApplication.java","status":"modified","additions":1,"deletions":3,"changes":4,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FForegroundApplication.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FForegroundApplication.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FForegroundApplication.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -270,9 +270,7 @@ public static void bindViewHolder(DataPointViewHolder holder) {\n String application = c.getString(c.getColumnIndex(ForegroundApplication.HISTORY_APPLICATION));\r\n \r\n if (application != null) {\r\n- if (latest.contains(application)) {\r\n- latest.remove(application);\r\n- }\r\n+ latest.remove(application);\r\n \r\n latest.add(0, application);\r\n \r"},{"sha":"84b428f641c6025801cb1301ad1d38fb2fdd3151","filename":"src/com/audacious_software/passive_data_kit/generators/device/Location.java","status":"modified","additions":8,"deletions":7,"changes":15,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FLocation.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FLocation.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FLocation.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -22,13 +22,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.app.ActivityCompat;\r\n-import android.support.v4.content.ContextCompat;\r\n-import android.support.v4.content.res.ResourcesCompat;\r\n-import android.support.v4.graphics.drawable.DrawableCompat;\r\n-import android.support.v7.app.AlertDialog;\r\n-import android.support.v7.widget.SwitchCompat;\r\n import android.util.DisplayMetrics;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n@@ -77,6 +70,14 @@\n import java.util.List;\r\n import java.util.Random;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.appcompat.app.AlertDialog;\r\n+import androidx.appcompat.widget.SwitchCompat;\r\n+import androidx.core.app.ActivityCompat;\r\n+import androidx.core.content.ContextCompat;\r\n+import androidx.core.content.res.ResourcesCompat;\r\n+import androidx.core.graphics.drawable.DrawableCompat;\r\n+\r\n public class Location extends Generator implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener, android.location.LocationListener {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-location\";\r\n private static final String DATABASE_PATH = \"pdk-location.sqlite\";\r"},{"sha":"11a06f933e2402ea654b029cdbc872d517f71ee6","filename":"src/com/audacious_software/passive_data_kit/generators/device/ScreenState.java","status":"modified","additions":2,"deletions":0,"changes":2,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FScreenState.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FScreenState.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdevice%2FScreenState.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -327,6 +327,8 @@ private static void populateTimeline(Context context, LinearLayout timeline, lon\n lastState = c.getString(c.getColumnIndex(ScreenState.HISTORY_STATE));\r\n }\r\n \r\n+ c.close();\r\n+\r\n if (activeStates.size() > 0) {\r\n long firstTimestamp = activeTimestamps.get(0);\r\n String firstState = activeStates.get(0);\r"},{"sha":"7a3bfe916fd25b658c0e3f05bf6bca10e2719e7d","filename":"src/com/audacious_software/passive_data_kit/generators/diagnostics/AppEvent.java","status":"modified","additions":4,"deletions":4,"changes":8,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -8,9 +8,6 @@\n import android.database.sqlite.SQLiteDatabase;\r\n import android.os.Bundle;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.view.PagerAdapter;\r\n-import android.support.v4.view.ViewPager;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -34,11 +31,14 @@\n import java.io.PrintWriter;\r\n import java.io.StringWriter;\r\n import java.util.ArrayList;\r\n-import java.util.Date;\r\n import java.util.HashMap;\r\n import java.util.List;\r\n import java.util.Map;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.viewpager.widget.PagerAdapter;\r\n+import androidx.viewpager.widget.ViewPager;\r\n+\r\n public class AppEvent extends Generator{\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-app-event\";\r\n \r"},{"sha":"9799d15ab0f303b314a85d0c4ac21c2bdaf5d057","filename":"src/com/audacious_software/passive_data_kit/generators/diagnostics/SystemStatus.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -15,7 +15,6 @@\n import android.os.Bundle;\r\n import android.os.StatFs;\r\n import android.preference.PreferenceManager;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -44,6 +43,8 @@\n import java.util.LinkedList;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings(\"SimplifiableIfStatement\")\r\n @SuppressLint(\"NewApi\")\r\n public class SystemStatus extends Generator {\r"},{"sha":"8375d34abf8ff13cbfb86284ecb91d27c3ee353f","filename":"src/com/audacious_software/passive_data_kit/generators/environment/Geofences.java","status":"modified","additions":6,"deletions":3,"changes":9,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FGeofences.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FGeofences.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FGeofences.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -1,6 +1,7 @@\n package com.audacious_software.passive_data_kit.generators.environment;\r\n \r\n import android.Manifest;\r\n+import android.annotation.SuppressLint;\r\n import android.app.PendingIntent;\r\n import android.content.ContentValues;\r\n import android.content.Context;\r\n@@ -15,8 +16,6 @@\n import android.os.HandlerThread;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.util.Log;\r\n \r\n import com.audacious_software.passive_data_kit.Logger;\r\n@@ -44,6 +43,8 @@\n import java.util.ArrayList;\r\n import java.util.List;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.core.content.ContextCompat;\r\n import okhttp3.Call;\r\n import okhttp3.Callback;\r\n import okhttp3.OkHttpClient;\r\n@@ -121,6 +122,7 @@ public static void start(final Context context) {\n Geofences.getInstance(context).startGenerator();\r\n }\r\n \r\n+ @SuppressLint(\"ObsoleteSdkInt\")\r\n private void startGenerator() {\r\n final Geofences me = this;\r\n \r\n@@ -212,6 +214,7 @@ public void onFailure(Call call, IOException e) {\n e.printStackTrace();\r\n }\r\n \r\n+ @SuppressLint(\"MissingPermission\")\r\n @Override\r\n public void onResponse(Call call, final Response response) throws IOException {\r\n JSONObject fences = new JSONObject();\r\n@@ -231,7 +234,7 @@ public void onResponse(Call call, final Response response) throws IOException {\n if (fences.has(\"features\")) {\r\n SharedPreferences.Editor e = prefs.edit();\r\n e.putString(Geofences.CACHED_GEOFENCES, fences.toString(2));\r\n- e.commit();\r\n+ e.apply();\r\n }\r\n } catch (JSONException e) {\r\n Logger.getInstance(me.mContext).logThrowable(e);\r"},{"sha":"95ed96783d1508c74ed464d9fb5833c21347c04d","filename":"src/com/audacious_software/passive_data_kit/generators/environment/TimeOfDay.java","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FTimeOfDay.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FTimeOfDay.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2FTimeOfDay.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -12,8 +12,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n import android.view.ViewGroup;\r\n@@ -41,6 +39,9 @@\n import java.util.List;\r\n import java.util.TimeZone;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.core.content.ContextCompat;\r\n+\r\n public class TimeOfDay extends Generator implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-time-of-day\";\r\n private static final String DATABASE_PATH = \"pdk-time-of-day.sqlite\";\r"},{"sha":"52eacdde229eb454fe918257dde3e6301c8fac71","filename":"src/com/audacious_software/passive_data_kit/generators/environment/services/GeofencesService.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2Fservices%2FGeofencesService.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2Fservices%2FGeofencesService.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fenvironment%2Fservices%2FGeofencesService.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -2,7 +2,6 @@\n \r\n import android.app.IntentService;\r\n import android.content.Intent;\r\n-import android.support.annotation.Nullable;\r\n \r\n import com.audacious_software.passive_data_kit.Logger;\r\n import com.audacious_software.passive_data_kit.generators.environment.Geofences;\r\n@@ -13,6 +12,8 @@\n import java.util.HashMap;\r\n import java.util.List;\r\n \r\n+import androidx.annotation.Nullable;\r\n+\r\n public class GeofencesService extends IntentService {\r\n public GeofencesService() {\r\n super(\"Passive Data Kit Geofence Service\");\r"},{"sha":"064142340811878b375607e63f1d5ff1fabd7f60","filename":"src/com/audacious_software/passive_data_kit/generators/sensors/Accelerometer.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAccelerometer.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAccelerometer.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAccelerometer.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -22,7 +22,6 @@\n import android.os.PowerManager;\r\n import android.preference.PreferenceManager;\r\n import android.provider.Settings;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.util.Log;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n@@ -52,6 +51,8 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings({\"PointlessBooleanExpression\", \"SimplifiableIfStatement\"})\r\n public class Accelerometer extends SensorGenerator implements SensorEventListener {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-sensor-accelerometer\";\r"},{"sha":"ff4b3a18adeffcbbb6dbb56c9ee99dc7a293ac0c","filename":"src/com/audacious_software/passive_data_kit/generators/sensors/AmbientLight.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAmbientLight.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAmbientLight.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fsensors%2FAmbientLight.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -22,7 +22,6 @@\n import android.os.PowerManager;\r\n import android.preference.PreferenceManager;\r\n import android.provider.Settings;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.util.Log;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n@@ -51,6 +50,8 @@\n import java.util.Date;\r\n import java.util.List;\r\n \r\n+import androidx.core.content.ContextCompat;\r\n+\r\n @SuppressWarnings({\"PointlessBooleanExpression\", \"SimplifiableIfStatement\"})\r\n public class AmbientLight extends SensorGenerator implements SensorEventListener {\r\n private static final String GENERATOR_IDENTIFIER = \"pdk-sensor-light\";\r"},{"sha":"4b2b21d5466c266fc6c938f475417ea5327cc63a","filename":"src/com/audacious_software/passive_data_kit/generators/services/GoogleAwareness.java","status":"modified","additions":3,"deletions":2,"changes":5,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleAwareness.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleAwareness.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleAwareness.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -10,8 +10,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.v4.content.ContextCompat;\r\n import android.util.Log;\r\n \r\n import com.audacious_software.passive_data_kit.activities.generators.RequestPermissionActivity;\r\n@@ -41,6 +39,9 @@\n import java.util.Comparator;\r\n import java.util.List;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.core.content.ContextCompat;\r\n+\r\n public class GoogleAwareness extends Generator {\r\n private static final String GENERATOR_IDENTIFIER = \"google-awareness\";\r\n \r"},{"sha":"2bfe0c98353689c615dc6408b2e0e211c2a2bc7e","filename":"src/com/audacious_software/passive_data_kit/generators/services/GoogleFit.java","status":"modified","additions":2,"deletions":0,"changes":2,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleFit.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleFit.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fservices%2FGoogleFit.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -166,6 +166,8 @@ public long getStepsForPeriod(long start, long end) {\n while (c.moveToNext()) {\r\n steps += c.getLong(columnIndex);\r\n }\r\n+\r\n+ c.close();\r\n }\r\n }\r\n \r"},{"sha":"7012afe631adb24ee7a47ca12dfbf40ac61a0b86","filename":"src/com/audacious_software/passive_data_kit/generators/wearables/Fitbit.java","status":"modified","additions":27,"deletions":8,"changes":35,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FFitbit.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FFitbit.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FFitbit.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -10,6 +10,7 @@\n import android.content.Intent;\r\n import android.content.SharedPreferences;\r\n import android.database.Cursor;\r\n+import android.database.SQLException;\r\n import android.database.sqlite.SQLiteDatabase;\r\n import android.graphics.Typeface;\r\n import android.net.Uri;\r\n@@ -18,10 +19,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.annotation.Nullable;\r\n-import android.support.v4.view.PagerAdapter;\r\n-import android.support.v4.view.ViewPager;\r\n import android.util.Base64;\r\n import android.util.Log;\r\n import android.view.ContextThemeWrapper;\r\n@@ -72,6 +69,9 @@\n import java.util.Locale;\r\n import java.util.Map;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.viewpager.widget.PagerAdapter;\r\n+import androidx.viewpager.widget.ViewPager;\r\n import okhttp3.Authenticator;\r\n import okhttp3.Call;\r\n import okhttp3.Callback;\r\n@@ -264,10 +264,29 @@ public Fitbit(Context context) {\n \r\n switch (version) {\r\n case 0:\r\n- this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_activity_history_table));\r\n- this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_heart_rate_history_table));\r\n- this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_sleep_history_table));\r\n- this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_weight_history_table));\r\n+ try {\r\n+ this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_activity_history_table));\r\n+ } catch (SQLException ex) {\r\n+ // Table already exists...\r\n+ }\r\n+\r\n+ try {\r\n+ this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_heart_rate_history_table));\r\n+ } catch (SQLException ex) {\r\n+ // Table already exists...\r\n+ }\r\n+\r\n+ try {\r\n+ this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_sleep_history_table));\r\n+ } catch (SQLException ex) {\r\n+ // Table already exists...\r\n+ }\r\n+\r\n+ try {\r\n+ this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_fitbit_create_weight_history_table));\r\n+ } catch (SQLException ex) {\r\n+ // Table already exists...\r\n+ }\r\n }\r\n \r\n if (version != Fitbit.DATABASE_VERSION) {\r"},{"sha":"6391307b74109df976b943bb1c8f2e91728606b9","filename":"src/com/audacious_software/passive_data_kit/generators/wearables/MicrosoftBand.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FMicrosoftBand.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FMicrosoftBand.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FMicrosoftBand.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -7,7 +7,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n import android.util.Log;\r\n import android.view.LayoutInflater;\r\n import android.view.View;\r\n@@ -70,6 +69,8 @@\n import java.util.Collections;\r\n import java.util.List;\r\n \r\n+import androidx.annotation.NonNull;\r\n+\r\n @SuppressWarnings(\"SimplifiableIfStatement\")\r\n public class MicrosoftBand extends Generator\r\n {\r"},{"sha":"464f0d26948f8eaba852d0de3ba3845e618b39d8","filename":"src/com/audacious_software/passive_data_kit/generators/wearables/Withings.java","status":"modified","additions":5,"deletions":5,"changes":10,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FWithings.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FWithings.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fwearables%2FWithings.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -19,11 +19,6 @@\n import android.os.Handler;\r\n import android.os.Looper;\r\n import android.preference.PreferenceManager;\r\n-import android.support.annotation.NonNull;\r\n-import android.support.annotation.Nullable;\r\n-import android.support.v4.content.ContextCompat;\r\n-import android.support.v4.view.PagerAdapter;\r\n-import android.support.v4.view.ViewPager;\r\n import android.util.Log;\r\n import android.view.ContextThemeWrapper;\r\n import android.view.LayoutInflater;\r\n@@ -79,6 +74,11 @@\n import java.util.Locale;\r\n import java.util.Map;\r\n \r\n+import androidx.annotation.NonNull;\r\n+import androidx.annotation.Nullable;\r\n+import androidx.core.content.ContextCompat;\r\n+import androidx.viewpager.widget.PagerAdapter;\r\n+import androidx.viewpager.widget.ViewPager;\r\n import okhttp3.Call;\r\n import okhttp3.Callback;\r\n import okhttp3.FormBody;\r"},{"sha":"5d71f9d72291e04f7891eb1c3e699a51106392e6","filename":"src/com/audacious_software/passive_data_kit/messaging/FirebasePushNotificationService.java","status":"added","additions":46,"deletions":0,"changes":46,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fmessaging%2FFirebasePushNotificationService.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fmessaging%2FFirebasePushNotificationService.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fmessaging%2FFirebasePushNotificationService.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -0,0 +1,46 @@\n+package com.audacious_software.passive_data_kit.messaging;\r\n+\r\n+import android.app.Application;\r\n+import android.util.Log;\r\n+\r\n+import com.audacious_software.passive_data_kit.PassiveDataKit;\r\n+import com.audacious_software.passive_data_kit.PassiveDataKitApplication;\r\n+import com.google.firebase.messaging.FirebaseMessagingService;\r\n+import com.google.firebase.messaging.RemoteMessage;\r\n+\r\n+public class FirebasePushNotificationService extends FirebaseMessagingService {\r\n+ @Override\r\n+ public void onNewToken(String token) {\r\n+ PassiveDataKit.getInstance(this).updateFirebaseDeviceToken(token);\r\n+ }\r\n+\r\n+ public void onMessageReceived(RemoteMessage remoteMessage) {\r\n+ Log.d(\"PDK\", \"From: \" + remoteMessage.getFrom());\r\n+\r\n+ // Check if message contains a data payload.\r\n+ if (remoteMessage.getData().size() > 0) {\r\n+ Log.e(\"PDK\", \"Message data payload: \" + remoteMessage.getData());\r\n+\r\n+ if (/* Check if data needs to be processed by long running job */ true) {\r\n+ // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.\r\n+ // scheduleJob();\r\n+ } else {\r\n+ // Handle message within 10 seconds\r\n+ // handleNow();\r\n+ }\r\n+ }\r\n+\r\n+ // Check if message contains a notification payload.\r\n+ if (remoteMessage.getNotification() != null) {\r\n+ Log.e(\"PDK\", \"Message Notification Body: \" + remoteMessage.getNotification().getBody());\r\n+ }\r\n+\r\n+ Application sharedApp = this.getApplication();\r\n+\r\n+ if (sharedApp instanceof PassiveDataKitApplication) {\r\n+ PassiveDataKitApplication pdkApp = (PassiveDataKitApplication) sharedApp;\r\n+\r\n+ pdkApp.doBackgroundWork();\r\n+ }\r\n+ }\r\n+}\r"},{"sha":"a5caafad4f2e43b17ab9358cffc1484f7bd19573","filename":"src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java","status":"modified","additions":2,"deletions":1,"changes":3,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Ftransmitters%2FHttpTransmitter.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/8b8549dd8140e660a4f3fedac51629cbadc425aa/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Ftransmitters%2FHttpTransmitter.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Ftransmitters%2FHttpTransmitter.java?ref=8b8549dd8140e660a4f3fedac51629cbadc425aa","patch":"@@ -4,7 +4,6 @@\n import android.content.Context;\r\n import android.net.Uri;\r\n import android.os.BadParcelableException;\r\n-import android.os.Build;\r\n import android.os.Bundle;\r\n import android.os.Handler;\r\n import android.os.Looper;\r\n@@ -358,10 +357,12 @@ private int transmitHttpPayload(String payload) {\n // Create a trust manager that does not validate certificate chains\r\n final TrustManager[] trustAllCerts = new TrustManager[] {\r\n new X509TrustManager() {\r\n+ @SuppressLint(\"TrustAllX509TrustManager\")\r\n @Override\r\n public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {\r\n }\r\n \r\n+ @SuppressLint(\"TrustAllX509TrustManager\")\r\n @Override\r\n public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {\r\n }\r"}]}