mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-04 01:09:47 +01:00
Merge pull request #1265 from elagin/live_activity_2
Enhancement LiveActivityFragment (2)
This commit is contained in:
commit
226ae54ae6
@ -230,7 +230,7 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void showDateBar(boolean show) {
|
protected void showDateBar(boolean show) {
|
||||||
getChartsHost().getDateBar().setVisibility(show ? View.VISIBLE : View.INVISIBLE);
|
getChartsHost().getDateBar().setVisibility(show ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,6 +29,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.github.mikephil.charting.charts.BarLineChartBase;
|
import com.github.mikephil.charting.charts.BarLineChartBase;
|
||||||
@ -60,6 +61,7 @@ import nodomain.freeyourgadget.gadgetbridge.activities.HeartRateUtils;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Measurement;
|
import nodomain.freeyourgadget.gadgetbridge.model.Measurement;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||||
@ -78,6 +80,7 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
private BarLineChartBase mStepsPerMinuteHistoryChart;
|
private BarLineChartBase mStepsPerMinuteHistoryChart;
|
||||||
private CustomBarChart mStepsPerMinuteCurrentChart;
|
private CustomBarChart mStepsPerMinuteCurrentChart;
|
||||||
private CustomBarChart mTotalStepsChart;
|
private CustomBarChart mTotalStepsChart;
|
||||||
|
private TextView mMaxHeartRateView;
|
||||||
|
|
||||||
private final Steps mSteps = new Steps();
|
private final Steps mSteps = new Steps();
|
||||||
private ScheduledExecutorService pulseScheduler;
|
private ScheduledExecutorService pulseScheduler;
|
||||||
@ -85,6 +88,7 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
private List<Measurement> heartRateValues;
|
private List<Measurement> heartRateValues;
|
||||||
private LineDataSet mHeartRateSet;
|
private LineDataSet mHeartRateSet;
|
||||||
private int mHeartRate;
|
private int mHeartRate;
|
||||||
|
private int mMaxHeartRate = 0;
|
||||||
private TimestampTranslation tsTranslation;
|
private TimestampTranslation tsTranslation;
|
||||||
|
|
||||||
private class Steps {
|
private class Steps {
|
||||||
@ -189,6 +193,10 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
private void setCurrentHeartRate(int heartRate, int timestamp) {
|
private void setCurrentHeartRate(int heartRate, int timestamp) {
|
||||||
addHistoryDataSet(true);
|
addHistoryDataSet(true);
|
||||||
mHeartRate = heartRate;
|
mHeartRate = heartRate;
|
||||||
|
if (mMaxHeartRate < mHeartRate) {
|
||||||
|
mMaxHeartRate = mHeartRate;
|
||||||
|
}
|
||||||
|
mMaxHeartRateView.setText(getContext().getString(R.string.live_activity_max_heart_rate, heartRate, mMaxHeartRate));
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getCurrentHeartRate() {
|
private int getCurrentHeartRate() {
|
||||||
@ -233,11 +241,10 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
}
|
}
|
||||||
mHistorySet.addEntry(new Entry(timestamp, stepsPerMinute));
|
mHistorySet.addEntry(new Entry(timestamp, stepsPerMinute));
|
||||||
int hr = getCurrentHeartRate();
|
int hr = getCurrentHeartRate();
|
||||||
if (hr < 0) {
|
if (hr > HeartRateUtils.getInstance().getMinHeartRate()) {
|
||||||
hr = 0;
|
|
||||||
}
|
|
||||||
mHeartRateSet.addEntry(new Entry(timestamp, hr));
|
mHeartRateSet.addEntry(new Entry(timestamp, hr));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean addHistoryDataSet(boolean force) {
|
private boolean addHistoryDataSet(boolean force) {
|
||||||
if (mStepsPerMinuteHistoryChart.getData() == null) {
|
if (mStepsPerMinuteHistoryChart.getData() == null) {
|
||||||
@ -272,8 +279,13 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
stepsPerMinuteEntry = new BarEntry(1, 0);
|
stepsPerMinuteEntry = new BarEntry(1, 0);
|
||||||
|
|
||||||
mStepsPerMinuteData = setupCurrentChart(mStepsPerMinuteCurrentChart, stepsPerMinuteEntry, getString(R.string.live_activity_current_steps_per_minute));
|
mStepsPerMinuteData = setupCurrentChart(mStepsPerMinuteCurrentChart, stepsPerMinuteEntry, getString(R.string.live_activity_current_steps_per_minute));
|
||||||
|
mStepsPerMinuteData.setDrawValues(true);
|
||||||
|
mStepsPerMinuteData.setValueTextColor(DESCRIPTION_COLOR);
|
||||||
mTotalStepsData = setupTotalStepsChart(mTotalStepsChart, totalStepsEntry, getString(R.string.live_activity_total_steps));
|
mTotalStepsData = setupTotalStepsChart(mTotalStepsChart, totalStepsEntry, getString(R.string.live_activity_total_steps));
|
||||||
|
mTotalStepsData.setDrawValues(true);
|
||||||
|
mTotalStepsData.setValueTextColor(DESCRIPTION_COLOR);
|
||||||
setupHistoryChart(mStepsPerMinuteHistoryChart);
|
setupHistoryChart(mStepsPerMinuteHistoryChart);
|
||||||
|
mMaxHeartRateView = rootView.findViewById(R.id.livechart_max_heart_rate);
|
||||||
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, filterLocal);
|
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, filterLocal);
|
||||||
|
|
||||||
@ -385,7 +397,7 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private BarDataSet setupCurrentChart(CustomBarChart chart, BarEntry entry, String title) {
|
private BarDataSet setupCurrentChart(CustomBarChart chart, BarEntry entry, String title) {
|
||||||
mStepsPerMinuteCurrentChart.getAxisLeft().setAxisMaxValue(MAX_STEPS_PER_MINUTE);
|
mStepsPerMinuteCurrentChart.getAxisLeft().setAxisMaximum(MAX_STEPS_PER_MINUTE);
|
||||||
return setupCommonChart(chart, entry, title);
|
return setupCommonChart(chart, entry, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,9 +420,7 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
List<BarEntry> entries = new ArrayList<>();
|
List<BarEntry> entries = new ArrayList<>();
|
||||||
List<Integer> colors = new ArrayList<>();
|
List<Integer> colors = new ArrayList<>();
|
||||||
|
|
||||||
entries.add(new BarEntry(0, 0));
|
|
||||||
entries.add(entry);
|
entries.add(entry);
|
||||||
entries.add(new BarEntry(2, 0));
|
|
||||||
colors.add(akActivity.color);
|
colors.add(akActivity.color);
|
||||||
colors.add(akActivity.color);
|
colors.add(akActivity.color);
|
||||||
colors.add(akActivity.color);
|
colors.add(akActivity.color);
|
||||||
@ -432,7 +442,9 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private BarDataSet setupTotalStepsChart(CustomBarChart chart, BarEntry entry, String label) {
|
private BarDataSet setupTotalStepsChart(CustomBarChart chart, BarEntry entry, String label) {
|
||||||
mTotalStepsChart.getAxisLeft().setAxisMaximum(5000); // TODO: use daily goal - already reached steps
|
mTotalStepsChart.getAxisLeft().addLimitLine(new LimitLine(GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_STEPS_GOAL, 10000), "ss")); // TODO: use daily goal - already reached steps
|
||||||
|
mTotalStepsChart.getAxisLeft().setAxisMinimum(0);
|
||||||
|
mTotalStepsChart.setAutoScaleMinMaxEnabled(true);
|
||||||
return setupCommonChart(chart, entry, label); // at the moment, these look the same
|
return setupCommonChart(chart, entry, label); // at the moment, these look the same
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,6 +467,7 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
x.setDrawGridLines(false);
|
x.setDrawGridLines(false);
|
||||||
x.setEnabled(true);
|
x.setEnabled(true);
|
||||||
x.setTextColor(CHART_TEXT_COLOR);
|
x.setTextColor(CHART_TEXT_COLOR);
|
||||||
|
x.setValueFormatter(new SampleXLabelFormatter(tsTranslation));
|
||||||
x.setDrawLimitLinesBehindData(true);
|
x.setDrawLimitLinesBehindData(true);
|
||||||
|
|
||||||
YAxis y = chart.getAxisLeft();
|
YAxis y = chart.getAxisLeft();
|
||||||
@ -470,8 +483,6 @@ public class LiveActivityFragment extends AbstractChartFragment {
|
|||||||
yAxisRight.setDrawLabels(true);
|
yAxisRight.setDrawLabels(true);
|
||||||
yAxisRight.setDrawTopYLabelEntry(false);
|
yAxisRight.setDrawTopYLabelEntry(false);
|
||||||
yAxisRight.setTextColor(CHART_TEXT_COLOR);
|
yAxisRight.setTextColor(CHART_TEXT_COLOR);
|
||||||
yAxisRight.setAxisMaximum(HeartRateUtils.getInstance().getMaxHeartRate());
|
|
||||||
yAxisRight.setAxisMinimum(HeartRateUtils.getInstance().getMinHeartRate());
|
|
||||||
|
|
||||||
mHistorySet = new LineDataSet(new ArrayList<Entry>(), getString(R.string.live_activity_steps_history));
|
mHistorySet = new LineDataSet(new ArrayList<Entry>(), getString(R.string.live_activity_steps_history));
|
||||||
mHistorySet.setAxisDependency(YAxis.AxisDependency.LEFT);
|
mHistorySet.setAxisDependency(YAxis.AxisDependency.LEFT);
|
||||||
|
@ -30,6 +30,10 @@
|
|||||||
android:layout_weight="20">
|
android:layout_weight="20">
|
||||||
</com.github.mikephil.charting.charts.PieChart>
|
</com.github.mikephil.charting.charts.PieChart>
|
||||||
-->
|
-->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/livechart_max_heart_rate"
|
||||||
|
grid:layout_columnSpan="2"
|
||||||
|
grid:layout_columnWeight="1" />
|
||||||
|
|
||||||
<com.github.mikephil.charting.charts.LineChart
|
<com.github.mikephil.charting.charts.LineChart
|
||||||
android:id="@+id/livechart_steps_per_minute_history"
|
android:id="@+id/livechart_steps_per_minute_history"
|
||||||
|
@ -287,6 +287,7 @@
|
|||||||
<string name="live_activity_total_steps">Всего шагов</string>
|
<string name="live_activity_total_steps">Всего шагов</string>
|
||||||
<string name="live_activity_steps_per_minute_history">История шагов за минуту</string>
|
<string name="live_activity_steps_per_minute_history">История шагов за минуту</string>
|
||||||
<string name="live_activity_start_your_activity">Начните вашу активность</string>
|
<string name="live_activity_start_your_activity">Начните вашу активность</string>
|
||||||
|
<string name="live_activity_max_heart_rate">Текущая / максимальная ЧСС: %1$d / %2$d</string>
|
||||||
<string name="abstract_chart_fragment_kind_activity">Активность</string>
|
<string name="abstract_chart_fragment_kind_activity">Активность</string>
|
||||||
<string name="abstract_chart_fragment_kind_light_sleep">Быстрый сон</string>
|
<string name="abstract_chart_fragment_kind_light_sleep">Быстрый сон</string>
|
||||||
<string name="abstract_chart_fragment_kind_deep_sleep">Глубокий сон</string>
|
<string name="abstract_chart_fragment_kind_deep_sleep">Глубокий сон</string>
|
||||||
|
@ -405,6 +405,7 @@
|
|||||||
<string name="live_activity_total_steps">Total steps</string>
|
<string name="live_activity_total_steps">Total steps</string>
|
||||||
<string name="live_activity_steps_per_minute_history">Steps per minute history</string>
|
<string name="live_activity_steps_per_minute_history">Steps per minute history</string>
|
||||||
<string name="live_activity_start_your_activity">Start your activity</string>
|
<string name="live_activity_start_your_activity">Start your activity</string>
|
||||||
|
<string name="live_activity_max_heart_rate">Current / Max heart rate: %1$d / %2$d</string>
|
||||||
<string name="abstract_chart_fragment_kind_activity">Activity</string>
|
<string name="abstract_chart_fragment_kind_activity">Activity</string>
|
||||||
<string name="abstract_chart_fragment_kind_light_sleep">Light sleep</string>
|
<string name="abstract_chart_fragment_kind_light_sleep">Light sleep</string>
|
||||||
<string name="abstract_chart_fragment_kind_deep_sleep">Deep sleep</string>
|
<string name="abstract_chart_fragment_kind_deep_sleep">Deep sleep</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user