From 4d134d43c3755d2fdeebf9015862bc2f2264bb98 Mon Sep 17 00:00:00 2001
From: Jeffrey Martin <jmartin5229@mail.kvcc.edu>
Date: Mon, 9 Nov 2015 13:57:34 -0500
Subject: [PATCH] Add Database with Thermo Table

---
 .../broadcom/app/wicedsense/MainActivity.java | 405 +++++++++++-------
 .../app/wicedsense/ThermoBaseHelper.java      |  38 ++
 .../app/wicedsense/WicedDBSchema.java         |  18 +
 3 files changed, 299 insertions(+), 162 deletions(-)
 create mode 100644 WicedSense/app/src/main/java/com/broadcom/app/wicedsense/ThermoBaseHelper.java
 create mode 100644 WicedSense/app/src/main/java/com/broadcom/app/wicedsense/WicedDBSchema.java

diff --git a/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/MainActivity.java b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/MainActivity.java
index 0732cad..25204c0 100644
--- a/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/MainActivity.java
+++ b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/MainActivity.java
@@ -17,6 +17,7 @@
 package com.broadcom.app.wicedsense;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Iterator;
 import com.broadcom.app.ledevicepicker.DevicePicker;
 import com.broadcom.app.ledevicepicker.DevicePickerActivity;
@@ -38,10 +39,12 @@ import android.app.FragmentTransaction;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 
+import android.database.sqlite.SQLiteDatabase;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -114,9 +117,9 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
                             BluetoothAdapter.ERROR);
                     switch (btState) {
 
-                    case BluetoothAdapter.STATE_TURNING_OFF:
-                        exitApp();
-                        break;
+                        case BluetoothAdapter.STATE_TURNING_OFF:
+                            exitApp();
+                            break;
                     }
                 }
             });
@@ -129,23 +132,23 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
         public boolean handleMessage(Message msg) {
             switch (msg.what) {
 
-            // These events run on the mUiHandler on the UI Main Thread
-            case COMPLETE_INIT:
-                initResourcesAndResume();
-                break;
-            case PROCESS_EVENT_DEVICE_UNSUPPORTED:
-                Toast.makeText(getApplicationContext(), R.string.error_unsupported_device,
-                        Toast.LENGTH_SHORT).show();
-                break;
-            case PROCESS_CONNECTION_STATE_CHANGE_UI:
-                updateConnectionStateWidgets();
-                break;
-            case PROCESS_BATTERY_STATUS_UI:
-                updateBatteryLevelWidget(msg.arg1);
-                break;
-            case PROCESS_SENSOR_DATA_ON_UI:
-                processSensorData((byte[]) msg.obj);
-                break;
+                // These events run on the mUiHandler on the UI Main Thread
+                case COMPLETE_INIT:
+                    initResourcesAndResume();
+                    break;
+                case PROCESS_EVENT_DEVICE_UNSUPPORTED:
+                    Toast.makeText(getApplicationContext(), R.string.error_unsupported_device,
+                            Toast.LENGTH_SHORT).show();
+                    break;
+                case PROCESS_CONNECTION_STATE_CHANGE_UI:
+                    updateConnectionStateWidgets();
+                    break;
+                case PROCESS_BATTERY_STATUS_UI:
+                    updateBatteryLevelWidget(msg.arg1);
+                    break;
+                case PROCESS_SENSOR_DATA_ON_UI:
+                    processSensorData((byte[]) msg.obj);
+                    break;
             }
             return true;
         }
@@ -192,26 +195,26 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
      */
     private boolean initResourcesAndResume() {
         switch (mInitState) {
-        case 0:
-            // Check if license accepted. If not, prompt user
-            if (!mLicense.checkLicenseAccepted(getFragmentManager())) {
-                return false;
-            }
-            mInitState++;
-        case 1:
-            // Check if BT is on, If not, prompt user
-            if (!BluetoothEnabler.checkBluetoothOn(this)) {
-                return false;
-            }
-            mInitState++;
-            SenseManager.init(this);
-        case 2:
-            // Check if sense manager initialized. If not, keep waiting
-            if (waitForSenseManager()) {
-                return false;
-            }
-            mInitState = -1;
-            checkDevicePicked();
+            case 0:
+                // Check if license accepted. If not, prompt user
+                if (!mLicense.checkLicenseAccepted(getFragmentManager())) {
+                    return false;
+                }
+                mInitState++;
+            case 1:
+                // Check if BT is on, If not, prompt user
+                if (!BluetoothEnabler.checkBluetoothOn(this)) {
+                    return false;
+                }
+                mInitState++;
+                SenseManager.init(this);
+            case 2:
+                // Check if sense manager initialized. If not, keep waiting
+                if (waitForSenseManager()) {
+                    return false;
+                }
+                mInitState = -1;
+                checkDevicePicked();
         }
         mSenseManager.registerEventCallbackHandler(mSensorDataEventHandler);
 
@@ -562,25 +565,25 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
-        case R.id.action_connectdisconnect:
-            mConnectDisconnectPending = true;
-            invalidateOptionsMenu();
-            doConnectDisconnect();
-            return true;
-        case R.id.action_pick:
-            launchDevicePicker();
-            return true;
-        case R.id.update_fw:
-            checkForFirmwareUpdate();
-            return true;
-        case R.id.get_fw_info:
-            getFirmwareInfo();
-            return true;
-        case R.id.action_settings:
-            // Launch setttings menu
-            Intent i = new Intent(this, SettingsActivity.class);
-            startActivity(i);
-            return true;
+            case R.id.action_connectdisconnect:
+                mConnectDisconnectPending = true;
+                invalidateOptionsMenu();
+                doConnectDisconnect();
+                return true;
+            case R.id.action_pick:
+                launchDevicePicker();
+                return true;
+            case R.id.update_fw:
+                checkForFirmwareUpdate();
+                return true;
+            case R.id.get_fw_info:
+                getFirmwareInfo();
+                return true;
+            case R.id.action_settings:
+                // Launch setttings menu
+                Intent i = new Intent(this, SettingsActivity.class);
+                startActivity(i);
+                return true;
         }
         return false;
     }
@@ -646,44 +649,44 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
     @Override
     public boolean handleMessage(Message msg) {
         switch (msg.what) {
-        case SenseManager.EVENT_DEVICE_UNSUPPORTED:
-            mUiHandler.sendEmptyMessage(PROCESS_EVENT_DEVICE_UNSUPPORTED);
-            break;
-        case SenseManager.EVENT_CONNECTED:
-            mUiHandler.sendEmptyMessage(PROCESS_CONNECTION_STATE_CHANGE_UI);
-            onConnected();
-            break;
-        case SenseManager.EVENT_DISCONNECTED:
-            mUiHandler.sendEmptyMessage(PROCESS_CONNECTION_STATE_CHANGE_UI);
-            break;
-        case SenseManager.EVENT_BATTERY_STATUS:
-            mUiHandler.sendMessage(mUiHandler.obtainMessage(PROCESS_BATTERY_STATUS_UI, msg.arg1,
-                    msg.arg1));
-            break;
-        case SenseManager.EVENT_SENSOR_DATA:
-            mUiHandler.sendMessage(mUiHandler.obtainMessage(PROCESS_SENSOR_DATA_ON_UI, msg.obj));
-            break;
-        case SenseManager.EVENT_APP_INFO:
-            boolean success = msg.arg1 == 1;
-            OtaAppInfo appInfo = (OtaAppInfo) msg.obj;
-            if (DBG) {
-                Log.d(TAG, "EVENT_APP_INFO: success=" + success + ",otaAppInfo=" + appInfo);
-            }
-            if (mFirmwareUpdateCheckPending) {
-                mFirmwareUpdateCheckPending = false;
-                checkForFirmwareUpdate(appInfo);
+            case SenseManager.EVENT_DEVICE_UNSUPPORTED:
+                mUiHandler.sendEmptyMessage(PROCESS_EVENT_DEVICE_UNSUPPORTED);
                 break;
-            }
+            case SenseManager.EVENT_CONNECTED:
+                mUiHandler.sendEmptyMessage(PROCESS_CONNECTION_STATE_CHANGE_UI);
+                onConnected();
+                break;
+            case SenseManager.EVENT_DISCONNECTED:
+                mUiHandler.sendEmptyMessage(PROCESS_CONNECTION_STATE_CHANGE_UI);
+                break;
+            case SenseManager.EVENT_BATTERY_STATUS:
+                mUiHandler.sendMessage(mUiHandler.obtainMessage(PROCESS_BATTERY_STATUS_UI, msg.arg1,
+                        msg.arg1));
+                break;
+            case SenseManager.EVENT_SENSOR_DATA:
+                mUiHandler.sendMessage(mUiHandler.obtainMessage(PROCESS_SENSOR_DATA_ON_UI, msg.obj));
+                break;
+            case SenseManager.EVENT_APP_INFO:
+                boolean success = msg.arg1 == 1;
+                OtaAppInfo appInfo = (OtaAppInfo) msg.obj;
+                if (DBG) {
+                    Log.d(TAG, "EVENT_APP_INFO: success=" + success + ",otaAppInfo=" + appInfo);
+                }
+                if (mFirmwareUpdateCheckPending) {
+                    mFirmwareUpdateCheckPending = false;
+                    checkForFirmwareUpdate(appInfo);
+                    break;
+                }
 
-            if (mShowAppInfoDialog) {
-                mShowAppInfoDialog = false;
-                if (success) {
-                    OtaAppInfoFragment mOtaAppInfoFragment = OtaAppInfoFragment.createDialog(
-                            mSenseManager.getDevice(), appInfo);
-                    mOtaAppInfoFragment.show(getFragmentManager(), null);
+                if (mShowAppInfoDialog) {
+                    mShowAppInfoDialog = false;
+                    if (success) {
+                        OtaAppInfoFragment mOtaAppInfoFragment = OtaAppInfoFragment.createDialog(
+                                mSenseManager.getDevice(), appInfo);
+                        mOtaAppInfoFragment.show(getFragmentManager(), null);
+                    }
                 }
-            }
-            break;
+                break;
         }
         return true;
     }
@@ -712,85 +715,90 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
         boolean updateView = false;
         long currentTimeMs = System.currentTimeMillis();
         switch (sensorData.length) {
-        case 19:
-            if (currentTimeMs - mLastRefreshTimeMs < Settings.REFRESH_INTERVAL_MS) {
-                return;
-            } else {
-                mLastRefreshTimeMs = currentTimeMs;
-            }
+            case 19:
+                if (currentTimeMs - mLastRefreshTimeMs < Settings.REFRESH_INTERVAL_MS) {
+                    return;
+                } else {
+                    mLastRefreshTimeMs = currentTimeMs;
+                }
 
-            // packet type specifying accelerometer, gyro, magno
-            offset = 1;
-            if (SensorDataParser.accelerometerHasChanged(maskField)) {
-                if (Settings.accelerometerEnabled() && mAccelerometerFrag.isVisible()) {
-                    SensorDataParser.getAccelorometerData(sensorData, offset, values);
-                    mAccelerometerFrag.setValue(mAnimation, values[0], values[1], values[2]);
-                    updateView = true;
+                // packet type specifying accelerometer, gyro, magno
+                offset = 1;
+                if (SensorDataParser.accelerometerHasChanged(maskField)) {
+                    if (Settings.accelerometerEnabled() && mAccelerometerFrag.isVisible()) {
+                        SensorDataParser.getAccelorometerData(sensorData, offset, values);
+                        mAccelerometerFrag.setValue(mAnimation, values[0], values[1], values[2]);
+                        updateView = true;
+                    }
+                    offset += SensorDataParser.SENSOR_ACCEL_DATA_SIZE;
                 }
-                offset += SensorDataParser.SENSOR_ACCEL_DATA_SIZE;
-            }
 
-            if (SensorDataParser.gyroHasChanged(maskField)) {
-                if (Settings.gyroEnabled() && mGyroFrag.isVisible()) {
-                    SensorDataParser.getGyroData(sensorData, offset, values);
-                    mGyroFrag.setValue(mAnimation, values[0], values[1], values[2]);
-                    updateView = true;
+                if (SensorDataParser.gyroHasChanged(maskField)) {
+                    if (Settings.gyroEnabled() && mGyroFrag.isVisible()) {
+                        SensorDataParser.getGyroData(sensorData, offset, values);
+                        mGyroFrag.setValue(mAnimation, values[0], values[1], values[2]);
+                        updateView = true;
+                    }
+                    offset += SensorDataParser.SENSOR_GYRO_DATA_SIZE;
                 }
-                offset += SensorDataParser.SENSOR_GYRO_DATA_SIZE;
-            }
 
-            if (SensorDataParser.magnetometerHasChanged(maskField)) {
-                if (Settings.compassEnabled() && mCompassFrag.isVisible()) {
-                    SensorDataParser.getMagnometerData(sensorData, offset, values);
-                    float angle = SensorDataParser.getCompassAngleDegrees(values);
-                    mCompassFrag.setValue(mAnimation, angle, values[0], values[1], values[2]);
-                    updateView = true;
+                if (SensorDataParser.magnetometerHasChanged(maskField)) {
+                    if (Settings.compassEnabled() && mCompassFrag.isVisible()) {
+                        SensorDataParser.getMagnometerData(sensorData, offset, values);
+                        float angle = SensorDataParser.getCompassAngleDegrees(values);
+                        mCompassFrag.setValue(mAnimation, angle, values[0], values[1], values[2]);
+                        updateView = true;
+                    }
+                    offset += SensorDataParser.SENSOR_MAGNO_DATA_SIZE;
                 }
-                offset += SensorDataParser.SENSOR_MAGNO_DATA_SIZE;
-            }
 
-            if (updateView && mAnimation != null) {
-                mAnimation.animate();
-            }
-            break;
-        case 7:
+                if (updateView && mAnimation != null) {
+                    mAnimation.animate();
+                }
+                break;
+            case 7:
 
-            if (currentTimeMs - mLastRefreshSlowerTimeMs < Settings.REFRESH_INTERVAL_SLOWER_MS) {
-                return;
-            } else {
-                mLastRefreshSlowerTimeMs = currentTimeMs;
-            }
+                if (currentTimeMs - mLastRefreshSlowerTimeMs < Settings.REFRESH_INTERVAL_SLOWER_MS) {
+                    return;
+                } else {
+                    mLastRefreshSlowerTimeMs = currentTimeMs;
+                }
 
-            // packet type specifying temp, humid, press
-            offset = 1;
-            float value = 0;
-            if (mHumidityFrag.isVisible() && SensorDataParser.humidityHasChanged(maskField)) {
-                value = SensorDataParser.getHumidityPercent(sensorData, offset);
-                offset += SensorDataParser.SENSOR_HUMD_DATA_SIZE;
-                mHumidityFrag.setValue(mAnimationSlower, value);
-                updateView = true;
-            }
-            if (mPressureFrag.isVisible() && SensorDataParser.pressureHasChanged(maskField)) {
-                value = SensorDataParser.getPressureMBar(sensorData, offset);
-                offset += SensorDataParser.SENSOR_PRES_DATA_SIZE;
-                mPressureFrag.setValue(mAnimationSlower, value);
-                updateView = true;
-            }
+                // packet type specifying temp, humid, press
+                offset = 1;
+                float value = 0;
+                if (mHumidityFrag.isVisible() && SensorDataParser.humidityHasChanged(maskField)) {
+                    value = SensorDataParser.getHumidityPercent(sensorData, offset);
+                    mHumidityValue = Float.toString(value);
+                    offset += SensorDataParser.SENSOR_HUMD_DATA_SIZE;
+                    mHumidityFrag.setValue(mAnimationSlower, value);
+                    updateView = true;
+                }
+                if (mPressureFrag.isVisible() && SensorDataParser.pressureHasChanged(maskField)) {
+                    value = SensorDataParser.getPressureMBar(sensorData, offset);
+                    mPressureValue = Float.toString(value);
+                    offset += SensorDataParser.SENSOR_PRES_DATA_SIZE;
+                    mPressureFrag.setValue(mAnimationSlower, value);
+                    updateView = true;
+                }
 
-            if (mTemperatureFrag.isVisible() && SensorDataParser.temperatureHasChanged(maskField)) {
-                if (mIsTempScaleF) {
-                    value = SensorDataParser.getTemperatureF(sensorData, offset);
-                } else {
-                    value = SensorDataParser.getTemperatureC(sensorData, offset);
+                if (mTemperatureFrag.isVisible() && SensorDataParser.temperatureHasChanged(maskField)) {
+                    if (mIsTempScaleF) {
+                        value = SensorDataParser.getTemperatureF(sensorData, offset);
+                    } else {
+                        value = SensorDataParser.getTemperatureC(sensorData, offset);
+                    }
+                    mTemperatureValue = Float.toString(value);
+                    offset += SensorDataParser.SENSOR_TEMP_DATA_SIZE;
+                    mTemperatureFrag.setValue(mAnimationSlower, value);
+                    updateView = true;
                 }
-                offset += SensorDataParser.SENSOR_TEMP_DATA_SIZE;
-                mTemperatureFrag.setValue(mAnimationSlower, value);
-                updateView = true;
-            }
-            if (updateView && mAnimationSlower != null) {
-                mAnimationSlower.animate();
-            }
-            break;
+                if (updateView && mAnimationSlower != null) {
+                    mAnimationSlower.animate();
+                    addThermoData();
+                    //***********************************************************************************************************************
+                }
+                break;
         }
 
         // If animation is enabled, call animate...
@@ -1062,4 +1070,77 @@ public class MainActivity extends Activity implements OnLicenseAcceptListener,
         mTemperatureFrag = f;
     }
 
+    //************************************  This is to open the database - JEFF  Added******************
+
+    private Context mContext;
+    private SQLiteDatabase mDatabase;
+
+    private String mHumidityValue;
+    private String mPressureValue;
+    private String mTemperatureValue;
+
+    private MainActivity(Context context){
+        mContext = context.getApplicationContext();
+        mDatabase = new ThermoBaseHelper(mContext).getReadableDatabase();
+    }
+
+    private ContentValues getContentValues(){ // To place values in the database  ????? What am I passing in?   see page 325
+
+        Calendar time = new Calendar() {//  Created to get the time
+            @Override
+            public void add(int field, int value) {
+
+            }
+
+            @Override
+            protected void computeFields() {
+
+            }
+
+            @Override
+            protected void computeTime() {
+
+            }
+
+            @Override
+            public int getGreatestMinimum(int field) {
+                return 0;
+            }
+
+            @Override
+            public int getLeastMaximum(int field) {
+                return 0;
+            }
+
+            @Override
+            public int getMaximum(int field) {
+                return 0;
+            }
+
+            @Override
+            public int getMinimum(int field) {
+                return 0;
+            }
+
+            @Override
+            public void roll(int field, boolean increment) {
+
+            }
+        };
+        time.getTime();
+
+        ContentValues values = new ContentValues();
+        values.put(WicedDBSchema.ThermoTable.Cols.TIME, time.toString());
+        values.put(WicedDBSchema.ThermoTable.Cols.HUMIDITY, mHumidityValue );
+        values.put(WicedDBSchema.ThermoTable.Cols.PRESSURE, mPressureValue);
+        values.put(WicedDBSchema.ThermoTable.Cols.TEMPERATURE, mTemperatureValue);
+
+        return values;
+    }
+
+    public  void addThermoData () {//  Add a row of data????????????What am I passing in?    see page 326
+        ContentValues values = getContentValues();
+        mDatabase.insert(WicedDBSchema.ThermoTable.NAME, null, values);
+    }
+
 }
diff --git a/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/ThermoBaseHelper.java b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/ThermoBaseHelper.java
new file mode 100644
index 0000000..a6d4922
--- /dev/null
+++ b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/ThermoBaseHelper.java
@@ -0,0 +1,38 @@
+package com.broadcom.app.wicedsense;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+
+/**
+ * Created by jmartin5229 on 11/9/2015.
+ */
+public class ThermoBaseHelper  extends SQLiteOpenHelper {// The SQLiteOpenHelper does the following
+    // 1. Check to see if the database already exists.
+    // 2. If it does not, create it and create the tables and initial data it needs.
+    // 3. If it does, open it up and see what version of your ThermoDbSchema it has.
+    // 4. If it is an old version, run code to upgrade it to a newer version.
+    private static final int VERSION = 1;
+    private static final String DATABASE_NAME = "thermoBase.db";
+
+    public ThermoBaseHelper(Context context) {
+        super(context, DATABASE_NAME, null, VERSION);
+    }
+
+    @Override
+    public void onCreate(SQLiteDatabase db){  //  Creates the ThermoTable and defines its fields.
+        db.execSQL("create table " + WicedDBSchema.ThermoTable.NAME + "(" +
+                        " _id integer primary key autoincrement, " +
+                        WicedDBSchema.ThermoTable.Cols.TIME + ", "+
+                        WicedDBSchema.ThermoTable.Cols.HUMIDITY + ", " +
+                        WicedDBSchema.ThermoTable.Cols.PRESSURE + ", " +
+                        WicedDBSchema.ThermoTable.Cols.TEMPERATURE + ")"
+        );
+    }
+
+    @Override
+    public void onUpgrade(SQLiteDatabase db, int OldVersion, int newVersion){
+
+    }
+}
diff --git a/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/WicedDBSchema.java b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/WicedDBSchema.java
new file mode 100644
index 0000000..af9b11a
--- /dev/null
+++ b/WicedSense/app/src/main/java/com/broadcom/app/wicedsense/WicedDBSchema.java
@@ -0,0 +1,18 @@
+package com.broadcom.app.wicedsense;
+
+/**
+ * Created by jmartin5229 on 11/9/2015.
+ */
+public class WicedDBSchema {
+    public static final class ThermoTable { //  Name of the Table
+        public static final String NAME = "thermo";
+
+        public static final class Cols { //  Name of the Columns (Fields)
+            public static final String TIME = "time";
+            public static final String HUMIDITY = "humidity";
+            public static final String PRESSURE = "pressure";
+            public static final String TEMPERATURE = "temerature";
+
+        }
+    }
+}
-- 
GitLab