Formatted HR history graph
This commit is contained in:
@@ -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();
|
||||
//}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user