diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index f7b3a44868ac2205316394f265d244b59e4f592c..45c8774f7df8f10c479c8ef6b7570caba9a0d4b4 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,5 +2,10 @@ <profile version="1.0"> <option name="myName" value="Project Default" /> <inspection_tool class="AndroidLintRtlHardcoded" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="AndroidLintUselessParent" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false"> + <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" /> + <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" /> + </inspection_tool> </profile> </component> \ No newline at end of file diff --git a/.idea/libraries/appcompat_v7_21_0_3.xml b/.idea/libraries/appcompat_v7_21_0_3.xml new file mode 100644 index 0000000000000000000000000000000000000000..52ea574e89cf839e9ed2760007ab7219830ba164 --- /dev/null +++ b/.idea/libraries/appcompat_v7_21_0_3.xml @@ -0,0 +1,10 @@ +<component name="libraryTable"> + <library name="appcompat-v7-21.0.3"> + <CLASSES> + <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3/res" /> + <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3/jars/classes.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> +</component> \ No newline at end of file diff --git a/.idea/libraries/commons_lang3_3_4.xml b/.idea/libraries/commons_lang3_3_4.xml new file mode 100644 index 0000000000000000000000000000000000000000..e55d8a6ae51f08cbc2d1745daab9248048797031 --- /dev/null +++ b/.idea/libraries/commons_lang3_3_4.xml @@ -0,0 +1,11 @@ +<component name="libraryTable"> + <library name="commons-lang3-3.4"> + <CLASSES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.4/5fe28b9518e58819180a43a850fbc0dd24b7c050/commons-lang3-3.4.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES> + <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.4/b49dafc9cfef24c356827f322e773e7c26725dd2/commons-lang3-3.4-sources.jar!/" /> + </SOURCES> + </library> +</component> \ No newline at end of file diff --git a/.idea/libraries/support_annotations_21_0_3.xml b/.idea/libraries/support_annotations_21_0_3.xml new file mode 100644 index 0000000000000000000000000000000000000000..b8eeb0cac515f61968922565fbe567e6a813415c --- /dev/null +++ b/.idea/libraries/support_annotations_21_0_3.xml @@ -0,0 +1,11 @@ +<component name="libraryTable"> + <library name="support-annotations-21.0.3"> + <CLASSES> + <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/21.0.3/support-annotations-21.0.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES> + <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/21.0.3/support-annotations-21.0.3-sources.jar!/" /> + </SOURCES> + </library> +</component> \ No newline at end of file diff --git a/.idea/libraries/support_v4_21_0_3.xml b/.idea/libraries/support_v4_21_0_3.xml new file mode 100644 index 0000000000000000000000000000000000000000..064682a5d37ef40677a278bf6451f8faaf831377 --- /dev/null +++ b/.idea/libraries/support_v4_21_0_3.xml @@ -0,0 +1,13 @@ +<component name="libraryTable"> + <library name="support-v4-21.0.3"> + <CLASSES> + <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/res" /> + <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars/libs/internal_impl-21.0.3.jar!/" /> + <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars/classes.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES> + <root url="jar://$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-v4/21.0.3/support-v4-21.0.3-sources.jar!/" /> + </SOURCES> + </library> +</component> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981032aa01b060f5a568641d7a8840cc90dc..fbb68289f4352bf149aa31a2c9940faa99174224 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ <ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="0" id="Remove" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 47a223cf29bf5f923de391b4b8539ec8c6fca6b1..51b1b8bed761cee6de041dfcd4832514297c577c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -17,54 +17,54 @@ </component> <component name="AndroidLayouts"> <shared> - <config /> + <config> + <target>android-19</target> + </config> </shared> + <layouts> + <layout url="file://$PROJECT_DIR$/.idea/misc.xml"> + <config> + <theme>@style/AppBaseTheme</theme> + </config> + </layout> + <layout url="file://$PROJECT_DIR$/app/src/main/res/layout/adb.xml"> + <config> + <theme>@android:style/Theme.DeviceDefault</theme> + </config> + </layout> + </layouts> </component> <component name="AndroidLogFilters"> <option name="TOOL_WINDOW_CONFIGURED_FILTER" value="Show only selected application" /> </component> <component name="ChangeListManager"> <list default="true" id="73c0df16-fbb3-4a39-b542-4a9ed61c734a" name="Default" comment="Commit working version of Uploader before refactoring messages to be "classier"."> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java" /> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/logback_android_1_1_1_3.xml" afterPath="" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/mongo_java_driver_3_0_2.xml" afterPath="" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/physicaloidlibrary.xml" afterPath="" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/slf4j_api_1_7_2.xml" afterPath="" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java" afterPath="" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/gradle.xml" afterPath="$PROJECT_DIR$/.idea/gradle.xml" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/appcompat_v7_21_0_3.xml" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/commons_lang3_3_4.xml" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/support_annotations_21_0_3.xml" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/support_v4_21_0_3.xml" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java" /> + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/res/layout/activity_login.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/app.iml" afterPath="$PROJECT_DIR$/app/app.iml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/build.gradle" afterPath="$PROJECT_DIR$/app/build.gradle" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" afterPath="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" afterPath="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/menu/menu.xml" afterPath="$PROJECT_DIR$/app/src/main/res/menu/menu.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/values-v11/styles.xml" afterPath="$PROJECT_DIR$/app/src/main/res/values-v11/styles.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/values-v14/styles.xml" afterPath="$PROJECT_DIR$/app/src/main/res/values-v14/styles.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" afterPath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" afterPath="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.gradle" afterPath="$PROJECT_DIR$/build.gradle" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build/intermediates/dex-cache/cache.xml" afterPath="$PROJECT_DIR$/build/intermediates/dex-cache/cache.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" afterPath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" /> </list> <ignored path="MedtronicUploader.iws" /> <ignored path=".idea/workspace.xml" /> @@ -97,7 +97,7 @@ <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java"> <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> - <caret line="524" column="0" selection-start-line="524" selection-start-column="0" selection-end-line="524" selection-end-column="0" /> + <caret line="382" column="34" selection-start-line="382" selection-start-column="34" selection-end-line="382" selection-end-column="34" /> <folding> <element signature="imports" expanded="true" /> </folding> @@ -105,41 +105,21 @@ </provider> </entry> </file> - <file leaf-file-name="UploadHelper.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-1.1111112"> - <caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="false"> + <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="105" column="0" selection-start-line="105" selection-start-column="0" selection-end-line="105" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="MedtronicCNLSession.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> + <state vertical-scroll-proportion="0.6199095"> + <caret line="147" column="0" selection-start-line="147" selection-start-column="0" selection-end-line="147" selection-end-column="0" /> <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="true"> + <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33802816"> - <caret line="189" column="91" selection-start-line="189" selection-start-column="91" selection-end-line="189" selection-end-column="91" /> + <state vertical-scroll-proportion="0.0"> + <caret line="185" column="9" selection-start-line="185" selection-start-column="9" selection-end-line="185" selection-end-column="9" /> <folding /> </state> </provider> @@ -151,6 +131,7 @@ <option name="RECENT_TEMPLATES"> <list> <option value="Interface" /> + <option value="valueResourceFile" /> <option value="Class" /> </list> </option> @@ -649,6 +630,16 @@ <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" /> <option name="name" value="preReleaseUnitTestBuild" /> </ExternalTaskPojo> + <ExternalTaskPojo> + <option name="description" value="Prepare com.android.support:appcompat-v7:21.0.3" /> + <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" /> + <option name="name" value="prepareComAndroidSupportAppcompatV72103Library" /> + </ExternalTaskPojo> + <ExternalTaskPojo> + <option name="description" value="Prepare com.android.support:support-v4:21.0.3" /> + <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" /> + <option name="name" value="prepareComAndroidSupportSupportV42103Library" /> + </ExternalTaskPojo> <ExternalTaskPojo> <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" /> <option name="name" value="prepareDebugAndroidTestDependencies" /> @@ -1252,6 +1243,16 @@ <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" /> <option name="name" value="preReleaseUnitTestBuild" /> </ExternalTaskPojo> + <ExternalTaskPojo> + <option name="description" value="Prepare com.android.support:appcompat-v7:21.0.3" /> + <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" /> + <option name="name" value="prepareComAndroidSupportAppcompatV72103Library" /> + </ExternalTaskPojo> + <ExternalTaskPojo> + <option name="description" value="Prepare com.android.support:support-v4:21.0.3" /> + <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" /> + <option name="name" value="prepareComAndroidSupportSupportV42103Library" /> + </ExternalTaskPojo> <ExternalTaskPojo> <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" /> <option name="name" value="prepareDebugAndroidTestDependencies" /> @@ -1435,7 +1436,7 @@ </option> <option name="modificationStamps"> <map> - <entry key="$PROJECT_DIR$" value="4379299520000" /> + <entry key="$PROJECT_DIR$" value="4383407236000" /> </map> </option> <option name="projectBuildClasspath"> @@ -1617,6 +1618,10 @@ <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar" /> <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/intellij/annotations/12.0/annotations-12.0-sources.jar" /> <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/intellij/annotations/12.0/annotations-12.0.jar" /> + <option value="$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/appcompat-v7/21.0.3/appcompat-v7-21.0.3.aar" /> + <option value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.4/5fe28b9518e58819180a43a850fbc0dd24b7c050/commons-lang3-3.4.jar" /> + <option value="$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-v4/21.0.3/support-v4-21.0.3.aar" /> + <option value="$USER_HOME$/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/21.0.3/support-annotations-21.0.3.jar" /> <option value="$MODULE_DIR$/libs/logback-android-1.1.1-3.jar" /> <option value="$MODULE_DIR$/libs/mongo-java-driver-3.0.2.jar" /> <option value="$MODULE_DIR$/libs/physicaloidlibrary.jar" /> @@ -1706,17 +1711,6 @@ <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> <list> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/widget/CGMWidget.java" /> - <option value="$PROJECT_DIR$/app/src/main/assets/logback.xml" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCGMService.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLService.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/USB/HidBridge.java" /> - <option value="$PROJECT_DIR$/app/build/intermediates/manifests/full/debug/AndroidManifest.xml" /> - <option value="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/CommonUsbDriver.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/HidBridge.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/USBPower.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/USBPower.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbHidDriver.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/TestService.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/AbstractService.java" /> @@ -1738,7 +1732,6 @@ <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java" /> @@ -1746,15 +1739,27 @@ <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" /> - <option value="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" /> - <option value="$PROJECT_DIR$/app/src/main/res/values/strings.xml" /> <option value="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" /> - <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" /> + <option value="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" /> + <option value="$PROJECT_DIR$/app/src/main/res/values-v11/styles.xml" /> + <option value="$PROJECT_DIR$/app/src/main/res/values-v21/styles.xml" /> + <option value="$PROJECT_DIR$/app/src/main/res/values-v14/styles.xml" /> + <option value="$PROJECT_DIR$/app/src/main/res/menu/menu.xml" /> + <option value="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" /> + <option value="$PROJECT_DIR$/app/src/main/res/values/strings.xml" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" /> + <option value="$PROJECT_DIR$/app/build.gradle" /> + <option value="$PROJECT_DIR$/app/src/main/res/layout/activity_login.xml" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java" /> + <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" /> <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" /> </list> @@ -1770,7 +1775,7 @@ <component name="ProjectFrameBounds"> <option name="y" value="23" /> <option name="width" value="1400" /> - <option name="height" value="783" /> + <option name="height" value="807" /> </component> <component name="ProjectInspectionProfilesVisibleTreeState"> <entry key="Project Default"> @@ -1816,7 +1821,6 @@ <foldersAlwaysOnTop value="true" /> </navigator> <panes> - <pane id="Scratches" /> <pane id="ProjectPane" /> <pane id="AndroidView"> <subPane> @@ -1835,281 +1839,12 @@ <option name="myItemId" value="MedtronicUploader" /> <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="res" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="xml" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderTypeNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="res" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="res" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="menu" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderTypeNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="res" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="layout" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderTypeNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="res" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="drawable" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderTypeNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="upload" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="settings" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="service" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="medtronic" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="medtronic" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="service" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="medtronic" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="message" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="MedtronicUploader" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="app" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="java" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="android" /> - <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="dexcom" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> </PATH> </subPane> </pane> <pane id="Scope" /> <pane id="PackagesPane" /> + <pane id="Scratches" /> </panes> </component> <component name="PropertiesComponent"> @@ -2121,20 +1856,23 @@ <property name="ANDROID_EXTENDED_DEVICE_CHOOSER_SERIALS" value="d1cd921" /> <property name="ANDROID_EXTENDED_DEVICE_CHOOSER_AVD" value="Nexus_5_API_23_x86" /> <property name="restartRequiresConfirmation" value="true" /> - <property name="OverrideImplement.combined" value="true" /> - <property name="OverrideImplement.overriding.sorted" value="false" /> - <property name="SearchEverywhereHistoryKey" value="adb	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/layout/adb.xml string	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/values/strings.xml 640g	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java e	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java egv	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java medtronicme	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java chann	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java binary	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java nego	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java commandme	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java contourne	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java con	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" /> + <property name="SearchEverywhereHistoryKey" value="messageu	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java adb	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/layout/adb.xml string	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/values/strings.xml 640g	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java e	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java egv	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java medtronicme	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java chann	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java binary	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java nego	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java commandme	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java contourne	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java con	FILE	file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" /> <property name="last_opened_file_path" value="$USER_HOME$/Desktop" /> - <property name="device.picker.selection" value="Nexus_5_API_23_x86" /> + <property name="device.picker.selection" value="192.168.0.115:5555" /> </component> <component name="RecentsManager"> <key name="CreateClassDialog.RecentsKey"> <recent name="com.nightscout.android.medtronic.message" /> </key> + <key name="android.template.packageName"> + <recent name="com.nightscout.android.dexcom" /> + <recent name="values-v21" /> + </key> <key name="IntroduceConstantDialog.RECENTS_KEY"> <recent name="com.nightscout.android.medtronic.MedtronicCNLReader" /> </key> <key name="MoveClassesOrPackagesDialog.RECENTS_KEY"> + <recent name="com.nightscout.android.medtronic.data" /> <recent name="com.nightscout.android.USB" /> <recent name="com.nightscout.android.medtronic.service" /> <recent name="com.nightscout.android" /> @@ -2144,6 +1882,9 @@ <recent name="com.nightscout.android.USB" /> <recent name="com.nightscout.android.medtronic" /> </key> + <key name="android.template.parentActivityClass"> + <recent name="" /> + </key> </component> <component name="RunManager" selected="Android Application.app"> <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application"> @@ -2392,8 +2133,43 @@ <option name="ACTIVITY_CLASS" value="" /> <method /> </configuration> - <list size="1"> + <configuration default="false" name="LoginActivity" type="AndroidRunConfigurationType" factoryName="Android Application" activateToolWindowBeforeRun="false"> + <module name="app" /> + <option name="DEPLOY" value="true" /> + <option name="ARTIFACT_NAME" value="" /> + <option name="PM_INSTALL_OPTIONS" value="" /> + <option name="ACTIVITY_EXTRA_FLAGS" value="" /> + <option name="MODE" value="specific_activity" /> + <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> + <option name="PREFERRED_AVD" value="" /> + <option name="CLEAR_LOGCAT" value="false" /> + <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> + <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> + <option name="FORCE_STOP_RUNNING_APP" value="true" /> + <option name="DEBUGGER_TYPE" value="Java" /> + <option name="USE_LAST_SELECTED_DEVICE" value="false" /> + <option name="PREFERRED_AVD" value="" /> + <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" /> + <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> + <Native> + <option name="WORKING_DIR" value="" /> + <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" /> + </Native> + <Java /> + <Hybrid> + <option name="WORKING_DIR" value="" /> + <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" /> + </Hybrid> + <Profilers> + <option name="GAPID_DISABLE_PCS" value="false" /> + </Profilers> + <option name="DEEP_LINK" value="" /> + <option name="ACTIVITY_CLASS" value="com.nightscout.android.dexcom.LoginActivity" /> + <method /> + </configuration> + <list size="2"> <item index="0" class="java.lang.String" itemvalue="Android Application.app" /> + <item index="1" class="java.lang.String" itemvalue="Android Application.LoginActivity" /> </list> <configuration name="<template>" type="Applet" default="true" selected="false"> <option name="MAIN_CLASS_NAME" /> @@ -2410,7 +2186,7 @@ </component> <component name="ShelveChangesManager" show_recycled="false" /> <component name="StructureViewFactory"> - <option name="ACTIVE_ACTIONS" value=",SHOW_INHERITED,ALPHA_COMPARATOR" /> + <option name="ACTIVE_ACTIONS" value=",ALPHA_COMPARATOR" /> </component> <component name="SvnConfiguration"> <configuration /> @@ -2441,7 +2217,7 @@ </todo-panel> </component> <component name="ToolWindowManager"> - <frame x="0" y="23" width="1400" height="783" extended-state="0" /> + <frame x="0" y="23" width="1400" height="807" extended-state="0" /> <editor active="true" /> <layout> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32833582" sideWeight="0.4970545" order="6" side_tool="false" content_ui="tabs" /> @@ -2450,22 +2226,20 @@ <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.70464766" sideWeight="0.52061856" order="7" side_tool="true" content_ui="tabs" /> - <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.70464766" sideWeight="0.47938144" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298969" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.748191" sideWeight="0.47938144" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298351" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32833582" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47226387" sideWeight="0.4867452" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32706222" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47178003" sideWeight="0.4867452" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2496318" sideWeight="0.49199083" order="0" side_tool="false" content_ui="combo" /> - <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.60569715" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2496318" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> - <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.42578712" sideWeight="0.47864506" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32850942" sideWeight="0.47864506" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> @@ -2474,6 +2248,8 @@ <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3988006" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298969" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.6049204" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> </layout> </component> <component name="UpdateCopyrightCheckinHandler"> @@ -2503,7 +2279,7 @@ <breakpoints> <line-breakpoint enabled="true" type="java-line"> <url>file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java</url> - <line>238</line> + <line>257</line> <properties /> <option name="timeStamp" value="66" /> </line-breakpoint> @@ -2511,400 +2287,377 @@ <breakpoints-dialog> <breakpoints-dialog /> </breakpoints-dialog> - <option name="time" value="73" /> + <option name="time" value="96" /> </breakpoint-manager> <watches-manager /> </component> <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChecksumException.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsActivity.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.11737089"> - <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" /> + <state vertical-scroll-proportion="0.28169015"> + <caret line="13" column="1" selection-start-line="13" selection-start-column="1" selection-end-line="13" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.5164319"> - <caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" /> + <state vertical-scroll-proportion="-0.12254902"> + <caret line="22" column="46" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="52" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbDriver.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="1.6666666"> - <caret line="73" column="0" selection-start-line="73" selection-start-column="0" selection-end-line="73" selection-end-column="0" /> + <state vertical-scroll-proportion="0.25821596"> + <caret line="29" column="17" selection-start-line="29" selection-start-column="17" selection-end-line="29" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/HidBridge.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.23474178"> - <caret line="10" column="4" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" /> + <state vertical-scroll-proportion="0.18779343"> + <caret line="24" column="13" selection-start-line="24" selection-start-column="13" selection-end-line="24" selection-end-column="13" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/assets/EULA"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.18779343"> - <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.7183099"> - <caret line="49" column="0" selection-start-line="49" selection-start-column="0" selection-end-line="49" selection-end-column="0" /> + <state vertical-scroll-proportion="0.024390243"> + <caret line="1" column="0" selection-start-line="51" selection-start-column="29" selection-end-line="51" selection-end-column="40" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/GlucometerRecord.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/device_filter.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.09389672"> - <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicConstants.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33333334"> - <caret line="84" column="28" selection-start-line="84" selection-start-column="28" selection-end-line="84" selection-end-column="28" /> + <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_main.xml"> + <provider editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> + <provider selected="true" editor-type-id="android-designer"> + <state /> + </provider> </entry> - <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/view/View.java"> - <provider selected="true" editor-type-id="text-editor"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_lock.xml"> + <provider editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> - <caret line="4507" column="0" selection-start-line="4507" selection-start-column="0" selection-end-line="4507" selection-end-column="0" /> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> + <provider selected="true" editor-type-id="android-designer"> + <state /> + </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCGMService.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/example_appwidget_info.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.60294116"> - <caret line="588" column="118" selection-start-line="588" selection-start-column="110" selection-end-line="588" selection-end-column="118" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Service.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values-w820dp/dimens.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.58685446"> - <caret line="191" column="29" selection-start-line="191" selection-start-column="29" selection-end-line="191" selection-end-column="29" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/content/ContextWrapper.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values-v14/dimens.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33171913"> - <caret line="611" column="15" selection-start-line="611" selection-start-column="15" selection-end-line="611" selection-end-column="15" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/AbstractService.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values/dimens.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.2542373"> - <caret line="55" column="16" selection-start-line="55" selection-start-column="16" selection-end-line="55" selection-end-column="16" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/ServiceManager.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-1.6962306"> - <caret line="50" column="29" selection-start-line="50" selection-start-column="20" selection-end-line="50" selection-end-column="29" /> - </state> + <entry file="android-dummy:///Users/lgoedhart/StudioProjects/MedtronicUploader//Theme Editor"> + <provider selected="true" editor-type-id="themeEditor"> + <state theme-name="AppBaseTheme" module-name="app" proportion="0.67" /> </provider> </entry> - <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/view/ContextThemeWrapper.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33259425"> - <caret line="43" column="29" selection-start-line="43" selection-start-column="29" selection-end-line="43" selection-end-column="29" /> - </state> + <entry file="android-dummy:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/Translations Editor"> + <provider selected="true" editor-type-id="string-resource-editor"> + <state /> </provider> </entry> - <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/app/Activity.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33259425"> - <caret line="2079" column="21" selection-start-line="2079" selection-start-column="21" selection-end-line="2079" selection-end-column="21" /> - </state> + <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-xhdpi/ic_launcher.png"> + <provider selected="true" editor-type-id="images"> + <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.3286385"> - <caret line="14" column="31" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" /> - </state> + <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-mdpi/ic_launcher.png"> + <provider selected="true" editor-type-id="images"> + <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.28169015"> - <caret line="12" column="35" selection-start-line="12" selection-start-column="35" selection-end-line="12" selection-end-column="35" /> - </state> + <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-hdpi/ic_launcher.png"> + <provider selected="true" editor-type-id="images"> + <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.91549295"> - <caret line="71" column="74" selection-start-line="71" selection-start-column="74" selection-end-line="71" selection-end-column="74" /> - </state> + <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-ldpi/icon36x36.png"> + <provider selected="true" editor-type-id="images"> + <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-hdpi/ic_action_warning.png"> + <provider selected="true" editor-type-id="images"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values-v14/styles.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.25187033"> - <caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" /> + <state vertical-scroll-proportion="0.17857143"> + <caret line="7" column="66" selection-start-line="7" selection-start-column="66" selection-end-line="7" selection-end-column="66" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values-v11/styles.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.5137157"> - <caret line="17" column="0" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" /> + <state vertical-scroll-proportion="0.15306123"> + <caret line="6" column="66" selection-start-line="6" selection-start-column="66" selection-end-line="6" selection-end-column="66" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values-v21/styles.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.34413967"> - <caret line="46" column="101" selection-start-line="46" selection-start-column="101" selection-end-line="46" selection-end-column="101" /> + <state vertical-scroll-proportion="0.07653061"> + <caret line="3" column="66" selection-start-line="3" selection-start-column="66" selection-end-line="3" selection-end-column="66" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.11737089"> - <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" /> + <state vertical-scroll-proportion="0.7183099"> + <caret line="100" column="29" selection-start-line="100" selection-start-column="29" selection-end-line="100" selection-end-column="29" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.09389672"> - <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" /> + <state vertical-scroll-proportion="2.4744897"> + <caret line="97" column="42" selection-start-line="97" selection-start-column="34" selection-end-line="97" selection-end-column="42" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Record.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/menu/menu.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.09389672"> - <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" /> + <state vertical-scroll-proportion="0.19512194"> + <caret line="8" column="40" selection-start-line="8" selection-start-column="40" selection-end-line="8" selection-end-column="40" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicSensorRecord.java"> + <entry file="file://$PROJECT_DIR$/settings.gradle"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.09389672"> - <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicPumpRecord.java"> + <entry file="file://$PROJECT_DIR$/local.properties"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.5399061"> - <caret line="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicReader.java"> + <entry file="file://$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.28638497"> - <caret line="2848" column="16" selection-start-line="2848" selection-start-column="16" selection-end-line="2848" selection-end-column="16" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.2112676"> - <caret line="9" column="54" selection-start-line="9" selection-start-column="54" selection-end-line="9" selection-end-column="54" /> + <state vertical-scroll-proportion="-3.9629629"> + <caret line="72" column="23" selection-start-line="72" selection-start-column="18" selection-end-line="72" selection-end-column="23" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.3568075"> - <caret line="20" column="7" selection-start-line="20" selection-start-column="7" selection-end-line="20" selection-end-column="7" /> + <state vertical-scroll-proportion="-7.851852"> + <caret line="477" column="64" selection-start-line="477" selection-start-column="54" selection-end-line="477" selection-end-column="64" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java"> + <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/content/res/Resources.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.28169015"> - <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" /> + <state vertical-scroll-proportion="0.33333334"> + <caret line="1405" column="0" selection-start-line="1405" selection-start-column="0" selection-end-line="1405" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomReader.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-0.11737089"> - <caret line="311" column="16" selection-start-line="311" selection-start-column="16" selection-end-line="311" selection-end-column="16" /> + <state vertical-scroll-proportion="0.7892157"> + <caret line="110" column="71" selection-start-line="110" selection-start-column="71" selection-end-line="110" selection-end-column="71" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_lock.xml"> + <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/adb.xml"> <provider editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> + <state vertical-scroll-proportion="-3.75"> + <caret line="6" column="0" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" /> </state> </provider> <provider selected="true" editor-type-id="android-designer"> <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_main.xml"> - <provider editor-type-id="text-editor"> + <entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.4/5fe28b9518e58819180a43a850fbc0dd24b7c050/commons-lang3-3.4.jar!/org/apache/commons/lang3/ArrayUtils.class"> + <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> </state> </provider> - <provider selected="true" editor-type-id="android-designer"> - <state /> - </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-0.625"> - <caret line="15" column="99" selection-start-line="15" selection-start-column="99" selection-end-line="15" selection-end-column="99" /> - <folding /> + <state vertical-scroll-proportion="0.29411766"> + <caret line="13" column="44" selection-start-line="13" selection-start-column="33" selection-end-line="13" selection-end-column="44" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/DataLog.java"> + <entry file="file://$PROJECT_DIR$/build.gradle"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.09389672"> - <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" /> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java"> + <entry file="file://$PROJECT_DIR$/app/build.gradle"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.23474178"> - <caret line="27" column="13" selection-start-line="27" selection-start-column="13" selection-end-line="27" selection-end-column="13" /> + <state vertical-scroll-proportion="0.47511312"> + <caret line="21" column="51" selection-start-line="21" selection-start-column="51" selection-end-line="21" selection-end-column="51" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/TestService.java"> + <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/os/AsyncTask.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="1.1737089"> - <caret line="66" column="95" selection-start-line="66" selection-start-column="95" selection-end-line="66" selection-end-column="95" /> - <folding /> + <state vertical-scroll-proportion="0.022624435"> + <caret line="295" column="0" selection-start-line="295" selection-start-column="0" selection-end-line="295" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsActivity.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.28169015"> - <caret line="13" column="1" selection-start-line="13" selection-start-column="1" selection-end-line="13" selection-end-column="1" /> - <folding /> + <state vertical-scroll-proportion="0.0"> + <caret line="382" column="34" selection-start-line="382" selection-start-column="34" selection-end-line="382" selection-end-column="34" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.30612245"> - <caret line="12" column="30" selection-start-line="12" selection-start-column="30" selection-end-line="12" selection-end-column="30" /> - <folding /> + <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/activity_login.xml"> + <provider editor-type-id="text-editor"> + <state vertical-scroll-proportion="-0.0"> + <caret line="0" column="42" selection-start-line="0" selection-start-column="40" selection-end-line="0" selection-end-column="42" /> </state> </provider> - </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java"> - <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.38967136"> - <caret line="125" column="34" selection-start-line="125" selection-start-column="34" selection-end-line="125" selection-end-column="34" /> - <folding> - <element signature="e#2820#2839#0" expanded="true" /> - <element signature="e#2943#3357#0" expanded="true" /> - <element signature="e#3356#3357#0" expanded="true" /> - </folding> - </state> + <provider selected="true" editor-type-id="android-designer"> + <state /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbHidDriver.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-0.12254902"> - <caret line="22" column="46" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="52" /> - <folding /> + <state vertical-scroll-proportion="0.5233786"> + <caret line="62" column="0" selection-start-line="62" selection-start-column="0" selection-end-line="62" selection-end-column="0" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.025510205"> - <caret line="1" column="0" selection-start-line="51" selection-start-column="29" selection-end-line="51" selection-end-column="40" /> - <folding> - <element signature="e#3657#3674#0" expanded="true" /> - </folding> + <state vertical-scroll-proportion="0.77375567"> + <caret line="47" column="45" selection-start-line="47" selection-start-column="45" selection-end-line="47" selection-end-column="45" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/menu/menu.xml"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java"> <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> - <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> + <caret line="266" column="50" selection-start-line="266" selection-start-column="50" selection-end-line="266" selection-end-column="50" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="1.8544601"> - <caret line="82" column="37" selection-start-line="82" selection-start-column="37" selection-end-line="82" selection-end-column="37" /> - <folding /> + <state vertical-scroll-proportion="0.18099548"> + <caret line="8" column="37" selection-start-line="8" selection-start-column="37" selection-end-line="8" selection-end-column="37" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="524" column="0" selection-start-line="524" selection-start-column="0" selection-end-line="524" selection-end-column="0" /> - <folding> - <element signature="imports" expanded="true" /> - </folding> + <state vertical-scroll-proportion="0.4524887"> + <caret line="23" column="1" selection-start-line="10" selection-start-column="37" selection-end-line="23" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/adb.xml"> - <provider editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="5" column="27" selection-start-line="5" selection-start-column="27" selection-end-line="5" selection-end-column="27" /> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.33333334"> + <caret line="23" column="8" selection-start-line="23" selection-start-column="8" selection-end-line="23" selection-end-column="8" /> <folding /> </state> </provider> - <provider selected="true" editor-type-id="android-designer"> - <state /> - </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="-1.1111112"> - <caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" /> - <folding /> + <state vertical-scroll-proportion="0.34633029"> + <caret line="87" column="113" selection-start-line="87" selection-start-column="26" selection-end-line="87" selection-end-column="113" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java"> <provider selected="true" editor-type-id="text-editor"> <state vertical-scroll-proportion="0.0"> - <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> + <caret line="185" column="9" selection-start-line="185" selection-start-column="9" selection-end-line="185" selection-end-column="9" /> <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.0"> - <caret line="105" column="0" selection-start-line="105" selection-start-column="0" selection-end-line="105" selection-end-column="0" /> - <folding /> + <state vertical-scroll-proportion="0.22624435"> + <caret line="10" column="0" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" /> + <folding> + <element signature="e#1552#1553#0" expanded="true" /> + <element signature="e#1584#1585#0" expanded="true" /> + <element signature="e#1624#1625#0" expanded="true" /> + <element signature="e#1654#1655#0" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java"> + <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java"> <provider selected="true" editor-type-id="text-editor"> - <state vertical-scroll-proportion="0.33802816"> - <caret line="189" column="91" selection-start-line="189" selection-start-column="91" selection-end-line="189" selection-end-column="91" /> + <state vertical-scroll-proportion="0.6199095"> + <caret line="147" column="0" selection-start-line="147" selection-start-column="0" selection-end-line="147" selection-end-column="0" /> <folding /> </state> </provider> diff --git a/app/app.iml b/app/app.iml index afe68c33758cbc3a866091b0a3509986937eaba5..2ffd9f0ef19eb21d225e2041fc33a91039c2434c 100644 --- a/app/app.iml +++ b/app/app.iml @@ -64,14 +64,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/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" /> - <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" 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/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" /> @@ -80,13 +72,22 @@ <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/.DS_Store" /> + <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" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" 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/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" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3/jars" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" /> @@ -108,8 +109,12 @@ </content> <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" /> <orderEntry type="library" exported="" name="mongo-java-driver-3.0.2" level="project" /> <orderEntry type="library" exported="" name="physicaloidlibrary" level="project" /> + <orderEntry type="library" exported="" name="commons-lang3-3.4" level="project" /> + <orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" /> + <orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" /> <orderEntry type="library" exported="" name="slf4j-api-1.7.2" level="project" /> <orderEntry type="library" exported="" name="logback-android-1.1.1-3" level="project" /> </component> diff --git a/app/build.gradle b/app/build.gradle index 15a27298cbebcbb4ca6594d27646de574e078130..9e81a6bc1fda906014610fcf153c0a885a47d60b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,6 +19,8 @@ android { } dependencies { + compile 'com.android.support:appcompat-v7:21.+' + compile 'org.apache.commons:commons-lang3:3.4' compile files('libs/logback-android-1.1.1-3.jar') compile files('libs/mongo-java-driver-3.0.2.jar') compile files('libs/physicaloidlibrary.jar') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6d77c7dd8a51dab508d7fa6e6267aeda9eb1ef92..c451ba5d338a56428c0f8c1ea060a7edf5f9d898 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,62 +1,103 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.nightscout.android" - android:versionCode="1" - android:versionName="1.0"> + package="com.nightscout.android" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk + android:maxSdkVersion="21" + android:minSdkVersion="15" + android:targetSdkVersion="21" /> + <uses-feature android:name="android.hardware.usb.host" /> - <uses-sdk android:minSdkVersion="15" android:maxSdkVersion="21" android:targetSdkVersion="21"/> - <uses-permission android:name="android.permission.INTERNET"></uses-permission> - <uses-permission android:name="android.permission.VIBRATE"></uses-permission> - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> - <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission> - <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> - <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> + + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.VIBRATE" /> + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> + <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /> + <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> + <uses-permission android:name="android.permission.WAKE_LOCK" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> + <!-- To auto-complete the email text field in the login form with the user's emails --> + <uses-permission android:name="android.permission.GET_ACCOUNTS" /> + <uses-permission android:name="android.permission.READ_PROFILE" /> + <uses-permission android:name="android.permission.READ_CONTACTS" /> + + <android:uses-permission android:name="android.permission.READ_PHONE_STATE" /> + <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <android:uses-permission android:name="android.permission.READ_CALL_LOG" /> + + <application + android:allowBackup="true" + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" + android:theme="@style/AppBaseTheme" > + <!-- I have set screenOrientation to "portrait" to avoid the restart of AsyncTasks when you rotate the phone --> - <activity - android:name=".dexcom.DexcomG4Activity" - android:icon="@drawable/ic_launcher" - android:label="NightScout" - android:launchMode="singleTask" - android:screenOrientation="portrait" - > - <intent-filter android:icon="@drawable/ic_launcher"> + <activity + android:name=".dexcom.DexcomG4Activity" + android:icon="@drawable/ic_launcher" + android:label="NightScout" + android:launchMode="singleTask" + android:screenOrientation="portrait" > + <intent-filter android:icon="@drawable/ic_launcher" > <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> - <intent-filter android:icon="@drawable/ic_launcher" > + <intent-filter android:icon="@drawable/ic_launcher" > <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> </intent-filter> <meta-data - android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" - android:resource="@xml/device_filter" /> + android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" + android:resource="@xml/device_filter" /> </activity> - <activity android:name=".settings.SettingsActivity" - android:icon="@drawable/ic_launcher" - android:label="Settings"/> - - <service android:icon="@drawable/ic_launcher" android:name=".dexcom.DexcomG4Service" > + <activity + android:name=".settings.SettingsActivity" + android:icon="@drawable/ic_launcher" + android:label="Settings" /> + + <service + android:name=".dexcom.DexcomG4Service" + android:icon="@drawable/ic_launcher" > </service> - <!--<service android:icon="@drawable/ic_launcher" + <!-- + <service android:icon="@drawable/ic_launcher" android:label="NightScout" android:name=".medtronic.MedtronicCGMService"> - </service>--> - <service android:icon="@drawable/ic_launcher" android:name=".medtronic.service.MedtronicCNLService" > </service> - <service android:icon="@drawable/ic_launcher" android:process=":nightscoutcnlservice" android:name=".medtronic.service.TestService" > + --> + <service + android:name=".medtronic.service.MedtronicCNLService" + android:icon="@drawable/ic_launcher" > </service> - <service android:icon="@drawable/ic_launcher" - android:label="NightScout" android:name=".widget.CGMWidgetUpdater"> + <service + android:name=".medtronic.service.TestService" + android:icon="@drawable/ic_launcher" + android:process=":nightscoutcnlservice" > + </service> + <service + android:name=".widget.CGMWidgetUpdater" + android:icon="@drawable/ic_launcher" + android:label="NightScout" > </service> - <receiver android:name=".widget.CGMWidget" > - <intent-filter> - <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> - </intent-filter> - <meta-data android:name="android.appwidget.provider" - android:resource="@xml/example_appwidget_info" /> - </receiver> + + <receiver android:name=".widget.CGMWidget" > + <intent-filter> + <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> + </intent-filter> + + <meta-data + android:name="android.appwidget.provider" + android:resource="@xml/example_appwidget_info" /> + </receiver> + + <activity + android:name=".dexcom.LoginActivity" + android:label="@string/title_activity_login" > + </activity> </application> + </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java index f1794249fe5bb3cfcf96939a2d0caf73565f2540..f183f1140462b6da6c525b8373c03153b404c19a 100644 --- a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java +++ b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java @@ -1,25 +1,12 @@ package com.nightscout.android.dexcom; -import java.io.File; -import java.io.FileInputStream; -import java.io.ObjectInputStream; -import java.text.DateFormat; -import java.text.DecimalFormat; - -import org.slf4j.LoggerFactory; -import org.slf4j.Logger; - import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; -import android.app.AlertDialog; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.graphics.Color; @@ -32,7 +19,6 @@ import android.os.RemoteException; import android.os.StrictMode; import android.preference.PreferenceManager; import android.text.Html; -import android.text.InputType; import android.text.format.DateUtils; import android.text.method.ScrollingMovementMethod; import android.util.Log; @@ -52,14 +38,21 @@ import com.nightscout.android.R; import com.nightscout.android.eula.Eula; import com.nightscout.android.eula.Eula.OnEulaAgreedTo; import com.nightscout.android.medtronic.MedtronicCGMService; -import com.nightscout.android.medtronic.service.MedtronicCNLService; import com.nightscout.android.medtronic.MedtronicConstants; +import com.nightscout.android.medtronic.service.MedtronicCNLService; import com.nightscout.android.service.ServiceManager; import com.nightscout.android.settings.SettingsActivity; import com.nightscout.android.upload.Medtronic640gPumpRecord; -import com.nightscout.android.upload.MedtronicSensorRecord; import com.nightscout.android.upload.Record; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.text.DecimalFormat; + /* Main activity for the DexcomG4Activity program */ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChangeListener, OnEulaAgreedTo { private Logger log = (Logger) LoggerFactory.getLogger(DexcomG4Activity.class.getName()); @@ -97,14 +90,12 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan Boolean mHandlerActive = false; Object mHandlerActiveLock = new Object(); Boolean usbAllowedPermission = false; - //final Messenger mMessenger = new Messenger(new IncomingHandler()); ActivityManager manager = null; final Context ctx = this; SharedPreferences settings = null; SharedPreferences prefs = null; private static final boolean ISDEBUG = true; - // TODO - merge this with IncomingHandler public class DexcomG4ActivityHandler extends Handler { public static final int MSG_ERROR = 1; public static final int MSG_STATUS = 2; @@ -115,7 +106,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan Log.d( TAG, "Got message from Service." ); switch ( cgmSelected ) { case CNL_24: - //usbAllowedPermission = true; switch (msg.what) { case MSG_ERROR: display.setText(msg.obj.toString(), BufferType.EDITABLE); @@ -147,12 +137,14 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan log.info("mmolxl false --> " + bglString); } + //mTitleTextView.setTextColor(Color.YELLOW); mTitleTextView.setText(Html.fromHtml( - String.format( "<big><b>%s</b></big> <small>%s</small>", bglString, unitsString))); + String.format( "<big><b>%s</b></big> <small>%s %s</small>", + bglString, unitsString, renderTrendHtml(record.getTrend())))); mDumpTextView.setTextColor(Color.WHITE); mDumpTextView.setText(Html.fromHtml( - String.format( "<b>BGL at:</b> %s<br/><b>Pump Time:</b> %s<br/><b>Active Insulin: <b>%.3f<br/><b>Rate of Change: </b>%s", + String.format( "<b>BGL at:</b> %s<br/><b>Pump Time:</b> %s<br/><b>Active Insulin: </b>%.3f<br/><b>Rate of Change: </b>%s", DateUtils.formatDateTime(getBaseContext(),record.sensorBGLDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME), DateUtils.formatDateTime(getBaseContext(),record.pumpDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME), record.activeInsulin, @@ -168,338 +160,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan } } - /* - class IncomingHandler extends Handler { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case MedtronicConstants.MSG_MEDTRONIC_CGM_MESSAGE_RECEIVED: - Log.i("MessageReceived", msg.getData().getString("data") + "\n"); - if (ISDEBUG) { - display.setText(display.getText() + "Medtronic CGM Message: " + msg.getData().getString("data") + "\n", BufferType.EDITABLE); - msgsDisplayed++; - } - mHandler.removeCallbacks(updateDataView); - mHandler.post(updateDataView); - break; - case MedtronicConstants.MSG_MEDTRONIC_CGM_CLEAR_DISPLAY: - if (ISDEBUG) { - display.setText("", BufferType.EDITABLE); - msgsDisplayed = 0; - } - break; - case MedtronicConstants.MSG_MEDTRONIC_CGM_NO_PERMISSION: - usbAllowedPermission = false; - mHandler.removeCallbacks(updateDataView); - mHandler.post(updateDataView); - break; - case MedtronicConstants.MSG_MEDTRONIC_GLUCMEASURE_DETECTED: - showUseCalibConfirmation(msg.getData().getFloat("data"), msg.getData().getBoolean("calibrating"), msg.getData().getBoolean("isCalFactorFromPump")); - break; - case MedtronicConstants.MSG_MEDTRONIC_CGM_USB_GRANTED: - usbAllowedPermission = true; - mHandler.removeCallbacks(updateDataView); - mHandler.post(updateDataView); - break; - case MedtronicConstants.MSG_MEDTRONIC_CGM_ERROR_RECEIVED: - Log.e("MessageReceived", msg.getData().getString("data") + "\n"); - if (ISDEBUG) { - if (msgsDisplayed > 8) { - display.setText("", BufferType.EDITABLE); - msgsDisplayed = 0; - } - String sText = display.getText().toString(); - String sError = msg.getData().getString("data"); - if (!(sText.indexOf(sError) >= 0)) { - display.setText(display.getText() + "Medtronic CGM Message: " + sError + "\n", BufferType.EDITABLE); - msgsDisplayed++; - } - } - break; - case MedtronicConstants.MSG_MEDTRONIC_CALIBRATION_DONE: - Log.e("MessageReceived", MedtronicConstants.MSG_MEDTRONIC_CALIBRATION_DONE + "\n"); - mHandler.removeCallbacks(updateDataView); - mHandler.post(updateDataView); - break; - case MedtronicConstants.MSG_REFRESH_DB_CONNECTION: - if (mService != null) { - try { - Message message = Message.obtain(null, MedtronicConstants.MSG_REFRESH_DB_CONNECTION); - msg.replyTo = mMessenger; - mService.send(message); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("ApprovGlucValReceived", "Error approving gluc. value \n " + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error approving gluc. value\n", BufferType.EDITABLE); - } - } - } - break; - default: - super.handleMessage(msg); - } - } - } - */ - - /* - private void showUseCalibConfirmation(final float num, final boolean calibrate, final boolean isCalFactorFromPump) { - AlertDialog.Builder alert = new AlertDialog.Builder(ctx); - alert.setTitle("Calibration Detected!!!"); - alert.setMessage("Do you want to use the received glucometer value for calibration?"); - - alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_GLUCMEASURE_APPROVED); - Bundle b = new Bundle(); - b.putBoolean("approved", true); - b.putFloat("data", num); - b.putBoolean("calibrating", calibrate); - b.putBoolean("isCalFactorFromPump", isCalFactorFromPump); - msg.setData(b); - msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("ApprovGlucValReceived", "Error approving gluc. value \n " + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error approving gluc. value\n", BufferType.EDITABLE); - } - } - } - } - }); - - alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_GLUCMEASURE_APPROVED); - Bundle b = new Bundle(); - - b.putBoolean("approved", false); - - msg.setData(b); - msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("ApprovGlucValReceived", "Error approving gluc. value \n " + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error approving gluc. value\n", BufferType.EDITABLE); - } - } - } - } - }); - - alert.show(); - } - */ - - /* - private ServiceConnection mConnection = new ServiceConnection() { - public void onServiceConnected(ComponentName className, IBinder service) { - bService = service; - mService = new Messenger(service); - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_REGISTER_CLIENT); - msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("CGM_ONSERVICECONNECT", "Error Registering Client Service Connection\n" + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error Registering Client Service Connection\n", BufferType.EDITABLE); - } - // In this case the service has crashed before we could even do anything with it - } - } - - public void onServiceDisconnected(ComponentName className) { - // This is called when the connection with the service has been unexpectedly disconnected - process crashed. - mService = null; - bService = null; - Log.i("CGM_ONSERVICEDISCONNECT", "Service Disconnected\n"); - if (ISDEBUG) { - display.setText(display.getText() + "Service Disconnected\n", BufferType.EDITABLE); - } - } - }; - */ - - - //All I'm really doing here is creating a simple activity to launch and maintain the service - /* - private Runnable updateDataView = new Runnable() { - public void run() { - synchronized (mHandlerActiveLock) { - if (!mHandlerActive) - return; - if (!isMyServiceRunning()) { - if (retryCount < maxRetries) { - stopCGMServices(); - startCGMServices(); - mTitleTextView.setTextColor(Color.YELLOW); - mTitleTextView.setText("Connecting..."); - Log.i(TAG, "Starting service " + retryCount + "/" + maxRetries); - ++retryCount; - } else { - mHandler.removeCallbacks(updateDataView); - Log.i(TAG, "Unable to restart service, trying to recreate the activity"); - //recreate(); - } - } else { - retryCount = 0; - if (usbAllowedPermission) { - mTitleTextView.setTextColor(Color.GREEN); - mTitleTextView.setText("CGM Service Started"); - b1.setText("Stop Uploading CGM Data"); - Record auxRecord = DexcomG4Activity.this.loadClassFile(new File(getBaseContext().getFilesDir(), "save.bin")); - long calDate = -1; - try { - if (settings.contains("lastCalibrationDate")) { - calDate = settings.getLong("lastCalibrationDate", -1); - } - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - - - DecimalFormat df = null; - if (prefs.getBoolean("mmolDecimals", false)) - df = new DecimalFormat("#.##"); - else - df = new DecimalFormat("#.#"); - if (cgmSelected == MEDTRONIC_CGM && auxRecord instanceof MedtronicSensorRecord && auxRecord != null) { - - MedtronicSensorRecord record = (MedtronicSensorRecord) auxRecord; - - if (prefs.getBoolean("mmolxl", false)) { - Float fBgValue = null; - try { - fBgValue = (float) Integer.parseInt(record.bGValue); - log.info("mmolxl true --> " + record.bGValue); - record.bGValue = df.format(fBgValue / 18f); - log.info("mmolxl/18 true --> " + record.bGValue); - } catch (Exception e) { - - } - } else - log.info("mmolxl false --> " + record.bGValue); - boolean isCalibrating = record.isCalibrating; - String calib = "---"; - if (isCalibrating) { - calib = MedtronicConstants.CALIBRATING_STR; - } else { - calib = MedtronicConstants.getCalibrationStrValue(record.calibrationStatus); - } - calib += "\nlast cal. "; - String tail = " min. ago"; - int lastCal = 0; - if (calDate > 0) { - lastCal = (int) ((System.currentTimeMillis() - calDate) / 60000); - if (lastCal >= 60) { - lastCal = lastCal / 60; - tail = " hour(s) ago"; - } - } - calib += "" + lastCal + tail; - if (prefs.getBoolean("isWarmingUp", false)) { - calib = ""; - record.bGValue = "W_Up"; - record.trendArrow = "---"; - } - mDumpTextView.setTextColor(Color.WHITE); - if (record.displayDateTime == 0) { - mDumpTextView.setText("\n" + record.displayTime + "\n" + record.bGValue + " " + record.trendArrow + "\n" + calib + "\n"); - } else - mDumpTextView.setText("\n" + (System.currentTimeMillis() - record.displayDateTime) / 60000 + " min. ago\n" + record.bGValue + " " + record.trendArrow + "\n" + calib + "\n"); - - } else if (cgmSelected == CNL_24 && auxRecord instanceof Medtronic640gPumpRecord && auxRecord != null) { - Medtronic640gPumpRecord record = (Medtronic640gPumpRecord) auxRecord; - - String bglString = "---"; - String unitsString = "mg/dL"; - if (prefs.getBoolean("mmolxl", false)) { - try { - float fBgValue = Float.valueOf(record.sensorBGL); - bglString = df.format(fBgValue / 18.016f); - unitsString = "mmol/L"; - log.info("mmolxl true --> " + bglString); - } catch (Exception e) { - - } - } else { - bglString = String.valueOf(record.sensorBGL); - log.info("mmolxl false --> " + bglString); - } - mDumpTextView.setTextColor(Color.WHITE); - mDumpTextView.setText(Html.fromHtml( - String.format( "<div><big><b>%s</b></big> <small>%s</small></div><br/>%s", bglString, unitsString, record.displayTime ) - )); - } else if (auxRecord instanceof EGVRecord) { - EGVRecord record = (EGVRecord) auxRecord; - if (prefs.getBoolean("mmolxl", false)) { - Float fBgValue = null; - try { - fBgValue = (float) Integer.parseInt(record.bGValue); - log.info("mmolxl true --> " + record.bGValue); - record.bGValue = df.format(fBgValue / 18f); - log.info("mmolxl/18 true --> " + record.bGValue); - } catch (Exception e) { - - } - } else - log.info("mmolxl false --> " + record.bGValue); - mDumpTextView.setTextColor(Color.WHITE); - mDumpTextView.setText("\n" + record.displayTime + "\n" + record.bGValue + " " + record.trendArrow + "\n"); - } else { - mDumpTextView.setTextColor(Color.WHITE); - if (auxRecord == null || auxRecord.displayTime == null) - mDumpTextView.setText("\n---\n---\n---\n"); - else - mDumpTextView.setText("\n" + auxRecord.displayTime + "\n---\n---\n"); - } - } catch (Exception e) { - e.printStackTrace(); - } - - } else { - b1.setText("Start Uploading CGM Data"); - mTitleTextView.setTextColor(Color.RED); - mTitleTextView.setText("CGM Service Stopped"); - } - - } - - mHandler.removeCallbacks(updateDataView); - mHandler.postDelayed(updateDataView, 60000); - } - } - }; - */ - - private class BatteryReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { @@ -557,10 +217,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan mHandlerActive = true; } - - //mTitleTextView.setTextColor(Color.YELLOW); - //mTitleTextView.setText("CGM Service Pending"); - b1.setText("Stop Uploading CGM Data"); lnr.addView(b1); lnr2.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); @@ -572,15 +228,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan b4.setText("Get Now"); b4.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f)); lnr3.addView(b4); - if (menu != null) { - if (calibrationSelected == MedtronicConstants.CALIBRATION_MANUAL) { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(true); - } else { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(false); - } - } + if (ISDEBUG) { lnr3.addView(b2); } @@ -683,108 +331,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan protected void onResume() { log.info("ON RESUME!"); super.onResume(); - // Refresh the status - /* - try { - Record auxRecord = DexcomG4Activity.this.loadClassFile(new File( - getBaseContext().getFilesDir(), "save.bin")); - long calDate = -1; - if (settings.contains("lastCalibrationDate")) { - calDate = settings.getLong("lastCalibrationDate", -1); - } - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - - DecimalFormat df = null; - if (prefs.getBoolean("mmolDecimals", false)) - df = new DecimalFormat("#.##"); - else - df = new DecimalFormat("#.#"); - if (cgmSelected == MEDTRONIC_CGM - && auxRecord instanceof MedtronicSensorRecord - && auxRecord != null) { - - MedtronicSensorRecord record = (MedtronicSensorRecord) auxRecord; - - if (prefs.getBoolean("mmolxl", false)) { - Float fBgValue = null; - try { - fBgValue = (float) Integer.parseInt(record.bGValue); - log.info("mmolxl true --> " + record.bGValue); - record.bGValue = df.format(fBgValue / 18f); - log.info("mmolxl/18 true --> " + record.bGValue); - } catch (Exception e) { - - } - } else - log.info("mmolxl false --> " + record.bGValue); - boolean isCalibrating = record.isCalibrating; - String calib = "---"; - if (isCalibrating) { - calib = MedtronicConstants.CALIBRATING_STR; - } else { - calib = MedtronicConstants - .getCalibrationStrValue(record.calibrationStatus); - } - calib += "\nlast cal. "; - String tail = " min. ago"; - int lastCal = 0; - if (calDate > 0) { - lastCal = (int) ((System.currentTimeMillis() - calDate) / 60000); - if (lastCal >= 60) { - lastCal = lastCal / 60; - tail = " hour(s) ago"; - } - } - calib += "" + lastCal + tail; - if (prefs.getBoolean("isWarmingUp", false)) { - calib = ""; - record.bGValue = "W_Up"; - record.trendArrow = "---"; - } - mDumpTextView.setTextColor(Color.WHITE); - if (record.displayDateTime == 0) { - mDumpTextView.setText("\n" + record.displayTime + "\n" - + record.bGValue + " " + record.trendArrow + "\n" - + calib + "\n"); - } else - mDumpTextView - .setText("\n" - + (System.currentTimeMillis() - record.displayDateTime) - / 60000 + " min. ago\n" + record.bGValue - + " " + record.trendArrow + "\n" + calib - + "\n"); - - } else if (auxRecord instanceof EGVRecord) { - EGVRecord record = (EGVRecord) auxRecord; - if (prefs.getBoolean("mmolxl", false)) { - Float fBgValue = null; - try { - fBgValue = (float) Integer.parseInt(record.bGValue); - log.info("mmolxl true --> " + record.bGValue); - record.bGValue = df.format(fBgValue / 18f); - log.info("mmolxl/18 true --> " + record.bGValue); - } catch (Exception e) { - - } - } else - log.info("mmolxl false --> " + record.bGValue); - mDumpTextView.setTextColor(Color.WHITE); - mDumpTextView.setText("\n" + record.displayTime + "\n" - + record.bGValue + " " + record.trendArrow + "\n"); - } else { - mDumpTextView.setTextColor(Color.WHITE); - if (auxRecord == null || auxRecord.displayTime == null) - mDumpTextView.setText("\n---\n---\n---\n"); - else - mDumpTextView.setText("\n" + auxRecord.displayTime - + "\n---\n---\n"); - } - } catch (Exception e) { - e.printStackTrace(); - } - */ - } //Check to see if service is running @@ -822,32 +368,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan MenuInflater inflater = getMenuInflater(); this.menu = menu; inflater.inflate(R.menu.menu, menu); - if (cgmSelected == MEDTRONIC_CGM) { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - if (prefs.contains("calibrationType")) { - String type = prefs.getString("calibrationType", "3"); - if ("3".equalsIgnoreCase(type)) - menu.getItem(2).setVisible(false); - else if ("2".equalsIgnoreCase(type)) { - menu.getItem(2).setVisible(true); - } else - menu.getItem(2).setVisible(false); - } - menu.getItem(1).setVisible(true); - if (calibrationSelected == MedtronicConstants.CALIBRATION_MANUAL) { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(true); - } else { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(false); - } - } else { - menu.getItem(2).setVisible(false); - menu.getItem(1).setVisible(false); - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(false); - } + return true; } @@ -856,180 +377,13 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan switch (item.getItemId()) { case R.id.menu_settings: - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); + Intent settingsIntent = new Intent(this, SettingsActivity.class); + startActivity(settingsIntent); break; - case R.id.refreshCalFactor: - if (mService == null && bService != null) { - mService = new Messenger(bService); - } - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_GET_SENSORCAL_FACTOR); - //msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - //log.error("medtronicManualCalibration", "Error sending Manual Calibration\n "+sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error sending get sensor Calibration factor\n", BufferType.EDITABLE); - } - // In this case the service has crashed before we could even do anything with it - } - } - - break; - case R.id.readPumpInfo: - if (mService == null && bService != null) { - mService = new Messenger(bService); - } - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_GET_PUMP_INFO); - //msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - //log.error("medtronicManualCalibration", "Error sending Manual Calibration\n "+sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error sending get pump info\n", BufferType.EDITABLE); - } - // In this case the service has crashed before we could even do anything with it - } - } + case R.id.registerCNL: + Intent loginIntent = new Intent(this, LoginActivity.class); + startActivity(loginIntent); break; - case R.id.calibMan: { - - log.debug("Manual Calibration"); - AlertDialog.Builder alert = new AlertDialog.Builder(ctx); - alert.setTitle("Manual Calibration"); - alert.setMessage("Insert your glucose value in mg/dl (only natural numbers)"); - - if (prefs.getBoolean("mmolxl", false)) { - alert.setMessage("Insert your glucose value in mmol/l (only 2 decimals)"); - log.debug("mmol/l"); - } - - - // Set an EditText view to get user input - input = new EditText(ctx); - input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); - alert.setView(input); - - alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - String value = input.getText().toString(); - log.debug("Manual Calibration send " + value); - if (mService == null && bService != null) { - mService = new Messenger(bService); - } - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_MANUAL_CALIB_VALUE); - Bundle b = new Bundle(); - b.putString("sgv", value); - prefs.edit().putString("manual_sgv", value).commit(); - msg.setData(b); - //msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("medtronicManualCal", "Error sending Manual Calibration\n " + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error sending Manual Calibration\n", BufferType.EDITABLE); - } - // In this case the service has crashed before we could even do anything with it - } - } - } - }); - - alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - // Canceled. - } - }); - - alert.show(); - } - break; - case R.id.instantCalib: { - log.debug("Instant Calibration "); - AlertDialog.Builder alert2 = new AlertDialog.Builder(ctx); - - alert2.setTitle("Instant Calibration"); - alert2.setMessage("Insert pump value in mg/dl (only natural numbers)"); - prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - if (prefs.getBoolean("mmolxl", false)) { - alert2.setMessage("Insert pump value in mmol/l (only 2 decimals)"); - log.debug("Instant Calibration mmol/l"); - } - // Set an EditText view to get user input - input = new EditText(ctx); - input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); - - float num = settings.getFloat("lastGlucometerValue", (float) -1f); - if (num <= 0) - num = 0; - - if (prefs.getBoolean("mmolxl", false)) { - DecimalFormat df = new DecimalFormat("#.#"); - input.setText(df.format((num / 18.0))); - } else - input.setText("" + (int) num); - alert2.setView(input); - - alert2.setPositiveButton("Ok", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - String value = input.getText().toString(); - log.debug("Instant Calibration send " + value); - if (mService != null) { - try { - Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_INSTANT_CALIB_VALUE); - Bundle b = new Bundle(); - b.putString("sgv", value); - prefs.edit().putString("instant_sgv", value).commit(); - msg.setData(b); - //msg.replyTo = mMessenger; - mService.send(msg); - } catch (RemoteException e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); - for (StackTraceElement st : e.getStackTrace()) { - sb1.append(st.toString()).append("\n"); - } - Log.e("medtronicManualCal", "Error sending Instant Calibration\n " + sb1.toString()); - if (ISDEBUG) { - display.setText(display.getText() + "Error sending Instant Calibration\n", BufferType.EDITABLE); - } - - } - } - } - }); - - alert2.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - // Canceled. - } - }); - - alert2.show(); - } - break; default: break; } @@ -1148,37 +502,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { try { - if (cgmSelected == MEDTRONIC_CGM) { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - if (prefs.contains("calibrationType")) { - String type = prefs.getString("calibrationType", "3"); - if ("3".equalsIgnoreCase(type)) { - menu.getItem(2).setVisible(false); - if (menu != null) { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(true); - } - } else if ("2".equalsIgnoreCase(type)) { - menu.getItem(2).setVisible(true); - if (menu != null) { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(false); - } - } else { - menu.getItem(2).setVisible(false); - if (menu != null) { - menu.getItem(3).setVisible(false); - menu.getItem(4).setVisible(false); - } - } - } - menu.getItem(1).setVisible(true); - } else { - menu.getItem(2).setVisible(false); - menu.getItem(1).setVisible(false); - } - //If i do not if (key.equals("IUNDERSTAND")) { if (!sharedPreferences.getBoolean("IUNDERSTAND", false)) { @@ -1219,4 +542,27 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan keepServiceAlive = false; } + + private String renderTrendHtml(Medtronic640gPumpRecord.TREND trend) + { + switch( trend ) + { + case DOUBLE_UP: + return "⇈"; + case SINGLE_UP: + return "↑"; + case FOURTY_FIVE_UP: + return "↗"; + case FLAT: + return "→"; + case FOURTY_FIVE_DOWN: + return "↘"; + case SINGLE_DOWN: + return "↓"; + case DOUBLE_DOWN: + return "⇊"; + default: + return "—"; + } + } } diff --git a/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java b/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..534f0e407d359b01e4ee2195b654823842f5fa2c --- /dev/null +++ b/app/src/main/java/com/nightscout/android/dexcom/LoginActivity.java @@ -0,0 +1,308 @@ +package com.nightscout.android.dexcom; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.annotation.TargetApi; +import android.app.Activity; +import android.app.LoaderManager.LoaderCallbacks; +import android.content.Loader; +import android.database.Cursor; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.inputmethod.EditorInfo; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.nightscout.android.R; +import com.nightscout.android.medtronic.data.CNLConfigContract; +import com.nightscout.android.medtronic.data.CNLConfigDbHelper; +import com.nightscout.android.medtronic.message.MessageUtils; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * A login screen that offers login via username/password. + */ +public class LoginActivity extends Activity implements LoaderCallbacks<Cursor> { + + /** + * Keep track of the login task to ensure we can cancel it if requested. + */ + private GetHmacAndKey mHmacAndKeyTask = null; + + // UI references. + private EditText mUsernameView; + private EditText mPasswordView; + private View mProgressView; + private View mLoginFormView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + // Set up the login form. + mUsernameView = (EditText) findViewById(R.id.username); + + mPasswordView = (EditText) findViewById(R.id.password); + mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { + if (id == R.id.login || id == EditorInfo.IME_NULL) { + attemptLogin(); + return true; + } + return false; + } + }); + + Button mUsernameSignInButton = (Button) findViewById(R.id.username_sign_in_button); + mUsernameSignInButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + attemptLogin(); + } + }); + + mLoginFormView = findViewById(R.id.login_form); + mProgressView = findViewById(R.id.login_progress); + } + + /** + * Attempts to sign in or register the account specified by the login form. + * If there are form errors (invalid username, missing fields, etc.), the + * errors are presented and no actual login attempt is made. + */ + private void attemptLogin() { + if (mHmacAndKeyTask != null) { + return; + } + + // Reset errors. + mUsernameView.setError(null); + mPasswordView.setError(null); + + // Store values at the time of the login attempt. + String username = mUsernameView.getText().toString(); + String password = mPasswordView.getText().toString(); + + boolean cancel = false; + View focusView = null; + + // Check for a valid password, if the user entered one. + if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) { + mPasswordView.setError(getString(R.string.error_invalid_password)); + focusView = mPasswordView; + cancel = true; + } + + // Check for a valid username address. + if (TextUtils.isEmpty(username)) { + mUsernameView.setError(getString(R.string.error_field_required)); + focusView = mUsernameView; + cancel = true; + } else if (!isUsernameValid(username)) { + mUsernameView.setError(getString(R.string.error_invalid_username)); + focusView = mUsernameView; + cancel = true; + } + + if (cancel) { + // There was an error; don't attempt login and focus the first + // form field with an error. + focusView.requestFocus(); + } else { + // Show a progress spinner, and kick off a background task to + // perform the user login attempt. + showProgress(true); + mHmacAndKeyTask = new GetHmacAndKey(username, password); + mHmacAndKeyTask.execute((Void) null); + } + } + + private boolean isUsernameValid(String username) { + return true; + } + + private boolean isPasswordValid(String password) { + return true; + } + + /** + * Shows the progress UI and hides the login form. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) + private void showProgress(final boolean show) { + // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow + // for very easy animations. If available, use these APIs to fade-in + // the progress spinner. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); + + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + mLoginFormView.animate().setDuration(shortAnimTime).alpha( + show ? 0 : 1).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + } + }); + + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + mProgressView.animate().setDuration(shortAnimTime).alpha( + show ? 1 : 0).setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + } + }); + } else { + // The ViewPropertyAnimator APIs are not available, so simply show + // and hide the relevant UI components. + mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); + mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); + } + } + + @Override + public Loader<Cursor> onCreateLoader(int id, Bundle args) { + return null; + } + + @Override + public void onLoadFinished(Loader<Cursor> loader, Cursor data) { + } + + @Override + public void onLoaderReset(Loader<Cursor> loader) { + } + + /** + * Represents an asynchronous login/registration task used to authenticate + * the user. + */ + public class GetHmacAndKey extends AsyncTask<Void, Void, Boolean> { + + private final String mUsername; + private final String mPassword; + + GetHmacAndKey(String username, String password ) { + mUsername = username; + mPassword = password; + } + + @Override + protected Boolean doInBackground(final Void... params) { + try { + DefaultHttpClient client = new DefaultHttpClient(); + HttpPost loginPost = new HttpPost("https://carelink.minimed.eu/patient/j_security_check"); + List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); + nameValuePairs.add(new BasicNameValuePair("j_username", mUsername)); + nameValuePairs.add(new BasicNameValuePair("j_password", mPassword)); + nameValuePairs.add(new BasicNameValuePair("j_character_encoding", "UTF-8")); + loginPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); + HttpResponse response = client.execute(loginPost); + + if (response.getStatusLine().getStatusCode() == 200) { + // Get the HMAC/keys for every serial in the Config database + CNLConfigDbHelper configDbHelper = new CNLConfigDbHelper(getBaseContext()); + Cursor cursor = configDbHelper.getAllRows(); + + while( !cursor.isAfterLast() ) { + String longSerial = cursor.getString(cursor.getColumnIndex(CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL)); + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + ObjectOutputStream hmacRequest = new ObjectOutputStream(buffer); + hmacRequest.writeInt(0x1c); + hmacRequest.writeObject(longSerial.replaceAll("\\d+-", "")); + + HttpPost hmacPost = new HttpPost("https://carelink.minimed.eu/patient/secure/SnapshotServer/"); + hmacPost.setEntity(new ByteArrayEntity(buffer.toByteArray())); + hmacPost.setHeader("Content-type", "application/octet-stream"); + response = client.execute(hmacPost); + + ByteArrayInputStream inputBuffer = new ByteArrayInputStream(EntityUtils.toByteArray(response.getEntity())); + ObjectInputStream hmacResponse = new ObjectInputStream(inputBuffer); + byte[] hmacBytes = (byte[]) hmacResponse.readObject(); + ArrayUtils.reverse(hmacBytes); + String hmac = MessageUtils.byteArrayToHexString(hmacBytes); + + buffer.reset(); + inputBuffer.reset(); + + ObjectOutputStream keyRequest = new ObjectOutputStream(buffer); + keyRequest.writeInt(0x1f); + keyRequest.writeObject(longSerial); + + HttpPost keyPost = new HttpPost("https://carelink.minimed.eu/patient/secure/SnapshotServer/"); + keyPost.setEntity(new ByteArrayEntity(buffer.toByteArray())); + keyPost.setHeader("Content-type", "application/octet-stream"); + response = client.execute(keyPost); + + inputBuffer = new ByteArrayInputStream(EntityUtils.toByteArray(response.getEntity())); + ObjectInputStream keyResponse = new ObjectInputStream(inputBuffer); + keyResponse.readInt(); // Throw away the first int. Not sure what it does + String key = MessageUtils.byteArrayToHexString((byte[]) keyResponse.readObject()); + + // TODO - return false if this returns 0? What would we do anyway? + configDbHelper.setHmacAndKey(longSerial, hmac, key); + + cursor.moveToNext(); + } + + return true; + } + + } catch (ClientProtocolException e) { + return false; + } catch (IOException e) { + return false; + } catch (ClassNotFoundException e) { + return false; + } + + return false; + } + + @Override + protected void onPostExecute(final Boolean success) { + mHmacAndKeyTask = null; + showProgress(false); + + if (success) { + finish(); + } else { + mPasswordView.setError(getString(R.string.error_incorrect_password)); + mPasswordView.requestFocus(); + } + } + + @Override + protected void onCancelled() { + mHmacAndKeyTask = null; + showProgress(false); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java index b169ba3b40b815296568c80d642321d7af410ce0..51abaf2261bd7ddd1d8ba591a936f3e353629048 100644 --- a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java +++ b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java @@ -19,6 +19,7 @@ import com.nightscout.android.medtronic.message.PumpStatusRequestMessage; import com.nightscout.android.medtronic.message.PumpStatusResponseMessage; import com.nightscout.android.medtronic.message.PumpTimeRequestMessage; import com.nightscout.android.medtronic.message.PumpTimeResponseMessage; +import com.nightscout.android.medtronic.message.ReadInfoResponseMessage; import com.nightscout.android.medtronic.message.UnexpectedMessageException; import com.nightscout.android.medtronic.service.MedtronicCNLService; import com.nightscout.android.upload.Medtronic640gPumpRecord; @@ -34,6 +35,8 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeoutException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Created by lgoedhart on 24/03/2016. @@ -48,12 +51,23 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { private static final byte[] RADIO_CHANNELS = {0x14, 0x11, 0x0e, 0x17, 0x1a}; private UsbHidDriver mDevice; + private MedtronicCNLSession mPumpSession = new MedtronicCNLSession(); + private String mStickSerial = null; + public MedtronicCNLReader(UsbHidDriver device) { mDevice = device; } + public String getStickSerial() { + return mStickSerial; + } + + public MedtronicCNLSession getPumpSession() { + return mPumpSession; + } + public byte[] readMessage() throws IOException, TimeoutException { ByteArrayOutputStream responseMessage = new ByteArrayOutputStream(); @@ -146,9 +160,11 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { if (response1[0] == ASCII.EOT.value) { // response 1 is the ASTM message checkControlMessage(response2, ASCII.ENQ.value); + extractStickSerial( new String( response1 ) ); } else { // response 2 is the ASTM message checkControlMessage(response1, ASCII.ENQ.value); + extractStickSerial( new String( response2 ) ); } } catch (TimeoutException e) { // Terminate comms with the pump, then try again @@ -162,12 +178,19 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { } } + private void extractStickSerial( String astmMessage ) { + Pattern pattern = Pattern.compile( ".*?\\^(\\d{4}-\\d{7})\\^.*" ); + Matcher matcher = pattern.matcher( astmMessage ); + if( matcher.find() ) { + mStickSerial = matcher.group(1); + } + } + public void enterControlMode() throws IOException, TimeoutException, UnexpectedMessageException { new ContourNextLinkCommandMessage(ASCII.NAK.value).send(this); checkControlMessage(readMessage(), ASCII.EOT.value); new ContourNextLinkCommandMessage(ASCII.ENQ.value).send(this); checkControlMessage(readMessage(), ASCII.ACK.value); - } public void enterPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException { @@ -185,10 +208,20 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { readMessage(); } - public void requestReadInfo() throws IOException, TimeoutException { + public void requestReadInfo() throws IOException, TimeoutException, EncryptionException, ChecksumException { new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.READ_INFO, mPumpSession, null).send(this); - // FIXME - pull the linkMAC and pumpMAC from here. It needs to go into the session. - readMessage(); + + ContourNextLinkMessage response = ReadInfoResponseMessage.fromBytes(mPumpSession, readMessage()); + + // FIXME - this needs to go into ReadInfoResponseMessage + ByteBuffer infoBuffer = ByteBuffer.allocate(16); + infoBuffer.order(ByteOrder.BIG_ENDIAN); + infoBuffer.put(response.encode(), 0x21, 16); + long linkMAC = infoBuffer.getLong(0); + long pumpMAC = infoBuffer.getLong(8); + + this.getPumpSession().setLinkMAC( linkMAC ); + this.getPumpSession().setPumpMAC( pumpMAC ); } public byte negotiateChannel() throws IOException, ChecksumException, TimeoutException { diff --git a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java index 13fe680aeb4b7e973bfe61d7192211b59d9cce93..ba470a204e3da0fbcdd108d775578658174f1c81 100644 --- a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java +++ b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java @@ -6,13 +6,11 @@ import com.nightscout.android.medtronic.message.MessageUtils; * Created by lgoedhart on 26/03/2016. */ public class MedtronicCNLSession { - // FIXME - Lennart's hard coded key and HMAC - private final static byte[] HMAC = MessageUtils.hexStringToByteArray("e28fe4e5cf3c1eb6d6a2ec5a093093d4f397237dc60b3f2c1ef64f31e32077c4"); - private final static byte[] KEY = MessageUtils.hexStringToByteArray("57833334130906a587b7a0437bc28a69"); + private byte[] HMAC; + private byte[] key; - // FIXME - Lennart's hard coded serial numbers - private final static long linkMAC = 1055866 + 0x0023F70682000000L; - private final static long pumpMAC = 1057941 + 0x0023F745EE000000L; + private long linkMAC; + private long pumpMAC; private byte radioChannel; private int bayerSequenceNumber = 1; @@ -22,24 +20,32 @@ public class MedtronicCNLSession { return HMAC; } - public static byte[] getKey() { - return KEY; + public byte[] getKey() { + return key; } public byte[] getIV() { - byte[] iv = new byte[KEY.length]; - System.arraycopy(KEY,0,iv,0,KEY.length); + byte[] iv = new byte[key.length]; + System.arraycopy(key,0,iv,0,key.length); iv[0] = radioChannel; return iv; } - public static long getLinkMAC() { + public long getLinkMAC() { return linkMAC; } - public static long getPumpMAC() { + public void setLinkMAC( long linkMAC ) { + this.linkMAC = linkMAC; + } + + public long getPumpMAC() { return pumpMAC; } + public void setPumpMAC( long pumpMAC ) { + this.pumpMAC = pumpMAC; + } + public int getBayerSequenceNumber() { return bayerSequenceNumber; } @@ -63,4 +69,12 @@ public class MedtronicCNLSession { public void setRadioChannel(byte radioChannel) { this.radioChannel = radioChannel; } + + public void setHMAC( byte[] hmac ) { + this.HMAC = hmac; + } + + public void setKey( byte[] key ) { + this.key = key; + } } diff --git a/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java b/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java new file mode 100644 index 0000000000000000000000000000000000000000..dbfbf3b3ce29445c87de69d368bb2687ab247922 --- /dev/null +++ b/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigContract.java @@ -0,0 +1,21 @@ +package com.nightscout.android.medtronic.data; + +import android.provider.BaseColumns; + +/** + * Created by lgoedhart on 9/05/2016. + */ +public class CNLConfigContract { + // To prevent someone from accidentally instantiating the contract class, + // give it an empty constructor. + public CNLConfigContract() {} + + /* Inner class that defines the table contents */ + public static abstract class ConfigEntry implements BaseColumns { + public static final String TABLE_NAME = "config"; + public static final String COLUMN_NAME_STICK_SERIAL = "stick_serial"; + public static final String COLUMN_NAME_HMAC = "hmac"; + public static final String COLUMN_NAME_KEY = "key"; + public static final String COLUMN_NAME_LAST_RADIO_CHANNEL = "last_radio_channel"; + } +} diff --git a/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java b/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..5e0841a97a6e4bb0312a31b30f9709bfb6324661 --- /dev/null +++ b/app/src/main/java/com/nightscout/android/medtronic/data/CNLConfigDbHelper.java @@ -0,0 +1,135 @@ +package com.nightscout.android.medtronic.data; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +/** + * Created by lgoedhart on 9/05/2016. + */ +public class CNLConfigDbHelper extends SQLiteOpenHelper { + // Database Specific Details + + // If you change the database schema, you must increment the database version. + private static final int DATABASE_VERSION = 1; + // DB Name, same is used to name the sqlite DB file + private static final String DATABASE_NAME = "cnl_config.db"; + + private static final String SQL_CREATE_CONFIG = + "CREATE TABLE " + CNLConfigContract.ConfigEntry.TABLE_NAME + " (" + + CNLConfigContract.ConfigEntry._ID + " INTEGER PRIMARY KEY," + + CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL + " TEXT UNIQUE, " + + CNLConfigContract.ConfigEntry.COLUMN_NAME_HMAC + " TEXT, "+ + CNLConfigContract.ConfigEntry.COLUMN_NAME_KEY + " TEXT, " + + CNLConfigContract.ConfigEntry.COLUMN_NAME_LAST_RADIO_CHANNEL + " INTEGER " + + ")"; + + private static final String SQL_DROP_CONFIG = + "DROP TABLE IF EXISTS " + CNLConfigContract.ConfigEntry.TABLE_NAME; + + public CNLConfigDbHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(SQL_CREATE_CONFIG); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // No upgrades yet, so drop and rebuild + db.execSQL(SQL_DROP_CONFIG); + onCreate(db); + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + onUpgrade(db, oldVersion, newVersion); + } + + public void insertStickSerial( String stickSerial ) { + SQLiteDatabase configDb = this.getWritableDatabase(); + ContentValues insertValues = new ContentValues(); + insertValues.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL, stickSerial ); + insertValues.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_HMAC, ""); + insertValues.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_KEY, ""); + insertValues.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_LAST_RADIO_CHANNEL, 0x14 ); + configDb.insertWithOnConflict(CNLConfigContract.ConfigEntry.TABLE_NAME, null, insertValues, SQLiteDatabase.CONFLICT_IGNORE); + } + + public String getHmac( String stickSerial ){ + SQLiteDatabase configDb = this.getWritableDatabase(); + + Cursor cursor = configDb.query( CNLConfigContract.ConfigEntry.TABLE_NAME, + new String[] { CNLConfigContract.ConfigEntry.COLUMN_NAME_HMAC }, + CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL + " = ?", new String[]{ stickSerial }, null, null, null); + + if (cursor != null && cursor.moveToFirst()) { + String hmac = cursor.getString(cursor.getColumnIndex(CNLConfigContract.ConfigEntry.COLUMN_NAME_HMAC)); + cursor.close(); + + return hmac; + } else { + return null; + } + } + + public String getKey( String stickSerial ){ + SQLiteDatabase configDb = this.getWritableDatabase(); + + Cursor cursor = configDb.query( CNLConfigContract.ConfigEntry.TABLE_NAME, + new String[] { CNLConfigContract.ConfigEntry.COLUMN_NAME_KEY }, + CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL + " = ?", new String[]{ stickSerial }, null, null, null); + + if (cursor != null && cursor.moveToFirst()) { + String hmac = cursor.getString(cursor.getColumnIndex(CNLConfigContract.ConfigEntry.COLUMN_NAME_KEY)); + cursor.close(); + + return hmac; + } else { + return null; + } + } + + public int setHmacAndKey( String stickSerial, String hmac, String key ) { + SQLiteDatabase configDb = this.getWritableDatabase(); + + ContentValues values = new ContentValues(); + values.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_HMAC, hmac); + values.put(CNLConfigContract.ConfigEntry.COLUMN_NAME_KEY, key); + + // Which row to update, based on the ID + String whereClause = CNLConfigContract.ConfigEntry.COLUMN_NAME_STICK_SERIAL + " = ?"; + String[] whereArgs = { stickSerial }; + + int affectedRows = configDb.update( + CNLConfigContract.ConfigEntry.TABLE_NAME, + values, + whereClause, + whereArgs + ); + + return affectedRows; + } + + public Cursor getAllRows(){ + SQLiteDatabase configDb = this.getReadableDatabase(); + + String where = null; + String whereArgs[] = null; + String groupBy = null; + String having = null; + String order = null; + String limit = null; + + Cursor cursor = configDb.query(CNLConfigContract.ConfigEntry.TABLE_NAME, null, where, whereArgs, groupBy, having, order, limit); + if (cursor != null){ + cursor.moveToFirst(); + } + return cursor; + } + +} diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java index aaf21d7558b48d2cf65547329a231de0b85c8fe2..ec28248610cdc5f9531cfcf474ccfa3200694a92 100644 --- a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java +++ b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java @@ -45,6 +45,14 @@ public class MessageUtils { return data; } + public static String byteArrayToHexString(byte[] in) { + final StringBuilder builder = new StringBuilder(); + for(byte b : in) { + builder.append(String.format("%02x", b)); + } + return builder.toString(); + } + public static Date decodeDateTime( long rtc, long offset ) { TimeZone currentTz = java.util.Calendar.getInstance().getTimeZone(); GregorianCalendar gregorianCalendar = new GregorianCalendar(2000, 0, 1, 0, 0, 0); diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..ccab256c2deb3356b4c68ee28f35cabbb376f401 --- /dev/null +++ b/app/src/main/java/com/nightscout/android/medtronic/message/ReadInfoResponseMessage.java @@ -0,0 +1,21 @@ +package com.nightscout.android.medtronic.message; + +import com.nightscout.android.medtronic.MedtronicCNLSession; + +/** + * Created by lgoedhart on 10/05/2016. + */ +public class ReadInfoResponseMessage extends MedtronicReceiveMessage { + protected ReadInfoResponseMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession, byte[] payload) { + super(commandType, commandAction, pumpSession, payload); + } + + public static ContourNextLinkMessage fromBytes(MedtronicCNLSession pumpSession, byte[] bytes) throws ChecksumException, EncryptionException { + // TODO - turn this into a factory + ContourNextLinkMessage message = MedtronicReceiveMessage.fromBytes(pumpSession, bytes); + + // TODO - Validate the MessageType + + return message; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java index ae82286262804267165f6369ea80a6169391157d..ea776e1ecc0eb59bec2ec78da9d623553dbaec9f 100644 --- a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java +++ b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java @@ -7,6 +7,7 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; import android.graphics.BitmapFactory; import android.hardware.usb.UsbManager; import android.net.ConnectivityManager; @@ -21,9 +22,12 @@ import android.util.Log; import com.nightscout.android.R; import com.nightscout.android.USB.UsbHidDriver; import com.nightscout.android.dexcom.DexcomG4Activity; +import com.nightscout.android.dexcom.LoginActivity; import com.nightscout.android.medtronic.MedtronicCNLReader; +import com.nightscout.android.medtronic.data.CNLConfigDbHelper; import com.nightscout.android.medtronic.message.ChecksumException; import com.nightscout.android.medtronic.message.EncryptionException; +import com.nightscout.android.medtronic.message.MessageUtils; import com.nightscout.android.medtronic.message.UnexpectedMessageException; import com.nightscout.android.service.AbstractService; import com.nightscout.android.upload.Medtronic640gPumpRecord; @@ -128,8 +132,23 @@ public class MedtronicCNLService extends AbstractService { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); try { - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, "Connecting to the Contour CareLink Next...")); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, "Connecting to the Contour Next Link...")); cnlReader.requestDeviceInfo(); + + // Is the device already configured? + CNLConfigDbHelper configDbHelper = new CNLConfigDbHelper(mContext); + configDbHelper.insertStickSerial( cnlReader.getStickSerial() ); + String hmac = configDbHelper.getHmac( cnlReader.getStickSerial() ); + String key = configDbHelper.getKey( cnlReader.getStickSerial() ); + + if( hmac.equals( "" ) || key.equals("") ) { + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Before you can use the Contour Next Link, you need to register it with the app. Select 'Register USB Stick' from the menu.")); + return; + } + + cnlReader.getPumpSession().setHMAC( MessageUtils.hexStringToByteArray( hmac ) ); + cnlReader.getPumpSession().setKey( MessageUtils.hexStringToByteArray( key ) ); + cnlReader.enterControlMode(); cnlReader.enterPassthroughMode(); cnlReader.openConnection(); @@ -138,7 +157,7 @@ public class MedtronicCNLService extends AbstractService { if (radioChannel == 0) { send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Could not communicate with the 640g. Are you near the pump?")); } else { - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, String.format("Connected to Contour CareLink Next on channel %d.", (int) radioChannel))); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, String.format("Connected to Contour Next Link on channel %d.", (int) radioChannel))); cnlReader.beginEHSMSession(); cnlReader.getPumpTime(pumpRecord); @@ -152,16 +171,16 @@ public class MedtronicCNLService extends AbstractService { cnlReader.endControlMode(); } catch (IOException e) { Log.e(TAG, "Error getting BGLs", e); - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error connecting to Contour CareLink Next.")); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error connecting to Contour Next Link.")); } catch (ChecksumException e) { Log.e(TAG, "Checksum error", e); - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Checksum error getting message from the Contour CareLink Next.")); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Checksum error getting message from the Contour Next Link.")); } catch (EncryptionException e) { Log.e(TAG, "Encryption exception", e); - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error decrypting messages from Contour CareLink Next.")); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error decrypting messages from Contour Next Link.")); } catch (TimeoutException e) { Log.e(TAG, "Timeout communicating with Contour", e); - send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Timeout communicating with the Contour CareLink Next.")); + send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Timeout communicating with the Contour Next Link.")); } catch (UnexpectedMessageException e) { Log.e(TAG, "Unexpected Message", e); send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Communication Error: " + e.getMessage())); diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000000000000000000000000000000000000..25dbb59e48bc3f94831edc6b3553fe3c956c7492 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,72 @@ +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_horizontal" + android:orientation="vertical" + android:paddingBottom="@dimen/activity_vertical_margin" + android:paddingLeft="@dimen/activity_horizontal_margin" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingTop="@dimen/activity_vertical_margin" + tools:context="com.nightscout.android.dexcom.LoginActivity"> + + <!-- Login progress --> + <ProgressBar + android:id="@+id/login_progress" + style="?android:attr/progressBarStyleLarge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="8dp" + android:visibility="gone"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceMedium" + android:text="Please enter your CareLink username and password to retrieve the encryption key for this USB stick. Your username and password will not be stored." + android:id="@+id/textView" /> + + <ScrollView + android:id="@+id/login_form" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:id="@+id/user_login_form" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <AutoCompleteTextView + android:id="@+id/username" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/prompt_username" + android:inputType="text" + android:maxLines="1" + android:singleLine="true"/> + + <EditText + android:id="@+id/password" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/prompt_password" + android:imeActionId="@+id/login" + android:imeActionLabel="@string/action_sign_in_short" + android:imeOptions="actionUnspecified" + android:inputType="textPassword" + android:maxLines="1" + android:singleLine="true"/> + + <Button + android:id="@+id/username_sign_in_button" + style="?android:textAppearanceSmall" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="@string/action_sign_in" + android:textStyle="bold"/> + + </LinearLayout> + </ScrollView> +</LinearLayout> diff --git a/app/src/main/res/layout/adb.xml b/app/src/main/res/layout/adb.xml index b5cef5f761be91ea41b848966b7745de295b4e9c..6fbbfb4b0db2d2d61ea9f29d3a51d0adc5ed1a15 100644 --- a/app/src/main/res/layout/adb.xml +++ b/app/src/main/res/layout/adb.xml @@ -4,17 +4,6 @@ android:layout_height="fill_parent" android:orientation="vertical" android:paddingTop="15dp"> - - - <TextView - android:id="@+id/demoTitle" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textSize="70sp" - android:gravity="center" - android:textStyle="bold" - - android:text="@string/hello" /> <ScrollView android:id="@+id/demoScroller" @@ -22,20 +11,36 @@ android:layout_height="wrap_content" android:padding="10dp"> - <TextView - android:id="@+id/demoText" + <LinearLayout + android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textSize="30sp" - - android:gravity="left" /> + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/demoTitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="50sp" + android:gravity="center" + android:textStyle="bold" + + android:text="@string/hello" /> + + <TextView + android:id="@+id/demoText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="20sp" + + android:gravity="left" /> + + <LinearLayout android:id="@+id/container" + android:orientation="vertical" + android:layout_width="fill_parent" + android:layout_height="fill_parent"> + </LinearLayout> + </LinearLayout> </ScrollView> - <LinearLayout android:id="@+id/container" - android:orientation="vertical" - android:layout_width="fill_parent" - android:layout_height="fill_parent"> - </LinearLayout> - </LinearLayout> diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index 1bf1068f4d7119c9e383fa15134297872a8b575c..894bd50820c5fdeb36ced256a5547cf381a6dabd 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -6,23 +6,8 @@ android:title="Preferences"> </item> <item - android:id="@+id/readPumpInfo" + android:id="@+id/registerCNL" android:orderInCategory="100" - android:title="Read Pump Info."> - </item> - <item - android:id="@+id/refreshCalFactor" - android:orderInCategory="100" - android:title="Get Cal Factor!"> - </item> - <item - android:id="@+id/calibMan" - android:orderInCategory="100" - android:title="Manual Calibration."> - </item> - <item - android:id="@+id/instantCalib" - android:orderInCategory="100" - android:title="Instant Calibration."> + android:title="Register USB Stick"> </item> </menu> \ No newline at end of file diff --git a/app/src/main/res/values-v11/styles.xml b/app/src/main/res/values-v11/styles.xml index 3c02242ad044be9b8c7c09e7c90c5d427763fe97..d4787af956a669791afa0ff3cb5cf1164771aede 100644 --- a/app/src/main/res/values-v11/styles.xml +++ b/app/src/main/res/values-v11/styles.xml @@ -4,7 +4,7 @@ Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. --> - <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + <style name="AppBaseTheme" parent="android:Theme.DeviceDefault"> <!-- API 11 theme customizations can go here. --> </style> diff --git a/app/src/main/res/values-v14/styles.xml b/app/src/main/res/values-v14/styles.xml index a91fd0372b20f85e284fc2fa2ce949176dfdf6e5..9baa6e219d568d68c95b88bdbe697cc0322e8f3e 100644 --- a/app/src/main/res/values-v14/styles.xml +++ b/app/src/main/res/values-v14/styles.xml @@ -5,7 +5,7 @@ AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. --> - <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + <style name="AppBaseTheme" parent="android:Theme.DeviceDefault"> <!-- API 14 theme customizations can go here. --> </style> diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 0000000000000000000000000000000000000000..5f2c7258abfce1dad6b97ac6d6c11006dcb2fcce --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <style name="AppBaseTheme" parent="android:Theme.DeviceDefault"> + <!-- API 11 theme customizations can go here. --> + </style> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 13c01b25386527ce439dfdbb0f3189da74475e6b..4bc48057ade7e24b8b5122bdba5c5bbea51cba22 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,4 +99,18 @@ <item>10</item> <item>11</item> </string-array> + <string name="title_activity_login">CareLink login</string> + + <!-- Strings related to login --> + <string name="prompt_username">CareLink Username</string> + <string name="prompt_password">Password</string> + <string name="action_sign_in">Retrieve keys for USB</string> + <string name="action_sign_in_short">Retrieve keys</string> + <string name="error_invalid_username">This username is invalid</string> + <string name="error_invalid_password">This password is too short</string> + <string name="error_incorrect_password">The Username or password is incorrect</string> + <string name="error_field_required">This field is required</string> + <string name="permission_rationale">"Contacts permissions are needed for providing email + completions." + </string> </resources> diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml index 891c5809e19a40a6e2c6fbc69674aa8c419882c3..fba8db89fe63019a522cb871f7d4ffd430d79e79 100644 --- a/build/intermediates/dex-cache/cache.xml +++ b/build/intermediates/dex-cache/cache.xml @@ -1,47 +1,2 @@ <?xml version="1.0" encoding="utf-8"?> -<items version="2" > - - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/physicaloidlibrary.jar" - jumboMode="true" - revision="23.0.1" - sha1="391534fe92fec965996d9aaf3a328b5f0c2b0740"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/physicaloidlibrary_9ccb0a9459a35113b137cb56f3f46bde93a6197b/classes.dex" /> - </item> - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/logback-android-1.1.1-3.jar" - jumboMode="true" - revision="23.0.1" - sha1="9df53e0d7c6a4d8b31979a012722d48a275e5d28"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/logback-android-1.1.1-3_26faaac8eb6179a49c85c550f2570a85dcf9ec77/classes.dex" /> - </item> - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/incremental-runtime-classes/debug/instant-run.jar" - jumboMode="true" - revision="23.0.1" - sha1="8a0b448c242e45651aa3eff4da2565f5d2472c67"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/10/instant-run_ab0e4833222d2576fa652ea70850f6721d7c4c56/classes.dex" /> - </item> - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/mongo-java-driver-3.0.2.jar" - jumboMode="true" - revision="23.0.1" - sha1="7d3880dec6c8a2f07c1f544776c326834b513712"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/mongo-java-driver-3.0.2_cf135c838ae634eaa0bde6ebd7ab91ae93691ade/classes.dex" /> - </item> - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/incremental-classes/debug/instant-run-bootstrap.jar" - jumboMode="true" - revision="23.0.1" - sha1="028bcebc4e2ad003732150e4f2c394474c8eff42"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/10/instant-run-bootstrap_a4562f9a19a66a867fdb86514799366913b783f6/classes.dex" /> - </item> - <item - jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/slf4j-api-1.7.2.jar" - jumboMode="true" - revision="23.0.1" - sha1="0081d61b7f33ebeab314e07de0cc596f8e858d97"> - <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/slf4j-api-1.7.2_aba40428135bcd9ffb23cf7b91dad2955f2763e7/classes.dex" /> - </item> - -</items> +<items version="2" />