From 045bebb3a2021b523631deec76e8b8d47f7112dc Mon Sep 17 00:00:00 2001 From: Lennart Goedhart <lennart@omnibase.com.au> Date: Sun, 16 Apr 2017 18:57:35 +1000 Subject: [PATCH] =?UTF-8?q?Cleanup=20of=20code=20from=20Android=20Studio?= =?UTF-8?q?=E2=80=99s=20=E2=80=9CInspect=20Code=E2=80=9D=20and=20=E2=80=9C?= =?UTF-8?q?Code=20Cleanup=E2=80=9D=20tools.=20Beginnings=20of=20Update=20c?= =?UTF-8?q?heck=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integration/android/IntentIntegrator.java | 6 +- .../android/medtronic/MainActivity.java | 114 ++++++++++-------- .../android/medtronic/ManageCNLActivity.java | 6 +- .../medtronic/message/BeginEHSMMessage.java | 4 - .../ChannelNegotiateRequestMessage.java | 3 +- .../CloseConnectionRequestMessage.java | 2 - .../CloseConnectionResponseMessage.java | 1 - .../ContourNextLinkCommandMessage.java | 6 - .../message/ContourNextLinkMessage.java | 1 - .../ContourNextLinkRequestMessage.java | 4 +- .../ContourNextLinkResponseMessage.java | 2 - .../medtronic/message/EndEHSMMessage.java | 5 - .../medtronic/message/MessageUtils.java | 3 +- .../message/OpenConnectionRequestMessage.java | 4 - .../OpenConnectionResponseMessage.java | 1 - .../PumpBasalPatternRequestMessage.java | 2 - .../message/PumpStatusResponseMessage.java | 15 +-- .../ReadHistoryInfoRequestMessage.java | 2 - .../message/ReadInfoRequestMessage.java | 2 - .../message/RequestLinkKeyRequestMessage.java | 4 - .../service/MedtronicCnlAlarmManager.java | 2 - .../service/MedtronicCnlAlarmReceiver.java | 8 -- .../service/MedtronicCnlIntentService.java | 64 +++++----- .../model/medtronicNg/PumpStatusEvent.java | 89 +++++++------- .../android/settings/SettingsFragment.java | 12 +- .../upload/nightscout/NightScoutUpload.java | 1 - .../NightscoutUploadIntentService.java | 5 +- .../android/utils/ConfigurationStore.java | 1 - .../nightscout/android/utils/DataStore.java | 13 +- .../nightscout/android/utils/HexDump.java | 54 +++++---- .../XDripPlusUploadIntentService.java | 5 +- .../info/nightscout/api/DeviceEndpoints.java | 1 - app/src/main/res/layout/activity_main.xml | 13 +- app/src/main/res/layout/activity_status.xml | 2 +- app/src/main/res/layout/cnl_item.xml | 1 + 35 files changed, 200 insertions(+), 258 deletions(-) diff --git a/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java b/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java index 4eb5681..3924ee0 100644 --- a/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java +++ b/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java @@ -147,7 +147,7 @@ public class IntentIntegrator { private String buttonYes; private String buttonNo; private List<String> targetApplications; - private final Map<String,Object> moreExtras = new HashMap<String,Object>(3); + private final Map<String,Object> moreExtras = new HashMap<>(3); /** * @param activity {@link Activity} invoking the integration @@ -320,7 +320,7 @@ public class IntentIntegrator { } intentScan.setPackage(targetAppPackage); intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + intentScan.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); attachMoreExtras(intentScan); startActivityForResult(intentScan, REQUEST_CODE); return null; @@ -466,7 +466,7 @@ public class IntentIntegrator { } intent.setPackage(targetAppPackage); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); attachMoreExtras(intent); if (fragment == null) { activity.startActivity(intent); diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java index 7634801..18351da 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java @@ -114,8 +114,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc */ public static long getNextPoll(PumpStatusEvent pumpStatusData) { long nextPoll = pumpStatusData.getEventDate().getTime() + pumpStatusData.getPumpTimeOffset(), - now = System.currentTimeMillis(), - pollInterval = ConfigurationStore.getInstance().getPollInterval(); + now = System.currentTimeMillis(), + pollInterval = ConfigurationStore.getInstance().getPollInterval(); // align to next poll slot if (nextPoll + 2 * 60 * 60 * 1000 < now) { // last event more than 2h old -> could be a calibration @@ -262,16 +262,24 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc .withSelectable(false); final PrimaryDrawerItem itemStopCollecting = new PrimaryDrawerItem() .withName("Stop collecting data") - .withIcon(GoogleMaterial.Icon.gmd_stop) + .withIcon(GoogleMaterial.Icon.gmd_power_settings_new) .withSelectable(false); final PrimaryDrawerItem itemGetNow = new PrimaryDrawerItem() .withName("Read data now") - .withIcon(GoogleMaterial.Icon.gmd_play_arrow) + .withIcon(GoogleMaterial.Icon.gmd_refresh) + .withSelectable(false); + final PrimaryDrawerItem itemUpdateProfile = new PrimaryDrawerItem() + .withName("Update Profile") + .withIcon(GoogleMaterial.Icon.gmd_insert_chart) .withSelectable(false); final PrimaryDrawerItem itemClearLog = new PrimaryDrawerItem() .withName("Clear Log") .withIcon(GoogleMaterial.Icon.gmd_clear_all) .withSelectable(false); + final PrimaryDrawerItem itemCheckForUpdate = new PrimaryDrawerItem() + .withName("Check For Update") + .withIcon(GoogleMaterial.Icon.gmd_update) + .withSelectable(false); new DrawerBuilder() .withActivity(this) @@ -286,10 +294,12 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc .withSelectedItem(-1) .addDrawerItems( itemSettings, + itemUpdateProfile, itemRegisterUsb, - itemStopCollecting, + itemCheckForUpdate, + itemClearLog, itemGetNow, - itemClearLog + itemStopCollecting ) .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { @Override @@ -307,6 +317,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc startCgmService(0); } else if (drawerItem.equals(itemClearLog)) { clearLogText(); + } else if (drawerItem.equals(itemCheckForUpdate)) { + checkForUpdate(1); } return false; @@ -351,20 +363,28 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc mChart.getGridLabelRenderer().setNumHorizontalLabels(6); mChart.getGridLabelRenderer().setHumanRounding(false); - mChart.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() { - DateFormat mFormat = new SimpleDateFormat("HH:mm"); // 24 hour format forced to fix label overlap + mChart.getGridLabelRenderer().setLabelFormatter( + new DefaultLabelFormatter() { + DateFormat mFormat = new SimpleDateFormat("HH:mm", Locale.US); // 24 hour format forced to fix label overlap - @Override - public String formatLabel(double value, boolean isValueX) { - if (isValueX) { - return mFormat.format(new Date((long) value)); - } else { - return sgvFormatter.format(value); + @Override + public String formatLabel(double value, boolean isValueX) { + if (isValueX) { + return mFormat.format(new Date((long) value)); + } else { + return sgvFormatter.format(value); + } + } } - }} ); } + @Override + protected void onStart() { + super.onStart(); + checkForUpdate(5); + } + @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); @@ -430,7 +450,19 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private void clearLogText() { statusMessageReceiver.clearMessages(); - //mTextViewLog.setText("", BufferType.EDITABLE); + } + + private void checkForUpdate(int checkEvery) { + /* + new AppUpdater(this) + .setUpdateFrom(UpdateFrom.JSON) + .setUpdateXML("https://raw.githubusercontent.com/javiersantos/AppUpdater/master/app/update-changelog.json") +// .setUpdateXML("https://raw.githubusercontent.com/javiersantos/AppUpdater/master/app/update.json") + .setDisplay(Display.DIALOG) + .showEvery(checkEvery) + .showAppUpdated(true) + .start(); + */ } private void startDisplayRefreshLoop() { @@ -452,7 +484,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc if (results.size() > 0) { startCgmService(getNextPoll(results.first()) + delay); } else { - startCgmService(System.currentTimeMillis() + (delay==0?1000:delay)); + startCgmService(System.currentTimeMillis() + (delay == 0 ? 1000 : delay)); } } @@ -468,10 +500,6 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc MedtronicCnlAlarmManager.setAlarm(initialPoll); } - private void uploadCgmData() { - startService(mNightscoutUploadService); - } - private void stopCgmService() { Log.i(TAG, "stopCgmService called"); MedtronicCnlAlarmManager.cancelAlarm(); @@ -607,7 +635,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc if (activePumpMac != 0L && (mActivePump == null || !mActivePump.isValid() || mActivePump.getPumpMac() != activePumpMac)) { if (mActivePump != null) { // remove listener on old pump - mActivePump.removeChangeListeners(); + mActivePump.removeAllChangeListeners(); mActivePump = null; } @@ -620,6 +648,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc mActivePump = pump; mActivePump.addChangeListener(new RealmChangeListener<PumpInfo>() { long lastQueryTS = 0; + @Override public void onChange(PumpInfo pump) { // prevent double updating after deleting old events below @@ -664,37 +693,21 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private long timestamp; private String message; - public StatusMessage(String message) { + StatusMessage(String message) { this(System.currentTimeMillis(), message); } - public StatusMessage(long timestamp, String message) { + StatusMessage(long timestamp, String message) { this.timestamp = timestamp; this.message = message; } - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - public String toString() { return DateFormat.getTimeInstance(DateFormat.MEDIUM).format(timestamp) + ": " + message; } } - private Queue<StatusMessage> messages = new ArrayBlockingQueue<>(400); + private final Queue<StatusMessage> messages = new ArrayBlockingQueue<>(400); @Override public void onReceive(Context context, Intent intent) { @@ -730,7 +743,6 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private class RefreshDisplayRunnable implements Runnable { @Override public void run() { - // UI elements - TODO do these need to be members? TextView textViewBg = (TextView) findViewById(R.id.textview_bg); TextView textViewBgTime = (TextView) findViewById(R.id.textview_bg_time); TextView textViewUnits = (TextView) findViewById(R.id.textview_units); @@ -753,7 +765,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc } updateChart(mRealm.where(PumpStatusEvent.class) - .greaterThan("eventDate", new Date(System.currentTimeMillis() - 1000*60*60*24)) + .greaterThan("eventDate", new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24)) .findAllSorted("eventDate", Sort.ASCENDING)); if (pumpStatusData != null) { @@ -769,6 +781,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc textViewBg.setText(sgvString); textViewBgTime.setText(DateUtils.getRelativeTimeSpanString(pumpStatusData.getEventDate().getTime())); + textViewTrend.setText(Html.fromHtml(renderTrendHtml(pumpStatusData.getCgmTrend()))); textViewIOB.setText(String.format(Locale.getDefault(), "%.2f", pumpStatusData.getActiveInsulin())); @@ -833,13 +846,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc } DataPoint[] entries = new DataPoint[size]; - final long left = System.currentTimeMillis() - chartZoom * 60 * 60 * 1000; int pos = 0; - for (PumpStatusEvent pumpStatus: results) { + for (PumpStatusEvent pumpStatus : results) { // turn your data into Entry objects - int sgv = pumpStatus.getSgv(); - if (configurationStore.isMmolxl()) { entries[pos++] = new DataPoint(pumpStatus.getEventDate(), (float) pumpStatus.getSgv() / MMOLXLFACTOR); } else { @@ -879,11 +889,11 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc public void draw(Canvas canvas, Paint paint, float x, float y, DataPointInterface dataPoint) { double sgv = dataPoint.getY(); boolean mmolxl = configurationStore.isMmolxl(); - if (sgv < (mmolxl?4.5:80)) + if (sgv < (mmolxl ? 4.5 : 80)) paint.setColor(Color.RED); - else if (sgv <= (mmolxl?10:180)) + else if (sgv <= (mmolxl ? 10 : 180)) paint.setColor(Color.GREEN); - else if (sgv <= (mmolxl?14:260)) + else if (sgv <= (mmolxl ? 14 : 260)) paint.setColor(Color.YELLOW); else paint.setColor(Color.RED); @@ -899,7 +909,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc } } - // set vieport to latest SGV + // set viewport to latest SGV long lastSGVTimestamp = (long) mChart.getSeries().get(0).getHighestValueX(); if (!hasZoomedChart) { mChart.getViewport().setMaxX(lastSGVTimestamp); @@ -968,7 +978,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc if (arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_LOW) || arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_CHANGED) || arg1.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_OKAY)) { - dataStore.setUplooaderBatteryLevel(arg1.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)); + dataStore.setUploaderBatteryLevel(arg1.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)); } } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/ManageCNLActivity.java b/app/src/main/java/info/nightscout/android/medtronic/ManageCNLActivity.java index 095b812..78d5547 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/ManageCNLActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/ManageCNLActivity.java @@ -1,10 +1,8 @@ package info.nightscout.android.medtronic; import android.content.Context; -import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; -import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; @@ -57,7 +55,7 @@ public class ManageCNLActivity extends AppCompatActivity { mRealm = Realm.getDefaultInstance(); //generate list - ArrayList<ContourNextLinkInfo> list = new ArrayList<ContourNextLinkInfo>(); + ArrayList<ContourNextLinkInfo> list = new ArrayList<>(); list.addAll(mRealm.where(ContourNextLinkInfo.class).findAll()); @@ -123,7 +121,7 @@ public class ManageCNLActivity extends AppCompatActivity { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = inflater.inflate(R.layout.cnl_item, null); + view = inflater.inflate(R.layout.cnl_item, parent, false); } //Handle TextView and display string from your list diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java index 3902beb..7a2d11b 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/BeginEHSMMessage.java @@ -1,9 +1,5 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateRequestMessage.java index 84dc029..abf2348 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ChannelNegotiateRequestMessage.java @@ -31,9 +31,8 @@ public class ChannelNegotiateRequestMessage extends MedtronicRequestMessage<Chan readMessage(mDevice); // The 0x80 message Log.d(TAG, "negotiateChannel: Reading 0x80 message"); - ChannelNegotiateResponseMessage response = this.getResponse(readMessage(mDevice)); - return response; + return this.getResponse(readMessage(mDevice)); } @Override diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java index bc656cb..9122793 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java @@ -1,9 +1,7 @@ package info.nightscout.android.medtronic.message; import java.io.IOException; -import java.util.concurrent.TimeoutException; -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionResponseMessage.java index d1d101e..7f189e3 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionResponseMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionResponseMessage.java @@ -1,6 +1,5 @@ package info.nightscout.android.medtronic.message; -import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java index 36b7530..7a948f0 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java @@ -1,12 +1,6 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.exception.ChecksumException; -import info.nightscout.android.medtronic.exception.EncryptionException; -import info.nightscout.android.medtronic.exception.UnexpectedMessageException; /** * Created by lgoedhart on 26/03/2016. diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java index 8c340cb..beeb024 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java @@ -8,7 +8,6 @@ import java.nio.ByteBuffer; import java.util.concurrent.TimeoutException; import info.nightscout.android.USB.UsbHidDriver; -import info.nightscout.android.medtronic.MainActivity; import info.nightscout.android.utils.HexDump; /** diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java index cd25fed..681bd90 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkRequestMessage.java @@ -36,10 +36,8 @@ public abstract class ContourNextLinkRequestMessage<T> extends ContourNextLinkMe } } - T response = this.getResponse(readMessage(mDevice)); //new ContourNextLinkCommandResponse(); - // FIXME - We need to care what the response message is - wrong MAC and all that - return response; + return this.getResponse(readMessage(mDevice)); } protected abstract <T> T getResponse(byte[] payload) throws ChecksumException, EncryptionException, IOException, UnexpectedMessageException, TimeoutException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkResponseMessage.java index d20a561..614a2c4 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkResponseMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkResponseMessage.java @@ -1,8 +1,6 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; import java.util.Locale; -import java.util.concurrent.TimeoutException; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.UnexpectedMessageException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java index 5335d4c..bb68120 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/EndEHSMMessage.java @@ -1,13 +1,8 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; -import info.nightscout.android.medtronic.exception.UnexpectedMessageException; /** * Created by lgoedhart on 26/03/2016. diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/MessageUtils.java b/app/src/main/java/info/nightscout/android/medtronic/message/MessageUtils.java index 5b80080..f5a80e0 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/MessageUtils.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/MessageUtils.java @@ -66,7 +66,6 @@ public class MessageUtils { // However, the time the pump *means* is Fri, 13 May 2016 21:07:48 in our own timezone long offsetFromUTC = currentTz.getOffset(Calendar.getInstance().getTimeInMillis()); - Date pumpDate = new Date((( baseTime + rtc + offset ) * 1000 ) - offsetFromUTC ); - return pumpDate; + return new Date((( baseTime + rtc + offset ) * 1000 ) - offsetFromUTC ); } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionRequestMessage.java index 8586986..8083247 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionRequestMessage.java @@ -1,9 +1,5 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionResponseMessage.java index 1f8e6df..d20c421 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionResponseMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/OpenConnectionResponseMessage.java @@ -1,6 +1,5 @@ package info.nightscout.android.medtronic.message; -import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/PumpBasalPatternRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/PumpBasalPatternRequestMessage.java index aa71df2..18be618 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/PumpBasalPatternRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/PumpBasalPatternRequestMessage.java @@ -1,9 +1,7 @@ package info.nightscout.android.medtronic.message; import java.io.IOException; -import java.util.concurrent.TimeoutException; -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusResponseMessage.java index 31b6667..6a70ee7 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusResponseMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/PumpStatusResponseMessage.java @@ -6,7 +6,6 @@ import java.math.BigDecimal; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Date; -import java.util.Locale; import info.nightscout.android.BuildConfig; import info.nightscout.android.medtronic.MedtronicCnlSession; @@ -47,9 +46,6 @@ public class PumpStatusResponseMessage extends MedtronicSendMessageResponseMessa private boolean recentBolusWizard; // Whether a bolus wizard has been run recently private int bolusWizardBGL; // in mg/dL. 0 means no recent bolus wizard reading. - private long rtc; - private long offset; - protected PumpStatusResponseMessage(MedtronicCnlSession pumpSession, byte[] payload) throws EncryptionException, ChecksumException, UnexpectedMessageException { super(pumpSession, payload); @@ -115,6 +111,8 @@ public class PumpStatusResponseMessage extends MedtronicSendMessageResponseMessa // CGM SGV sgv = (statusBuffer.getShort(0x35) & 0x0000ffff); // In mg/DL. 0 means no CGM reading + long rtc; + long offset; if ((sgv & 0x200) == 0x200) { // Sensor error. Let's reset. FIXME - solve this more elegantly later sgv = 0; @@ -128,7 +126,6 @@ public class PumpStatusResponseMessage extends MedtronicSendMessageResponseMessa } // SGV Date - // TODO - this should go in the sgvDate, and eventDate should be the time of this poll. sgvDate = MessageUtils.decodeDateTime(rtc, offset); Log.d(TAG, "original sgv date: " + sgvDate); @@ -184,13 +181,10 @@ public class PumpStatusResponseMessage extends MedtronicSendMessageResponseMessa // Active insulin pumpRecord.setActiveInsulin(activeInsulin); - // CGM SGV + // CGM SGV data pumpRecord.setSgv(sgv); pumpRecord.setSgvDate(new Date(sgvDate.getTime() - pumpRecord.getPumpTimeOffset())); - - // SGV Date pumpRecord.setCgmTrend(cgmTrend); - pumpRecord.setEventDate(new Date(sgvDate.getTime() - pumpRecord.getPumpTimeOffset())); // Predictive low suspend // TODO - there is more status info in this byte other than just a boolean yes/no @@ -198,7 +192,8 @@ public class PumpStatusResponseMessage extends MedtronicSendMessageResponseMessa // Recent Bolus Wizard BGL pumpRecord.setRecentBolusWizard(recentBolusWizard); - if (/*recentBolusWizard && */activeInsulin > DataStore.getInstance().getLastPumpStatus().getActiveInsulin()) { // there is a BolusWizard usage & the IOB increaseed + // there is a BolusWizard usage & the IOB increased + if (activeInsulin > DataStore.getInstance().getLastPumpStatus().getActiveInsulin()) { pumpRecord.setBolusWizardBGL(bolusWizardBGL); // In mg/DL } else { pumpRecord.setBolusWizardBGL(0); // In mg/DL diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ReadHistoryInfoRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ReadHistoryInfoRequestMessage.java index ff7a2f6..c64ba27 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ReadHistoryInfoRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ReadHistoryInfoRequestMessage.java @@ -1,9 +1,7 @@ package info.nightscout.android.medtronic.message; import java.io.IOException; -import java.util.concurrent.TimeoutException; -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ReadInfoRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ReadInfoRequestMessage.java index c357cd5..01c63ce 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/ReadInfoRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/ReadInfoRequestMessage.java @@ -1,9 +1,7 @@ package info.nightscout.android.medtronic.message; import java.io.IOException; -import java.util.concurrent.TimeoutException; -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java index bc2d018..1814fe8 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java +++ b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java @@ -1,9 +1,5 @@ package info.nightscout.android.medtronic.message; -import java.io.IOException; -import java.util.concurrent.TimeoutException; - -import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.medtronic.MedtronicCnlSession; import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.EncryptionException; diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java index b4f2e15..358cc20 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java @@ -5,12 +5,10 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Build; -import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; import java.util.Date; -import info.nightscout.android.medtronic.MainActivity; import info.nightscout.android.utils.ConfigurationStore; /** diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java index d86076c..ad90871 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java @@ -1,20 +1,12 @@ package info.nightscout.android.medtronic.service; -import android.app.Activity; -import android.app.AlarmManager; -import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Build; -import android.preference.PreferenceManager; import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; import java.util.Date; -import info.nightscout.android.medtronic.MainActivity; - /** * Created by lgoedhart on 14/07/2016. */ diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java index befd34c..52d5c59 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java @@ -165,7 +165,7 @@ public class MedtronicCnlIntentService extends IntentService { return; } - DateFormat df = new SimpleDateFormat("HH:mm:ss"); + DateFormat df = new SimpleDateFormat("HH:mm:ss", Locale.US); MedtronicCnlReader cnlReader = new MedtronicCnlReader(mHidDevice); @@ -225,7 +225,7 @@ public class MedtronicCnlIntentService extends IntentService { if (radioChannel == 0) { sendStatus("Could not communicate with the pump. Is it nearby?"); Log.i(TAG, "Could not communicate with the pump. Is it nearby?"); - pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway()?2L:1L); // reduce polling interval to half until pump is available + pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway() ? 2L : 1L); // reduce polling interval to half until pump is available } else { dataStore.setActivePumpMac(pumpMAC); @@ -251,36 +251,27 @@ public class MedtronicCnlIntentService extends IntentService { pumpRecord.setPumpDate(new Date(pumpTime - pumpOffset)); cnlReader.updatePumpStatus(pumpRecord); - if (pumpRecord.getSgv() != 0) { - String offsetSign = ""; - if (pumpOffset > 0) { - offsetSign = "+"; - } - sendStatus("SGV: " + MainActivity.strFormatSGV(pumpRecord.getSgv()) + " At: " + df.format(pumpRecord.getEventDate().getTime()) + " Pump: " + offsetSign + (pumpOffset / 1000L) + "sec"); //note: event time is currently stored with offset - - // Check if pump sent old event when new expected and schedule a re-poll - if (((pumpRecord.getEventDate().getTime() - dataStore.getLastPumpStatus().getEventDate().getTime()) < 5000L) && ((timePollExpected - timePollStarted) < 5000L)) { - pollInterval = 90000L; // polling interval set to 90 seconds - sendStatus("Pump sent old SGV event, re-polling..."); - } - - //MainActivity.timeLastGoodSGV = pumpRecord.getEventDate().getTime(); // track last good sgv event time - //MainActivity.pumpBattery = pumpRecord.getBatteryPercentage(); // track pump battery - dataStore.clearUnavailableSGVCount(); // reset unavailable sgv count - - // Check that the record doesn't already exist before committing - RealmResults<PumpStatusEvent> checkExistingRecords = activePump.getPumpHistory() - .where() - .equalTo("eventDate", pumpRecord.getEventDate()) // >>>>>>> check as event date may not = exact pump event date due to it being stored with offset added this could lead to dup events due to slight variability in time offset - .equalTo("sgv", pumpRecord.getSgv()) - .findAll(); + String offsetSign = ""; + if (pumpOffset > 0) { + offsetSign = "+"; + } + sendStatus("SGV: " + MainActivity.strFormatSGV(pumpRecord.getSgv()) + " At: " + df.format(pumpRecord.getEventDate().getTime()) + " Pump: " + offsetSign + (pumpOffset / 1000L) + "sec"); //note: event time is currently stored with offset + + // Check if pump sent old event when new expected and schedule a re-poll + if (pumpRecord != null && + dataStore.getLastPumpStatus() != null && + dataStore.getLastPumpStatus().getPumpDate() != null && + ((pumpRecord.getPumpDate().getTime() - dataStore.getLastPumpStatus().getPumpDate().getTime()) < 5000L) && + ((timePollExpected - timePollStarted) < 5000L)) { + pollInterval = 90000L; // polling interval set to 90 seconds + sendStatus("Pump sent old SGV event, re-polling..."); + } - // There should be the 1 record we've already added in this transaction. - if (checkExistingRecords.size() == 0) { - activePump.getPumpHistory().add(pumpRecord); - dataStore.setLastPumpStatus(pumpRecord); - } + activePump.getPumpHistory().add(pumpRecord); + dataStore.setLastPumpStatus(pumpRecord); + if (pumpRecord.getSgv() != 0) { + dataStore.clearUnavailableSGVCount(); // reset unavailable sgv count } else { sendStatus("SGV: unavailable from pump"); dataStore.incUnavailableSGVCount(); // poll clash detection @@ -294,11 +285,11 @@ public class MedtronicCnlIntentService extends IntentService { } catch (UnexpectedMessageException e) { Log.e(TAG, "Unexpected Message", e); sendStatus("Communication Error: " + e.getMessage()); - pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway()?2L:1L); + pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway() ? 2L : 1L); } catch (TimeoutException e) { Log.e(TAG, "Timeout communicating with the Contour Next Link.", e); sendStatus("Timeout communicating with the Contour Next Link."); - pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway()?2L:1L); + pollInterval = configurationStore.getPollInterval() / (configurationStore.isReducePollOnPumpAway() ? 2L : 1L); } catch (NoSuchAlgorithmException e) { Log.e(TAG, "Could not determine CNL HMAC", e); sendStatus("Error connecting to Contour Next Link: Hashing error."); @@ -307,7 +298,8 @@ public class MedtronicCnlIntentService extends IntentService { cnlReader.closeConnection(); cnlReader.endPassthroughMode(); cnlReader.endControlMode(); - } catch (NoSuchAlgorithmException e) {} + } catch (NoSuchAlgorithmException e) { + } } } catch (IOException e) { @@ -352,9 +344,8 @@ public class MedtronicCnlIntentService extends IntentService { if (dataStore.getUnavailableSGVCount() > 0) { if (timeLastGoodSGV == 0) { nextRequestedPollTime += POLL_PERIOD_MS / 5L; // if there is a uploader/sensor poll clash on startup then this will push the next attempt out by 60 seconds - } - else if (dataStore.getUnavailableSGVCount() > 2) { - sendStatus("Warning: No SGV available from pump for " +dataStore.getUnavailableSGVCount() + " attempts"); + } else if (dataStore.getUnavailableSGVCount() > 2) { + sendStatus("Warning: No SGV available from pump for " + dataStore.getUnavailableSGVCount() + " attempts"); nextRequestedPollTime += ((long) ((dataStore.getUnavailableSGVCount() - 2) % 5)) * (POLL_PERIOD_MS / 10L); // adjust poll time in 1/10 steps to avoid potential poll clash (max adjustment at 5/10) } } @@ -402,7 +393,6 @@ public class MedtronicCnlIntentService extends IntentService { public static final String ACTION_STATUS_MESSAGE = "info.nightscout.android.medtronic.service.STATUS_MESSAGE"; public static final String ACTION_NO_USB_PERMISSION = "info.nightscout.android.medtronic.service.NO_USB_PERMISSION"; public static final String ACTION_USB_PERMISSION = "info.nightscout.android.medtronic.USB_PERMISSION"; - public static final String ACTION_REFRESH_DATA = "info.nightscout.android.medtronic.service.CGM_DATA"; public static final String ACTION_USB_REGISTER = "info.nightscout.android.medtronic.USB_REGISTER"; public static final String ACTION_UPDATE_PUMP = "info.nightscout.android.medtronic.UPDATE_PUMP"; diff --git a/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java b/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java index 052733e..91f042b 100644 --- a/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java +++ b/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java @@ -9,7 +9,7 @@ import io.realm.annotations.Index; /** * Created by lgoedhart on 4/06/2016. */ -public class PumpStatusEvent extends RealmObject { +public class PumpStatusEvent extends RealmObject { @Index private Date eventDate; // The actual time of the event (assume the capture device eventDate/time is accurate) private Date pumpDate; // The eventDate/time on the pump at the time of the event @@ -45,13 +45,16 @@ public class PumpStatusEvent extends RealmObject { @Index private boolean uploaded = false; + public PumpStatusEvent() { + // The the eventDate to now. + this.eventDate = new Date(); + } + public Date getEventDate() { return eventDate; } - public void setEventDate(Date eventDate) { - this.eventDate = eventDate; - } + // No EventDate setter. The eventDate is set at the time that the PumpStatusEvent is created. public Date getPumpDate() { return pumpDate; @@ -78,7 +81,15 @@ public class PumpStatusEvent extends RealmObject { } public CGM_TREND getCgmTrend() { - return CGM_TREND.valueOf(cgmTrend); + if (cgmTrend == null) { + return CGM_TREND.NOT_SET; + } else { + return CGM_TREND.valueOf(cgmTrend); + } + } + + public void setCgmTrend(String cgmTrend) { + this.cgmTrend = cgmTrend; } public String getCgmTrendString() { @@ -92,10 +103,6 @@ public class PumpStatusEvent extends RealmObject { this.cgmTrend = CGM_TREND.NOT_SET.name(); } - public void setCgmTrend(String cgmTrend) { - this.cgmTrend = cgmTrend; - } - public float getActiveInsulin() { return activeInsulin; } @@ -268,6 +275,38 @@ public class PumpStatusEvent extends RealmObject { this.pumpTimeOffset = pumpTimeOffset; } + @Override + public String toString() { + return "PumpStatusEvent{" + + "eventDate=" + eventDate + + ", pumpDate=" + pumpDate + + ", deviceName='" + deviceName + '\'' + + ", suspended=" + suspended + + ", bolusing=" + bolusing + + ", deliveringInsulin=" + deliveringInsulin + + ", tempBasalActive=" + tempBasalActive + + ", cgmActive=" + cgmActive + + ", activeBasalPattern=" + activeBasalPattern + + ", basalRate=" + basalRate + + ", tempBasalRate=" + tempBasalRate + + ", tempBasalPercentage=" + tempBasalPercentage + + ", tempBasalMinutesRemaining=" + tempBasalMinutesRemaining + + ", basalUnitsDeliveredToday=" + basalUnitsDeliveredToday + + ", batteryPercentage=" + batteryPercentage + + ", reservoirAmount=" + reservoirAmount + + ", minutesOfInsulinRemaining=" + minutesOfInsulinRemaining + + ", activeInsulin=" + activeInsulin + + ", sgv=" + sgv + + ", sgvDate=" + sgvDate + + ", lowSuspendActive=" + lowSuspendActive + + ", cgmTrend='" + cgmTrend + '\'' + + ", recentBolusWizard=" + recentBolusWizard + + ", bolusWizardBGL=" + bolusWizardBGL + + ", pumpTimeOffset=" + pumpTimeOffset + + ", uploaded=" + uploaded + + '}'; + } + public enum CGM_TREND { NONE, DOUBLE_UP, @@ -302,37 +341,5 @@ public class PumpStatusEvent extends RealmObject { } } } - - @Override - public String toString() { - return "PumpStatusEvent{" + - "eventDate=" + eventDate + - ", pumpDate=" + pumpDate + - ", deviceName='" + deviceName + '\'' + - ", suspended=" + suspended + - ", bolusing=" + bolusing + - ", deliveringInsulin=" + deliveringInsulin + - ", tempBasalActive=" + tempBasalActive + - ", cgmActive=" + cgmActive + - ", activeBasalPattern=" + activeBasalPattern + - ", basalRate=" + basalRate + - ", tempBasalRate=" + tempBasalRate + - ", tempBasalPercentage=" + tempBasalPercentage + - ", tempBasalMinutesRemaining=" + tempBasalMinutesRemaining + - ", basalUnitsDeliveredToday=" + basalUnitsDeliveredToday + - ", batteryPercentage=" + batteryPercentage + - ", reservoirAmount=" + reservoirAmount + - ", minutesOfInsulinRemaining=" + minutesOfInsulinRemaining + - ", activeInsulin=" + activeInsulin + - ", sgv=" + sgv + - ", sgvDate=" + sgvDate + - ", lowSuspendActive=" + lowSuspendActive + - ", cgmTrend='" + cgmTrend + '\'' + - ", recentBolusWizard=" + recentBolusWizard + - ", bolusWizardBGL=" + bolusWizardBGL + - ", pumpTimeOffset=" + pumpTimeOffset + - ", uploaded=" + uploaded + - '}'; - } } diff --git a/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java b/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java index a6156e5..b42a106 100644 --- a/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java +++ b/app/src/main/java/info/nightscout/android/settings/SettingsFragment.java @@ -10,15 +10,9 @@ import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; -import android.support.annotation.Nullable; import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; @@ -27,7 +21,6 @@ import java.net.MalformedURLException; import java.net.URL; import info.nightscout.android.R; -import info.nightscout.android.medtronic.message.PumpTimeResponseMessage; public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { private static final String TAG = SettingsFragment.class.getSimpleName(); @@ -151,7 +144,8 @@ public class SettingsFragment extends PreferenceFragment implements OnSharedPref Log.d(TAG, "scanResult returns: " + scanResult.toString()); JsonParser json = new JsonParser(); - JsonElement jsonElement = json.parse(scanResult.getContents()); + String resultContents = scanResult.getContents() == null ? "" : scanResult.getContents(); + JsonElement jsonElement = json.parse(resultContents); if (jsonElement != null && jsonElement.isJsonObject()) { jsonElement = (jsonElement.getAsJsonObject()).get("rest"); if (jsonElement != null && jsonElement.isJsonObject()) { @@ -163,7 +157,7 @@ public class SettingsFragment extends PreferenceFragment implements OnSharedPref try { URL uri = new URL(endpoint); - StringBuffer url = new StringBuffer(uri.getProtocol()) + StringBuilder url = new StringBuilder(uri.getProtocol()) .append("://").append(uri.getHost()); if (uri.getPort() > -1) url.append(":").append(uri.getPort()); diff --git a/app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutUpload.java b/app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutUpload.java index 4fe14f2..f29c2b8 100644 --- a/app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutUpload.java +++ b/app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutUpload.java @@ -29,7 +29,6 @@ import info.nightscout.api.DeviceEndpoints.PumpInfo; import info.nightscout.api.DeviceEndpoints.DeviceStatus; import okhttp3.ResponseBody; import retrofit2.Response; -import retrofit2.Retrofit; class NightScoutUpload { diff --git a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java index 74afe68..0382189 100644 --- a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java +++ b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java @@ -21,7 +21,6 @@ public class NightscoutUploadIntentService extends IntentService { private static final String TAG = NightscoutUploadIntentService.class.getSimpleName(); private Context mContext; - private Realm mRealm; private NightScoutUpload mNightScoutUpload; public NightscoutUploadIntentService() { @@ -49,7 +48,7 @@ public class NightscoutUploadIntentService extends IntentService { @Override protected void onHandleIntent(Intent intent) { Log.d(TAG, "onHandleIntent called"); - mRealm = Realm.getDefaultInstance(); + Realm mRealm = Realm.getDefaultInstance(); RealmResults<PumpStatusEvent> records = mRealm .where(PumpStatusEvent.class) @@ -68,7 +67,7 @@ public class NightscoutUploadIntentService extends IntentService { String urlSetting = prefs.getString(mContext.getString(R.string.preference_nightscout_url), ""); String secretSetting = prefs.getString(mContext.getString(R.string.preference_api_secret), "YOURAPISECRET"); Boolean uploadSuccess = mNightScoutUpload.doRESTUpload(urlSetting, - secretSetting, DataStore.getInstance().getUplooaderBatteryLevel(), records); + secretSetting, DataStore.getInstance().getUploaderBatteryLevel(), records); if (uploadSuccess) { mRealm.beginTransaction(); for (PumpStatusEvent updateRecord : records) { diff --git a/app/src/main/java/info/nightscout/android/utils/ConfigurationStore.java b/app/src/main/java/info/nightscout/android/utils/ConfigurationStore.java index 1a4fca0..a45c63f 100644 --- a/app/src/main/java/info/nightscout/android/utils/ConfigurationStore.java +++ b/app/src/main/java/info/nightscout/android/utils/ConfigurationStore.java @@ -2,7 +2,6 @@ package info.nightscout.android.utils; import info.nightscout.android.medtronic.service.MedtronicCnlIntentService; -import info.nightscout.android.model.medtronicNg.PumpStatusEvent; /** * Created by volker on 30.03.2017. diff --git a/app/src/main/java/info/nightscout/android/utils/DataStore.java b/app/src/main/java/info/nightscout/android/utils/DataStore.java index a61fbf7..fbd2a02 100644 --- a/app/src/main/java/info/nightscout/android/utils/DataStore.java +++ b/app/src/main/java/info/nightscout/android/utils/DataStore.java @@ -1,8 +1,6 @@ package info.nightscout.android.utils; -import com.bugfender.sdk.a.a.k.a; - import java.util.Date; import info.nightscout.android.model.medtronicNg.PumpStatusEvent; @@ -16,7 +14,7 @@ public class DataStore { private static DataStore instance; private PumpStatusEvent lastPumpStatus; - private int uplooaderBatteryLevel = 0; + private int uploaderBatteryLevel = 0; private int unavailableSGVCount = 0; private long activePumpMac = 0; @@ -28,7 +26,6 @@ public class DataStore { // set some initial dummy values PumpStatusEvent dummyStatus = new PumpStatusEvent(); - dummyStatus.setEventDate(new Date(0)); // bypass setter to avoid dealing with a real Realm object instance.lastPumpStatus = dummyStatus; @@ -48,12 +45,12 @@ public class DataStore { if (!realm.isClosed()) realm.close(); } - public int getUplooaderBatteryLevel() { - return uplooaderBatteryLevel; + public int getUploaderBatteryLevel() { + return uploaderBatteryLevel; } - public void setUplooaderBatteryLevel(int uplooaderBatteryLevel) { - this.uplooaderBatteryLevel = uplooaderBatteryLevel; + public void setUploaderBatteryLevel(int uploaderBatteryLevel) { + this.uploaderBatteryLevel = uploaderBatteryLevel; } public int getUnavailableSGVCount() { diff --git a/app/src/main/java/info/nightscout/android/utils/HexDump.java b/app/src/main/java/info/nightscout/android/utils/HexDump.java index ff441ce..002ab6b 100644 --- a/app/src/main/java/info/nightscout/android/utils/HexDump.java +++ b/app/src/main/java/info/nightscout/android/utils/HexDump.java @@ -37,7 +37,9 @@ public class HexDump { result.append("\n "); for (int i = 0; i < Math.min(16, array.length); i++) { - result.append(" ?" + HEX_DIGITS[i]); + result + .append(" ?") + .append(HEX_DIGITS[i]); } result.append("\n0x"); @@ -105,6 +107,7 @@ public class HexDump { return new String(buf); } + public static String toHexString(int i) { return toHexString(toByteArray(i)); } @@ -140,8 +143,8 @@ public class HexDump { public static byte[] hexStringToByteArray(String hexString) { int length = hexString.length(); byte[] buffer = new byte[length / 2]; - if (length% 2 == 1) - length--; + if (length % 2 == 1) + length--; for (int i = 0; i < length; i += 2) { buffer[i / 2] = (byte) ((toByte(hexString.charAt(i)) << 4) | toByte(hexString .charAt(i + 1))); @@ -149,36 +152,39 @@ public class HexDump { return buffer; } - - public static int unsignedByte(byte b){ - return (b & 0xFF); + + public static int unsignedByte(byte b) { + return (b & 0xFF); } - - public static byte bUnsignedByte(byte b){ - return (byte)(b & 0xFF); + + public static byte bUnsignedByte(byte b) { + return (byte) (b & 0xFF); } + + @SuppressWarnings("ResultOfMethodCallIgnored") public static boolean isHexaNumber(String cadena) { try { - Long.parseLong(cadena,16); + Long.parseLong(cadena, 16); return true; } catch (NumberFormatException nfe) { return false; } } - - public static int byteArrayToInt (byte[] arr){ - int length = arr.length; - int mult = 1; - int res = 0; - if (length > 0 && length <5){ - for (int i = length-1; i >= 0; i--){ - res += unsignedByte(arr[i])*mult; - mult *=256; - } - } - return res; + + public static int byteArrayToInt(byte[] arr) { + int length = arr.length; + int mult = 1; + int res = 0; + if (length > 0 && length < 5) { + for (int i = length - 1; i >= 0; i--) { + res += unsignedByte(arr[i]) * mult; + mult *= 256; + } + } + return res; } - public static short byteArrayToShort (byte[] arr){ - return (short) (unsignedByte(arr[0])*256 + unsignedByte(arr[1])); + + public static short byteArrayToShort(byte[] arr) { + return (short) (unsignedByte(arr[0]) * 256 + unsignedByte(arr[1])); } } diff --git a/app/src/main/java/info/nightscout/android/xdrip_plus/XDripPlusUploadIntentService.java b/app/src/main/java/info/nightscout/android/xdrip_plus/XDripPlusUploadIntentService.java index d27f95e..20a1183 100644 --- a/app/src/main/java/info/nightscout/android/xdrip_plus/XDripPlusUploadIntentService.java +++ b/app/src/main/java/info/nightscout/android/xdrip_plus/XDripPlusUploadIntentService.java @@ -33,7 +33,6 @@ public class XDripPlusUploadIntentService extends IntentService { private static final String TAG = XDripPlusUploadIntentService.class.getSimpleName(); private static final SimpleDateFormat ISO8601_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()); Context mContext; - private Realm mRealm; public XDripPlusUploadIntentService() { super(XDripPlusUploadIntentService.class.getName()); @@ -58,7 +57,7 @@ public class XDripPlusUploadIntentService extends IntentService { @Override protected void onHandleIntent(Intent intent) { Log.d(TAG, "onHandleIntent called"); - mRealm = Realm.getDefaultInstance(); + Realm mRealm = Realm.getDefaultInstance(); RealmResults<PumpStatusEvent> all_records = mRealm .where(PumpStatusEvent.class) @@ -116,7 +115,7 @@ public class XDripPlusUploadIntentService extends IntentService { private void addDeviceStatus(JSONArray devicestatusArray, PumpStatusEvent record) throws Exception { JSONObject json = new JSONObject(); - json.put("uploaderBattery", DataStore.getInstance().getUplooaderBatteryLevel()); + json.put("uploaderBattery", DataStore.getInstance().getUploaderBatteryLevel()); json.put("device", record.getDeviceName()); json.put("created_at", ISO8601_DATE_FORMAT.format(record.getPumpDate())); diff --git a/app/src/main/java/info/nightscout/api/DeviceEndpoints.java b/app/src/main/java/info/nightscout/api/DeviceEndpoints.java index 1bf66b2..f528c75 100644 --- a/app/src/main/java/info/nightscout/api/DeviceEndpoints.java +++ b/app/src/main/java/info/nightscout/api/DeviceEndpoints.java @@ -6,7 +6,6 @@ import java.util.Date; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.Body; -import retrofit2.http.Header; import retrofit2.http.Headers; import retrofit2.http.POST; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3dfa265..1830813 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -52,10 +52,10 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" - android:singleLine="true" android:text="-" android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="70sp" /> + android:textSize="70sp" + android:maxLines="1" /> <LinearLayout android:layout_width="0dp" @@ -70,19 +70,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center|top" - android:singleLine="true" android:text="-" android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="40sp" /> + android:textSize="40sp" + android:maxLines="1" /> <TextView android:id="@+id/textview_units" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:singleLine="true" android:text="mmol/L" - android:textAppearance="?android:attr/textAppearanceSmall" /> + android:textAppearance="?android:attr/textAppearanceSmall" + android:maxLines="1" /> </LinearLayout> @@ -128,7 +128,6 @@ android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="fill_parent"> - android:gravity="bottom" <LinearLayout android:orientation="vertical" diff --git a/app/src/main/res/layout/activity_status.xml b/app/src/main/res/layout/activity_status.xml index 5a7529d..8e68fc0 100644 --- a/app/src/main/res/layout/activity_status.xml +++ b/app/src/main/res/layout/activity_status.xml @@ -41,7 +41,7 @@ android:layout_height="wrap_content" android:text="Pump Status" android:id="@+id/status_pump_text_view" - android:singleLine="true" /> + android:maxLines="1" /> <TextView android:layout_width="wrap_content" diff --git a/app/src/main/res/layout/cnl_item.xml b/app/src/main/res/layout/cnl_item.xml index 5ce73b2..2fb909e 100644 --- a/app/src/main/res/layout/cnl_item.xml +++ b/app/src/main/res/layout/cnl_item.xml @@ -10,6 +10,7 @@ android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:paddingLeft="8dp" + android:paddingRight="8dp" android:textSize="18sp" android:textStyle="bold" /> -- GitLab