diff --git a/app/app.iml b/app/app.iml index e31111587bb9475b2dd7f710c44e347710cea142..4a7d5c4eed469e88116b7cfeb0acf539e0cb5889 100644 --- a/app/app.iml +++ b/app/app.iml @@ -83,12 +83,13 @@ <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/exploded-aar/com.android.support/animated-vector-drawable/23.4.0/jars" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.4.0/jars" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.4.0/jars" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.4.0/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.6/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.1.4/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.8/jars" /> @@ -101,6 +102,7 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" /> @@ -113,20 +115,21 @@ <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> - <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> + <orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" exported="" name="physicaloidlibrary" level="project" /> + <orderEntry type="library" exported="" name="support-annotations-23.4.0" level="project" /> <orderEntry type="library" exported="" name="crashlytics-2.5.5" level="project" /> - <orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" /> <orderEntry type="library" exported="" name="crashlytics-core-2.3.8" level="project" /> <orderEntry type="library" exported="" name="beta-1.1.4" level="project" /> <orderEntry type="library" exported="" name="logback-android-1.1.1-3" level="project" /> - <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="animated-vector-drawable-23.4.0" level="project" /> <orderEntry type="library" exported="" name="commons-lang3-3.4" level="project" /> - <orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" /> + <orderEntry type="library" exported="" name="support-v4-23.4.0" level="project" /> <orderEntry type="library" exported="" name="slf4j-api-1.7.2" level="project" /> <orderEntry type="library" exported="" name="answers-1.3.6" level="project" /> + <orderEntry type="library" exported="" name="support-vector-drawable-23.4.0" level="project" /> + <orderEntry type="library" exported="" name="appcompat-v7-23.4.0" level="project" /> <orderEntry type="library" exported="" name="fabric-1.3.10" level="project" /> + <orderEntry type="library" exported="" name="org.apache.http.legacy-android-23" level="project" /> </component> </module> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7ee69a920c051ab235cf104fdee66c745e9c292b..45fe30164faabb3156f08b49dd5aa7dcbd3e3fe3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'io.fabric.tools:gradle:1.+' + classpath 'io.fabric.tools:gradle:1.21.6' } } plugins { @@ -25,8 +25,10 @@ def gitVersion() { } android { - compileSdkVersion 21 + compileSdkVersion 23 buildToolsVersion "23.0.3" + // FIXME - replace with URLConnection. This is used in GetHmacAndKeyActivity. + useLibrary 'org.apache.http.legacy' applicationVariants.all { variant -> variant.resValue "string", "versionName", variant.versionName @@ -35,7 +37,7 @@ android { defaultConfig { applicationId "info.nightscout.android" minSdkVersion 15 - targetSdkVersion 21 + targetSdkVersion 23 versionName project.properties['version'] versionCode gitVersion() } @@ -47,10 +49,9 @@ android { } } - // FIXME - we really shouldn't be doing this. - // See https://github.com/pazaan/640gAndroidUploader/issues/43 lintOptions { - abortOnError false + // TODO - 'InvalidPackage' is here because of logback. We can remove this if we remove logback. + disable 'InvalidPackage', 'TrulyRandom' } } @@ -111,11 +112,9 @@ release { } dependencies { - compile 'com.android.support:appcompat-v7:21.+' + compile 'com.android.support:appcompat-v7:23.4.0' 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') compile files('libs/slf4j-api-1.7.2.jar') compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') { transitive = true; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c7995f0b34a43a30bcb64bf32df46504f3dcc526..47d94a65882f9993945395ab18a71a3531dbbe26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,9 +4,7 @@ > <uses-sdk - android:maxSdkVersion="21" - android:minSdkVersion="15" - android:targetSdkVersion="21" /> + android:maxSdkVersion="23" /> <uses-feature android:name="android.hardware.usb.host" /> @@ -17,13 +15,13 @@ <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" /> - - <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" + android:supportsRtl="true" android:theme="@style/AppBaseTheme" > <!-- I have set screenOrientation to "portrait" to avoid the restart of AsyncTasks when you rotate the phone --> @@ -52,29 +50,10 @@ android:icon="@drawable/ic_launcher" android:label="Settings" /> - <service - android:name=".dexcom.DexcomG4Service" - android:icon="@drawable/ic_launcher" > - </service> <service android:name=".medtronic.service.MedtronicCNLService" android:icon="@drawable/ic_launcher" > </service> - <service - android:name=".widget.CGMWidgetUpdater" - android:icon="@drawable/ic_launcher" - android:label="@string/app_name" > - </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> <activity android:name=".medtronic.GetHmacAndKeyActivity" diff --git a/app/src/main/java/info/nightscout/android/eula/Eula.java b/app/src/main/java/info/nightscout/android/eula/Eula.java index eb90972fab98f861737962719e7e33f4c769b7d2..92ef18ad0d0bbae3c434da58a4e8d28c5c2054a6 100644 --- a/app/src/main/java/info/nightscout/android/eula/Eula.java +++ b/app/src/main/java/info/nightscout/android/eula/Eula.java @@ -21,11 +21,10 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.content.SharedPreferences; -import java.io.IOException; import java.io.BufferedReader; -import java.io.InputStreamReader; import java.io.Closeable; -import java.util.Map; +import java.io.IOException; +import java.io.InputStreamReader; import info.nightscout.android.R; @@ -39,13 +38,12 @@ import info.nightscout.android.R; public class Eula { private static final String ASSET_EULA = "EULA"; private static final String PREFERENCE_EULA_ACCEPTED = "IUNDERSTAND"; - private static final String PREFERENCES_EULA = "Disclaimer"; private static AlertDialog aDialog = null; /** * callback to let the activity know when the user has accepted the EULA. */ - public static interface OnEulaAgreedTo { + public interface OnEulaAgreedTo { /** * Called when the user has accepted the eula and the dialog closes. @@ -68,7 +66,6 @@ public class Eula { //final SharedPreferences preferences = activity.getSharedPreferences(PREFERENCES_EULA, // Activity.MODE_PRIVATE); - Map<String, ?> preferencesAll = preferences.getAll(); if (!preferences.getBoolean(PREFERENCE_EULA_ACCEPTED, false)) { final AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(R.string.eula_title); @@ -113,7 +110,7 @@ public class Eula { } private static void accept(SharedPreferences preferences) { - preferences.edit().putBoolean(PREFERENCE_EULA_ACCEPTED, true).commit(); + preferences.edit().putBoolean(PREFERENCE_EULA_ACCEPTED, true).apply(); } private static void refuse(Activity activity) { diff --git a/app/src/main/java/info/nightscout/android/medtronic/GetHmacAndKeyActivity.java b/app/src/main/java/info/nightscout/android/medtronic/GetHmacAndKeyActivity.java index c0ebff1f4e411657d220911989de9b8266a8017d..6351a83bd1b04d7c81bd5c4a8a736e86325a4311 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/GetHmacAndKeyActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/GetHmacAndKeyActivity.java @@ -90,19 +90,18 @@ public class GetHmacAndKeyActivity extends Activity implements LoaderCallbacks<C attemptLogin(); } }); - Button closeButton = (Button) findViewById(R.id.close_button); - closeButton.setOnClickListener(new OnClickListener() { + + mLoginFormView = findViewById(R.id.login_form); + mProgressView = findViewById(R.id.login_progress); + mRegisteredStickView = (TextView)findViewById(R.id.registered_usb_devices); + mCloseButton = (Button)findViewById(R.id.close_button); + mCloseButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { finish(); } }); - - mLoginFormView = findViewById(R.id.login_form); - mProgressView = findViewById(R.id.login_progress); - mRegisteredStickView = (TextView)findViewById(R.id.registered_usb_devices); - mCloseButton = (Button)findViewById(R.id.close_button); showRegisteredSticks(); } diff --git a/app/src/main/java/info/nightscout/android/medtronic/Medtronic640gActivity.java b/app/src/main/java/info/nightscout/android/medtronic/Medtronic640gActivity.java index 34a77f04e2e2f5427df7ee343dcc2a956dd6b70c..2956563abbfc03ae2667e058cef47ea4ffb47045 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/Medtronic640gActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/Medtronic640gActivity.java @@ -40,6 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DecimalFormat; +import java.util.Locale; import info.nightscout.android.R; import info.nightscout.android.eula.Eula; @@ -74,7 +75,6 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc private TextView mDumpTextView; private Button b1; private TextView display; - private Intent service = null; private ServiceManager cgmService; // > service //Look for and launch the service, display status to user @@ -125,15 +125,15 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc mHandlerActive = true; } - b1.setText("Stop Uploading CGM Data"); + b1.setText(R.string.button_text_stop_uploading_data); lnr.addView(b1); lnr2.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); lnr3.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); Button b2 = new Button(this); - b2.setText("Clear Log"); + b2.setText(R.string.button_text_clear_log); b2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f)); Button b4 = new Button(this); - b4.setText("Get Now"); + b4.setText(R.string.button_text_get_now); b4.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f)); lnr3.addView(b4); @@ -186,13 +186,13 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc //mHandler.removeCallbacks(updateDataView); keepServiceAlive = false; stopCGMServices(); - b1.setText("Start Uploading CGM Data"); + b1.setText(R.string.button_text_start_uploading_data); finish(); } else { startCGMServices(); mHandlerActive = true; - b1.setText("Stop Uploading CGM Data"); + b1.setText(R.string.button_text_stop_uploading_data); } } @@ -327,9 +327,7 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc //mHandler.removeCallbacks(updateDataView); mHandlerActive = false; } - b1.setText("Start Uploading CGM Data"); - mTitleTextView.setTextColor(Color.RED); - mTitleTextView.setText("CGM Service Stopped"); + b1.setText(R.string.button_text_start_uploading_data); stopCGMServices(); } else { startCGMServices(); @@ -338,8 +336,8 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc } } } catch (Exception e) { - StringBuffer sb1 = new StringBuffer(""); - sb1.append("EXCEPTION!!!!!! " + e.getMessage() + " " + e.getCause()); + StringBuilder sb1 = new StringBuilder(""); + sb1.append("EXCEPTION!!!!!! ").append(e.getMessage()).append(" ").append(e.getCause()); for (StackTraceElement st : e.getStackTrace()) { sb1.append(st.toString()).append("\n"); } @@ -407,7 +405,7 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc df = new DecimalFormat("#.00"); else df = new DecimalFormat("#.0"); - String sgvString = "---"; + String sgvString; String unitsString = "mg/dL"; if (prefs.getBoolean("mmolxl", false)) { @@ -428,7 +426,7 @@ public class Medtronic640gActivity extends Activity implements OnSharedPreferenc mDumpTextView.setTextColor(Color.WHITE); mDumpTextView.setText(Html.fromHtml( - String.format("<b>SG at:</b> %s<br/><b>Pump Time:</b> %s<br/><b>Active Insulin: </b>%.3f<br/><b>Rate of Change: </b>%s", + String.format( Locale.getDefault(), "<b>SG 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.sgvDate.getTime(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME), DateUtils.formatDateTime(getBaseContext(), pumpStatusRecord.pumpDate.getTime(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME), pumpStatusRecord.activeInsulin, diff --git a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCNLReader.java b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCNLReader.java index cd1b6bb6e2d7815f49d30a4a291e619777199563..763e9171f30322803fe728b48f7aa847800a4fb3 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCNLReader.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCNLReader.java @@ -141,7 +141,7 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { // TODO - get rid of this - it should be in a message decoder private void checkControlMessage(byte[] msg, byte controlCharacter) throws IOException, TimeoutException, UnexpectedMessageException { if (msg.length != 1 || msg[0] != controlCharacter) { - throw new UnexpectedMessageException(String.format("Expected to get control character '%d' Got '%d'.", + throw new UnexpectedMessageException(String.format( Locale.getDefault(), "Expected to get control character '%d' Got '%d'.", (int) controlCharacter, (int) msg[0])); } } @@ -252,7 +252,7 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { if (responseBytes[76] == mPumpSession.getRadioChannel()) { break; } else { - throw new IOException(String.format("Expected to get a message for channel %d. Got %d", mPumpSession.getRadioChannel(), responseBytes[76])); + throw new IOException(String.format( Locale.getDefault(), "Expected to get a message for channel %d. Got %d", mPumpSession.getRadioChannel(), responseBytes[76])); } } else { mPumpSession.setRadioChannel((byte) 0); @@ -338,7 +338,7 @@ public class MedtronicCNLReader implements ContourNextLinkMessageHandler { cgmRecord.sgvDate = MessageUtils.decodeDateTime(rtc, offset); Medtronic640gActivity.pumpStatusRecord.recentBolusWizard = statusBuffer.get(0x48) != 0; Medtronic640gActivity.pumpStatusRecord.bolusWizardBGL = statusBuffer.getShort(0x49); // In mg/DL - long rawReservoirAmount = statusBuffer.getInt(0x2b) & 0xffffffff; + long rawReservoirAmount = statusBuffer.getInt(0x2b); Medtronic640gActivity.pumpStatusRecord.reservoirAmount = new BigDecimal(rawReservoirAmount / 10000f).setScale(3, BigDecimal.ROUND_HALF_UP); Medtronic640gActivity.pumpStatusRecord.batteryPercentage = (statusBuffer.get(0x2a)); } diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java index c0c8db8cc06318fdc2ad53a93510d1a2672fbe27..1f773efbdfa5e3430cce9e277c412ba3c9487765 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java @@ -4,6 +4,7 @@ import info.nightscout.android.medtronic.MedtronicCNLSession; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Locale; /** * Created by lgoedhart on 26/03/2016. @@ -76,7 +77,7 @@ public class ContourNextLinkBinaryMessage extends ContourNextLinkMessage{ byte calculatedChecksum = (byte) (MessageUtils.oneByteSum(message.mPayload.array()) - messageChecksum); if (messageChecksum != calculatedChecksum) { - throw new ChecksumException(String.format("Expected to get %d. Got %d", (int) calculatedChecksum, (int) messageChecksum)); + throw new ChecksumException(String.format(Locale.getDefault(), "Expected to get %d. Got %d", (int) calculatedChecksum, (int) messageChecksum)); } return message; diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCNLService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCNLService.java index 366874497285733c9aaba6f303ecafb2cd30d564..2f1ca0b145438db9870b4102af28349a5ee26a0e 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCNLService.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCNLService.java @@ -19,6 +19,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.Locale; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeoutException; @@ -164,7 +165,7 @@ public class MedtronicCNLService extends AbstractService { send(Message.obtain(null, Medtronic640gActivity.Medtronic640gActivityHandler.MSG_ERROR, "Could not communicate with the 640g. Are you near the pump?")); Log.i(TAG, "Could not communicate with the 640g. Are you near the pump?"); } else { - send(Message.obtain(null, Medtronic640gActivity.Medtronic640gActivityHandler.MSG_STATUS, String.format("Connected to Contour Next Link on channel %d.", (int) radioChannel))); + send(Message.obtain(null, Medtronic640gActivity.Medtronic640gActivityHandler.MSG_STATUS, String.format( Locale.getDefault(), "Connected to Contour Next Link on channel %d.", (int) radioChannel))); Log.d(TAG, String.format("Connected to Contour Next Link on channel %d.", (int) radioChannel)); cnlReader.beginEHSMSession(); @@ -220,6 +221,9 @@ public class MedtronicCNLService extends AbstractService { return netInfo != null && netInfo.isConnectedOrConnecting(); } + /* + // FIXME - when we want to enable notifications, start with this. We'll need to fix the icon to match + // the Android standards (linter will fail anyway) private void showNotification(String title, String message) { NotificationManagerCompat nm = NotificationManagerCompat.from(mContext); @@ -238,6 +242,7 @@ public class MedtronicCNLService extends AbstractService { .setContentIntent(contentIntent) .build()); } + */ // FIXME - replace this with writing to the SQLite DB. private void writeData(CGMRecord mostRecentData) { diff --git a/app/src/main/java/info/nightscout/android/upload/UploadHelper.java b/app/src/main/java/info/nightscout/android/upload/UploadHelper.java index f5b720c5136c6c3af66256fc53141a36edf7e143..065a28afaeb1c35d361e35e5764e1b011002a160 100644 --- a/app/src/main/java/info/nightscout/android/upload/UploadHelper.java +++ b/app/src/main/java/info/nightscout/android/upload/UploadHelper.java @@ -3,17 +3,11 @@ package info.nightscout.android.upload; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; -import android.os.Messenger; import android.preference.PreferenceManager; import android.util.Log; -import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; -import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; @@ -28,8 +22,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.URI; -import java.net.URISyntaxException; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -55,8 +47,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { private static final int CONNECTION_TIMEOUT = 30 * 1000; Context context; - private int cgmSelected = Medtronic640gActivity.CNL_24; - private List<JSONObject> recordsNotUploadedList = new ArrayList<JSONObject>(); + private List<JSONObject> recordsNotUploadedList = new ArrayList<JSONObject>(); private List<JSONObject> recordsNotUploadedListJson = new ArrayList<JSONObject>(); public static final Object isModifyingRecordsLock = new Object(); @@ -67,8 +58,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { public UploadHelper(Context context, int cgmSelected) { this.context = context; - this.cgmSelected = cgmSelected; - settings = context.getSharedPreferences(MedtronicConstants.PREFS_NAME, 0); + settings = context.getSharedPreferences(MedtronicConstants.PREFS_NAME, 0); synchronized (isModifyingRecordsLock) { try { long currentTime = System.currentTimeMillis(); @@ -80,7 +70,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { editor.remove("recordsNotUploaded"); if (settings.contains("recordsNotUploadedJson")) editor.remove("recordsNotUploadedJson"); - editor.commit(); + editor.apply(); } if (settings.contains("recordsNotUploaded")){ JSONArray recordsNotUploaded = new JSONArray(settings.getString("recordsNotUploaded","[]")); @@ -90,7 +80,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { log.debug("retrieve older json records -->" +recordsNotUploaded.length()); SharedPreferences.Editor editor = settings.edit(); editor.remove("recordsNotUploaded"); - editor.commit(); + editor.apply(); } if (settings.contains("recordsNotUploadedJson")){ JSONArray recordsNotUploadedJson = new JSONArray(settings.getString("recordsNotUploadedJson","[]")); @@ -100,134 +90,23 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { log.debug("retrieve older json records -->" +recordsNotUploadedJson.length()); SharedPreferences.Editor editor = settings.edit(); editor.remove("recordsNotUploadedJson"); - editor.commit(); + editor.apply(); } } catch (Exception e) { log.debug("ERROR Retrieving older list, I have lost them"); - recordsNotUploadedList = new ArrayList<JSONObject>(); - recordsNotUploadedListJson = new ArrayList<JSONObject>(); + recordsNotUploadedList = new ArrayList<>(); + recordsNotUploadedListJson = new ArrayList<>(); SharedPreferences.Editor editor = settings.edit(); if (settings.contains("recordsNotUploaded")) editor.remove("recordsNotUploaded"); if (settings.contains("recordsNotUploadedJson")) editor.remove("recordsNotUploadedJson"); - editor.commit(); + editor.apply(); } } } - - public UploadHelper(Context context, int cgmSelected, ArrayList<Messenger> mClients) { - this(context, cgmSelected); - } - - private JSONArray doGetRequest(HttpClient client, String url, String filter, String sort, String limit, String apiKey){ - JSONArray result = null; - URI nUri = null; - String query = ""; - if (filter != null && filter.length() > 0) { - query += filter + "&"; - } - if (sort != null && sort.length() > 0) { - query += sort + "&"; - } - if (limit != null && limit.length() > 0) { - query += limit + "&"; - } - try { - nUri = new URI("https", null, "api.mongolab.com", 443, url, query + "apiKey="+apiKey,null); - } catch (URISyntaxException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } - //URIUtils. - HttpGet getRequest = new HttpGet(nUri); - HttpPost postRequest = null; - getRequest.addHeader("accept", "application/json"); - try { - HttpResponse response = client.execute(getRequest); - InputStream instream = response.getEntity().getContent(); - String sResult = convertStreamToString(instream); - // now you have the string representation of the HTML request - System.out.println("RESPONSE: " + sResult); - instream.close(); - result = new JSONArray(sResult); - } catch (ClientProtocolException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (Exception e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } - return result; - } - - private boolean doPutRequest(HttpClient client, String url, String filter, String apiKey, JSONObject data){ - String query = ""; - if (filter != null && filter.length() > 0) { - query += filter + "&"; - } - - try { - URI nUri = null; - try { - nUri = new URI("https", null, "api.mongolab.com", 443, url, query + "&apiKey="+apiKey,null); - } catch (URISyntaxException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - return false; - } - HttpPut putRequest = new HttpPut(nUri); - putRequest.setHeader("Accept", "application/json"); - putRequest.setHeader("Content-type", "application/json"); - StringEntity se = new StringEntity(data.toString()); - putRequest.setEntity(se); - HttpResponse resp = client.execute(putRequest); - if (resp.getStatusLine().getStatusCode() > 201) { - Log.e("UploaderHelper", "The can't be uploaded"); - log.error("The record can't be uploaded Code: "+resp.getStatusLine().getStatusCode()); - return false; - } - }catch(IllegalArgumentException ex){ - log.error("UploaderHelper", "Illegal record"); - return false; - }catch (Exception e){ - Log.e("UploaderHelper", "The retried can't be uploaded"); - log.error("The retried record can't be uploaded ", e); - return false; - } - return true; - } - - private boolean doPostRequest(HttpClient client, String url, String apiKey, JSONObject data){ - URI nUri = null; - try { - nUri = new URI("https", null, "api.mongolab.com", 443, url, "apiKey="+apiKey, null); - HttpPost postRequest = new HttpPost(nUri); - postRequest.setHeader("Accept", "application/json"); - postRequest.setHeader("Content-type", "application/json"); - StringEntity se = new StringEntity(data.toString()); - postRequest.setEntity(se); - HttpResponse resp = client.execute(postRequest); - if (resp.getStatusLine().getStatusCode() > 201) { - Log.e("UploaderHelper", "The can't be uploaded"); - log.error("The record can't be uploaded Code: "+resp.getStatusLine().getStatusCode()); - return false; - } - }catch(IllegalArgumentException ex){ - log.error("UploaderHelper", "Illegal record"); - return false; - }catch (Exception e){ - Log.e("UploaderHelper", "The retried can't be uploaded"); - log.error("The retried record can't be uploaded ", e); - return false; - } - return true; - } - /** + /** * doInBackground */ protected Long doInBackground(Record... records) { @@ -297,23 +176,22 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { } private void doRESTUploadTo(String baseURI, Record[] records) { - Integer typeSaved = null; - try { + try { int apiVersion = 0; if (baseURI.endsWith("/v1/")) apiVersion = 1; - String baseURL = null; + String baseURL; String secret = null; String[] uriParts = baseURI.split("@"); if (uriParts.length == 1 && apiVersion == 0) { baseURL = uriParts[0]; - } else if (uriParts.length == 1 && apiVersion > 0) { + } else if (uriParts.length == 1) { if (recordsNotUploadedListJson.size() > 0){ JSONArray jsonArray = new JSONArray(recordsNotUploadedListJson); SharedPreferences.Editor editor = settings.edit(); editor.putString("recordsNotUploaded", jsonArray.toString()); - editor.commit(); + editor.apply(); } throw new Exception("Starting with API v1, a pass phase is required"); } else if (uriParts.length == 2 && apiVersion > 0) { @@ -323,8 +201,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { // new format URL! if (secret.contains("http")) { - String b = "http://"; - if (secret.contains("https")) { + if (secret.contains("https")) { baseURL = "https://" + baseURL; } else { baseURL = "http://" + baseURL; @@ -339,7 +216,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { JSONArray jsonArray = new JSONArray(recordsNotUploadedListJson); SharedPreferences.Editor editor = settings.edit(); editor.putString("recordsNotUploadedJson", jsonArray.toString()); - editor.commit(); + editor.apply(); } throw new Exception(String.format("Unexpected baseURI: %s, uriParts.length: %s, apiVersion: %s", baseURI, uriParts.length, apiVersion)); } @@ -371,7 +248,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { JSONArray jsonArray = new JSONArray(auxList); SharedPreferences.Editor editor = settings.edit(); editor.putString("recordsNotUploaded", jsonArray.toString()); - editor.commit(); + editor.apply(); } throw new Exception("Starting with API v1, a pass phase is required"); } else { @@ -411,11 +288,9 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { for (Record record : records) { String postURL = baseURL; if (record instanceof GlucometerRecord){ - typeSaved = 0; - postURL += "entries"; + postURL += "entries"; }else{ - typeSaved = 0; - postURL += "entries"; + postURL += "entries"; } Log.i(TAG, "postURL: " + postURL); log.info( "postURL: " + postURL); @@ -428,7 +303,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { JSONArray jsonArray = new JSONArray(recordsNotUploadedListJson); SharedPreferences.Editor editor = settings.edit(); editor.putString("recordsNotUploadedJson", jsonArray.toString()); - editor.commit(); + editor.apply(); } throw new Exception("Starting with API v1, a pass phase is required"); } else { @@ -469,16 +344,15 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { ResponseHandler responseHandler = new BasicResponseHandler(); httpclient.execute(post, responseHandler); } catch (Exception e) { - if ((typeSaved != null) && (typeSaved == 0)){//Only EGV records are important enough. - if (recordsNotUploadedListJson.size() > 49){ - recordsNotUploadedListJson.remove(0); - recordsNotUploadedListJson.add(49,json); - }else{ - recordsNotUploadedListJson.add(json); - } + //Only EGV records are important enough. + if (recordsNotUploadedListJson.size() > 49){ + recordsNotUploadedListJson.remove(0); + recordsNotUploadedListJson.add(49,json); + }else{ + recordsNotUploadedListJson.add(json); } - Log.w(TAG, "Unable to post data to: '" + post.getURI().toString() + "'", e); + Log.w(TAG, "Unable to post data to: '" + post.getURI().toString() + "'", e); log.warn( "Unable to post data to: '" + post.getURI().toString() + "'", e); } } @@ -515,18 +389,18 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { log.debug("retrieve older json records -->" +recordsNotUploadedJson.length()); SharedPreferences.Editor editor = settings.edit(); editor.remove("recordsNotUploadedJson"); - editor.commit(); + editor.apply(); } catch (Exception e) { log.debug("ERROR RETRIEVING OLDER LISTs, I HAVE LOST THEM"); SharedPreferences.Editor editor = settings.edit(); if (settings.contains("recordsNotUploadedJson")) editor.remove("recordsNotUploadedJson"); - editor.commit(); + editor.apply(); } JSONArray jsonArray = new JSONArray(recordsNotUploadedListJson); SharedPreferences.Editor editor = settings.edit(); editor.putString("recordsNotUploadedJson", jsonArray.toString()); - editor.commit(); + editor.apply(); } } } @@ -594,7 +468,7 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> { String line = null; try { while ((line = reader.readLine()) != null) { - sb.append(line + "\n"); + sb.append(line).append("\n"); } } catch (IOException e) { e.printStackTrace(); diff --git a/app/src/main/res/drawable-hdpi/ic_action_warning.png b/app/src/main/res/drawable-hdpi/ic_action_warning.png deleted file mode 100644 index 98b90c257c20f82aabc9f8c8be5c77acca030bb6..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/drawable-hdpi/ic_action_warning.png and /dev/null differ diff --git a/app/src/main/res/drawable-ldpi/icon36x36.png b/app/src/main/res/drawable-ldpi/icon36x36.png deleted file mode 100644 index 70129cd357610cb7912e7e6b50f15736e015f710..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/drawable-ldpi/icon36x36.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index c81f8e8bb6299c27826cf047b841396f77d16186..d1f5cfe4ff088813d271a15840080fc40275bee8 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,14 +20,13 @@ android:visibility="gone"/> <ScrollView - android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="wrap_content"> <LinearLayout android:id="@+id/login_form" @@ -39,8 +38,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" - android:text="@string/prompt_carelink_username_password" - android:id="@+id/textView" /> + android:text="@string/prompt_carelink_username_password" /> <AutoCompleteTextView android:id="@+id/username" diff --git a/app/src/main/res/layout/adb.xml b/app/src/main/res/layout/adb.xml index 43a947b6c3765ddb25fed48257b36e1033617155..9e1dba225c4528214e90e9b98d55dcbe0c5b3833 100644 --- a/app/src/main/res/layout/adb.xml +++ b/app/src/main/res/layout/adb.xml @@ -5,43 +5,35 @@ android:orientation="vertical" android:paddingTop="15dp"> - <LinearLayout - android:orientation="vertical" + <TextView + android:id="@+id/demoTitle" android:layout_width="match_parent" - 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" /> - - <ScrollView - android:id="@+id/demoScroller" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="10dp"> - - <LinearLayout android:id="@+id/container" - android:orientation="vertical" - android:layout_width="fill_parent" - android:layout_height="fill_parent"> - </LinearLayout> - </ScrollView> - - </LinearLayout> + 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="start" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="10dp"> + + <LinearLayout android:id="@+id/container" + android:orientation="vertical" + android:layout_width="fill_parent" + android:layout_height="wrap_content"> + </LinearLayout> + </ScrollView> </LinearLayout> diff --git a/app/src/main/res/layout/widget_lock.xml b/app/src/main/res/layout/widget_lock.xml deleted file mode 100644 index 7aca06ee606a43a5809d98899c8ebd4e75b46b45..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/widget_lock.xml +++ /dev/null @@ -1,26 +0,0 @@ -<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:background="@android:color/background_dark" - android:orientation="horizontal" - android:padding="@dimen/widget_margin" > - - <TextView - android:id="@+id/sgv_id" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:text="@string/arrow_none" - android:textColor="#ffffff" - android:textSize="40sp" - android:gravity="center_vertical|right" /> - - <TextView - android:id="@+id/arrow_id" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:text="@string/arrow_none" - android:textColor="#ffffff" - android:textSize="18sp" - android:gravity="center_vertical|right"/> -</LinearLayout> diff --git a/app/src/main/res/layout/widget_main.xml b/app/src/main/res/layout/widget_main.xml deleted file mode 100644 index 0009b3b7f01457303a8617177269ea309678b12e..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/widget_main.xml +++ /dev/null @@ -1,35 +0,0 @@ -<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:background="@android:color/background_dark" - android:orientation="horizontal" - android:padding="@dimen/widget_margin" > - - <ImageButton - android:id="@+id/imageButton1" - android:layout_width="48dp" - android:layout_height="match_parent" - android:background="#000000" - android:contentDescription="@string/but_contentDesc" - android:src="@drawable/ic_launcher" /> - - <TextView - android:id="@+id/sgv_id" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:text="@string/arrow_none" - android:textColor="#ffffff" - android:textSize="40sp" - android:gravity="center_vertical|right" /> - - <TextView - android:id="@+id/arrow_id" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:text="@string/arrow_none" - android:textColor="#ffffff" - android:textSize="18sp" - android:gravity="center_vertical|right"/> - -</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index eecdd8158944293d9f06c49d01c9b813294fc77f..66a845035a8bc1a2b96c08db01ed3a528cf30ff0 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -3,7 +3,7 @@ <item android:id="@+id/menu_settings" android:orderInCategory="100" - android:title="Preferences"> + android:title="@string/menu_name_preferences"> </item> <item android:id="@+id/registerCNL" diff --git a/app/src/main/res/values-v14/dimens.xml b/app/src/main/res/values-v14/dimens.xml index f3eb5babe7c94c1ecb11d7a3002ab943b2a9b40c..55c1e5908c7e0f157fe815acd6d5cd7358463390 100644 --- a/app/src/main/res/values-v14/dimens.xml +++ b/app/src/main/res/values-v14/dimens.xml @@ -3,6 +3,5 @@ <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> - <dimen name="widget_margin">0dp</dimen> </resources> diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml index 45757d6d4b3d5e60115dbf5cfb58695c05877945..f3e70203b90ac39368a634f0c6388ccb615ffeca 100644 --- a/app/src/main/res/values-w820dp/dimens.xml +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -6,6 +6,5 @@ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> <dimen name="activity_horizontal_margin">64dp</dimen> - <dimen name="widget_margin">8dp</dimen> </resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 09ea631c2f25204bf1f55e288c632cda4b75ace9..55c1e5908c7e0f157fe815acd6d5cd7358463390 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,6 +3,5 @@ <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> - <dimen name="widget_margin">8dp</dimen> </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 71bd1212cb02746572b6d0039adbb2cdc4483f8c..e6e61757d1ecd9bcbbe63835193560c1f64c119f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,100 +3,18 @@ <string name="hello">---</string> <string name="app_name">NS 640g Uploader</string> - <string name="hello_world">Hello world!</string> - <string name="action_settings">Settings</string> - <string name="sgv_id">sgv_id</string> - <string name="arrow_id">arrow_id</string> - <string name="arrow_none">---</string> - <string name="self_destruct">Close It</string> - <string name="but_contentDesc">Launch Nightscout</string> <string name="eula_title">Disclaimer</string> <string name="eula_accept">Accept</string> <string name="eula_refuse">Refuse</string> - <style name="ButtonText"> - <item name="android:layout_width">fill_parent</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:textColor">#ffffff</item> - <item name="android:gravity">center</item> - <item name="android:layout_margin">3dp</item> - <item name="android:textSize">30dp</item> - <item name="android:textStyle">bold</item> - <item name="android:shadowColor">#000000</item> - <item name="android:shadowDx">1</item> - <item name="android:shadowDy">1</item> - <item name="android:shadowRadius">2</item> - </style> - <string-array name="types"> - <item>Contour NextLink 2.4</item> - </string-array> - <string-array name="types_values"> - <item>1</item> - <item>2</item> - <item>3</item> - </string-array> - <string-array name="calib_types_values"> + <string-array name="calib_types_values"> <item>1</item> <item>2</item> <item>3</item> </string-array> - <string-array name="calibrationTypes"> - <item>Glucometer</item> - <item>Medtronic Pump</item> - <item>Manual</item> - </string-array> - <string-array name="sourceTypes"> - <item>Medtronic Sensor</item> - <item>Medtronic Pump</item> - <item>Both (sensor + pump support)</item> - </string-array> - <string-array name="pumpPeriodList"> - <item>30 min.</item> - <item>60 min.</item> - <item>90 min.</item> - <item>120 min.</item> - </string-array> - <string-array name="pumpperiod_values"> - <item>1</item> - <item>2</item> - <item>3</item> - <item>4</item> - </string-array> - <string-array name="historicPeriodList"> - <item>5 min.</item> - <item>10 min.</item> - <item>15 min.</item> - <item>20 min.</item> - </string-array> <string-array name="levelList"> <item>Error</item> <item>Info</item> <item>Debug</item> - </string-array> - <string-array name="historicMixPeriodList"> - <item>10 min.</item> - <item>15 min.</item> - <item>20 min.</item> - <item>25 min.</item> - <item>30 min.</item> - <item>35 min.</item> - <item>40 min.</item> - <item>45 min.</item> - <item>50 min.</item> - <item>55 min.</item> - <item>60 min.</item> - </string-array> - <string-array name="historicMixPeriodVal"> - <item>1</item> - <item>2</item> - <item>3</item> - <item>4</item> - <item>5</item> - <item>6</item> - <item>7</item> - <item>8</item> - <item>9</item> - <item>10</item> - <item>11</item> </string-array> <string name="title_activity_login">CareLink login</string> @@ -105,13 +23,9 @@ <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">Password is required</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> <string name="preference_nightscout_url">Nightscout URL</string> <string name="preference_api_secret">API SECRET</string> <string name="prompt_carelink_username_password">Please enter your CareLink details.\nThey will not be stored.</string> @@ -119,4 +33,9 @@ <string name="register_contour_next_link">Register Contour Next Link</string> <string name="preferences_enable_crashlytics">prefs_enable_crashlytics</string> <string name="preferences_enable_answers">prefs_enable_answers</string> + <string name="menu_name_preferences">Preferences</string> + <string name="button_text_stop_uploading_data">Stop Uploading CGM Data</string> + <string name="button_text_clear_log">Clear Log</string> + <string name="button_text_get_now">Get Now</string> + <string name="button_text_start_uploading_data">Start Uploading CGM Data</string> </resources> diff --git a/app/src/main/res/xml/example_appwidget_info.xml b/app/src/main/res/xml/example_appwidget_info.xml deleted file mode 100644 index 475a7427f4422c303a4b08a4879e10c099fd416a..0000000000000000000000000000000000000000 --- a/app/src/main/res/xml/example_appwidget_info.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minResizeHeight="20dp" android:minWidth="70dp" android:resizeMode="horizontal|vertical" android:initialKeyguardLayout="@layout/widget_lock" android:minResizeWidth="70dp" android:minHeight="20dp" android:initialLayout="@layout/widget_main" android:updatePeriodMillis="10000" android:widgetCategory="home_screen|keyguard"> - - -</appwidget-provider>