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