Skip to content

Commit 42bee52

Browse files
author
Kunal
committed
Thermometer settings added
1 parent ba23299 commit 42bee52

File tree

8 files changed

+248
-24
lines changed

8 files changed

+248
-24
lines changed

app/src/main/java/io/pslab/activity/SettingsActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.pslab.fragment.GyroscopeSettingsFragment;
2323
import io.pslab.fragment.LuxMeterSettingFragment;
2424
import io.pslab.fragment.SettingsFragment;
25+
import io.pslab.fragment.ThermometerSettingsFragment;
2526
import io.pslab.models.PSLabSensor;
2627
import io.pslab.others.GPSLogger;
2728

@@ -68,6 +69,9 @@ protected void onCreate(Bundle savedInstanceState) {
6869
case PSLabSensor.ACCELEROMETER_CONFIGURATIONS:
6970
fragment = new AccelerometerSettingsFragment();
7071
break;
72+
case PSLabSensor.THERMOMETER_CONFIGURATIONS:
73+
fragment = new ThermometerSettingsFragment();
74+
break;
7175
default:
7276
fragment = new SettingsFragment();
7377
break;

app/src/main/java/io/pslab/activity/ThermometerActivity.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import android.content.SharedPreferences;
44
import android.support.v4.app.Fragment;
5+
import android.support.v7.preference.PreferenceManager;
56

67
import io.pslab.R;
78
import io.pslab.fragment.ThermometerDataFragment;
9+
import io.pslab.fragment.ThermometerSettingsFragment;
810
import io.pslab.models.PSLabSensor;
911
import io.pslab.models.SensorDataBlock;
1012
import io.pslab.models.ThermometerData;
@@ -98,4 +100,29 @@ public void getDataFromDataLogger() {
98100
getSupportActionBar().setTitle(title);
99101
}
100102
}
103+
104+
@Override
105+
protected void onResume() {
106+
super.onResume();
107+
reinstateConfigurations();
108+
}
109+
110+
private void reinstateConfigurations() {
111+
SharedPreferences thermometerConfigurations;
112+
thermometerConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
113+
locationEnabled = thermometerConfigurations.getBoolean(ThermometerSettingsFragment.KEY_INCLUDE_LOCATION, true);
114+
ThermometerDataFragment.setParameters(
115+
getValueFromText(thermometerConfigurations.getString(ThermometerSettingsFragment.KEY_UPDATE_PERIOD, "1000"),
116+
100, 1000),
117+
thermometerConfigurations.getString(ThermometerSettingsFragment.KEY_THERMO_SENSOR_TYPE, "0"),
118+
thermometerConfigurations.getString(ThermometerSettingsFragment.KEY_THERMO_UNIT, "°C"));
119+
}
120+
121+
private int getValueFromText(String strValue, int lowerBound, int upperBound) {
122+
if (strValue.isEmpty()) return lowerBound;
123+
int value = Integer.parseInt(strValue);
124+
if (value > upperBound) return upperBound;
125+
else if (value < lowerBound) return lowerBound;
126+
else return value;
127+
}
101128
}

app/src/main/java/io/pslab/fragment/ThermometerDataFragment.java

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class ThermometerDataFragment extends Fragment {
7070
private int count = 0, turns = 0;
7171
private float sum = 0;
7272
private boolean returningFromPause = false;
73-
73+
private static String unit = "°C";
7474
private float tempValue = -1;
7575

7676
private enum THERMOMETER_SENSOR {INBUILT_SENSOR, SHT21_SENSOR}
@@ -87,6 +87,12 @@ private enum THERMOMETER_SENSOR {INBUILT_SENSOR, SHT21_SENSOR}
8787
LineChart mChart;
8888
@BindView(R.id.thermo_meter)
8989
PointerSpeedometer thermometer;
90+
@BindView(R.id.label_thermo_stat_min)
91+
TextView label_statMin;
92+
@BindView(R.id.label_thermo_stat_avg)
93+
TextView label_statAvg;
94+
@BindView(R.id.label_thermo_stat_max)
95+
TextView label_statMax;
9096

9197
private Timer graphTimer;
9298
private SensorManager sensorManager;
@@ -101,16 +107,18 @@ private enum THERMOMETER_SENSOR {INBUILT_SENSOR, SHT21_SENSOR}
101107
private Unbinder unbinder;
102108
private long previousTimeElapsed = (System.currentTimeMillis() - startTime) / updatePeriod;
103109
private ThermometerActivity thermoSensor;
110+
private ThermometerSettingsFragment thermoSettings;
104111
private View rootView;
105112

106113
public static ThermometerDataFragment newInstance() {
107114
return new ThermometerDataFragment();
108115
}
109116

110-
public static void setParameters(int highLimit, int updatePeriod, String type, String gain) {
111-
ThermometerDataFragment.highLimit = highLimit;
117+
public static void setParameters(int updatePeriod, String type, String unit) {
112118
ThermometerDataFragment.updatePeriod = updatePeriod;
113119
ThermometerDataFragment.sensorType = Integer.valueOf(type);
120+
ThermometerDataFragment.unit = unit;
121+
114122
}
115123

116124
@Override
@@ -147,8 +155,7 @@ public void onResume() {
147155
updateGraphs();
148156
sum = 0;
149157
count = 0;
150-
currentMin = 125;
151-
currentMax = -40;
158+
setUnit();
152159
entries.clear();
153160
mChart.clear();
154161
mChart.invalidate();
@@ -193,7 +200,7 @@ private void plotAllRecordedData() {
193200
statMin.setText(String.format(Locale.getDefault(), PSLabSensor.THERMOMETER_DATA_FORMAT, currentMin));
194201
statMean.setText(String.format(Locale.getDefault(), PSLabSensor.THERMOMETER_DATA_FORMAT, (sum / recordedThermoArray.size())));
195202

196-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.thermo_unit));
203+
LineDataSet dataSet = new LineDataSet(entries,PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(thermoSettings.KEY_THERMO_UNIT.toString(),"°C"));
197204
dataSet.setDrawCircles(false);
198205
dataSet.setDrawValues(false);
199206
dataSet.setLineWidth(2);
@@ -260,15 +267,15 @@ public void run() {
260267
sum += entry.getY();
261268
statMean.setText(DataFormatter.formatDouble((sum / count), PSLabSensor.THERMOMETER_DATA_FORMAT));
262269

263-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.thermo_unit));
270+
LineDataSet dataSet = new LineDataSet(entries,PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(thermoSettings.KEY_THERMO_UNIT.toString(),"°C"));
264271
dataSet.setDrawCircles(false);
265272
dataSet.setDrawValues(false);
266273
dataSet.setLineWidth(2);
267274
LineData data = new LineData(dataSet);
268275

269276
mChart.setData(data);
270277
mChart.notifyDataSetChanged();
271-
mChart.setVisibleXRangeMaximum(80);
278+
mChart.setVisibleXRangeMaximum(800);
272279
mChart.moveViewToX(data.getEntryCount());
273280
mChart.invalidate();
274281
} catch (IndexOutOfBoundsException e) {
@@ -354,8 +361,7 @@ public void saveGraph() {
354361

355362

356363
private void setupInstruments() {
357-
thermometer.setMaxSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MAX_LIMIT, 125));
358-
thermometer.setMinSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MIN_LIMIT,-40));
364+
setUnit();
359365
XAxis x = mChart.getXAxis();
360366
this.y = mChart.getAxisLeft();
361367
YAxis y2 = mChart.getAxisRight();
@@ -484,7 +490,7 @@ private void visualizeData() {
484490
sum += entry.getY();
485491
statMean.setText(String.format(Locale.getDefault(), PSLabSensor.THERMOMETER_DATA_FORMAT, (sum / count)));
486492

487-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.thermo_unit));
493+
LineDataSet dataSet = new LineDataSet(entries,PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(thermoSettings.KEY_THERMO_UNIT.toString(),"°C"));
488494
dataSet.setDrawCircles(false);
489495
dataSet.setDrawValues(false);
490496
dataSet.setLineWidth(2);
@@ -515,8 +521,7 @@ public void onSensorChanged(SensorEvent event) {
515521
private void resetInstrumentData() {
516522
tempValue = 0;
517523
count = 0;
518-
currentMin = 125;
519-
currentMax = -40;
524+
setUnit();
520525
sum = 0;
521526
sensor = null;
522527
if (sensorManager != null) {
@@ -578,4 +583,26 @@ private void initiateThermoSensor(int type) {
578583
break;
579584
}
580585
}
586+
587+
public void setUnit(){
588+
if("°F".equals(ThermometerDataFragment.unit)){
589+
currentMax = 257;
590+
currentMin = -40;
591+
thermometer.setMaxSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MAX_LIMIT, 257));
592+
thermometer.setMinSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MIN_LIMIT,-40));
593+
label_statAvg.setText(R.string.avg_thermo_fahrenheit);
594+
label_statMax.setText(R.string.max_thermo_fahrenheit);
595+
label_statMin.setText(R.string.min_thermo_fahrenheit);
596+
thermometer.setUnit("°F");
597+
}else{
598+
currentMax = 125;
599+
currentMin = -40;
600+
thermometer.setMaxSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MAX_LIMIT, 125));
601+
thermometer.setMinSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(thermoSensor.THERMOMETER_MIN_LIMIT,-40));
602+
label_statAvg.setText(R.string.avg_thermo_celcius);
603+
label_statMax.setText(R.string.max_thermo_celcius);
604+
label_statMin.setText(R.string.min_thermo_celcius);
605+
thermometer.setUnit("°C");
606+
}
607+
}
581608
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package io.pslab.fragment;
2+
3+
import android.annotation.SuppressLint;
4+
import android.content.SharedPreferences;
5+
import android.os.Bundle;
6+
import android.support.v7.preference.CheckBoxPreference;
7+
import android.support.v7.preference.EditTextPreference;
8+
import android.support.v7.preference.ListPreference;
9+
import android.support.v7.preference.PreferenceFragmentCompat;
10+
import android.support.v7.preference.PreferenceManager;
11+
import android.widget.Toast;
12+
13+
import io.pslab.R;
14+
import io.pslab.others.PSLabPermission;
15+
16+
public class ThermometerSettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
17+
18+
public static final String KEY_INCLUDE_LOCATION = "include_location_sensor_data";
19+
public static final String KEY_UPDATE_PERIOD = "setting_thermo_update_period";
20+
public static final String KEY_THERMO_SENSOR_TYPE = "setting_thermo_sensor_type";
21+
public static final String KEY_THERMO_UNIT = "select_temp_unit";
22+
23+
private PSLabPermission psLabPermission;
24+
25+
private EditTextPreference updatePeriodPref;
26+
private CheckBoxPreference locationPreference;
27+
private ListPreference sensorTypePreference;
28+
private SharedPreferences sharedPref;
29+
private ListPreference unitPref;
30+
31+
@Override
32+
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
33+
setPreferencesFromResource(R.xml.thermometer_settings, rootKey);
34+
updatePeriodPref = (EditTextPreference) getPreferenceScreen().findPreference(KEY_UPDATE_PERIOD);
35+
locationPreference = (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_INCLUDE_LOCATION);
36+
sensorTypePreference = (ListPreference) getPreferenceScreen().findPreference(KEY_THERMO_SENSOR_TYPE);
37+
unitPref = (ListPreference) getPreferenceScreen().findPreference(KEY_THERMO_UNIT);
38+
sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
39+
40+
psLabPermission = PSLabPermission.getInstance();
41+
if (!psLabPermission.checkPermissions(getActivity(), PSLabPermission.MAP_PERMISSION)) {
42+
SharedPreferences.Editor editor = sharedPref.edit();
43+
editor.putBoolean(ThermometerSettingsFragment.KEY_INCLUDE_LOCATION, true);
44+
editor.apply();
45+
}
46+
}
47+
48+
@Override
49+
public void onResume() {
50+
super.onResume();
51+
locationPreference.setChecked(sharedPref.getBoolean(KEY_INCLUDE_LOCATION, true));
52+
updatePeriodPref.setSummary(updatePeriodPref.getText() + " ms");
53+
sensorTypePreference.setSummary(sensorTypePreference.getEntry());
54+
unitPref.setSummary(unitPref.getEntry());
55+
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
56+
}
57+
58+
@Override
59+
public void onPause() {
60+
super.onPause();
61+
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
62+
}
63+
64+
@SuppressLint("ApplySharedPref")
65+
@Override
66+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
67+
switch (s) {
68+
case KEY_INCLUDE_LOCATION:
69+
if (locationPreference.isChecked()) {
70+
psLabPermission.checkPermissions(
71+
getActivity(), PSLabPermission.MAP_PERMISSION);
72+
}
73+
break;
74+
case KEY_UPDATE_PERIOD:
75+
try {
76+
Integer updatePeriod = Integer.parseInt(updatePeriodPref.getText());
77+
if (updatePeriod > 1000 || updatePeriod < 100) {
78+
throw new NumberFormatException();
79+
} else {
80+
updatePeriodPref.setSummary(updatePeriod + " ms");
81+
}
82+
} catch (NumberFormatException e) {
83+
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.update_period_msg), Toast.LENGTH_SHORT).show();
84+
updatePeriodPref.setSummary("1000 ms");
85+
updatePeriodPref.setText("1000");
86+
SharedPreferences.Editor editor = sharedPref.edit();
87+
editor.putString(s, "1000");
88+
editor.commit();
89+
}
90+
break;
91+
case KEY_THERMO_SENSOR_TYPE:
92+
sensorTypePreference.setSummary(sensorTypePreference.getEntry());
93+
break;
94+
case KEY_THERMO_UNIT:
95+
unitPref.setSummary(unitPref.getEntry());
96+
break;
97+
default:
98+
break;
99+
}
100+
}
101+
}

app/src/main/java/io/pslab/models/PSLabSensor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,6 @@ public boolean onPrepareOptionsMenu(Menu menu) {
289289
stop.setVisible(startedPlay);
290290
if (getSensorName().equals(getResources().getString(R.string.compass))) {
291291
menu.findItem(R.id.settings).setVisible(false);
292-
}else if(getSensorName().equals(getResources().getString(R.string.thermometer))){
293-
menu.findItem(R.id.settings).setVisible(false);
294292
}
295293
return super.onPrepareOptionsMenu(menu);
296294
}

app/src/main/res/layout/activity_thermometer.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<TextView
3434
android:id="@+id/label_thermo_stat_max"
3535
style="@style/thermo_meter_stat_heading"
36-
android:text="@string/max_thermo" />
36+
android:text="@string/max_thermo_celcius" />
3737

3838
<TextView
3939
android:id="@+id/thermo_max"
@@ -42,7 +42,7 @@
4242
<TextView
4343
android:id="@+id/label_thermo_stat_min"
4444
style="@style/thermo_meter_stat_heading"
45-
android:text="@string/min_thermo" />
45+
android:text="@string/min_thermo_celcius" />
4646

4747
<TextView
4848
android:id="@+id/thermo_min"
@@ -51,7 +51,7 @@
5151
<TextView
5252
android:id="@+id/label_thermo_stat_avg"
5353
style="@style/thermo_meter_stat_heading"
54-
android:text="@string/avg_thermo" />
54+
android:text="@string/avg_thermo_celcius" />
5555

5656
<TextView
5757
android:id="@+id/thermo_avg"
@@ -75,7 +75,7 @@
7575
app:sv_speedTextSize="@dimen/thermo_display_font_size"
7676
app:sv_speedometerMode="NORMAL"
7777
app:sv_textSize="@dimen/thermo_guage_font_size"
78-
app:sv_unit="@string/thermo_unit"
78+
app:sv_unit="@string/thermo_unit_celcius"
7979
app:sv_unitTextColor="@color/black"/>
8080

8181
</LinearLayout>
@@ -114,7 +114,7 @@
114114
<TextView
115115
android:id="@+id/tv_label_left_yaxis_hmc_thermo"
116116
style="@style/graph_y_axis_title_text"
117-
android:text="@string/thermo_unit"
117+
android:text="@string/thermo_unit_celcius"
118118
app:layout_constraintBottom_toBottomOf="parent"
119119
app:layout_constraintLeft_toLeftOf="parent"
120120
app:layout_constraintRight_toRightOf="parent"

0 commit comments

Comments
 (0)