DanaR Stats Beautify

This commit is contained in:
viktoria 2017-01-18 03:08:19 +01:00
parent 678fbedcbf
commit 9ba24b4ffd
4 changed files with 676 additions and 72 deletions

View file

@ -5,14 +5,21 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.Dao;
@ -26,6 +33,7 @@ import org.slf4j.LoggerFactory;
import java.sql.SQLException; import java.sql.SQLException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -54,14 +62,16 @@ public class DanaRStatsActivity extends Activity {
private Handler mHandler; private Handler mHandler;
private static HandlerThread mHandlerThread; private static HandlerThread mHandlerThread;
TextView statusView; TextView statusView, statsMessage;
TextView mainView; EditText totalBaseBasal;
Button reloadButton; Button reloadButton;
LinearLayoutManager llm; LinearLayoutManager llm;
TableLayout tl,ctl,etl;
String TBB;
double magicNumber;
List<DanaRHistoryRecord> historyList = new ArrayList<>(); List<DanaRHistoryRecord> historyList = new ArrayList<>();
public DanaRStatsActivity() { public DanaRStatsActivity() {
super(); super();
mHandlerThread = new HandlerThread(DanaRStatsActivity.class.getSimpleName()); mHandlerThread = new HandlerThread(DanaRStatsActivity.class.getSimpleName());
@ -119,11 +129,121 @@ public class DanaRStatsActivity extends Activity {
setContentView(R.layout.danar_statsactivity); setContentView(R.layout.danar_statsactivity);
statusView = (TextView) findViewById(R.id.danar_historystatus); statusView = (TextView) findViewById(R.id.danar_historystatus);
mainView = (TextView) findViewById(R.id.danar_stats_textview);
reloadButton = (Button) findViewById(R.id.danar_historyreload); reloadButton = (Button) findViewById(R.id.danar_historyreload);
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
statusView.setVisibility(View.GONE); statusView.setVisibility(View.GONE);
statsMessage = (TextView) findViewById(R.id.danar_stats_Message);
statsMessage.setVisibility(View.GONE);
totalBaseBasal = (EditText) findViewById(R.id.danar_stats_editTotalBaseBasal);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
TBB = preferences.getString("TBB", "10");
totalBaseBasal.setHint(TBB);
totalBaseBasal.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
SharedPreferences.Editor edit = preferences.edit();
edit.putString("TBB",totalBaseBasal.getText().toString());
edit.commit();
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
TBB = preferences.getString("TBB", "");
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
// stats table
tl = (TableLayout) findViewById(R.id.main_table);
TableRow tr_head = new TableRow(this);
tr_head.setBackgroundColor(Color.DKGRAY);
tr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_date = new TextView(this);
label_date.setText(getString(R.string.danar_stats_date));
label_date.setTextColor(Color.WHITE);
tr_head.addView(label_date);
TextView label_basalrate = new TextView(this);
label_basalrate.setText(getString(R.string.danar_stats_basalrate));
label_basalrate.setTextColor(Color.WHITE);
tr_head.addView(label_basalrate);
TextView label_bolus = new TextView(this);
label_bolus.setText(getString(R.string.danar_stats_bolus));
label_bolus.setTextColor(Color.WHITE);
tr_head.addView(label_bolus);
TextView label_tdd = new TextView(this);
label_tdd.setText(getString(R.string.danar_stats_tdd));
label_tdd.setTextColor(Color.WHITE);
tr_head.addView(label_tdd);
TextView label_ratio = new TextView(this);
label_ratio.setText(getString(R.string.danar_stats_ratio));
label_ratio.setTextColor(Color.WHITE);
tr_head.addView(label_ratio);
// add stats headers to tables
tl.addView(tr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// cumulative table
ctl = (TableLayout) findViewById(R.id.cumulative_table);
TableRow ctr_head = new TableRow(this);
ctr_head.setBackgroundColor(Color.DKGRAY);
ctr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_cum_amount_days = new TextView(this);
label_cum_amount_days.setText(getString(R.string.danar_stats_amount_days));
label_cum_amount_days.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_amount_days);
TextView label_cum_tdd = new TextView(this);
label_cum_tdd.setText(getString(R.string.danar_stats_tdd));
label_cum_tdd.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_tdd);
TextView label_cum_ratio = new TextView(this);
label_cum_ratio.setText(getString(R.string.danar_stats_ratio));
label_cum_ratio.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_ratio);
// add cummulative headers to tables
ctl.addView(ctr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// expontial table
etl = (TableLayout) findViewById(R.id.expweight_table);
TableRow etr_head = new TableRow(this);
etr_head.setBackgroundColor(Color.DKGRAY);
etr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_exp_weight = new TextView(this);
label_exp_weight.setText(getString(R.string.danar_stats_weight));
label_exp_weight.setTextColor(Color.WHITE);
etr_head.addView(label_exp_weight);
TextView label_exp_tdd = new TextView(this);
label_exp_tdd.setText(getString(R.string.danar_stats_tdd));
label_exp_tdd.setTextColor(Color.WHITE);
etr_head.addView(label_exp_tdd);
TextView label_exp_ratio = new TextView(this);
label_exp_ratio.setText(getString(R.string.danar_stats_ratio));
label_exp_ratio.setTextColor(Color.WHITE);
etr_head.addView(label_exp_ratio);
// add expontial headers to tables
etl.addView(etr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
reloadButton.setOnClickListener(new View.OnClickListener() { reloadButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -140,6 +260,8 @@ public class DanaRStatsActivity extends Activity {
public void run() { public void run() {
reloadButton.setVisibility(View.GONE); reloadButton.setVisibility(View.GONE);
statusView.setVisibility(View.VISIBLE); statusView.setVisibility(View.VISIBLE);
statsMessage.setVisibility(View.VISIBLE);
statsMessage.setText(getString(R.string.danar_stats_warning_Message));
} }
}); });
mExecutionService.loadHistory(RecordTypes.RECORD_TYPE_DAILY); mExecutionService.loadHistory(RecordTypes.RECORD_TYPE_DAILY);
@ -149,12 +271,14 @@ public class DanaRStatsActivity extends Activity {
public void run() { public void run() {
reloadButton.setVisibility(View.VISIBLE); reloadButton.setVisibility(View.VISIBLE);
statusView.setVisibility(View.GONE); statusView.setVisibility(View.GONE);
statsMessage.setVisibility(View.GONE);
} }
}); });
} }
}); });
} }
}); });
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY); loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
} }
@ -175,14 +299,24 @@ public class DanaRStatsActivity extends Activity {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
mainView.setText(""); cleanTable(tl);
DateFormat df = new SimpleDateFormat("dd.MM. - "); cleanTable(ctl);
cleanTable(etl);
DateFormat df = new SimpleDateFormat("dd.MM.");
double magicNumber = 18d; magicNumber = 18d;
String[] separatedTBB = TBB.split(" ");
magicNumber = Double.parseDouble(separatedTBB[0]);
ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile(); ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile();
if (pi instanceof CircadianPercentageProfilePlugin){ if (pi instanceof CircadianPercentageProfilePlugin){
magicNumber = ((CircadianPercentageProfilePlugin)pi).baseBasalSum(); magicNumber = ((CircadianPercentageProfilePlugin)pi).baseBasalSum();
DecimalFormat decimalFormat = new DecimalFormat("####0.000");
totalBaseBasal.setHint(decimalFormat.format(magicNumber));
totalBaseBasal.setEnabled(false);
totalBaseBasal.setClickable(false);
totalBaseBasal.setFocusable(false);
totalBaseBasal.setInputType(0);
} }
magicNumber *=2; magicNumber *=2;
@ -192,31 +326,103 @@ public class DanaRStatsActivity extends Activity {
double weighted03 = 0d; double weighted03 = 0d;
double weighted05 = 0d; double weighted05 = 0d;
double weighted07 = 0d; double weighted07 = 0d;
String avg_string = "\n" + getString(R.string.danar_stats_avg);
String weighted_string = "\n\n" + getString(R.string.danar_stats_expweight);
for (DanaRHistoryRecord record: historyList) { for (DanaRHistoryRecord record: historyList) {
double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal(); double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal();
mainView.append(df.format(new Date(record.getRecordDate())));
mainView.append(getString(R.string.danar_stats_basalrate) + DecimalFormatter.to2Decimal(record.getRecordDailyBasal())); // Create the table row
mainView.append(getString(R.string.danar_stats_bolus) + DecimalFormatter.to2Decimal(record.getRecordDailyBolus())); TableRow tr = new TableRow(DanaRStatsActivity.this);
mainView.append(getString(R.string.danar_stats_tdi) + DecimalFormatter.to2Decimal(tdd)); if(i%2!=0) tr.setBackgroundColor(Color.DKGRAY);
mainView.append(" " + Math.round(100*tdd/magicNumber) +"%"); tr.setId(100+i);
mainView.append("\n"); tr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// Here create the TextView dynamically
TextView labelDATE = new TextView(DanaRStatsActivity.this);
labelDATE.setId(200+i);
labelDATE.setText(df.format(new Date(record.getRecordDate())));
labelDATE.setTextColor(Color.WHITE);
tr.addView(labelDATE);
TextView labelBASAL = new TextView(DanaRStatsActivity.this);
labelBASAL.setId(300+i);
labelBASAL.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBasal()) + " U");
labelBASAL.setTextColor(Color.WHITE);
tr.addView(labelBASAL);
TextView labelBOLUS = new TextView(DanaRStatsActivity.this);
labelBOLUS.setId(400+i);
labelBOLUS.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()) + " U");
labelBOLUS.setTextColor(Color.WHITE);
tr.addView(labelBOLUS);
TextView labelTDD = new TextView(DanaRStatsActivity.this);
labelTDD.setId(500+i);
labelTDD.setText(DecimalFormatter.to2Decimal(tdd) + " U");
labelTDD.setTextColor(Color.WHITE);
tr.addView(labelTDD);
TextView labelRATIO = new TextView(DanaRStatsActivity.this);
labelRATIO.setId(600+i);
labelRATIO.setText(Math.round(100*tdd/magicNumber) +" %");
labelRATIO.setTextColor(Color.WHITE);
tr.addView(labelRATIO);
// add stats rows to tables
tl.addView(tr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
sum = sum + tdd; sum = sum + tdd;
i++; i++;
avg_string = avg_string + "\n " + i +": " + DecimalFormatter.to2Decimal(sum/i) + " " + Math.round(100*sum/i/magicNumber) +"%";
// Create the cumtable row
TableRow ctr = new TableRow(DanaRStatsActivity.this);
if(i%2==0) ctr.setBackgroundColor(Color.DKGRAY);
ctr.setId(700+i);
ctr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// Here create the TextView dynamically
TextView labelDAYS = new TextView(DanaRStatsActivity.this);
labelDAYS.setId(800+i);
labelDAYS.setText("" + i);
labelDAYS.setTextColor(Color.WHITE);
ctr.addView(labelDAYS);
TextView labelCUMTDD = new TextView(DanaRStatsActivity.this);
labelCUMTDD.setId(900+i);
labelCUMTDD.setText(DecimalFormatter.to2Decimal(sum/i) + " U");
labelCUMTDD.setTextColor(Color.WHITE);
ctr.addView(labelCUMTDD);
TextView labelCUMRATIO = new TextView(DanaRStatsActivity.this);
labelCUMRATIO.setId(1000+i);
labelCUMRATIO.setText(Math.round(100*sum/i/magicNumber) + " %");
labelCUMRATIO.setTextColor(Color.WHITE);
ctr.addView(labelCUMRATIO);
// add cummulative rows to tables
ctl.addView(ctr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
} }
if (historyList.size()<3 || !(df.format(new Date(historyList.get(0).getRecordDate())).equals(df.format(new Date(System.currentTimeMillis() - 1000*60*60*24))))){ if (historyList.size()<3 || !(df.format(new Date(historyList.get(0).getRecordDate())).equals(df.format(new Date(System.currentTimeMillis() - 1000*60*60*24))))){
mainView.setBackgroundColor(Color.RED); tl.setBackgroundColor(Color.RED);
statsMessage.setVisibility(View.VISIBLE);
statsMessage.setText(getString(R.string.danar_stats_olddata_Message));
} else { } else {
mainView.setBackgroundColor(Color.TRANSPARENT); tl.setBackgroundColor(Color.TRANSPARENT);
} }
Collections.reverse(historyList); Collections.reverse(historyList);
i = 0; i = 0;
for (DanaRHistoryRecord record: historyList) { for (DanaRHistoryRecord record: historyList) {
double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal(); double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal();
if(i == 0 ) { if(i == 0 ) {
@ -231,17 +437,54 @@ public class DanaRStatsActivity extends Activity {
} }
i++; i++;
} }
weighted_string = weighted_string + "\n 0.3 " + DecimalFormatter.to2Decimal(weighted03) + " " + Math.round(100*weighted03/magicNumber) +"%";
weighted_string = weighted_string + "\n 0.5 " + DecimalFormatter.to2Decimal(weighted05) + " " + Math.round(100*weighted05/magicNumber) +"%";
weighted_string = weighted_string + "\n 0.7 " + DecimalFormatter.to2Decimal(weighted07) + " " + Math.round(100*weighted07/magicNumber) +"%";
// Create the exptable row
TableRow etr = new TableRow(DanaRStatsActivity.this);
if(i%2!=0) etr.setBackgroundColor(Color.DKGRAY);
etr.setId(1100+i);
etr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
mainView.append(avg_string); // Here create the TextView dynamically
mainView.append(weighted_string); TextView labelWEIGHT = new TextView(DanaRStatsActivity.this);
labelWEIGHT.setId(1200+i);
labelWEIGHT.setText("0.3\n" + "0.5\n" + "0.7");
labelWEIGHT.setTextColor(Color.WHITE);
etr.addView(labelWEIGHT);
TextView labelEXPTDD = new TextView(DanaRStatsActivity.this);
labelEXPTDD.setId(1300+i);
labelEXPTDD.setText(DecimalFormatter.to2Decimal(weighted03)
+ " U\n" + DecimalFormatter.to2Decimal(weighted05)
+ " U\n" + DecimalFormatter.to2Decimal(weighted07) + " U");
labelEXPTDD.setTextColor(Color.WHITE);
etr.addView(labelEXPTDD);
TextView labelEXPRATIO = new TextView(DanaRStatsActivity.this);
labelEXPRATIO.setId(1400+i);
labelEXPRATIO.setText(Math.round(100*weighted03/magicNumber) +" %\n"
+ Math.round(100*weighted05/magicNumber) +" %\n"
+ Math.round(100*weighted07/magicNumber) +" %");
labelEXPRATIO.setTextColor(Color.WHITE);
etr.addView(labelEXPRATIO);
// add exponentail rows to tables
etl.addView(etr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
} }
}); });
} }
private void cleanTable(TableLayout table) {
int childCount = table.getChildCount();
// Remove all rows except the first one
if (childCount > 1) {
table.removeViews(1, childCount - 1);
}
}
@Subscribe @Subscribe
public void onStatusEvent(final EventDanaRSyncStatus s) { public void onStatusEvent(final EventDanaRSyncStatus s) {
log.debug("EventDanaRSyncStatus: " + s.message); log.debug("EventDanaRSyncStatus: " + s.message);

View file

@ -5,14 +5,21 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.Dao;
@ -26,6 +33,7 @@ import org.slf4j.LoggerFactory;
import java.sql.SQLException; import java.sql.SQLException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -54,14 +62,16 @@ public class DanaRStatsActivity extends Activity {
private Handler mHandler; private Handler mHandler;
private static HandlerThread mHandlerThread; private static HandlerThread mHandlerThread;
TextView statusView; TextView statusView, statsMessage;
TextView mainView; EditText totalBaseBasal;
Button reloadButton; Button reloadButton;
LinearLayoutManager llm; LinearLayoutManager llm;
TableLayout tl,ctl,etl;
String TBB;
double magicNumber;
List<DanaRHistoryRecord> historyList = new ArrayList<>(); List<DanaRHistoryRecord> historyList = new ArrayList<>();
public DanaRStatsActivity() { public DanaRStatsActivity() {
super(); super();
mHandlerThread = new HandlerThread(DanaRStatsActivity.class.getSimpleName()); mHandlerThread = new HandlerThread(DanaRStatsActivity.class.getSimpleName());
@ -119,11 +129,121 @@ public class DanaRStatsActivity extends Activity {
setContentView(R.layout.danar_statsactivity); setContentView(R.layout.danar_statsactivity);
statusView = (TextView) findViewById(R.id.danar_historystatus); statusView = (TextView) findViewById(R.id.danar_historystatus);
mainView = (TextView) findViewById(R.id.danar_stats_textview);
reloadButton = (Button) findViewById(R.id.danar_historyreload); reloadButton = (Button) findViewById(R.id.danar_historyreload);
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
statusView.setVisibility(View.GONE); statusView.setVisibility(View.GONE);
statsMessage = (TextView) findViewById(R.id.danar_stats_Message);
statsMessage.setVisibility(View.GONE);
totalBaseBasal = (EditText) findViewById(R.id.danar_stats_editTotalBaseBasal);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
TBB = preferences.getString("TBB", "10");
totalBaseBasal.setHint(TBB);
totalBaseBasal.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
SharedPreferences.Editor edit = preferences.edit();
edit.putString("TBB",totalBaseBasal.getText().toString());
edit.commit();
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
TBB = preferences.getString("TBB", "");
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
// stats table
tl = (TableLayout) findViewById(R.id.main_table);
TableRow tr_head = new TableRow(this);
tr_head.setBackgroundColor(Color.DKGRAY);
tr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_date = new TextView(this);
label_date.setText(getString(R.string.danar_stats_date));
label_date.setTextColor(Color.WHITE);
tr_head.addView(label_date);
TextView label_basalrate = new TextView(this);
label_basalrate.setText(getString(R.string.danar_stats_basalrate));
label_basalrate.setTextColor(Color.WHITE);
tr_head.addView(label_basalrate);
TextView label_bolus = new TextView(this);
label_bolus.setText(getString(R.string.danar_stats_bolus));
label_bolus.setTextColor(Color.WHITE);
tr_head.addView(label_bolus);
TextView label_tdd = new TextView(this);
label_tdd.setText(getString(R.string.danar_stats_tdd));
label_tdd.setTextColor(Color.WHITE);
tr_head.addView(label_tdd);
TextView label_ratio = new TextView(this);
label_ratio.setText(getString(R.string.danar_stats_ratio));
label_ratio.setTextColor(Color.WHITE);
tr_head.addView(label_ratio);
// add stats headers to tables
tl.addView(tr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// cumulative table
ctl = (TableLayout) findViewById(R.id.cumulative_table);
TableRow ctr_head = new TableRow(this);
ctr_head.setBackgroundColor(Color.DKGRAY);
ctr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_cum_amount_days = new TextView(this);
label_cum_amount_days.setText(getString(R.string.danar_stats_amount_days));
label_cum_amount_days.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_amount_days);
TextView label_cum_tdd = new TextView(this);
label_cum_tdd.setText(getString(R.string.danar_stats_tdd));
label_cum_tdd.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_tdd);
TextView label_cum_ratio = new TextView(this);
label_cum_ratio.setText(getString(R.string.danar_stats_ratio));
label_cum_ratio.setTextColor(Color.WHITE);
ctr_head.addView(label_cum_ratio);
// add cummulative headers to tables
ctl.addView(ctr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// expontial table
etl = (TableLayout) findViewById(R.id.expweight_table);
TableRow etr_head = new TableRow(this);
etr_head.setBackgroundColor(Color.DKGRAY);
etr_head.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
TextView label_exp_weight = new TextView(this);
label_exp_weight.setText(getString(R.string.danar_stats_weight));
label_exp_weight.setTextColor(Color.WHITE);
etr_head.addView(label_exp_weight);
TextView label_exp_tdd = new TextView(this);
label_exp_tdd.setText(getString(R.string.danar_stats_tdd));
label_exp_tdd.setTextColor(Color.WHITE);
etr_head.addView(label_exp_tdd);
TextView label_exp_ratio = new TextView(this);
label_exp_ratio.setText(getString(R.string.danar_stats_ratio));
label_exp_ratio.setTextColor(Color.WHITE);
etr_head.addView(label_exp_ratio);
// add expontial headers to tables
etl.addView(etr_head, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
reloadButton.setOnClickListener(new View.OnClickListener() { reloadButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -140,6 +260,8 @@ public class DanaRStatsActivity extends Activity {
public void run() { public void run() {
reloadButton.setVisibility(View.GONE); reloadButton.setVisibility(View.GONE);
statusView.setVisibility(View.VISIBLE); statusView.setVisibility(View.VISIBLE);
statsMessage.setVisibility(View.VISIBLE);
statsMessage.setText(getString(R.string.danar_stats_warning_Message));
} }
}); });
mExecutionService.loadHistory(RecordTypes.RECORD_TYPE_DAILY); mExecutionService.loadHistory(RecordTypes.RECORD_TYPE_DAILY);
@ -149,16 +271,17 @@ public class DanaRStatsActivity extends Activity {
public void run() { public void run() {
reloadButton.setVisibility(View.VISIBLE); reloadButton.setVisibility(View.VISIBLE);
statusView.setVisibility(View.GONE); statusView.setVisibility(View.GONE);
statsMessage.setVisibility(View.GONE);
} }
}); });
} }
}); });
} }
}); });
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY); loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
} }
private void loadDataFromDB(byte type) { private void loadDataFromDB(byte type) {
try { try {
Dao<DanaRHistoryRecord, String> dao = MainApp.getDbHelper().getDaoDanaRHistory(); Dao<DanaRHistoryRecord, String> dao = MainApp.getDbHelper().getDaoDanaRHistory();
@ -176,14 +299,24 @@ public class DanaRStatsActivity extends Activity {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
mainView.setText(""); cleanTable(tl);
DateFormat df = new SimpleDateFormat("dd.MM. - "); cleanTable(ctl);
cleanTable(etl);
DateFormat df = new SimpleDateFormat("dd.MM.");
double magicNumber = 18d; magicNumber = 18d;
String[] separatedTBB = TBB.split(" ");
magicNumber = Double.parseDouble(separatedTBB[0]);
ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile(); ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile();
if (pi instanceof CircadianPercentageProfilePlugin){ if (pi instanceof CircadianPercentageProfilePlugin){
magicNumber = ((CircadianPercentageProfilePlugin)pi).baseBasalSum(); magicNumber = ((CircadianPercentageProfilePlugin)pi).baseBasalSum();
DecimalFormat decimalFormat = new DecimalFormat("####0.000");
totalBaseBasal.setHint(decimalFormat.format(magicNumber));
totalBaseBasal.setEnabled(false);
totalBaseBasal.setClickable(false);
totalBaseBasal.setFocusable(false);
totalBaseBasal.setInputType(0);
} }
magicNumber *=2; magicNumber *=2;
@ -193,31 +326,103 @@ public class DanaRStatsActivity extends Activity {
double weighted03 = 0d; double weighted03 = 0d;
double weighted05 = 0d; double weighted05 = 0d;
double weighted07 = 0d; double weighted07 = 0d;
String avg_string = "\n" + getString(R.string.danar_stats_avg);
String weighted_string = "\n\n" + getString(R.string.danar_stats_expweight);
for (DanaRHistoryRecord record: historyList) { for (DanaRHistoryRecord record: historyList) {
double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal(); double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal();
mainView.append(df.format(new Date(record.getRecordDate())));
mainView.append(getString(R.string.danar_stats_basalrate) + DecimalFormatter.to2Decimal(record.getRecordDailyBasal())); // Create the table row
mainView.append(getString(R.string.danar_stats_bolus) + DecimalFormatter.to2Decimal(record.getRecordDailyBolus())); TableRow tr = new TableRow(DanaRStatsActivity.this);
mainView.append(getString(R.string.danar_stats_tdi) + DecimalFormatter.to2Decimal(tdd)); if(i%2!=0) tr.setBackgroundColor(Color.DKGRAY);
mainView.append(" " + Math.round(100*tdd/magicNumber) +"%"); tr.setId(100+i);
mainView.append("\n"); tr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// Here create the TextView dynamically
TextView labelDATE = new TextView(DanaRStatsActivity.this);
labelDATE.setId(200+i);
labelDATE.setText(df.format(new Date(record.getRecordDate())));
labelDATE.setTextColor(Color.WHITE);
tr.addView(labelDATE);
TextView labelBASAL = new TextView(DanaRStatsActivity.this);
labelBASAL.setId(300+i);
labelBASAL.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBasal()) + " U");
labelBASAL.setTextColor(Color.WHITE);
tr.addView(labelBASAL);
TextView labelBOLUS = new TextView(DanaRStatsActivity.this);
labelBOLUS.setId(400+i);
labelBOLUS.setText(DecimalFormatter.to2Decimal(record.getRecordDailyBolus()) + " U");
labelBOLUS.setTextColor(Color.WHITE);
tr.addView(labelBOLUS);
TextView labelTDD = new TextView(DanaRStatsActivity.this);
labelTDD.setId(500+i);
labelTDD.setText(DecimalFormatter.to2Decimal(tdd) + " U");
labelTDD.setTextColor(Color.WHITE);
tr.addView(labelTDD);
TextView labelRATIO = new TextView(DanaRStatsActivity.this);
labelRATIO.setId(600+i);
labelRATIO.setText(Math.round(100*tdd/magicNumber) +" %");
labelRATIO.setTextColor(Color.WHITE);
tr.addView(labelRATIO);
// add stats rows to tables
tl.addView(tr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
sum = sum + tdd; sum = sum + tdd;
i++; i++;
avg_string = avg_string + "\n " + i +": " + DecimalFormatter.to2Decimal(sum/i) + " " + Math.round(100*sum/i/magicNumber) +"%";
// Create the cumtable row
TableRow ctr = new TableRow(DanaRStatsActivity.this);
if(i%2==0) ctr.setBackgroundColor(Color.DKGRAY);
ctr.setId(700+i);
ctr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
// Here create the TextView dynamically
TextView labelDAYS = new TextView(DanaRStatsActivity.this);
labelDAYS.setId(800+i);
labelDAYS.setText("" + i);
labelDAYS.setTextColor(Color.WHITE);
ctr.addView(labelDAYS);
TextView labelCUMTDD = new TextView(DanaRStatsActivity.this);
labelCUMTDD.setId(900+i);
labelCUMTDD.setText(DecimalFormatter.to2Decimal(sum/i) + " U");
labelCUMTDD.setTextColor(Color.WHITE);
ctr.addView(labelCUMTDD);
TextView labelCUMRATIO = new TextView(DanaRStatsActivity.this);
labelCUMRATIO.setId(1000+i);
labelCUMRATIO.setText(Math.round(100*sum/i/magicNumber) + " %");
labelCUMRATIO.setTextColor(Color.WHITE);
ctr.addView(labelCUMRATIO);
// add cummulative rows to tables
ctl.addView(ctr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
} }
if (historyList.size()<3 || !(df.format(new Date(historyList.get(0).getRecordDate())).equals(df.format(new Date(System.currentTimeMillis() - 1000*60*60*24))))){ if (historyList.size()<3 || !(df.format(new Date(historyList.get(0).getRecordDate())).equals(df.format(new Date(System.currentTimeMillis() - 1000*60*60*24))))){
mainView.setBackgroundColor(Color.RED); tl.setBackgroundColor(Color.RED);
statsMessage.setVisibility(View.VISIBLE);
statsMessage.setText(getString(R.string.danar_stats_olddata_Message));
} else { } else {
mainView.setBackgroundColor(Color.TRANSPARENT); tl.setBackgroundColor(Color.TRANSPARENT);
} }
Collections.reverse(historyList); Collections.reverse(historyList);
i = 0; i = 0;
for (DanaRHistoryRecord record: historyList) { for (DanaRHistoryRecord record: historyList) {
double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal(); double tdd= record.getRecordDailyBolus() + record.getRecordDailyBasal();
if(i == 0 ) { if(i == 0 ) {
@ -232,17 +437,53 @@ public class DanaRStatsActivity extends Activity {
} }
i++; i++;
} }
weighted_string = weighted_string + "\n 0.3 " + DecimalFormatter.to2Decimal(weighted03) + " " + Math.round(100*weighted03/magicNumber) +"%";
weighted_string = weighted_string + "\n 0.5 " + DecimalFormatter.to2Decimal(weighted05) + " " + Math.round(100*weighted05/magicNumber) +"%";
weighted_string = weighted_string + "\n 0.7 " + DecimalFormatter.to2Decimal(weighted07) + " " + Math.round(100*weighted07/magicNumber) +"%";
// Create the exptable row
TableRow etr = new TableRow(DanaRStatsActivity.this);
if(i%2!=0) etr.setBackgroundColor(Color.DKGRAY);
etr.setId(1100+i);
etr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
mainView.append(avg_string); // Here create the TextView dynamically
mainView.append(weighted_string); TextView labelWEIGHT = new TextView(DanaRStatsActivity.this);
labelWEIGHT.setId(1200+i);
labelWEIGHT.setText("0.3\n" + "0.5\n" + "0.7");
labelWEIGHT.setTextColor(Color.WHITE);
etr.addView(labelWEIGHT);
TextView labelEXPTDD = new TextView(DanaRStatsActivity.this);
labelEXPTDD.setId(1300+i);
labelEXPTDD.setText(DecimalFormatter.to2Decimal(weighted03)
+ " U\n" + DecimalFormatter.to2Decimal(weighted05)
+ " U\n" + DecimalFormatter.to2Decimal(weighted07) + " U");
labelEXPTDD.setTextColor(Color.WHITE);
etr.addView(labelEXPTDD);
TextView labelEXPRATIO = new TextView(DanaRStatsActivity.this);
labelEXPRATIO.setId(1400+i);
labelEXPRATIO.setText(Math.round(100*weighted03/magicNumber) +" %\n"
+ Math.round(100*weighted05/magicNumber) +" %\n"
+ Math.round(100*weighted07/magicNumber) +" %");
labelEXPRATIO.setTextColor(Color.WHITE);
etr.addView(labelEXPRATIO);
// add exponentail rows to tables
etl.addView(etr, new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
} }
}); });
} }
private void cleanTable(TableLayout table) {
int childCount = table.getChildCount();
// Remove all rows except the first one
if (childCount > 1) {
table.removeViews(1, childCount - 1);
}
}
@Subscribe @Subscribe
public void onStatusEvent(final EventDanaRSyncStatus s) { public void onStatusEvent(final EventDanaRSyncStatus s) {
@ -276,6 +517,4 @@ public class DanaRStatsActivity extends Activity {
} }
); );
} }
} }

View file

@ -9,23 +9,14 @@
<LinearLayout <LinearLayout
android:id="@+id/danar_historytop" android:id="@+id/danar_statstop"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@drawable/loopmodeborder"
android:gravity="center_horizontal"
android:textColor="@color/cardColorBackground"
android:text="@string/danar_stats" />
</LinearLayout> </LinearLayout>
@ -40,6 +31,87 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/loopmodeborder"
android:gravity="center_horizontal"
android:textColor="@color/cardColorBackground"
android:text="@string/danar_stats" />
<TableLayout
android:stretchColumns="0,1,2,3,4"
android:id="@+id/main_table"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</TableLayout>
<Space
android:layout_width="10dp"
android:layout_height="10dp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="150dp"
android:layout_height="wrap_content"
android:background="@drawable/loopmodeborder"
android:gravity="center_horizontal"
android:textColor="@color/cardColorBackground"
android:text="@string/danar_stats_cumulative_tdd" />
<TableLayout
android:stretchColumns="0,1,2"
android:id="@+id/cumulative_table"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_column="0"
android:layout_weight="1">
</TableLayout>
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="10dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loopmodeborder"
android:gravity="center_horizontal"
android:textColor="@color/cardColorBackground"
android:text="@string/danar_stats_expweight" />
<TableLayout
android:stretchColumns="0,1,2"
android:id="@+id/expweight_table"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_column="1"
android:layout_weight="1">
</TableLayout>
</LinearLayout>
</LinearLayout>
<TextView <TextView
android:id="@+id/danar_historystatus" android:id="@+id/danar_historystatus"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -47,11 +119,6 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:gravity="center_horizontal" /> android:gravity="center_horizontal" />
<TextView
android:id="@+id/danar_stats_textview"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:text="Da kommt was hin." />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
@ -62,12 +129,51 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:orientation="horizontal"> android:orientation="horizontal">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<EditText
android:layout_width="70dp"
android:layout_height="wrap_content"
android:hint="TBB"
android:ems="10"
android:gravity="center"
android:inputType="numberDecimal"
android:id="@+id/danar_stats_editTotalBaseBasal" />
<TextView
android:text="@string/danar_stats_tbb"
android:labelFor="@+id/danar_stats_editTotalBaseBasal"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/danar_stats_editTotalBaseBasal_label"
android:gravity="top" />
<Space
android:layout_width="match_parent"
android:layout_height="20dp" />
<TextView
android:id="@+id/danar_stats_Message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="45px"
android:textColor="#ff0000"
android:text="@string/danar_stats_warning_Message" />
<Button <Button
android:id="@+id/danar_historyreload" android:id="@+id/danar_historyreload"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/danar_historyreload" /> android:text="@string/danar_historyreload" />
</LinearLayout> </LinearLayout>
</LinearLayout>
</RelativeLayout> </RelativeLayout>

View file

@ -412,4 +412,20 @@
<string name="eatingsoon">Eating Soon</string> <string name="eatingsoon">Eating Soon</string>
<string name="activity">Activity</string> <string name="activity">Activity</string>
<string name="removerecord">Remove record:</string> <string name="removerecord">Remove record:</string>
<string name="danar_stats">DanaR Stats</string>
<string name="danar_stats_cumulative_tdd">Cumulative TDD</string>
<string name="danar_stats_expweight">Exponentially Weighted TDD</string>
<string name="danar_stats_basalrate">Basal</string>
<string name="danar_stats_bolus">Bolus</string>
<string name="danar_stats_tdd">TDD</string>
<string name="danar_stats_date">Date</string>
<string name="danar_stats_ratio">Ratio</string>
<string name="danar_stats_amount_days"># Days</string>
<string name="danar_stats_weight">Weight</string>
<string name="danar_stats_warning_Message">Possibly inaccurate if using boluses for priming/filling!</string>
<string name="danar_stats_olddata_Message">Old Data Please Press "RELOAD"</string>
<string name="danar_stats_tbb">Total Base Basal</string>
<string name="danar_stats_skipMessageButton">Display Alert Message Again</string>
<string name="danar_stats_skipMessageCheckbox">Please do not show again</string>
<string name="danar_stats_skipMessage">Possibly inaccurate if using boluses for priming/filling!</string>
</resources> </resources>