From 3ff845123c7719bae7921e537b5e2aaf7d85d137 Mon Sep 17 00:00:00 2001 From: Avjeet Date: Wed, 8 Aug 2018 19:02:19 +0530 Subject: [PATCH] stored data in realm database and added data logger activity some minor changes resolved conflicts --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 2 + .../main/java/io/pslab/PSLabApplication.java | 5 + .../io/pslab/activity/DataLoggerActivity.java | 86 +++++++++++++ .../io/pslab/activity/LuxMeterActivity.java | 40 +++--- .../java/io/pslab/activity/MainActivity.java | 6 + .../io/pslab/activity/ShowLoggedData.java | 1 + .../adapters/SensorLoggerListAdapter.java | 86 +++++++++++++ .../pslab/fragment/LuxMeterFragmentData.java | 115 +++++++----------- .../main/java/io/pslab/models/LuxData.java | 53 ++++++++ .../java/io/pslab/models/SensorLogged.java | 22 ++++ .../main/res/drawable/ic_delete_red_24dp.xml | 9 ++ .../main/res/drawable/ic_sensor_logging.xml | 9 ++ .../main/res/layout/activity_data_logger.xml | 29 +++++ .../main/res/layout/logged_sensor_data.xml | 4 +- app/src/main/res/layout/logger_data_item.xml | 58 +++++++++ .../main/res/menu/activity_main_drawer.xml | 4 + app/src/main/res/menu/lux_data_log_menu.xml | 4 + app/src/main/res/values/dimens.xml | 6 + app/src/main/res/values/strings.xml | 5 + build.gradle | 1 + 21 files changed, 458 insertions(+), 88 deletions(-) create mode 100644 app/src/main/java/io/pslab/activity/DataLoggerActivity.java create mode 100644 app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java create mode 100644 app/src/main/java/io/pslab/models/LuxData.java create mode 100644 app/src/main/res/drawable/ic_delete_red_24dp.xml create mode 100644 app/src/main/res/drawable/ic_sensor_logging.xml create mode 100644 app/src/main/res/layout/activity_data_logger.xml create mode 100644 app/src/main/res/layout/logger_data_item.xml diff --git a/app/build.gradle b/app/build.gradle index d48b62d95..54f5c7339 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,6 +65,7 @@ dependencies { implementation "org.osmdroid:osmdroid-mapsforge:$rootProject.mapsforgeVersion" implementation "org.osmdroid:osmdroid-geopackage:$rootProject.geoPackageVersion" implementation "com.android.support:multidex:$rootProject.multiDexVersion" + implementation "io.realm:android-adapters:$rootProject.realmAdapterVersion" testImplementation "junit:junit:$rootProject.junitVersion" androidTestImplementation("com.android.support.test:runner:$rootProject.testRunnerRulesVersion") { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f7b59593b..803257043 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,6 +78,8 @@ android:configChanges="orientation|screenSize|keyboardHidden" /> + + diff --git a/app/src/main/java/io/pslab/PSLabApplication.java b/app/src/main/java/io/pslab/PSLabApplication.java index cbe23e0e9..7c80ccd66 100644 --- a/app/src/main/java/io/pslab/PSLabApplication.java +++ b/app/src/main/java/io/pslab/PSLabApplication.java @@ -3,6 +3,7 @@ import android.app.Application; import io.realm.Realm; +import io.realm.RealmConfiguration; /** * Created by viveksb007 on 4/8/17. @@ -14,5 +15,9 @@ public class PSLabApplication extends Application { public void onCreate() { super.onCreate(); Realm.init(this); + RealmConfiguration.Builder v = new RealmConfiguration.Builder().name(Realm.DEFAULT_REALM_NAME) + .schemaVersion(0) + .deleteRealmIfMigrationNeeded(); + Realm.setDefaultConfiguration(v.build()); } } diff --git a/app/src/main/java/io/pslab/activity/DataLoggerActivity.java b/app/src/main/java/io/pslab/activity/DataLoggerActivity.java new file mode 100644 index 000000000..b7808cd3f --- /dev/null +++ b/app/src/main/java/io/pslab/activity/DataLoggerActivity.java @@ -0,0 +1,86 @@ +package io.pslab.activity; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; +import android.view.MenuItem; + +import butterknife.BindView; +import butterknife.ButterKnife; +import io.pslab.R; +import io.pslab.adapters.SensorLoggerListAdapter; +import io.pslab.models.SensorLogged; +import io.realm.Realm; +import io.realm.RealmResults; +import io.realm.Sort; + +/** + * Created by Avjeet on 05/08/18. + */ + +public class DataLoggerActivity extends AppCompatActivity { + public static final String CALLER_ACTIVITY = "Caller"; + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + + @BindView(R.id.toolbar) + Toolbar toolbar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_data_logger); + ButterKnife.bind(this); + setSupportActionBar(toolbar); + Realm realm = Realm.getDefaultInstance(); + String caller = getIntent().getStringExtra(CALLER_ACTIVITY); + if (caller == null) + caller = ""; + + RealmResults results; + String title; + switch (caller) { + case "Lux Meter": + results = realm.where(SensorLogged.class).equalTo("sensor", caller) + .findAll() + .sort("dateTimeStamp", Sort.DESCENDING); + title = caller + " Data"; + break; + default: + results = realm.where(SensorLogged.class) + .findAll() + .sort("dateTimeStamp", Sort.DESCENDING); + title = getString(R.string.logged_data); + } + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + getSupportActionBar().setTitle(title); + } + SensorLoggerListAdapter adapter = new SensorLoggerListAdapter(results, this); + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); + recyclerView.setLayoutManager(linearLayoutManager); + + DividerItemDecoration itemDecor = new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL); + recyclerView.addItemDecoration(itemDecor); + recyclerView.setAdapter(adapter); + } + + @Override + public void onBackPressed() { + finish(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/io/pslab/activity/LuxMeterActivity.java b/app/src/main/java/io/pslab/activity/LuxMeterActivity.java index 7340f25c1..58236ec98 100644 --- a/app/src/main/java/io/pslab/activity/LuxMeterActivity.java +++ b/app/src/main/java/io/pslab/activity/LuxMeterActivity.java @@ -39,7 +39,6 @@ import io.pslab.others.MathUtils; import io.pslab.fragment.SettingsFragment; import io.pslab.others.SwipeGestureDetector; - import butterknife.BindView; import butterknife.ButterKnife; @@ -85,6 +84,8 @@ public class LuxMeterActivity extends AppCompatActivity { private boolean checkGpsOnResume = false; public boolean locationPref; private LuxMeterFragmentData selectedFragment; + public static final String NAME = "realmData"; + private SharedPreferences realmPreferences; @Override protected void onCreate(Bundle savedInstanceState) { @@ -92,6 +93,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_lux_main); ButterKnife.bind(this); setSupportActionBar(toolbar); + realmPreferences = getSharedPreferences(NAME, Context.MODE_PRIVATE); setUpBottomSheet(); bottomNavigationView.setOnNavigationItemSelectedListener (new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -215,35 +217,31 @@ public boolean onPrepareOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.record_data: - if (ContextCompat.checkSelfPermission(this, - Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_STORAGE_FOR_DATA); - return true; - } if (recordData) { - ((LuxMeterFragmentData)selectedFragment).stopSensorFetching(); + ((LuxMeterFragmentData) selectedFragment).stopSensorFetching(); invalidateOptionsMenu(); + Long uniqueRef = realmPreferences.getLong("uniqueCount", 0); + selectedFragment.saveDataInRealm(uniqueRef); + CustomSnackBar.showSnackBar(coordinatorLayout, getString(R.string.exp_data_saved), null, null); + SharedPreferences.Editor editor = realmPreferences.edit(); + editor.putLong("uniqueCount", uniqueRef + 1); + editor.commit(); recordData = false; } else { - luxLogger = new CSVLogger(getString(R.string.lux_meter)); - luxLogger.writeCSVFile("Timestamp,X,Y,Z\n"); - recordData = true; - ((LuxMeterFragmentData)selectedFragment).startSensorFetching(); - invalidateOptionsMenu(); if (locationPref) { gpsLogger = new GPSLogger(this, (LocationManager) getSystemService(Context.LOCATION_SERVICE)); if (gpsLogger.isGPSEnabled()) { recordData = true; - CustomSnackBar.showSnackBar(coordinatorLayout, getString(R.string.data_recording_start) + "\n" + getString(R.string.location_enabled), null, null); + ((LuxMeterFragmentData) selectedFragment).startSensorFetching(); + invalidateOptionsMenu(); } else { checkGpsOnResume = true; } gpsLogger.startFetchingLocation(); } else { recordData = true; - CustomSnackBar.showSnackBar(coordinatorLayout, getString(R.string.data_recording_start) + "\n" + getString(R.string.location_disabled), null, null); + ((LuxMeterFragmentData) selectedFragment).startSensorFetching(); + invalidateOptionsMenu(); } } break; @@ -257,9 +255,16 @@ public boolean onOptionsItemSelected(MenuItem item) { } Intent MAP = new Intent(getApplicationContext(), MapsActivity.class); startActivity(MAP); + startActivity(new Intent(this, ShowLoggedData.class)); break; case R.id.settings: startActivity(new Intent(this, SettingsActivity.class)); + break; + case R.id.show_logged_data: + Intent intent = new Intent(this,DataLoggerActivity.class); + intent.putExtra(DataLoggerActivity.CALLER_ACTIVITY,"Lux Meter"); + startActivity(intent); + break; default: break; @@ -273,7 +278,8 @@ protected void onResume() { if (checkGpsOnResume) { if (gpsLogger.isGPSEnabled()) { recordData = true; - CustomSnackBar.showSnackBar(coordinatorLayout, getString(R.string.data_recording_start), null, null); + ((LuxMeterFragmentData) selectedFragment).startSensorFetching(); + invalidateOptionsMenu(); } else { recordData = false; Toast.makeText(getApplicationContext(), getString(R.string.gps_not_enabled), diff --git a/app/src/main/java/io/pslab/activity/MainActivity.java b/app/src/main/java/io/pslab/activity/MainActivity.java index 73267a629..8e38882ef 100644 --- a/app/src/main/java/io/pslab/activity/MainActivity.java +++ b/app/src/main/java/io/pslab/activity/MainActivity.java @@ -270,6 +270,12 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { case R.id.nav_app_version: setTitleColor(R.color.gray); break; + case R.id.sensor_data_logger: + if (drawer != null) { + drawer.closeDrawers(); + } + startActivity(new Intent(MainActivity.this, DataLoggerActivity.class)); + break; default: navItemIndex = 0; } diff --git a/app/src/main/java/io/pslab/activity/ShowLoggedData.java b/app/src/main/java/io/pslab/activity/ShowLoggedData.java index 087faa299..4ac86d9ff 100644 --- a/app/src/main/java/io/pslab/activity/ShowLoggedData.java +++ b/app/src/main/java/io/pslab/activity/ShowLoggedData.java @@ -42,6 +42,7 @@ /** * Created by viveksb007 on 12/8/17. + * deprecated */ public class ShowLoggedData extends AppCompatActivity { diff --git a/app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java b/app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java new file mode 100644 index 000000000..08277cc56 --- /dev/null +++ b/app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java @@ -0,0 +1,86 @@ +package io.pslab.adapters; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import io.pslab.R; +import io.pslab.models.LuxData; +import io.pslab.models.SensorLogged; +import io.realm.Realm; +import io.realm.RealmRecyclerViewAdapter; +import io.realm.RealmResults; + +/** + * Created by Avjeet on 03-08-2018. + */ +public class SensorLoggerListAdapter extends RealmRecyclerViewAdapter { + + + private Context context; + private SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss"); + private Realm realm; + + public SensorLoggerListAdapter(RealmResults results, Context context) { + super(results, true, true); + this.context = context; + realm = Realm.getDefaultInstance(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.logger_data_item, parent, false); + return new ViewHolder(itemView); + } + + @Override + public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { + final SensorLogged temp = getItem(position); + holder.sensor.setText(temp.getSensor()); + Date date = new Date(temp.getDateTimeStamp()); + holder.dateTime.setText(String.valueOf(sdf.format(date))); + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + RealmResults results = realm.where(LuxData.class).equalTo("foreignKey", getItem(holder.getAdapterPosition()).getUniqueRef()).findAll(); + Toast.makeText(context, "Results size :" + String.valueOf(results.size()), Toast.LENGTH_SHORT).show(); + } + }); + holder.deleteIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + RealmResults sensorItem = realm.where(SensorLogged.class).equalTo("uniqueRef", getItem(holder.getAdapterPosition()).getUniqueRef()).findAll(); + RealmResults results = realm.where(LuxData.class).equalTo("foreignKey", getItem(holder.getAdapterPosition()).getUniqueRef()).findAll(); + realm.beginTransaction(); + results.deleteAllFromRealm(); + sensorItem.deleteAllFromRealm(); + realm.commitTransaction(); + } + }); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + private TextView sensor, dateTime; + ImageView deleteIcon; + private CardView cardView; + + public ViewHolder(View itemView) { + super(itemView); + dateTime = itemView.findViewById(R.id.date_time); + sensor = itemView.findViewById(R.id.sensor_name); + deleteIcon = itemView.findViewById(R.id.delete_item); + cardView = itemView.findViewById(R.id.data_item_card); + } + } +} diff --git a/app/src/main/java/io/pslab/fragment/LuxMeterFragmentData.java b/app/src/main/java/io/pslab/fragment/LuxMeterFragmentData.java index 53bee4270..d006dc256 100644 --- a/app/src/main/java/io/pslab/fragment/LuxMeterFragmentData.java +++ b/app/src/main/java/io/pslab/fragment/LuxMeterFragmentData.java @@ -1,17 +1,13 @@ package io.pslab.fragment; import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.content.DialogInterface; import android.graphics.Color; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; -import android.location.Location; import android.os.AsyncTask; import android.os.Bundle; -import android.support.design.widget.CoordinatorLayout; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; @@ -28,17 +24,6 @@ import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; -import io.pslab.R; -import io.pslab.activity.LuxMeterActivity; -import io.pslab.communication.ScienceLab; -import io.pslab.communication.sensors.BH1750; -import io.pslab.communication.sensors.TSL2561; -import io.pslab.others.CSVLogger; -import io.pslab.others.GPSLogger; -import io.pslab.others.ScienceLabCommon; -import io.pslab.communication.peripherals.I2C; -import io.pslab.others.CustomSnackBar; - import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; @@ -46,6 +31,17 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; +import io.pslab.R; +import io.pslab.activity.LuxMeterActivity; +import io.pslab.communication.ScienceLab; +import io.pslab.communication.peripherals.I2C; +import io.pslab.communication.sensors.BH1750; +import io.pslab.communication.sensors.TSL2561; +import io.pslab.models.LuxData; +import io.pslab.models.SensorLogged; +import io.pslab.others.GPSLogger; +import io.pslab.others.ScienceLabCommon; +import io.realm.Realm; import static android.content.Context.SENSOR_SERVICE; @@ -76,6 +72,7 @@ public class LuxMeterFragmentData extends Fragment { private long startTime; private int flag; private ArrayList entries; + private ArrayList luxRealmData; private float currentMin; private float currentMax; private YAxis y; @@ -84,6 +81,7 @@ public class LuxMeterFragmentData extends Fragment { private long previousTimeElapsed = (System.currentTimeMillis() - startTime) / 1000; private GPSLogger gpsLogger; private Runnable runnable; + private Realm realm; public static LuxMeterFragmentData newInstance() { return new LuxMeterFragmentData(); @@ -102,6 +100,8 @@ public void onCreate(Bundle savedInstanceState) { currentMin = 10000; currentMax = 30; entries = new ArrayList<>(); + luxRealmData = new ArrayList<>(); + realm = Realm.getDefaultInstance(); switch (sensorType) { case 0: sensorManager = (SensorManager) getContext().getSystemService(SENSOR_SERVICE); @@ -299,69 +299,24 @@ private void visualizeData() { y.setLabelCount(10); if (data != 0) { lightMeter.setSpeedAt(data); - if (data > highLimit) lightMeter.setPointerColor(Color.RED); else lightMeter.setPointerColor(Color.WHITE); - timeElapsed = ((System.currentTimeMillis() - startTime) / 1000); if (timeElapsed != previousTimeElapsed) { previousTimeElapsed = timeElapsed; - entries.add(new Entry((float) timeElapsed, data)); + Entry entry = new Entry((float) timeElapsed, data); + entries.add(entry); + Long currentTime = System.currentTimeMillis(); + LuxData tempObject = new LuxData(data, currentTime, timeElapsed); + luxRealmData.add(tempObject); final LuxMeterActivity parent = (LuxMeterActivity) getActivity(); - for (Entry item : entries) { - assert parent != null; - - if (parent.recordData) { - gpsLogger = parent.gpsLogger; - String data = String.valueOf(System.currentTimeMillis()) + "," + - item.getX() + "," + item.getY() + "\n"; - parent.luxLogger.writeCSVFile(data); - } - - if (parent.exportData) { - parent.exportData = false; - if (parent.locationPref && gpsLogger != null) { - String data; - Location location = gpsLogger.getBestLocation(); - if (location != null) { - data = "\nLocation" + "," + String.valueOf(location.getLatitude()) + "," + String.valueOf(location.getLongitude() + "\n"); - } else { - data = "\nLocation" + "," + "null" + "," + "null"; - } - parent.luxLogger.writeCSVFile(data); - gpsLogger.removeUpdate(); - } - CustomSnackBar.showSnackBar((CoordinatorLayout) parent.findViewById(R.id.cl), - getString(R.string.csv_store_text) + " " + parent.luxLogger.getCurrentFilePath() - , getString(R.string.delete_capital), new View.OnClickListener() { - @Override - public void onClick(View view) { - new AlertDialog.Builder(parent, R.style.AlertDialogStyle) - .setTitle(R.string.delete_file) - .setMessage(R.string.delete_warning) - .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - parent.luxLogger.deleteFile(); - } - }) - .setNegativeButton(R.string.cancel, null) - .create() - .show(); - } - }); - } + assert parent != null; - count++; - sum += item.getY(); - } - try { - statMean.setText(Float.toString(Float.valueOf(df.format(sum / count)))); - } catch (NumberFormatException e) { - statMean.setText(getString(R.string.lux_meter_none)); - } + count++; + sum += entry.getY(); + statMean.setText(Float.toString(Float.valueOf(df.format(sum / count)))); LineDataSet dataSet = new LineDataSet(entries, getString(R.string.lux)); LineData data = new LineData(dataSet); @@ -410,4 +365,26 @@ public void stopSensorFetching() { } } + public void saveDataInRealm(Long uniqueRef) { + realm.beginTransaction(); + SensorLogged sensorLogged = realm.createObject(SensorLogged.class, uniqueRef); + sensorLogged.setSensor("Lux Meter"); + sensorLogged.setDateTimeStamp(System.currentTimeMillis()); + + for (int i = 0; i < luxRealmData.size(); i++) { + LuxData tempObject = luxRealmData.get(i); + tempObject.setId(i); + tempObject.setForeignKey(uniqueRef); + realm.copyToRealm(tempObject); + } + realm.copyToRealm(sensorLogged); + realm.commitTransaction(); + } + + @Override + public void onResume() { + super.onResume(); + mChart.clear(); + mChart.invalidate(); + } } diff --git a/app/src/main/java/io/pslab/models/LuxData.java b/app/src/main/java/io/pslab/models/LuxData.java new file mode 100644 index 000000000..74859100b --- /dev/null +++ b/app/src/main/java/io/pslab/models/LuxData.java @@ -0,0 +1,53 @@ +package io.pslab.models; + + +import io.realm.RealmObject; + + +/** + * Created by Avjeet on 31-07-2018. + */ +public class LuxData extends RealmObject { + private long foreignKey; + private long id; + private long time; + private float lux; + private long timeElapsed; + + public LuxData() { + } + + public LuxData(float lux, long time, long timeElapsed) { + this.lux = lux; + this.time = time; + this.timeElapsed = timeElapsed; + } + + public long getForeignKey() { + return foreignKey; + } + + public void setForeignKey(long foreignKey) { + this.foreignKey = foreignKey; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getTime() { + return time; + } + + public float getLux() { + return lux; + } + + public long getTimeElapsed() { + return timeElapsed; + } +} diff --git a/app/src/main/java/io/pslab/models/SensorLogged.java b/app/src/main/java/io/pslab/models/SensorLogged.java index 4d30a25c3..212666721 100644 --- a/app/src/main/java/io/pslab/models/SensorLogged.java +++ b/app/src/main/java/io/pslab/models/SensorLogged.java @@ -1,6 +1,7 @@ package io.pslab.models; import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; /** * Created by viveksb007 on 15/8/17. @@ -9,6 +10,10 @@ public class SensorLogged extends RealmObject { private String sensor; + private long dateTimeStamp; + @PrimaryKey + private long uniqueRef; + public SensorLogged() { } @@ -24,4 +29,21 @@ public String getSensor() { public void setSensor(String sensor) { this.sensor = sensor; } + + public long getDateTimeStamp() { + return dateTimeStamp; + } + + public void setDateTimeStamp(long dateTimeStamp) { + this.dateTimeStamp = dateTimeStamp; + } + + public long getUniqueRef() { + return uniqueRef; + } + + public void setUniqueRef(long uniqueRef) { + this.uniqueRef = uniqueRef; + } + } diff --git a/app/src/main/res/drawable/ic_delete_red_24dp.xml b/app/src/main/res/drawable/ic_delete_red_24dp.xml new file mode 100644 index 000000000..3e7908563 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_red_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sensor_logging.xml b/app/src/main/res/drawable/ic_sensor_logging.xml new file mode 100644 index 000000000..4e021adaa --- /dev/null +++ b/app/src/main/res/drawable/ic_sensor_logging.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_data_logger.xml b/app/src/main/res/layout/activity_data_logger.xml new file mode 100644 index 000000000..79df7f6d8 --- /dev/null +++ b/app/src/main/res/layout/activity_data_logger.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/logged_sensor_data.xml b/app/src/main/res/layout/logged_sensor_data.xml index e4f87ca76..dea63178e 100644 --- a/app/src/main/res/layout/logged_sensor_data.xml +++ b/app/src/main/res/layout/logged_sensor_data.xml @@ -6,8 +6,8 @@ + android:layout_height="wrap_content" + android:scrollbars="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/logger_data_item.xml b/app/src/main/res/layout/logger_data_item.xml new file mode 100644 index 000000000..78d502edd --- /dev/null +++ b/app/src/main/res/layout/logger_data_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index d52da6207..999715786 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -9,6 +9,10 @@ android:id="@+id/nav_device" android:icon="@drawable/ic_developer_board_black_24dp" android:title="@string/nav_device" /> + + 200dp 9sp + 10dp + 5dp + 5dp + 10dp + 10dp + 18sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ab3aa2e9..f4d3add5c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1001,6 +1001,11 @@ Right now, we are not having an option to make and save custom experiments. But we will implement it soon. You can submit your reviews, feature requests and feedback through our Feedback and Issues page. + Logged Data + Show Logged Data + Time Elapsed + Experiment Logged Data Saved + Lux Meter \u2022 The Lux meter can be used to measure the ambient light intensity. This instruments is compatible with either the built in light sensor on any android device or the BH-1750 light sensor.\n\n diff --git a/build.gradle b/build.gradle index cd9a133aa..e1e23e1ca 100644 --- a/build.gradle +++ b/build.gradle @@ -54,6 +54,7 @@ ext{ seekBarLibraryVersion = '1.2.9' carouselPickerVersion = 'v1.0' speedView = '1.2.0' + realmAdapterVersion= '2.1.1' // Open Street Maps versions osmVersion = '5.1' mapsforgeVersion = '6.0.1'