Skip to content

Commit c8639ec

Browse files
committed
fix drawing of graphs and draw data after orientation change
1 parent caf0c60 commit c8639ec

12 files changed

+145
-94
lines changed

Diff for: app/src/main/java/io/pslab/sensors/AbstractSensorActivity.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,20 @@ public boolean onOptionsItemSelected(MenuItem item) {
257257

258258
protected abstract int getTitleResId();
259259

260-
protected interface SensorDataFetch {
260+
protected abstract class SensorDataFetch {
261261

262-
default void execute() {
262+
protected float getTimeElapsed() {
263+
return (System.currentTimeMillis() - getStartTime()) / 1000f;
264+
}
265+
266+
protected void execute() {
263267
getSensorData();
264268
updateUi();
265269
}
266270

267-
void getSensorData();
271+
abstract void getSensorData();
268272

269-
void updateUi();
273+
abstract void updateUi();
270274

271275
}
272276

Diff for: app/src/main/java/io/pslab/sensors/SensorADS1115.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
105105
y.setLabelCount(10);
106106

107107
y2.setDrawGridLines(false);
108+
109+
if (savedInstanceState != null) {
110+
sensorDataFetch.updateUi();
111+
}
108112
}
109113

110114
@Override
@@ -114,9 +118,11 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
114118
outState.putParcelableArrayList(KEY_ENTRIES, entries);
115119
}
116120

117-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
121+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
118122

119123
private int dataADS1115;
124+
/* Initialization required if updateUi is executed before getSensorData */
125+
private float timeElapsed = getTimeElapsed();
120126

121127
@Override
122128
public void getSensorData() {
@@ -128,8 +134,8 @@ public void getSensorData() {
128134
Log.e(TAG, "Error getting sensor data.", e);
129135
}
130136

131-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
132-
entries.add(new Entry((float) timeElapsed, dataADS1115));
137+
timeElapsed = getTimeElapsed();
138+
entries.add(new Entry(timeElapsed, dataADS1115));
133139
}
134140

135141
@Override
@@ -142,8 +148,7 @@ public void updateUi() {
142148
mChart.setData(data);
143149
mChart.notifyDataSetChanged();
144150
mChart.setVisibleXRangeMaximum(10);
145-
mChart.moveViewToX(data.getEntryCount());
146-
mChart.invalidate();
151+
mChart.moveViewToX(timeElapsed);
147152
}
148153
}
149154

Diff for: app/src/main/java/io/pslab/sensors/SensorAPDS9960.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
146146
yProximity.setLabelCount(10);
147147

148148
yProximity2.setDrawGridLines(false);
149+
150+
if (savedInstanceState != null) {
151+
sensorDataFetch.updateUi();
152+
}
149153
}
150154

151155
@Override
@@ -156,12 +160,14 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
156160
outState.putParcelableArrayList(KEY_ENTRIES_PROXIMITY, entriesProximity);
157161
}
158162

159-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
163+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
160164

161165
private int[] dataAPDS9960Color;
162166
private double dataAPDS9960Lux;
163167
private int dataAPDS9960Proximity;
164168
private int dataAPDS9960Gesture;
169+
/* Initialization required if updateUi is executed before getSensorData */
170+
private float timeElapsed = getTimeElapsed();
165171

166172
@Override
167173
public void getSensorData() {
@@ -184,9 +190,9 @@ public void getSensorData() {
184190
} catch (IOException | InterruptedException e) {
185191
Log.e(TAG, "Error getting sensor data.", e);
186192
}
187-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
188-
entriesLux.add(new Entry((float) timeElapsed, (float) dataAPDS9960Lux));
189-
entriesProximity.add(new Entry((float) timeElapsed, dataAPDS9960Proximity));
193+
timeElapsed = getTimeElapsed();
194+
entriesLux.add(new Entry(timeElapsed, (float) dataAPDS9960Lux));
195+
entriesProximity.add(new Entry(timeElapsed, dataAPDS9960Proximity));
190196
}
191197

192198
public void updateUi() {
@@ -207,15 +213,13 @@ public void updateUi() {
207213
mChartLux.setData(data);
208214
mChartLux.notifyDataSetChanged();
209215
mChartLux.setVisibleXRangeMaximum(10);
210-
mChartLux.moveViewToX(data.getEntryCount());
211-
mChartLux.invalidate();
216+
mChartLux.moveViewToX(timeElapsed);
212217

213218
LineData data2 = new LineData(dataSet2);
214219
mChartProximity.setData(data2);
215220
mChartProximity.notifyDataSetChanged();
216221
mChartProximity.setVisibleXRangeMaximum(10);
217-
mChartProximity.moveViewToX(data2.getEntryCount());
218-
mChartProximity.invalidate();
222+
mChartProximity.moveViewToX(timeElapsed);
219223
} else {
220224
switch (dataAPDS9960Gesture) {
221225
case 1:

Diff for: app/src/main/java/io/pslab/sensors/SensorBMP180.java

+14-11
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
181181
yPressure.setLabelCount(10);
182182

183183
yPressure2.setDrawGridLines(false);
184+
185+
if (savedInstanceState != null) {
186+
sensorDataFetch.updateUi();
187+
}
184188
}
185189

186190
@Override
@@ -192,9 +196,11 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
192196
outState.putParcelableArrayList(KEY_ENTRIES_PRESSURE, entriesPressure);
193197
}
194198

195-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
199+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
196200

197201
private double[] dataBMP180 = new double[3];
202+
/* Initialization required if updateUi is executed before getSensorData */
203+
private float timeElapsed = getTimeElapsed();
198204

199205
@Override
200206
public void getSensorData() {
@@ -206,10 +212,10 @@ public void getSensorData() {
206212
Log.e(TAG, "Error getting sensor data.", e);
207213
}
208214

209-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
210-
entriesTemperature.add(new Entry((float) timeElapsed, (float) dataBMP180[0]));
211-
entriesAltitude.add(new Entry((float) timeElapsed, (float) dataBMP180[1]));
212-
entriesPressure.add(new Entry((float) timeElapsed, (float) dataBMP180[2]));
215+
timeElapsed = getTimeElapsed();
216+
entriesTemperature.add(new Entry(timeElapsed, (float) dataBMP180[0]));
217+
entriesAltitude.add(new Entry(timeElapsed, (float) dataBMP180[1]));
218+
entriesPressure.add(new Entry(timeElapsed, (float) dataBMP180[2]));
213219
}
214220

215221
public void updateUi() {
@@ -229,22 +235,19 @@ public void updateUi() {
229235
mChartTemperature.setData(data);
230236
mChartTemperature.notifyDataSetChanged();
231237
mChartTemperature.setVisibleXRangeMaximum(10);
232-
mChartTemperature.moveViewToX(data.getEntryCount());
233-
mChartTemperature.invalidate();
238+
mChartTemperature.moveViewToX(timeElapsed);
234239

235240
LineData data2 = new LineData(dataSet2);
236241
mChartAltitude.setData(data2);
237242
mChartAltitude.notifyDataSetChanged();
238243
mChartAltitude.setVisibleXRangeMaximum(10);
239-
mChartAltitude.moveViewToX(data.getEntryCount());
240-
mChartAltitude.invalidate();
244+
mChartAltitude.moveViewToX(timeElapsed);
241245

242246
LineData data3 = new LineData(dataSet3);
243247
mChartPressure.setData(data3);
244248
mChartPressure.notifyDataSetChanged();
245249
mChartPressure.setVisibleXRangeMaximum(10);
246-
mChartPressure.moveViewToX(data.getEntryCount());
247-
mChartPressure.invalidate();
250+
mChartPressure.moveViewToX(timeElapsed);
248251
}
249252
}
250253

Diff for: app/src/main/java/io/pslab/sensors/SensorCCS811.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
134134
yTVOC.setLabelCount(10);
135135

136136
yTVOC2.setDrawGridLines(false);
137+
138+
if (savedInstanceState != null) {
139+
sensorDataFetch.updateUi();
140+
}
137141
}
138142

139143
@Override
@@ -144,10 +148,12 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
144148
outState.putParcelableArrayList(KEY_ENTRIES_TVOC, entriesTVOC);
145149
}
146150

147-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
151+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
148152

149153
private int dataCCS811eCO2;
150154
private int dataCCS811TVOC;
155+
/* Initialization required if updateUi is executed before getSensorData */
156+
private float timeElapsed = getTimeElapsed();
151157

152158
@Override
153159
public void getSensorData() {
@@ -160,9 +166,9 @@ public void getSensorData() {
160166
} catch (IOException e) {
161167
Log.e(TAG, "Error getting sensor data.", e);
162168
}
163-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
164-
entrieseCO2.add(new Entry((float) timeElapsed, dataCCS811eCO2));
165-
entriesTVOC.add(new Entry((float) timeElapsed, dataCCS811TVOC));
169+
timeElapsed = getTimeElapsed();
170+
entrieseCO2.add(new Entry(timeElapsed, dataCCS811eCO2));
171+
entriesTVOC.add(new Entry(timeElapsed, dataCCS811TVOC));
166172
}
167173

168174
public void updateUi() {
@@ -179,15 +185,13 @@ public void updateUi() {
179185
mCharteCO2.setData(data);
180186
mCharteCO2.notifyDataSetChanged();
181187
mCharteCO2.setVisibleXRangeMaximum(10);
182-
mCharteCO2.moveViewToX(data.getEntryCount());
183-
mCharteCO2.invalidate();
188+
mCharteCO2.moveViewToX(timeElapsed);
184189

185190
LineData data2 = new LineData(dataSet2);
186191
mChartTVOC.setData(data2);
187192
mChartTVOC.notifyDataSetChanged();
188193
mChartTVOC.setVisibleXRangeMaximum(10);
189-
mChartTVOC.moveViewToX(data2.getEntryCount());
190-
mChartTVOC.invalidate();
194+
mChartTVOC.moveViewToX(timeElapsed);
191195
}
192196
}
193197

Diff for: app/src/main/java/io/pslab/sensors/SensorHMC5883L.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
110110
y.setLabelCount(10);
111111

112112
y2.setDrawGridLines(false);
113+
114+
if (savedInstanceState != null) {
115+
sensorDataFetch.updateUi();
116+
}
113117
}
114118

115119
@Override
@@ -121,9 +125,11 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
121125
outState.putParcelableArrayList(KEY_ENTRIES_BZ, entriesBz);
122126
}
123127

124-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
128+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
125129

126130
private List<Double> dataHMC5883L = new ArrayList<>();
131+
/* Initialization required if updateUi is executed before getSensorData */
132+
private float timeElapsed = getTimeElapsed();
127133

128134
@Override
129135
public void getSensorData() {
@@ -135,10 +141,10 @@ public void getSensorData() {
135141
Log.e(TAG, "Error getting sensor data.", e);
136142
}
137143

138-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
139-
entriesBx.add(new Entry((float) timeElapsed, dataHMC5883L.get(0).floatValue()));
140-
entriesBy.add(new Entry((float) timeElapsed, dataHMC5883L.get(1).floatValue()));
141-
entriesBz.add(new Entry((float) timeElapsed, dataHMC5883L.get(2).floatValue()));
144+
timeElapsed = getTimeElapsed();
145+
entriesBx.add(new Entry(timeElapsed, dataHMC5883L.get(0).floatValue()));
146+
entriesBy.add(new Entry(timeElapsed, dataHMC5883L.get(1).floatValue()));
147+
entriesBz.add(new Entry(timeElapsed, dataHMC5883L.get(2).floatValue()));
142148
}
143149

144150
public void updateUi() {
@@ -167,8 +173,7 @@ public void updateUi() {
167173
mChart.setData(data);
168174
mChart.notifyDataSetChanged();
169175
mChart.setVisibleXRangeMaximum(10);
170-
mChart.moveViewToX(data.getEntryCount());
171-
mChart.invalidate();
176+
mChart.moveViewToX(timeElapsed);
172177
}
173178
}
174179

Diff for: app/src/main/java/io/pslab/sensors/SensorMLX90614.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
149149
yAmbientTemperature.setLabelCount(10);
150150

151151
yAmbientTemperature2.setDrawGridLines(false);
152+
153+
if (savedInstanceState != null) {
154+
sensorDataFetch.updateUi();
155+
}
152156
}
153157

154158
@Override
@@ -196,10 +200,12 @@ public void howToConnectDialog(String title, String intro, int imageID, String d
196200
}
197201
}
198202

199-
private class SensorDataFetch implements AbstractSensorActivity.SensorDataFetch {
203+
private class SensorDataFetch extends AbstractSensorActivity.SensorDataFetch {
200204

201205
private Double dataMLX90614ObjectTemp;
202206
private Double dataMLX90614AmbientTemp;
207+
/* Initialization required if updateUi is executed before getSensorData */
208+
private float timeElapsed = getTimeElapsed();
203209

204210
@Override
205211
public void getSensorData() {
@@ -212,9 +218,9 @@ public void getSensorData() {
212218
Log.e(TAG, "Error getting sensor data.", e);
213219
}
214220

215-
long timeElapsed = (System.currentTimeMillis() - getStartTime()) / 1000;
216-
entriesObjectTemperature.add(new Entry((float) timeElapsed, dataMLX90614ObjectTemp.floatValue()));
217-
entriesAmbientTemperature.add(new Entry((float) timeElapsed, dataMLX90614AmbientTemp.floatValue()));
221+
timeElapsed = getTimeElapsed();
222+
entriesObjectTemperature.add(new Entry(timeElapsed, dataMLX90614ObjectTemp.floatValue()));
223+
entriesAmbientTemperature.add(new Entry(timeElapsed, dataMLX90614AmbientTemp.floatValue()));
218224
}
219225

220226
public void updateUi() {
@@ -231,15 +237,13 @@ public void updateUi() {
231237
mChartObjectTemperature.setData(data1);
232238
mChartObjectTemperature.notifyDataSetChanged();
233239
mChartObjectTemperature.setVisibleXRangeMaximum(10);
234-
mChartObjectTemperature.moveViewToX(data1.getEntryCount());
235-
mChartObjectTemperature.invalidate();
240+
mChartObjectTemperature.moveViewToX(timeElapsed);
236241

237242
LineData data2 = new LineData(dataSet2);
238243
mChartAmbientTemperature.setData(data2);
239244
mChartAmbientTemperature.notifyDataSetChanged();
240245
mChartAmbientTemperature.setVisibleXRangeMaximum(10);
241-
mChartAmbientTemperature.moveViewToX(data2.getEntryCount());
242-
mChartAmbientTemperature.invalidate();
246+
mChartAmbientTemperature.moveViewToX(timeElapsed);
243247
}
244248
}
245249

0 commit comments

Comments
 (0)