Skip to content

Commit e4d6322

Browse files
First Steps for issue #2024 - Implemented the basic functionality of a sound meter (#2054)
1 parent ab3a44e commit e4d6322

17 files changed

+924
-11
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626
android:supportsRtl="true"
2727
android:theme="@style/AppTheme"
2828
tools:replace="android:icon">
29-
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
30-
<activity android:name=".activity.CreateConfigActivity"/>
29+
<uses-library
30+
android:name="org.apache.http.legacy"
31+
android:required="false" />
32+
<activity android:name=".activity.SoundMeterActivity"></activity>
33+
<activity android:name=".activity.CreateConfigActivity" />
3134
<activity
3235
android:name=".activity.ThermometerActivity"
3336
android:screenOrientation="portrait"
@@ -105,7 +108,7 @@
105108
<activity android:name=".activity.MapsActivity" />
106109
<activity
107110
android:name=".activity.DustSensorActivity"
108-
android:screenOrientation="portrait"/>
111+
android:screenOrientation="portrait" />
109112

110113
<receiver android:name=".receivers.USBDetachReceiver" />
111114

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ protected void onCreate(Bundle savedInstanceState) {
132132
case "Dust Sensor":
133133
categoryData = LocalDataLog.with().getTypeOfSensorBlocks(getString(R.string.dust_sensor));
134134
break;
135+
case "Sound Meter":
136+
categoryData = LocalDataLog.with().getTypeOfSensorBlocks(getString(R.string.sound_meter));
137+
break;
135138
default:
136139
categoryData = LocalDataLog.with().getAllSensorBlocks();
137140
getSupportActionBar().setTitle(getString(R.string.logged_data));

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.pslab.fragment.LuxMeterSettingFragment;
2626
import io.pslab.fragment.MultimeterSettingsFragment;
2727
import io.pslab.fragment.SettingsFragment;
28+
import io.pslab.fragment.SoundmeterSettingsFragment;
2829
import io.pslab.fragment.ThermometerSettingsFragment;
2930
import io.pslab.models.PSLabSensor;
3031
import io.pslab.others.GPSLogger;
@@ -84,6 +85,9 @@ protected void onCreate(Bundle savedInstanceState) {
8485
case PSLabSensor.DUSTSENSOR_CONFIGURATIONS:
8586
fragment = new DustSensorSettingsFragment();
8687
break;
88+
case PSLabSensor.SOUNDMETER_CONFIGURATIONS:
89+
fragment = new SoundmeterSettingsFragment();
90+
break;
8791
default:
8892
fragment = new SettingsFragment();
8993
break;
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package io.pslab.activity;
2+
3+
import android.content.SharedPreferences;
4+
import android.support.v4.app.Fragment;
5+
import android.support.v7.preference.PreferenceManager;
6+
7+
import io.pslab.R;
8+
import io.pslab.fragment.SoundMeterDataFragment;
9+
import io.pslab.fragment.SoundmeterSettingsFragment;
10+
import io.pslab.models.PSLabSensor;
11+
import io.pslab.models.SensorDataBlock;
12+
import io.pslab.models.SoundData;
13+
import io.pslab.others.LocalDataLog;
14+
import io.realm.RealmObject;
15+
import io.realm.RealmResults;
16+
17+
/**
18+
* @author reckoner1429
19+
*/
20+
public class SoundMeterActivity extends PSLabSensor {
21+
22+
private static final String PREF_NAME = "customDialogPreference";
23+
public RealmResults<SoundData> recordedSoundData;
24+
25+
@Override
26+
public int getMenu() {
27+
return R.menu.sensor_data_log_menu;
28+
}
29+
30+
@Override
31+
public SharedPreferences getStateSettings() {
32+
return this.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
33+
}
34+
35+
@Override
36+
public String getFirstTimeSettingID() {
37+
return "SoundMeterFirstTime";
38+
}
39+
40+
@Override
41+
public String getSensorName() {
42+
return getResources().getString(R.string.sound_meter);
43+
}
44+
45+
@Override
46+
public int getGuideTitle() {
47+
return R.string.sound_meter;
48+
}
49+
50+
@Override
51+
public int getGuideAbstract() {
52+
return R.string.sound_meter_intro;
53+
}
54+
55+
@Override
56+
public int getGuideSchematics() {
57+
return R.drawable.bh1750_schematic;
58+
}
59+
60+
@Override
61+
public int getGuideDescription() {
62+
return R.string.sound_meter_desc;
63+
}
64+
65+
@Override
66+
public int getGuideExtraContent() {
67+
return 0;
68+
}
69+
70+
@Override
71+
public void recordSensorDataBlockID(SensorDataBlock categoryData) {
72+
realm.beginTransaction();
73+
realm.copyToRealm(categoryData);
74+
realm.commitTransaction();
75+
}
76+
77+
@Override
78+
public void recordSensorData(RealmObject sensorData) {
79+
realm.beginTransaction();
80+
realm.copyToRealm((SoundData) sensorData);
81+
realm.commitTransaction();
82+
}
83+
84+
@Override
85+
public void stopRecordSensorData() {
86+
LocalDataLog.with().refresh();
87+
}
88+
89+
@Override
90+
public Fragment getSensorFragment() {
91+
return SoundMeterDataFragment.newInstance();
92+
}
93+
94+
@Override
95+
public void getDataFromDataLogger() {
96+
if (getIntent().getExtras() != null && getIntent().getExtras().getBoolean(KEY_LOG)) {
97+
//playingData = true;
98+
viewingData = true;
99+
recordedSoundData = LocalDataLog.with()
100+
.getBlockOfSoundRecords(getIntent().getExtras().getLong(DATA_BLOCK));
101+
String title = titleFormat.format(recordedSoundData.get(0).getTime());
102+
getSupportActionBar().setTitle(title);
103+
}
104+
}
105+
106+
/**
107+
* Once settings have been changed, those changes can be captured from onResume method.
108+
* reinstateConfigurations() will update the logs with new settings
109+
*/
110+
@Override
111+
protected void onResume() {
112+
super.onResume();
113+
reinstateConfigurations();
114+
}
115+
116+
private void reinstateConfigurations() {
117+
SharedPreferences luxMeterConfigurations;
118+
luxMeterConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
119+
locationEnabled = luxMeterConfigurations.getBoolean(SoundmeterSettingsFragment.KEY_INCLUDE_LOCATION, true);
120+
SoundMeterDataFragment.setParameters();
121+
/**
122+
* TODO: set parameters
123+
*/
124+
}
125+
}

app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import io.pslab.activity.OscilloscopeActivity;
3636
import io.pslab.activity.PowerSourceActivity;
3737
import io.pslab.activity.RoboticArmActivity;
38+
import io.pslab.activity.SoundMeterActivity;
3839
import io.pslab.activity.ThermometerActivity;
3940
import io.pslab.activity.WaveGeneratorActivity;
4041
import io.pslab.models.AccelerometerData;
@@ -50,6 +51,7 @@
5051
import io.pslab.models.PowerSourceData;
5152
import io.pslab.models.SensorDataBlock;
5253
import io.pslab.models.ServoData;
54+
import io.pslab.models.SoundData;
5355
import io.pslab.models.ThermometerData;
5456
import io.pslab.models.WaveGeneratorData;
5557
import io.pslab.others.CSVLogger;
@@ -138,6 +140,10 @@ public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
138140
holder.sensor.setText(R.string.gas_sensor);
139141
holder.tileIcon.setImageDrawable(context.getResources().getDrawable(R.drawable.tile_icon_gas));
140142
break;
143+
case PSLabSensor.SOUND_METER:
144+
holder.sensor.setText(R.string.sound_meter);
145+
holder.tileIcon.setImageDrawable(context.getDrawable(R.drawable.tile_icon_gas));
146+
break;
141147
default:
142148
break;
143149
}
@@ -228,6 +234,11 @@ private void handleCardViewClick(SensorDataBlock block) {
228234
gasSensorIntent.putExtra(KEY_LOG, true);
229235
gasSensorIntent.putExtra(DATA_BLOCK, block.getBlock());
230236
context.startActivity(gasSensorIntent);
237+
} else if(block.getSensorType().equalsIgnoreCase(context.getString(R.string.sound_meter))) {
238+
Intent soundMeterIntent = new Intent(context, SoundMeterActivity.class);
239+
soundMeterIntent.putExtra(KEY_LOG,true);
240+
soundMeterIntent.putExtra(DATA_BLOCK, block.getBlock());
241+
context.startActivity(soundMeterIntent);
231242
}
232243
}
233244

@@ -270,6 +281,8 @@ public void onClick(DialogInterface dialog, int whichButton) {
270281
LocalDataLog.with().clearBlockOfLARecords(block.getBlock());
271282
} else if (block.getSensorType().equalsIgnoreCase(PSLabSensor.GAS_SENSOR)) {
272283
LocalDataLog.with().clearBlockOfGasSensorRecords(block.getBlock());
284+
} else if (block.getSensorType().equalsIgnoreCase(PSLabSensor.SOUND_METER)) {
285+
LocalDataLog.with().clearBlockOfSoundRecords(block.getBlock());
273286
}
274287
LocalDataLog.with().clearSensorBlock(block.getBlock());
275288
dialog.dismiss();
@@ -523,6 +536,22 @@ private void populateMapData(SensorDataBlock block) {
523536
}
524537
}
525538
setMapDataToIntent(array);
539+
} else if (block.getSensorType().equalsIgnoreCase(PSLabSensor.SOUND_METER)) {
540+
RealmResults<SoundData> data = LocalDataLog.with().getBlockOfSoundRecords(block.getBlock());
541+
JSONArray array = new JSONArray();
542+
for (SoundData d : data) {
543+
try {
544+
JSONObject i = new JSONObject();
545+
i.put("date", CSVLogger.FILE_NAME_FORMAT.format(d.getTime()));
546+
i.put("dB", d.getdB());
547+
i.put("lon", d.getLon());
548+
i.put("lat", d.getLat());
549+
if (d.getLat() != 0.0 && d.getLon() != 0.0) array.put(i);
550+
} catch (JSONException e) {
551+
e.printStackTrace();
552+
}
553+
}
554+
setMapDataToIntent(array);
526555
}
527556
}
528557

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
import io.pslab.activity.PowerSourceActivity;
2929
import io.pslab.activity.RoboticArmActivity;
3030
import io.pslab.activity.SensorActivity;
31+
import io.pslab.activity.SoundMeterActivity;
3132
import io.pslab.activity.ThermometerActivity;
3233
import io.pslab.activity.WaveGeneratorActivity;
3334
import io.pslab.adapters.ApplicationAdapter;
3435
import io.pslab.items.ApplicationItem;
35-
import io.pslab.models.PSLabSensor;
3636

3737
import java.util.ArrayList;
3838
import java.util.List;
@@ -97,7 +97,8 @@ public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGrou
9797
intent = new Intent(context, GasSensorActivity.class);
9898
if (applicationName.equals(getString(R.string.dust_sensor)))
9999
intent = new Intent(context, DustSensorActivity.class);
100-
100+
if(applicationName.equals(getString(R.string.sound_meter)))
101+
intent = new Intent(context, SoundMeterActivity.class);
101102
if (intent != null)
102103
startActivity(intent);
103104
});
@@ -143,7 +144,8 @@ protected Void doInBackground(Void... params) {
143144
R.string.thermometer_desc,
144145
R.string.robotic_arm_description,
145146
R.string.gas_sensor_description,
146-
R.string.dust_sensor_description
147+
R.string.dust_sensor_description,
148+
R.string.sound_meter_desc
147149
};
148150

149151
applicationItemList.add(new ApplicationItem(
@@ -191,6 +193,9 @@ protected Void doInBackground(Void... params) {
191193
applicationItemList.add(new ApplicationItem(
192194
getResources().getString(R.string.dust_sensor), R.drawable.tile_icon_gas, getResources().getString(descriptions[14])
193195
));
196+
applicationItemList.add(new ApplicationItem(
197+
getString(R.string.sound_meter), R.drawable.tile_icon_gas, getString(descriptions[15])
198+
));
194199
return null;
195200
}
196201

0 commit comments

Comments
 (0)