Formatted HR history graph

This commit is contained in:
Graham Jones
2024-01-13 20:37:39 +00:00
parent f81a6e7dde
commit 0cf40b9d21
4 changed files with 66 additions and 26 deletions

View File

@@ -11,11 +11,14 @@ import android.widget.TextView;
import androidx.appcompat.widget.SwitchCompat;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.github.mikephil.charting.utils.ValueFormatter;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -25,7 +28,7 @@ import java.util.Objects;
public class FragmentHrAlg extends FragmentOsdBaseClass {
String TAG = "FragmentOsdAlg";
LineChart lineChart;
LineChart mLineChart;
LineData lineData;
LineDataSet lineDataSet;
List<Entry> hrHistory = new ArrayList<>();
@@ -50,10 +53,12 @@ public class FragmentHrAlg extends FragmentOsdBaseClass {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lineDataSet = new LineDataSet(new ArrayList<Entry>(),"Heart rate history" );
lineDataSet.setColors(ColorTemplate.JOYFUL_COLORS);
//lineDataSet.setColors(ColorTemplate.JOYFUL_COLORS);
lineDataSet.setValueTextColor(Color.BLACK);
lineDataSet.setValueTextSize(18f);
lineDataSet.setDrawValues(false);
lineDataSet.setCircleSize(0f);
lineDataSet.setLineWidth(3f);
//lineDataSetAverage = new LineDataSet(new ArrayList<Entry>(),"Heart rate history" );
//lineDataSetAverage.setColors(ColorTemplate.JOYFUL_COLORS);
//lineDataSetAverage.setValueTextColor(Color.BLACK);
@@ -61,6 +66,38 @@ public class FragmentHrAlg extends FragmentOsdBaseClass {
}
@Override
public void onResume() {
super.onResume();
mLineChart = mRootView.findViewById(R.id.lineChart);
XAxis xAxis = mLineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setDrawAxisLine(true);
xAxis.setDrawLabels(true);
// Note: the default text colour is BLACK, so does not show up on black background!!!
// This took a lot of finding....
xAxis.setTextColor(Color.WHITE);
YAxis yAxis = mLineChart.getAxisLeft();
yAxis.setAxisMinValue(40f);
yAxis.setAxisMaxValue(240f);
yAxis.setDrawGridLines(true);
yAxis.setDrawLabels(true);
yAxis.setTextColor(Color.WHITE);
// Inhibit the decimal part of the y axis labels.
yAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float v) {
DecimalFormat format = new DecimalFormat("###");
return format.format(v);
}
});
YAxis yAxis2 = mLineChart.getAxisRight();
yAxis2.setDrawGridLines(false);
yAxis2.setEnabled(false);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -85,17 +122,16 @@ public class FragmentHrAlg extends FragmentOsdBaseClass {
tvAvgAHr.setText( String.valueOf((short)mConnection.mSdServer.mSdData
.mAdaptiveHrAverage));
tvCurrent.setText(new StringBuilder()
.append(mConnection.mSdServer.mSdData.mAdaptiveHrAverage)
.append("\nResult of checks: Adaptive Hr Alarm Standing: ")
.append(mConnection.mSdServer.mSdData.mAdaptiveHrAlarmStanding)
.append("\nAverage Hr Alarm Standing: ")
.append(mConnection.mSdServer.mSdData.mAdaptiveHrAlarmStanding)
.toString());
switchAverages = mRootView.findViewById(R.id.hr_average_switch);
//switchAverages = mRootView.findViewById(R.id.hr_average_switch);
if (Objects.nonNull(mConnection.mSdServer.mSdDataSource.mSdAlgHr)) {
Log.v(TAG,"mSdAlgHr si not null");
//Log.v(TAG,"mSdAlgHr is not null");
CircBuf hrHist = mConnection.mSdServer.mSdDataSource.mSdAlgHr.getHrHistBuff();
int nHistArr = hrHist.getNumVals();
double hrHistArr[] = hrHist.getVals(); // This gives us a simple vector of hr values to plot.
@@ -104,20 +140,22 @@ public class FragmentHrAlg extends FragmentOsdBaseClass {
lineDataSet.clear();
String xVals[] = new String[nHistArr];
for (int i = 0; i<nHistArr; i++) {
Log.d(TAG,"i="+i+", HR="+hrHistArr[i]);
//Log.d(TAG,"i="+i+", HR="+hrHistArr[i]);
xVals[i] = String.valueOf(i);
lineDataSet.addEntry(new Entry((float)hrHistArr[i], i));
}
Log.d(TAG,"xVals="+ Arrays.toString(xVals)+ ", lneDataSet="+lineDataSet.toSimpleString());
lineDataSet.setColors(new int[] {0xffff0000});
LineData hrHistLineData = new LineData(xVals, lineDataSet);
lineChart = mRootView.findViewById(R.id.lineChart);
lineChart.setData(hrHistLineData);
lineChart.getData().notifyDataChanged();
lineChart.notifyDataSetChanged();
lineChart.refreshDrawableState();
lineChart.invalidate();
mLineChart.setData(hrHistLineData);
mLineChart.getData().notifyDataChanged();
mLineChart.notifyDataSetChanged();
mLineChart.refreshDrawableState();
float xSpan = (nHistArr * 5.0f)/60.0f; // time in minutes assuming one point every 5 seconds.
mLineChart.setDescription("Heart Ratee History - "+String.format("%.1f", xSpan)+" minutes");
mLineChart.invalidate();
//if (mConnection.mBound){
// lineChart.postInvalidate();
//}

View File

@@ -26,6 +26,7 @@ import android.widget.TextView;
import com.rohitss.uceh.UCEHandler;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
@@ -144,7 +145,7 @@ public class MainActivity2 extends AppCompatActivity {
@Override
public void onBackPressed() {
if (mFragmentPager.getCurrentItem() == 0) {
if (Objects.isNull(mFragmentPager) || mFragmentPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();