Skip to content
Snippets Groups Projects
Commit 5c7a1031 authored by Lennart Goedhart's avatar Lennart Goedhart
Browse files

Fix #78 (Thanks @volkerrichert).

Fix #52 (Thanks @rahim).
Updated to support latest Android studio.
parent 28deb5c9
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>
\ No newline at end of file
...@@ -14,6 +14,27 @@ This is an Android app to upload data from a MiniMed 640G insulin pump to a Nigh ...@@ -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> <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/> <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 #### App Credits
* Based on https://github.com/arbox0/MedtronicUploader *(though the internals are completely changed for the 640G)* * 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 * Uses the [android-service-example](https://code.launchpad.net/~binwiederhier/+junk/android-service-example) by Philipp C. Heckel
......
...@@ -67,14 +67,6 @@ ...@@ -67,14 +67,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <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/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" 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/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" 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" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
...@@ -83,6 +75,14 @@ ...@@ -83,6 +75,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <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/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" 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/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
...@@ -154,8 +154,8 @@ ...@@ -154,8 +154,8 @@
<orderEntry type="library" exported="" name="android-0.4.4" level="project" /> <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="MPAndroidChart-v3.0.0-beta1" level="project" />
<orderEntry type="library" exported="" name="fastadapter-1.5.2" 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="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="converter-gson-2.1.0" level="project" />
<orderEntry type="library" exported="" name="beta-1.2.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" /> <orderEntry type="library" exported="" name="materialdrawer-5.2.9" level="project" />
......
...@@ -75,7 +75,7 @@ task signRelease << { ...@@ -75,7 +75,7 @@ task signRelease << {
'-digestalg', '-digestalg',
'SHA1', 'SHA1',
'-keystore', '-keystore',
'/Users/lgoedhart/keystores/nightscout_android.jks', '/Users/lennart/keystores/nightscout_android.jks',
'app/build/outputs/apk/app-release-unsigned.apk', 'app/build/outputs/apk/app-release-unsigned.apk',
'nightscoutandroidkey' 'nightscoutandroidkey'
] ]
...@@ -95,7 +95,7 @@ task signRelease << { ...@@ -95,7 +95,7 @@ task signRelease << {
task zipalignRelease << { task zipalignRelease << {
def command = [ 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', '-v',
'4', '4',
'app/build/outputs/apk/app-release-unsigned.apk', 'app/build/outputs/apk/app-release-unsigned.apk',
...@@ -117,7 +117,7 @@ task zipalignRelease << { ...@@ -117,7 +117,7 @@ task zipalignRelease << {
release { release {
tagTemplate = 'v${version}' tagTemplate = 'v${version}'
buildTasks = ['assembleRelease'] buildTasks = ['build']
beforeReleaseBuild.dependsOn 'clean' beforeReleaseBuild.dependsOn 'clean'
afterReleaseBuild.dependsOn 'signRelease', 'zipalignRelease' afterReleaseBuild.dependsOn 'signRelease', 'zipalignRelease'
} }
......
...@@ -42,7 +42,9 @@ public class UploaderApplication extends Application { ...@@ -42,7 +42,9 @@ public class UploaderApplication extends Application {
} }
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.deleteRealmIfMigrationNeeded()
.build(); .build();
Realm.setDefaultConfiguration(realmConfiguration); Realm.setDefaultConfiguration(realmConfiguration);
} }
} }
...@@ -324,6 +324,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -324,6 +324,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
initialPoll, MedtronicCnlIntentService.POLL_PERIOD_MS, pending); initialPoll, MedtronicCnlIntentService.POLL_PERIOD_MS, pending);
} }
private void uploadCgmData() {
startService(mNightscoutUploadService);
}
private void stopCgmService() { private void stopCgmService() {
Log.i(TAG, "stopCgmService called"); Log.i(TAG, "stopCgmService called");
...@@ -486,7 +490,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -486,7 +490,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
PumpInfo pump = getActivePump(); PumpInfo pump = getActivePump();
if (pump != null & pump.isValid()) { if (pump != null && pump.isValid()) {
pumpStatusData = pump.getPumpHistory().last(); pumpStatusData = pump.getPumpHistory().last();
} }
...@@ -597,6 +601,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -597,6 +601,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
}); });
} }
// TODO - handle isOffline in NightscoutUploadIntentService?
uploadCgmData();
refreshDisplay(); refreshDisplay();
} }
} }
......
...@@ -21,6 +21,7 @@ import org.apache.http.params.HttpParams; ...@@ -21,6 +21,7 @@ import org.apache.http.params.HttpParams;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.math.BigDecimal;
import java.net.URL; import java.net.URL;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -232,10 +233,11 @@ public class NightscoutUploadIntentService extends IntentService { ...@@ -232,10 +233,11 @@ public class NightscoutUploadIntentService extends IntentService {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("uploaderBattery", MainActivity.batLevel); json.put("uploaderBattery", MainActivity.batLevel);
json.put("device", record.getDeviceName()); json.put("device", record.getDeviceName());
json.put("created_at", ISO8601_DATE_FORMAT.format(record.getPumpDate()));
JSONObject pumpInfo = new JSONObject(); JSONObject pumpInfo = new JSONObject();
pumpInfo.put("clock", ISO8601_DATE_FORMAT.format(record.getPumpDate())); 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(); JSONObject iob = new JSONObject();
iob.put("timestamp", record.getPumpDate()); iob.put("timestamp", record.getPumpDate());
......
// 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 { buildscript {
repositories { repositories {
jcenter() jcenter()
} }
dependencies { 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 // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
classpath "io.realm:realm-gradle-plugin:1.0.0" classpath "io.realm:realm-gradle-plugin:1.0.0"
......
#Sun May 01 23:04:04 AEST 2016 #Sat Nov 12 11:44:13 AEDT 2016
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment