allow refrest temp targets from NS & fix bugs

This commit is contained in:
Milos Kozak 2017-01-14 16:36:42 +01:00
parent a96bc52e01
commit 61a8cad4e8
13 changed files with 84 additions and 30 deletions

View file

@ -46,7 +46,7 @@ import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS;
import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gPlugin; import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gPlugin;
import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientPlugin; import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientPlugin;
import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin;
import info.nightscout.androidaps.plugins.TempTargetRange.events.EventNewTempTargetRange; import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange;
import info.nightscout.androidaps.receivers.DataReceiver; import info.nightscout.androidaps.receivers.DataReceiver;
import info.nightscout.client.data.NSProfile; import info.nightscout.client.data.NSProfile;
import info.nightscout.client.data.NSSgv; import info.nightscout.client.data.NSSgv;
@ -595,7 +595,7 @@ public class DataService extends IntentService {
*/ */
public void handleAddChangeTempTargetRecord(JSONObject trJson) throws JSONException, SQLException { public void handleAddChangeTempTargetRecord(JSONObject trJson) throws JSONException, SQLException {
if (trJson.getString("eventType").equals("Temporary Target")) { if (trJson.has("eventType") && trJson.getString("eventType").equals("Temporary Target")) {
Dao<TempTarget, Long> daoTempTargets = MainApp.getDbHelper().getDaoTempTargets(); Dao<TempTarget, Long> daoTempTargets = MainApp.getDbHelper().getDaoTempTargets();
QueryBuilder<TempTarget, Long> queryBuilder = daoTempTargets.queryBuilder(); QueryBuilder<TempTarget, Long> queryBuilder = daoTempTargets.queryBuilder();
Where where = queryBuilder.where(); Where where = queryBuilder.where();
@ -610,10 +610,11 @@ public class DataService extends IntentService {
newRecord.low = trJson.getDouble("targetBottom"); newRecord.low = trJson.getDouble("targetBottom");
newRecord.high = trJson.getDouble("targetTop"); newRecord.high = trJson.getDouble("targetTop");
newRecord.reason = trJson.getString("reason"); newRecord.reason = trJson.getString("reason");
newRecord._id = trJson.getString("_id");
daoTempTargets.createIfNotExists(newRecord); daoTempTargets.createIfNotExists(newRecord);
if (Config.logIncommingData) if (Config.logIncommingData)
log.debug("Adding TempTarget record to database: " + newRecord.toString()); log.debug("Adding TempTarget record to database: " + newRecord.log());
MainApp.bus().post(new EventNewTempTargetRange()); MainApp.bus().post(new EventTempTargetRangeChange());
} else if (list.size() == 1) { } else if (list.size() == 1) {
if (Config.logIncommingData) if (Config.logIncommingData)
log.debug("Updating TempTarget record in database: " + trJson.getString("_id")); log.debug("Updating TempTarget record in database: " + trJson.getString("_id"));
@ -624,26 +625,26 @@ public class DataService extends IntentService {
record.high = trJson.getDouble("targetTop"); record.high = trJson.getDouble("targetTop");
record.reason = trJson.getString("reason"); record.reason = trJson.getString("reason");
daoTempTargets.update(record); daoTempTargets.update(record);
MainApp.bus().post(new EventNewTempTargetRange()); MainApp.bus().post(new EventTempTargetRangeChange());
} }
} }
} }
public void handleRemoveTempTargetRecord(JSONObject trJson) throws JSONException, SQLException { public void handleRemoveTempTargetRecord(JSONObject trJson) throws JSONException, SQLException {
if (trJson.getString("eventType").equals("Temporary Target")) { if (trJson.has("_id")) {
Dao<TempTarget, Long> daoTempTargets = MainApp.getDbHelper().getDaoTempTargets(); Dao<TempTarget, Long> daoTempTargets = MainApp.getDbHelper().getDaoTempTargets();
QueryBuilder<TempTarget, Long> queryBuilder = daoTempTargets.queryBuilder(); QueryBuilder<TempTarget, Long> queryBuilder = daoTempTargets.queryBuilder();
Where where = queryBuilder.where(); Where where = queryBuilder.where();
where.eq("_id", trJson.getString("_id")).or().eq("timeIndex", trJson.getLong("mills")); where.eq("_id", trJson.getString("_id"));
PreparedQuery<TempTarget> preparedQuery = queryBuilder.prepare(); PreparedQuery<TempTarget> preparedQuery = queryBuilder.prepare();
List<TempTarget> list = daoTempTargets.query(preparedQuery); List<TempTarget> list = daoTempTargets.query(preparedQuery);
if (list.size() == 1) { if (list.size() == 1) {
TempTarget record = list.get(0); TempTarget record = list.get(0);
if (Config.logIncommingData) if (Config.logIncommingData)
log.debug("Removing TempTarget record from database: " + record.toString()); log.debug("Removing TempTarget record from database: " + record.log());
daoTempTargets.delete(record); daoTempTargets.delete(record);
MainApp.bus().post(new EventNewTempTargetRange()); MainApp.bus().post(new EventTempTargetRangeChange());
} else { } else {
if (Config.logIncommingData) if (Config.logIncommingData)
log.debug("TempTarget not found database: " + trJson.toString()); log.debug("TempTarget not found database: " + trJson.toString());

View file

@ -130,7 +130,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
public void resetTreatments() { public void resetTreatments() {
try { try {
TableUtils.dropTable(connectionSource, Treatment.class, true); TableUtils.dropTable(connectionSource, Treatment.class, true);
TableUtils.createTableIfNotExists(connectionSource, Treatment.class); TableUtils.createTableIfNotExists(connectionSource, Treatment.class);
} catch (SQLException e) { } catch (SQLException e) {
@ -138,6 +137,15 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
} }
} }
public void resetTempTargets() {
try {
TableUtils.dropTable(connectionSource, TempTarget.class, true);
TableUtils.createTableIfNotExists(connectionSource, TempTarget.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Dao<TempBasal, Long> getDaoTempBasals() throws SQLException { public Dao<TempBasal, Long> getDaoTempBasals() throws SQLException {
return getDao(TempBasal.class); return getDao(TempBasal.class);
} }

View file

@ -1,14 +1,20 @@
package info.nightscout.androidaps.plugins.TempTargetRange; package info.nightscout.androidaps.plugins.TempTargetRange;
import android.app.Activity; import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.CardView; import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@ -18,19 +24,21 @@ import java.util.List;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.interfaces.FragmentBase; import info.nightscout.androidaps.interfaces.FragmentBase;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.TempTargetRange.events.EventNewTempTargetRange; import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange;
import info.nightscout.client.data.NSProfile; import info.nightscout.client.data.NSProfile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.ToastUtils;
/** /**
* Created by mike on 13/01/17. * Created by mike on 13/01/17.
*/ */
public class TempTargetRangeFragment extends Fragment implements FragmentBase { public class TempTargetRangeFragment extends Fragment implements View.OnClickListener, FragmentBase {
private static TempTargetRangePlugin tempTargetRangePlugin = new TempTargetRangePlugin(); private static TempTargetRangePlugin tempTargetRangePlugin = new TempTargetRangePlugin();
@ -40,6 +48,7 @@ public class TempTargetRangeFragment extends Fragment implements FragmentBase {
RecyclerView recyclerView; RecyclerView recyclerView;
LinearLayoutManager llm; LinearLayoutManager llm;
Button refreshFromNS;
public static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.TempTargetsViewHolder> { public static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.TempTargetsViewHolder> {
@ -117,10 +126,41 @@ public class TempTargetRangeFragment extends Fragment implements FragmentBase {
RecyclerViewAdapter adapter = new RecyclerViewAdapter(tempTargetRangePlugin.getList()); RecyclerViewAdapter adapter = new RecyclerViewAdapter(tempTargetRangePlugin.getList());
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
refreshFromNS = (Button) view.findViewById(R.id.temptargetrange_refreshfromnightscout);
refreshFromNS.setOnClickListener(this);
updateGUI(); updateGUI();
return view; return view;
} }
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.temptargetrange_refreshfromnightscout:
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean nsUploadOnly = SP.getBoolean("ns_upload_only", false);
if(nsUploadOnly){
ToastUtils.showToastInUiThread(getContext(),this.getContext().getString(R.string.ns_upload_only_enabled));
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
builder.setTitle(this.getContext().getString(R.string.confirmation));
builder.setMessage(this.getContext().getString(R.string.refreshtemptargetsfromnightscout));
builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MainApp.getDbHelper().resetTempTargets();
tempTargetRangePlugin.initializeData();
updateGUI();
Intent restartNSClient = new Intent(Intents.ACTION_RESTART);
MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient);
}
});
builder.setNegativeButton(this.getContext().getString(R.string.cancel), null);
builder.show();
}
break;
}
}
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
@ -134,7 +174,7 @@ public class TempTargetRangeFragment extends Fragment implements FragmentBase {
} }
@Subscribe @Subscribe
public void onStatusEvent(final EventNewTempTargetRange ev) { public void onStatusEvent(final EventTempTargetRangeChange ev) {
updateGUI(); updateGUI();
} }

View file

@ -2,13 +2,8 @@ package info.nightscout.androidaps.plugins.TempTargetRange;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import java.sql.SQLException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -16,7 +11,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.plugins.TempTargetRange.events.EventNewTempTargetRange; import info.nightscout.androidaps.plugins.TempTargetRange.events.EventTempTargetRangeChange;
/** /**
* Created by mike on 13/01/17. * Created by mike on 13/01/17.
@ -81,11 +76,11 @@ public class TempTargetRangePlugin implements PluginBase {
} }
@Subscribe @Subscribe
public void onStatusEvent(final EventNewTempTargetRange ev) { public void onStatusEvent(final EventTempTargetRangeChange ev) {
initializeData();
} }
private void initializeData() { public void initializeData() {
long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * 24); long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * 24);
tempTargets = MainApp.getDbHelper().getTemptargetsDataFromTime(fromMills, false); tempTargets = MainApp.getDbHelper().getTemptargetsDataFromTime(fromMills, false);
} }

View file

@ -4,5 +4,5 @@ package info.nightscout.androidaps.plugins.TempTargetRange.events;
* Created by mike on 13.01.2017. * Created by mike on 13.01.2017.
*/ */
public class EventNewTempTargetRange { public class EventTempTargetRangeChange {
} }

View file

@ -157,7 +157,7 @@ public class TreatmentsFragment extends Fragment implements View.OnClickListener
} else { } else {
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
builder.setTitle(this.getContext().getString(R.string.confirmation)); builder.setTitle(this.getContext().getString(R.string.confirmation));
builder.setMessage(this.getContext().getString(R.string.refreshfromnightscout)); builder.setMessage(this.getContext().getString(R.string.refreshtreatmentsfromnightscout));
builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() { builder.setPositiveButton(this.getContext().getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) { public void onClick(DialogInterface dialog, int id) {
MainApp.getDbHelper().resetTreatments(); MainApp.getDbHelper().resetTreatments();

View file

@ -9,6 +9,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<Button
android:id="@+id/temptargetrange_refreshfromnightscout"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/temptargetrange_refreshfromnightscout" />
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/temptargetrange_recyclerview" android:id="@+id/temptargetrange_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -124,7 +124,7 @@
<string name="objectives_pumpstatusavailableinns">Статус на помпа в NS</string> <string name="objectives_pumpstatusavailableinns">Статус на помпа в NS</string>
<string name="rate">Стойност</string> <string name="rate">Стойност</string>
<string name="reason">Основание</string> <string name="reason">Основание</string>
<string name="refreshfromnightscout">Искате ли да обновите treatments от Nightscout</string> <string name="refreshtreatmentsfromnightscout">Искате ли да обновите treatments от Nightscout</string>
<string name="safety">Безопасност</string> <string name="safety">Безопасност</string>
<string name="setextendedbolusquestion">Задай нов удължен болусs:</string> <string name="setextendedbolusquestion">Задай нов удължен болусs:</string>
<string name="setbasalquestion">Приложи нов временен базал:</string> <string name="setbasalquestion">Приложи нов временен базал:</string>

View file

@ -124,7 +124,7 @@
<string name="objectives_pumpstatusavailableinns">Stav pumpy dostupný v NS</string> <string name="objectives_pumpstatusavailableinns">Stav pumpy dostupný v NS</string>
<string name="rate">Hodnota</string> <string name="rate">Hodnota</string>
<string name="reason">Zdůvodnění</string> <string name="reason">Zdůvodnění</string>
<string name="refreshfromnightscout">Opravdu aktualizovat ošetření z NS</string> <string name="refreshtreatmentsfromnightscout">Opravdu aktualizovat ošetření z NS</string>
<string name="safety">Bezpečnost</string> <string name="safety">Bezpečnost</string>
<string name="danar_useextended_title">Použít kombo bolusy pro >200%</string> <string name="danar_useextended_title">Použít kombo bolusy pro >200%</string>
<string name="setextendedbolusquestion">Spustit nový kombo bolus:</string> <string name="setextendedbolusquestion">Spustit nový kombo bolus:</string>

View file

@ -120,7 +120,7 @@
<string name="setextendedbolusquestion">Setze neuen extended Bolus:</string> <string name="setextendedbolusquestion">Setze neuen extended Bolus:</string>
<string name="setbasalquestion">Akzeptiere neue temp Basalrate:</string> <string name="setbasalquestion">Akzeptiere neue temp Basalrate:</string>
<string name="danar_useextended_title">Benutze extended Bolus für hohe temps (\>200%)></string> <string name="danar_useextended_title">Benutze extended Bolus für hohe temps (\>200%)></string>
<string name="refreshfromnightscout">Möchtest du die Treatments von Nightscout abrufen</string> <string name="refreshtreatmentsfromnightscout">Möchtest du die Treatments von Nightscout abrufen</string>
<string name="objectives_pumpstatusavailableinns">Pumpen Status verfügbar in NS</string> <string name="objectives_pumpstatusavailableinns">Pumpen Status verfügbar in NS</string>
<string name="overview_newtempbasal_percent_label">% (100% = current)</string> <string name="overview_newtempbasal_percent_label">% (100% = current)</string>
<string name="overview_newtempbasal_basal_label">Basal Wert</string> <string name="overview_newtempbasal_basal_label">Basal Wert</string>

View file

@ -103,7 +103,7 @@
<string name="loop_constraintsprocessed_label">Tras procesar limitaciones</string> <string name="loop_constraintsprocessed_label">Tras procesar limitaciones</string>
<string name="loop_setbypump_label">Definido por la bomba</string> <string name="loop_setbypump_label">Definido por la bomba</string>
<string name="openapsma_lastenact_label">Última aceptada</string> <string name="openapsma_lastenact_label">Última aceptada</string>
<string name="refreshfromnightscout">¿Quieres actualizar tratamientos de Nightscout?</string> <string name="refreshtreatmentsfromnightscout">¿Quieres actualizar tratamientos de Nightscout?</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Cancelar</string> <string name="cancel">Cancelar</string>
<string name="noapsselected">NO APS Seleccionado</string> <string name="noapsselected">NO APS Seleccionado</string>

View file

@ -104,7 +104,7 @@
<string name="loop_constraintsprocessed_label">After processed constraints</string> <string name="loop_constraintsprocessed_label">After processed constraints</string>
<string name="loop_setbypump_label">Set by pump</string> <string name="loop_setbypump_label">Set by pump</string>
<string name="openapsma_lastenact_label">최근 주입</string> <string name="openapsma_lastenact_label">최근 주입</string>
<string name="refreshfromnightscout">나이트스카우트에서 Treatments를 새로고치시겠습니까</string> <string name="refreshtreatmentsfromnightscout">나이트스카우트에서 Treatments를 새로고치시겠습니까</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">취소</string> <string name="cancel">취소</string>
<string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string> <string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string>

View file

@ -107,7 +107,8 @@
<string name="loop_constraintsprocessed_label">After processed constraints</string> <string name="loop_constraintsprocessed_label">After processed constraints</string>
<string name="loop_setbypump_label">Set by pump</string> <string name="loop_setbypump_label">Set by pump</string>
<string name="openapsma_lastenact_label">Last enacted</string> <string name="openapsma_lastenact_label">Last enacted</string>
<string name="refreshfromnightscout">Do you want to refresh treatments from Nightscout</string> <string name="refreshtreatmentsfromnightscout">Do you want to refresh treatments from Nightscout</string>
<string name="refreshtemptargetsfromnightscout">Do you want to refresh temp targets from Nightscout</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string> <string name="noapsselected">NO APS SELECTED OR PROVIDED RESULT</string>
@ -399,4 +400,5 @@
<string name="sms_minago">%dmin ago</string> <string name="sms_minago">%dmin ago</string>
<string name="localprofile">Local Profile</string> <string name="localprofile">Local Profile</string>
<string name="temptargetrange">Temp Target</string> <string name="temptargetrange">Temp Target</string>
<string name="temptargetrange_refreshfromnightscout">Refresh temp targets from NS</string>
</resources> </resources>