From 5c7a10311ae899f36ade106c2adab84e48a8537a Mon Sep 17 00:00:00 2001 From: Lennart Goedhart <lennart@omnibase.com.au> Date: Sat, 12 Nov 2016 12:38:48 +1100 Subject: [PATCH] Fix #78 (Thanks @volkerrichert). Fix #52 (Thanks @rahim). Updated to support latest Android studio. --- 640gAndroidUploader.iml | 2 +- README.md | 21 +++++++++++++++++++ app/app.iml | 18 ++++++++-------- app/build.gradle | 6 +++--- .../android/UploaderApplication.java | 2 ++ .../android/medtronic/MainActivity.java | 10 ++++++++- .../NightscoutUploadIntentService.java | 4 +++- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 9 files changed, 52 insertions(+), 19 deletions(-) diff --git a/640gAndroidUploader.iml b/640gAndroidUploader.iml index 21ad486..dd11c42 100644 --- a/640gAndroidUploader.iml +++ b/640gAndroidUploader.iml @@ -13,7 +13,7 @@ <content url="file://$MODULE_DIR$"> <excludeFolder url="file://$MODULE_DIR$/.gradle" /> </content> - <orderEntry type="inheritedJdk" /> + <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module> \ No newline at end of file diff --git a/README.md b/README.md index 1b749f0..599ec52 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,27 @@ This is an Android app to upload data from a MiniMed 640G insulin pump to a Nigh <a target="blank" href="https://raw.githubusercontent.com/wiki/pazaan/640gAndroidUploader/images/kit-in-case-2.jpg"><img src="https://raw.githubusercontent.com/wiki/pazaan/640gAndroidUploader/images/kit-in-case-2.jpg" width="200"></a> <br/><br/> +#### Development - getting started + + - Install [Android Studio](https://developer.android.com/studio/index.html) + - Install [Fabric Plugin](https://fabric.io), enable Crashlytics, this should create `app/fabric.properties` with your fabric apiSecret and also add a fabric key to `app/src/AndroidManifest.xml` + + ``` + <meta-data + android:name="io.fabric.ApiKey" + android:value="YOUR-FABRIC-KEY" /> + ``` + + (**take care not to commit this change**) + - Create a [BugFender](https://app.bugfender.com) account, create `app/bugfender.properties` and populate with + + ``` + apiKey=YOUR-BUGFENDER-KEY + ``` + - Set up a virtual device in the AVD manager or connect an Android phone with USB debugging enabled. + + - Use one of the run configurations, eg `installDebug` + #### App Credits * Based on https://github.com/arbox0/MedtronicUploader *(though the internals are completely changed for the 640G)* * Uses the [android-service-example](https://code.launchpad.net/~binwiederhier/+junk/android-service-example) by Philipp C. Heckel diff --git a/app/app.iml b/app/app.iml index 9b10b9b..e92165a 100644 --- a/app/app.iml +++ b/app/app.iml @@ -67,14 +67,6 @@ <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> @@ -83,6 +75,14 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> @@ -154,8 +154,8 @@ <orderEntry type="library" exported="" name="android-0.4.4" level="project" /> <orderEntry type="library" exported="" name="MPAndroidChart-v3.0.0-beta1" level="project" /> <orderEntry type="library" exported="" name="fastadapter-1.5.2" level="project" /> - <orderEntry type="library" exported="" name="retrofit-2.1.0" level="project" /> <orderEntry type="library" exported="" name="gson-2.7" level="project" /> + <orderEntry type="library" exported="" name="retrofit-2.1.0" level="project" /> <orderEntry type="library" exported="" name="converter-gson-2.1.0" level="project" /> <orderEntry type="library" exported="" name="beta-1.2.0" level="project" /> <orderEntry type="library" exported="" name="materialdrawer-5.2.9" level="project" /> diff --git a/app/build.gradle b/app/build.gradle index 550a9b2..fba04a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,7 +75,7 @@ task signRelease << { '-digestalg', 'SHA1', '-keystore', - '/Users/lgoedhart/keystores/nightscout_android.jks', + '/Users/lennart/keystores/nightscout_android.jks', 'app/build/outputs/apk/app-release-unsigned.apk', 'nightscoutandroidkey' ] @@ -95,7 +95,7 @@ task signRelease << { task zipalignRelease << { def command = [ - '/Users/lgoedhart/Library/Android/sdk/build-tools/23.0.3/zipalign', + '/Users/lennart/Library/Android/sdk/build-tools/23.0.3/zipalign', '-v', '4', 'app/build/outputs/apk/app-release-unsigned.apk', @@ -117,7 +117,7 @@ task zipalignRelease << { release { tagTemplate = 'v${version}' - buildTasks = ['assembleRelease'] + buildTasks = ['build'] beforeReleaseBuild.dependsOn 'clean' afterReleaseBuild.dependsOn 'signRelease', 'zipalignRelease' } diff --git a/app/src/main/java/info/nightscout/android/UploaderApplication.java b/app/src/main/java/info/nightscout/android/UploaderApplication.java index a7725de..aa19448 100644 --- a/app/src/main/java/info/nightscout/android/UploaderApplication.java +++ b/app/src/main/java/info/nightscout/android/UploaderApplication.java @@ -42,7 +42,9 @@ public class UploaderApplication extends Application { } RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) + .deleteRealmIfMigrationNeeded() .build(); + Realm.setDefaultConfiguration(realmConfiguration); } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java index e52a79b..b8b62dd 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java @@ -324,6 +324,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc initialPoll, MedtronicCnlIntentService.POLL_PERIOD_MS, pending); } + private void uploadCgmData() { + startService(mNightscoutUploadService); + } + private void stopCgmService() { Log.i(TAG, "stopCgmService called"); @@ -486,7 +490,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc PumpInfo pump = getActivePump(); - if (pump != null & pump.isValid()) { + if (pump != null && pump.isValid()) { pumpStatusData = pump.getPumpHistory().last(); } @@ -597,6 +601,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc }); } + // TODO - handle isOffline in NightscoutUploadIntentService? + uploadCgmData(); + + refreshDisplay(); } } diff --git a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java index ee134cb..b5c067e 100644 --- a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java +++ b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java @@ -21,6 +21,7 @@ import org.apache.http.params.HttpParams; import org.json.JSONArray; import org.json.JSONObject; +import java.math.BigDecimal; import java.net.URL; import java.security.MessageDigest; import java.text.SimpleDateFormat; @@ -232,10 +233,11 @@ public class NightscoutUploadIntentService extends IntentService { JSONObject json = new JSONObject(); json.put("uploaderBattery", MainActivity.batLevel); json.put("device", record.getDeviceName()); + json.put("created_at", ISO8601_DATE_FORMAT.format(record.getPumpDate())); JSONObject pumpInfo = new JSONObject(); pumpInfo.put("clock", ISO8601_DATE_FORMAT.format(record.getPumpDate())); - pumpInfo.put("reservoir", record.getReservoirAmount()); + pumpInfo.put("reservoir", new BigDecimal(record.getReservoirAmount()).setScale(3, BigDecimal.ROUND_HALF_UP)); JSONObject iob = new JSONObject(); iob.put("timestamp", record.getPumpDate()); diff --git a/build.gradle b/build.gradle index c08cd48..04964d2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. + // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.2.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath "io.realm:realm-gradle-plugin:1.0.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 52e3cb7..3d5435e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun May 01 23:04:04 AEST 2016 +#Sat Nov 12 11:44:13 AEDT 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip -- GitLab