From f9c752ab3fa68546d07d26a3c042d31b46e22b2c Mon Sep 17 00:00:00 2001
From: Tor Henning Ueland <tor.henning@gmail.com>
Date: Tue, 6 Jan 2015 22:04:36 +0100
Subject: [PATCH 1/4] Implemented db viewer for measured cell signal strength

---
 .../AIMSICD/adapters/AIMSICDDbAdapter.java    |  7 ++-
 .../MeasuredCellStrengthCardData.java         | 29 ++++++++++
 .../MeasuredCellStrengthCardInflater.java     | 53 +++++++++++++++++++
 .../AIMSICD/fragments/DbViewerFragment.java   | 36 ++++++++-----
 app/src/main/res/values/strings.xml           |  1 +
 5 files changed, 113 insertions(+), 13 deletions(-)
 create mode 100644 app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
 create mode 100644 app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
index a31814c3..556c558b 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
@@ -44,7 +44,7 @@ public class AIMSICDDbAdapter {
     private final String OPENCELLID_TABLE = "opencellid";   // DBe_import
     private final String DEFAULT_MCC_TABLE = "defaultlocation";
     private final String SILENT_SMS_TABLE = "silentsms";
-    private final String CELL_SIGNAL_TABLE = "cellSignal";  // ???
+    private final String CELL_SIGNAL_TABLE = "cellSignal";  // cell tower signal strength collected by the device
     private final String DB_NAME = "aimsicd.db";
 
     private final String[] mTables;
@@ -53,6 +53,7 @@ public class AIMSICDDbAdapter {
     private final Context mContext;
 
     public static final int DATABASE_VERSION = 8;
+    private Cursor signalStrengthMeasurementDatA;
 
     public AIMSICDDbAdapter(Context context) {
         mContext = context;
@@ -680,6 +681,10 @@ public class AIMSICDDbAdapter {
         return c.getInt(0);
     }
 
+    public Cursor getSignalStrengthMeasurementData() {
+        return mDb.rawQuery("SELECT cellID, signal, timestamp FROM " + CELL_SIGNAL_TABLE +" ORDER BY timestamp DESC", new String[0]);
+    }
+
     /**
      * DbHelper class for the SQLite Database functions
      */
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
new file mode 100644
index 00000000..3bceec41
--- /dev/null
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
@@ -0,0 +1,29 @@
+package com.SecUpwN.AIMSICD.adapters;
+
+import java.text.SimpleDateFormat;
+
+public class MeasuredCellStrengthCardData {
+
+    private final long timestamp;
+    private final int signal;
+    private final int cellID;
+    private SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+
+    public MeasuredCellStrengthCardData(int cellID, int signal, long timestamp) {
+        this.cellID = cellID;
+        this.signal = signal;
+        this.timestamp = timestamp;
+    }
+
+    public String getCellID() {
+        return "Cell ID: "+cellID;
+    }
+
+    public String getSignal() {
+        return"Signal Strength: "+signal+"DB";
+    }
+
+    public String getTimestamp() {
+        return "Recorded: "+formatter.format(timestamp);
+    }
+}
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java
new file mode 100644
index 00000000..2fcccc0d
--- /dev/null
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java
@@ -0,0 +1,53 @@
+package com.SecUpwN.AIMSICD.adapters;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.SecUpwN.AIMSICD.R;
+
+public class MeasuredCellStrengthCardInflater implements IAdapterViewInflater<MeasuredCellStrengthCardData> {
+
+    @Override
+    public View inflate(final BaseInflaterAdapter<MeasuredCellStrengthCardData> adapter, final int pos,
+            View convertView, ViewGroup parent) {
+        ViewHolder holder;
+
+        if (convertView == null) {
+            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+            convertView = inflater.inflate(R.layout.silent_sms_items, parent, false);
+            holder = new ViewHolder(convertView);
+        } else {
+            holder = (ViewHolder) convertView.getTag();
+        }
+
+        final MeasuredCellStrengthCardData item = adapter.getTItem(pos);
+        holder.updateDisplay(item);
+
+        return convertView;
+    }
+
+    private class ViewHolder {
+
+        private final View mRootView;
+        private final TextView mAddress;
+        private final TextView mDisplayAddress;
+        private final TextView mMessageClass;
+
+        public ViewHolder(View rootView) {
+            mRootView = rootView;
+            mAddress = (TextView) mRootView.findViewById(R.id.address);
+            mDisplayAddress = (TextView) mRootView.findViewById(R.id.display_address);
+            mMessageClass = (TextView) mRootView.findViewById(R.id.message_class);
+
+            rootView.setTag(this);
+        }
+
+        public void updateDisplay(MeasuredCellStrengthCardData item) {
+            mAddress.setText(item.getCellID());
+            mDisplayAddress.setText(item.getSignal());
+            mMessageClass.setText(item.getTimestamp());
+        }
+    }
+}
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/DbViewerFragment.java b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/DbViewerFragment.java
index 9a4ec223..b533486c 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/DbViewerFragment.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/DbViewerFragment.java
@@ -1,23 +1,11 @@
 package com.SecUpwN.AIMSICD.fragments;
 
-import com.SecUpwN.AIMSICD.R;
-import com.SecUpwN.AIMSICD.adapters.AIMSICDDbAdapter;
-import com.SecUpwN.AIMSICD.adapters.BaseInflaterAdapter;
-import com.SecUpwN.AIMSICD.adapters.CardItemData;
-import com.SecUpwN.AIMSICD.adapters.CellCardInflater;
-import com.SecUpwN.AIMSICD.adapters.DefaultLocationCardInflater;
-import com.SecUpwN.AIMSICD.adapters.OpenCellIdCardInflater;
-import com.SecUpwN.AIMSICD.adapters.SilentSmsCardData;
-import com.SecUpwN.AIMSICD.adapters.SilentSmsCardInflater;
-import com.SecUpwN.AIMSICD.utils.Helpers;
-
 import android.app.Activity;
 import android.content.Context;
 import android.database.Cursor;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -26,6 +14,18 @@ import android.widget.Button;
 import android.widget.ListView;
 import android.widget.Spinner;
 
+import com.SecUpwN.AIMSICD.R;
+import com.SecUpwN.AIMSICD.adapters.AIMSICDDbAdapter;
+import com.SecUpwN.AIMSICD.adapters.BaseInflaterAdapter;
+import com.SecUpwN.AIMSICD.adapters.CardItemData;
+import com.SecUpwN.AIMSICD.adapters.CellCardInflater;
+import com.SecUpwN.AIMSICD.adapters.DefaultLocationCardInflater;
+import com.SecUpwN.AIMSICD.adapters.MeasuredCellStrengthCardData;
+import com.SecUpwN.AIMSICD.adapters.MeasuredCellStrengthCardInflater;
+import com.SecUpwN.AIMSICD.adapters.OpenCellIdCardInflater;
+import com.SecUpwN.AIMSICD.adapters.SilentSmsCardData;
+import com.SecUpwN.AIMSICD.adapters.SilentSmsCardInflater;
+
 public class DbViewerFragment extends Fragment {
 
     private AIMSICDDbAdapter mDb;
@@ -122,6 +122,8 @@ public class DbViewerFragment extends Fragment {
                             case "Silent SMS":
                                 result =  mDb.getSilentSmsData();
                                 break;
+                            case "Measured cell signal strengths":
+                                result = mDb.getSignalStrengthMeasurementData();
                         }
 
                         BaseInflaterAdapter adapter = null;
@@ -215,6 +217,16 @@ public class DbViewerFragment extends Fragment {
                     }
                     return adapter;
                 }
+                case "Measured cell signal strengths": {
+                    BaseInflaterAdapter<MeasuredCellStrengthCardData> adapter
+                            = new BaseInflaterAdapter<>(
+                            new MeasuredCellStrengthCardInflater());
+                    while (tableData.moveToNext()) {
+                        MeasuredCellStrengthCardData data = new MeasuredCellStrengthCardData(tableData.getInt(0), tableData.getInt(1), tableData.getLong(2));
+                        adapter.addItem(data, false);
+                    }
+                    return adapter;
+                }
                 default: {
                     BaseInflaterAdapter<CardItemData> adapter
                             = new BaseInflaterAdapter<>(
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e5aad08d..01e8bc18 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -203,6 +203,7 @@
         <item>Imported OCID Data</item>
         <item>Default MCC Locations</item>
         <item>Silent SMS</item>
+        <item>Measured cell signal strengths</item>
     </string-array>
     <string name="database_export_successful">Export Successful</string>
 
-- 
GitLab


From 02a659ee3ab6ffe90ef251f26e4be4cda466e0c8 Mon Sep 17 00:00:00 2001
From: Tor Henning Ueland <tor.henning@gmail.com>
Date: Tue, 6 Jan 2015 22:17:34 +0100
Subject: [PATCH 2/4] Better saving of timestamp for signal detection

---
 .../service/SignalStrengthTracker.java        | 37 +++++++++++--------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
index ce8183b5..582f2cf0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
@@ -1,9 +1,6 @@
 package com.SecUpwN.AIMSICD.service;
 
 import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
 import android.util.Log;
 
 import com.SecUpwN.AIMSICD.adapters.AIMSICDDbAdapter;
@@ -24,13 +21,13 @@ public class SignalStrengthTracker {
 
     public static final String TAG = "SignalStrengthMonitor";
     private static int sleepTimeBetweenSignalRegistration = 30; //seconds
-    private static int sleepTimeBetweenPersistation = 900; //seconds
-    private static int minimumIdleTime              = 30; //seconds
+    private static int sleepTimeBetweenPersistation = 120; //seconds
+    private static int minimumIdleTime              = 10; //seconds
     private static int maximumNumberOfDaysSaved     = 60; //days
     private static int mysteriousSignalDifference   = 10; //DB
 
     private HashMap<Integer, Long> lastRegistration = new HashMap<>();
-    private HashMap<Integer, ArrayList<Integer>> toCalculate = new HashMap<>();
+    private ArrayList<SignalResult> dataToPersist = new ArrayList<>();
     private HashMap<Integer, Integer> averageSignalCache = new HashMap<>();
     private long lastPersistTime = 0;
     private long lastMovementDetected = 0l;
@@ -63,12 +60,10 @@ public class SignalStrengthTracker {
             if(lastRegistration.get(cellID) != null) {
                 diff = now - lastRegistration.get(cellID);
             }
-            lastRegistration.put(cellID, now);
-            if(toCalculate.get(cellID) == null) {
-                toCalculate.put(cellID, new ArrayList<Integer>(1));
-            }
             Log.i(TAG, "Scheduling signal strength calculation from cell #" + cellID + " @ " + signalStrength + "DB, last registration was "+diff+"ms ago");
-            toCalculate.get(cellID).add(signalStrength);
+            lastRegistration.put(cellID, now);
+            SignalResult row = new SignalResult(cellID, signalStrength, now);
+            dataToPersist.add(row);
             lastRegistration.put(cellID, now);
         }
 
@@ -85,13 +80,11 @@ public class SignalStrengthTracker {
      */
     private void persistData() {
         mDbHelper.open();
-        for(int cellID : toCalculate.keySet()) {
-            for(int signal : toCalculate.get(cellID)) {
-                mDbHelper.addSignalStrength(cellID, signal, lastRegistration.get(cellID));
-            }
+        for(SignalResult sr : dataToPersist) {
+            mDbHelper.addSignalStrength(sr.cellID, sr.signal, sr.timestamp);
         }
         mDbHelper.close();
-        toCalculate.clear();
+        dataToPersist.clear();
     }
 
     /*
@@ -152,4 +145,16 @@ public class SignalStrengthTracker {
         //Log.d(TAG, "We are moving...");
         lastMovementDetected = System.currentTimeMillis();
     }
+
+    private class SignalResult {
+        public int cellID;
+        public int signal;
+        public long timestamp;
+
+        SignalResult(int cellID, int signal, long timestamp) {
+            this.cellID = cellID;
+            this.signal = signal;
+            this.timestamp = timestamp;
+        }
+    }
 }
-- 
GitLab


From 2f93c2fdba0c78464183f933cd0323dce0db7f39 Mon Sep 17 00:00:00 2001
From: Tor Henning Ueland <tor.henning@gmail.com>
Date: Tue, 6 Jan 2015 22:21:18 +0100
Subject: [PATCH 3/4] Code documentation

---
 .../AIMSICD/adapters/MeasuredCellStrengthCardData.java     | 7 ++++++-
 .../AIMSICD/adapters/MeasuredCellStrengthCardInflater.java | 7 ++++++-
 .../com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java | 3 +++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
index 3bceec41..02f53cad 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardData.java
@@ -1,7 +1,12 @@
 package com.SecUpwN.AIMSICD.adapters;
 
 import java.text.SimpleDateFormat;
-
+/**
+ *
+ * Data card class used in DB viewer (for Measured cell strength measurements)
+ *
+ * @author Tor Henning Ueland
+ */
 public class MeasuredCellStrengthCardData {
 
     private final long timestamp;
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java
index 2fcccc0d..8a89ce5a 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/MeasuredCellStrengthCardInflater.java
@@ -6,7 +6,12 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import com.SecUpwN.AIMSICD.R;
-
+/**
+ *
+ * Inflater class used in DB viewer (for Measured cell strength measurements)
+ *
+ * @author Tor Henning Ueland
+ */
 public class MeasuredCellStrengthCardInflater implements IAdapterViewInflater<MeasuredCellStrengthCardData> {
 
     @Override
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
index 582f2cf0..765297d5 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
@@ -146,6 +146,9 @@ public class SignalStrengthTracker {
         lastMovementDetected = System.currentTimeMillis();
     }
 
+    /**
+     * Internal class only used here to keep a result object in hand for future persisting in DB
+     */
     private class SignalResult {
         public int cellID;
         public int signal;
-- 
GitLab


From 1ea11d6ddba5e3b8511b1dc0c9cfc2ba85e1f013 Mon Sep 17 00:00:00 2001
From: Tor Henning Ueland <tor.henning@gmail.com>
Date: Tue, 6 Jan 2015 22:25:46 +0100
Subject: [PATCH 4/4] Re-adjusted some levels for Signal Strength Tracker

---
 .../com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
index 765297d5..7c1bb7c3 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
@@ -20,9 +20,9 @@ import java.util.HashMap;
 public class SignalStrengthTracker {
 
     public static final String TAG = "SignalStrengthMonitor";
-    private static int sleepTimeBetweenSignalRegistration = 30; //seconds
-    private static int sleepTimeBetweenPersistation = 120; //seconds
-    private static int minimumIdleTime              = 10; //seconds
+    private static int sleepTimeBetweenSignalRegistration = 60; //seconds
+    private static int sleepTimeBetweenPersistation = 900; //seconds
+    private static int minimumIdleTime              = 30; //seconds
     private static int maximumNumberOfDaysSaved     = 60; //days
     private static int mysteriousSignalDifference   = 10; //DB
 
-- 
GitLab