From 8df681081be7dc1c447a737af19c57e15b45cc13 Mon Sep 17 00:00:00 2001
From: Kristin Muterspaw <kmmuterspaw@gmail.com>
Date: Thu, 9 Jun 2016 15:00:38 -0400
Subject: [PATCH] Built in sensors now works with more than a Google device.

---
 app/src/main/AndroidManifest.xml              |  6 +-
 .../edu/fieldday/MainScreenActivity.java      |  4 +
 .../edu/fieldday/ReadingsDatabase.java        | 84 +++++++++++++++++--
 .../edu/fieldday/SensorSampleActivity.java    | 10 ++-
 .../edu/fieldday/SensorSampleService.java     | 23 +++--
 .../cs/earlham/edu/fieldday/aSensor.java      |  4 +-
 .../main/res/layout/activity_sensorsample.xml | 12 +--
 .../main/res/layout/fragment_sensorscreen.xml |  8 ++
 app/src/main/res/values/strings.xml           |  6 +-
 app/src/main/res/values/themes.xml            |  2 +-
 10 files changed, 131 insertions(+), 28 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 280f979..40bcf18 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,11 @@
             android:label="My Documents Viewer"
             android:theme="@style/MainTheme">
         </activity>
-
+        <activity
+            android:name=".BenchSampleActivity"
+            android:label="Bench Sampling"
+            android:theme="@style/MainTheme">
+        </activity>
         <service
             android:name=".BluetoothLeService"
             android:enabled="true" />
diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MainScreenActivity.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MainScreenActivity.java
index 07e84d5..7587358 100644
--- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MainScreenActivity.java
+++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/MainScreenActivity.java
@@ -79,6 +79,10 @@ public class MainScreenActivity extends Activity {
                 i.putExtra(SensorSampleActivity.WHICH_SENSOR, "built-in");
                 checkDatabase(i);
                 break;
+            case R.id.buttonBenchSample:
+                i = new Intent(context, BenchSampleActivity.class);
+                checkDatabase(i);
+                break;
         }
     }
 
diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/ReadingsDatabase.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/ReadingsDatabase.java
index 10a65dc..e7a68e5 100644
--- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/ReadingsDatabase.java
+++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/ReadingsDatabase.java
@@ -27,6 +27,8 @@ public class ReadingsDatabase extends SQLiteOpenHelper {
     // Name of database
     public static final String DB_NAME = "readings.db";
 
+    private static final String TAG = ReadingsDatabase.class.getSimpleName();
+
     // Name of tables
     public static final String T_TRIP = "fieldday_trip";
     public static final String T_SITE = "fieldday_site";
@@ -416,11 +418,47 @@ public class ReadingsDatabase extends SQLiteOpenHelper {
         db.close();
     }
 
-    public List<String> getSectors(){
+    public List<String> getSpots(String site, String sector){
         SQLiteDatabase db = this.getReadableDatabase();
-        String[] columns = {"sectorName"};
-        Cursor c = db.query(T_SECTOR, columns, null, null, null, null, null);
-        List<String> values = new ArrayList<String>();
+        Cursor c = null;
+        List<String> values = new ArrayList<>();
+        if ((site != null) && (sector != null)){
+            c = db.query(T_SECTOR, new String[]{C_SECTORID}, "sectorName = ?", new String[]{sector},
+                    null, null, null);
+            c.moveToFirst();
+            int sectorid = c.getInt(c.getColumnIndex(C_SECTORID));
+            c.close();
+            c = db.query(T_SITE, new String[]{C_SITEID}, "siteName = ?", new String[]{site},
+                    null, null, null);
+            c.moveToFirst();
+            int siteid = c.getInt(c.getColumnIndex(C_SITEID));
+            c.close();
+            c = db.query(T_SPOT, new String[] {C_SPOTID}, "siteID = ? and sectorID = ?",
+                    new String[]{Integer.toString(siteid), Integer.toString(sectorid)},
+                    null, null, null);
+        }
+        while(c.moveToNext()){
+            values.add(Integer.toString(c.getInt(c.getColumnIndex(C_SPOTID))));
+        }
+        c.close();
+        return values;
+    }
+
+    public List<String> getSectors(String site){
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor c = null;
+        List<String> values = new ArrayList<>();
+        if (site != null){
+            c = db.query(T_SITE, new String[]{C_SITEID}, "siteName = ?", new String[]{site},
+                    null, null, null);
+            c.moveToFirst();
+            int id = c.getInt(c.getColumnIndex(C_SITEID));
+            c.close();
+            c = db.query(T_SECTOR, new String[]{C_SECTORNAME}, "siteID = ?", new String[]{Integer.toString(id)},
+                    null, null, null);
+        } else {
+            c = db.query(T_SECTOR, new String[]{C_SECTORNAME}, null, null, null, null, null);
+        }
         while (c.moveToNext()) {
             values.add(c.getString(c.getColumnIndex("sectorName")));
         }
@@ -428,7 +466,7 @@ public class ReadingsDatabase extends SQLiteOpenHelper {
         return values;
     }
 
-    public List<String> getSites(){
+    public List<String> getSites(String trip){
         SQLiteDatabase db = this.getReadableDatabase();
         String[] columns = {"siteName"};
         Cursor c = db.query(T_SITE, columns, null, null, null, null, null);
@@ -440,6 +478,40 @@ public class ReadingsDatabase extends SQLiteOpenHelper {
         return values;
     }
 
+    public List<String> getPlatforms(){
+        SQLiteDatabase db = this.getReadableDatabase();
+        Cursor c = db.query(T_PLATFORM, new String[]{C_PLATFORMNAME}, null, null, null, null, null);
+        List<String> values = new ArrayList<>();
+        while (c.moveToNext()){
+            values.add(c.getString(c.getColumnIndex("platformName")));
+        }
+        c.close();
+        return values;
+    }
+
+    public List<String> getSensors(String platform){
+        SQLiteDatabase db = this.getReadableDatabase();
+        List<String> values = new ArrayList<>();
+        Cursor c = null;
+        if (platform != null){
+            c = db.query(T_PLATFORM, new String[]{C_PLATFORMID}, "platformName = ?", new String[]{platform},
+                    null, null, null);
+            c.moveToFirst();
+            String platformId = c.getString(c.getColumnIndex(C_PLATFORMID));
+            Log.d(TAG, platformId);
+            c.close();
+            c = db.query(T_SENSOR, new String[]{C_SENSORTYPE}, "platformID = ?", new String[]{platformId},
+                    null, null, null);
+        } else {
+            c = db.query(T_SENSOR, new String[]{C_SENSORTYPE}, null, null, null, null, null);
+        }
+        while (c.moveToNext()){
+            values.add(c.getString(c.getColumnIndex("sensorType")));
+        }
+        c.close();
+        return values;
+    }
+
     public long getSize() {
         return dbPath.length();
     }
@@ -453,7 +525,7 @@ public class ReadingsDatabase extends SQLiteOpenHelper {
         // Empty database
         if (getSize() == 0){
            return 0;
-        } else if (getSites().size() != 0) {
+        } else if (getSites(null).size() != 0) {
             if (readings != 0) {
                 if (streaming == 0) {
                     // Just readings populated
diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleActivity.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleActivity.java
index 46009b7..d021a6c 100644
--- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleActivity.java
+++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleActivity.java
@@ -387,8 +387,8 @@ public class SensorSampleActivity extends Activity {
         List<String> siteList = new ArrayList<String>();
         List<String> sectorList = new ArrayList<String>();
         if (remote_db){
-            siteList = db.getSites();
-            sectorList = db.getSectors();
+            siteList = db.getSites(null);
+            sectorList = db.getSectors(null);
         } else {
             siteList.clear();
             sectorList.clear();
@@ -396,7 +396,8 @@ public class SensorSampleActivity extends Activity {
 
 
         ArrayAdapter<String> siteAdapter = new ArrayAdapter<String>(this,
-                android.R.layout.simple_dropdown_item_1line, siteList);
+                android.R.layout.simple_spinner_item, siteList);
+        siteAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         siteSpinner.setAdapter(siteAdapter);
         siteSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
             @Override
@@ -414,7 +415,8 @@ public class SensorSampleActivity extends Activity {
         });
 
         ArrayAdapter<String> sectorAdapter = new ArrayAdapter<String>(this,
-                android.R.layout.simple_dropdown_item_1line, sectorList);
+                android.R.layout.simple_spinner_item, sectorList);
+        sectorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         sectorSpinner.setAdapter(sectorAdapter);
         sectorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
             @Override
diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleService.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleService.java
index 1fc2af1..1d5e720 100644
--- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleService.java
+++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/SensorSampleService.java
@@ -346,16 +346,28 @@ public class SensorSampleService extends Service implements SensorEventListener
             builtinList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
 
             for (Sensor s : builtinList){
-                mSensorManager.registerListener(this, s, 100000000);
+                Log.d(TAG, "sensor in built in list: " + s.getName());
+                Log.d(TAG, "sensor in built in list type: " + s.getStringType());
+                if (s.getStringType().contains("android")){
+                    if (!s.getName().contains("Secondary")){
+                        mSensorManager.registerListener(this, s, 100000000);
+                    }
+                }
             }
 
             for (int i=0; i<builtinList.size(); i++) {
-                aSensor sens = new aSensor(builtinList.get(i));
                 // This is to figure out which sensors are uncalibrated
                 String delims = "[ .]+";
-                String[] tokens = sens.getStringType().split(delims);
-                sens.setName(tokens[2]);
-                sensorList.add(sens);
+                if (builtinList.get(i).getStringType().startsWith("android")){
+                    if (!builtinList.get(i).getName().contains("Secondary")) {
+                        aSensor sens = new aSensor(builtinList.get(i));
+                        String[] tokens = sens.getStringType().split(delims);
+                        sens.setName(tokens[2]);
+                        Log.d(TAG, "Setting aSensor name: " + tokens[2]);
+                        Log.d(TAG, "aSensor type: " + sens.getStringType());
+                        sensorList.add(sens);
+                    }
+                }
             }
         }
     }
@@ -492,7 +504,6 @@ public class SensorSampleService extends Service implements SensorEventListener
                 break;
             case Sensor.TYPE_GRAVITY:
                 sens.setLastValue(values, 3);
-                sens.setUnits("r");
                 sens.setID("and5");
                 break;
             case Sensor.TYPE_GYROSCOPE:
diff --git a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/aSensor.java b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/aSensor.java
index 305b643..54810c0 100644
--- a/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/aSensor.java
+++ b/app/src/main/java/fieldscience/cs/earlham/edu/fieldday/aSensor.java
@@ -9,7 +9,7 @@ public class aSensor implements Parcelable {
     private float[] lastValues;
     private float quality;
     private Integer numberValues;
-    private String type, platform, name, id, units;
+    private String type, platform, name, id;
     private Sensor sensor;
 
     // Using Built In sensors
@@ -96,8 +96,6 @@ public class aSensor implements Parcelable {
 
     public void setPlatform(String platformName){ platform = platformName; }
 
-    public void setUnits(String sensorUnits) { units = sensorUnits; }
-
     public void setName(String sensorName){
         name = sensorName;
     }
diff --git a/app/src/main/res/layout/activity_sensorsample.xml b/app/src/main/res/layout/activity_sensorsample.xml
index 9a09385..dfbdb11 100644
--- a/app/src/main/res/layout/activity_sensorsample.xml
+++ b/app/src/main/res/layout/activity_sensorsample.xml
@@ -152,8 +152,8 @@
         android:layout_height="wrap_content"
         android:contentDescription="@string/export"
         android:src="@drawable/export_button"
-        android:layout_below="@android:id/list"
-        android:layout_alignStart="@android:id/list" />
+        android:layout_alignParentBottom="true"
+        android:layout_toStartOf="@+id/streamButton" />
 
     <ImageButton
         android:layout_width="wrap_content"
@@ -162,8 +162,8 @@
         android:background="@null"
         android:contentDescription="@string/stream"
         android:src="@drawable/stream_button"
-        android:layout_alignParentBottom="true"
-        android:layout_alignStart="@+id/longandlat" />
+        android:layout_alignTop="@+id/sampleButton"
+        android:layout_centerHorizontal="true" />
 
     <ImageButton
         android:layout_width="wrap_content"
@@ -172,7 +172,7 @@
         android:background="@null"
         android:contentDescription="@string/sample"
         android:src="@drawable/sample_button"
-        android:layout_alignParentBottom="true"
-        android:layout_toEndOf="@+id/longandlat" />
+        android:layout_alignTop="@+id/exportDbButton"
+        android:layout_toEndOf="@+id/interval" />
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sensorscreen.xml b/app/src/main/res/layout/fragment_sensorscreen.xml
index 41c3901..e4eb503 100644
--- a/app/src/main/res/layout/fragment_sensorscreen.xml
+++ b/app/src/main/res/layout/fragment_sensorscreen.xml
@@ -44,6 +44,14 @@
             android:contentDescription="@string/databaseActions"
             android:background="@null"
             android:onClick="startSampleActivity" />
+        <Button
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:text="@string/benchSample"
+            android:contentDescription="@string/benchSample"
+            android:id="@+id/buttonBenchSample"
+            android:onClick="startSampleActivity" />
     </LinearLayout>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8a97aa9..1f169e4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -62,6 +62,7 @@
     <string name="bluetoothSensor">Take a sample with Bluetooth Sensors</string>
     <string name="builtinSensors">Take a sample with built in sensors</string>
     <string name="databaseActions">Work with database</string>
+    <string name="benchSample">Bench sample</string>
 
     <!--Bluetooth Sensor String -->
     <string name="reread">Re-read connected sensor</string>
@@ -69,7 +70,10 @@
     <!-- Sensor Strings -->
     <string name="built_in_sensor">"%1$s: "</string>
     <string name="sensorName">Sensor Name</string>
-    <string name="sensorValue">Sensor Value</string>
+    <string name="sensorValue">Sensor Value: </string>
+    <string name="readingNotes">Reading Notes </string>
+    <string name="sensorQuality">Quality: </string>
+    <string name="recordButton">Record</string>
 
     <!-- Bluetooth related strings -->
     <string name="ble_not_supported">Bluetooth Low Energy (LE) is not supported on this device.</string>
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 6df1594..9baf755 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <style name="MainTheme" parent="@android:style/Theme.Material.NoActionBar.Fullscreen">
+    <style name="MainTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">
         <item name="android:windowBackground">@drawable/background</item>
         <item name="android:colorControlActivated">@color/dark_gray_blue</item>
     </style>
-- 
GitLab