diff --git a/README.md b/README.md
index 6b45a0ac..0d551106 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,22 @@
+# Known Issues
+While this does have a dependency on the environment you are in (e.g. whether there is significant radio noise in the Bluetooth spectrum) in general we've found that the rate of connecting to a Shimmer3 device on the first try varies across Android devices. The following gives an example of the results we've seen, where percentage of success is the number of times the Android Phone Model is able to connect successfully to a Shimmer device the first time of trying:-
+
+| Android Phone Model | Percentage of Success |
+| ------------- | ------------- |
+| Nokia 2.3 | 96% |
+| Pocophone F1 | 60% |
+| Redmi Note4 | 97% |
+| Redmi 9AT | 99% |
+| Samsung j3 | 97% |
+| Samsung Galaxy A5 | 99% |
+| Samsung Galaxy A10 | 99% |
+| Xiaomi Redmi 9A | 99% |
+| Pixel 3A | 77% |
+| OnePlus 5 | 60% |
+
+From a users perspective to improve the success rate of connecting the first time seamlessly, we recommend using logic in the background which will automatically try to connect to the Shimmer device should the first time fail. An example implementation of this logic can be found in the project/app shimmerConnectionTest. Please refer to the readme of said project for further details. Using said logic we have found significant improvements on the poor performing phones like the Pocophone F1 and the OnePlus 5.
+
+
# Important ~ Migration to JFrog
With Bintray being sunset, we have migrated to the use of JFrog. Should you face any problems please do not hesitate to contact us. We apologize for any inconvenience caused.
diff --git a/ShimmerAndroidInstrumentDriver/.idea/gradle.xml b/ShimmerAndroidInstrumentDriver/.idea/gradle.xml
index 167b8ae3..327e3464 100644
--- a/ShimmerAndroidInstrumentDriver/.idea/gradle.xml
+++ b/ShimmerAndroidInstrumentDriver/.idea/gradle.xml
@@ -16,6 +16,7 @@
+
diff --git a/ShimmerAndroidInstrumentDriver/settings.gradle b/ShimmerAndroidInstrumentDriver/settings.gradle
index dcdbe5ee..5d51416d 100644
--- a/ShimmerAndroidInstrumentDriver/settings.gradle
+++ b/ShimmerAndroidInstrumentDriver/settings.gradle
@@ -1,5 +1,5 @@
include ':ShimmerAndroidInstrumentDriver', ':bluetoothManagerExample', ':shimmerServiceExample', ':shimmerLegacyExample', ':shimmerBasicExample', ':efficientDataArrayExample'
-include ':shimmer3DOrientationExample'
+include ':shimmer3DOrientationExample', ':shimmerConnectionTest'
//Don't need shimmeradvancelibrary is just an example on how to import projects from different folders
//include ':ShimmerAdvanceLibrary'
//project (":ShimmerAdvanceLibrary").projectDir = new File("../../ShimmerAdvanceAPI/ShimmerAdvanceLibrary")
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/.gitignore b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/README.md b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/README.md
new file mode 100644
index 00000000..b1905f75
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/README.md
@@ -0,0 +1,22 @@
+# Shimmer Basic Example
+This example is only applicable for Shimmer3 devices onwards. For Shimmer2 devices, please see the Legacy Example
+
+- This example demonstrates connecting and streaming data from a Shimmer directly, without the use of the Bluetooth Manager
+- The build.gradle file shows how to retrieve the library from bintray. Take note of the following:-
+
+```
+compile 'ShimmerAndroidInstrumentDriver:ShimmerAndroidInstrumentDriver:3.0.65Beta'
+```
+
+- Note you will need to specify the url for the shimmer bintray repository, this is done in the build.gradle file (root projects folder)
+```
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ maven {
+ url "http://dl.bintray.com/shimmerengineering/Shimmer"
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/build.gradle b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/build.gradle
new file mode 100644
index 00000000..eb1e9767
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/build.gradle
@@ -0,0 +1,70 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+
+
+
+ defaultConfig {
+ applicationId "shimmerresearch.com.shimmerconnectiontest"
+ minSdkVersion 17
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ multiDexEnabled true
+
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ packagingOptions {
+ exclude 'META-INF/DEPENDENCIES'
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/LICENSE.txt'
+ exclude 'META-INF/license.txt'
+ exclude 'META-INF/NOTICE'
+ exclude 'META-INF/NOTICE.txt'
+ exclude 'META-INF/notice.txt'
+ exclude 'META-INF/ASL2.0'
+ }
+
+ configurations.all {
+ resolutionStrategy.force 'com.android.support:support-annotations:25.3.1'
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ androidTestCompile 'com.android.support:support-annotations:25.3.1'
+ //compile(group: 'com.shimmersensing', name: 'ShimmerAndroidInstrumentDriver', version: '3.0.71Beta', ext: 'aar')
+ compile project(':ShimmerAndroidInstrumentDriver')
+ implementation (group: 'com.shimmersensing', name: 'ShimmerBluetoothManager', version:'0.9.42beta'){
+ // excluding org.json which is provided by Android
+ exclude group: 'io.netty'
+ exclude group: 'com.google.protobuf'
+ exclude group: 'org.apache.commons.math'
+ }
+ implementation (group: 'com.shimmersensing', name: 'ShimmerDriver', version:'0.9.138beta'){
+ // excluding org.json which is provided by Android
+ exclude group: 'io.netty'
+ exclude group: 'com.google.protobuf'
+ exclude group: 'org.apache.commons.math'
+ }
+ implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.1'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+}
+repositories {
+ mavenCentral()
+}
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/proguard-rules.pro b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/androidTest/java/shimmerresearch/com/shimmerconnectiontest/ExampleInstrumentedTest.java b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/androidTest/java/shimmerresearch/com/shimmerconnectiontest/ExampleInstrumentedTest.java
new file mode 100644
index 00000000..45d7b93a
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/androidTest/java/shimmerresearch/com/shimmerconnectiontest/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package shimmerresearch.com.shimmerconnectiontest;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("shimmerresearch.com.shimmerconnectiontest", appContext.getPackageName());
+ }
+}
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/AndroidManifest.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..647a3145
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/AndroidManifest.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/java/shimmerresearch/com/shimmerconnectiontest/MainActivity.java b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/java/shimmerresearch/com/shimmerconnectiontest/MainActivity.java
new file mode 100644
index 00000000..0b022aa9
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/java/shimmerresearch/com/shimmerconnectiontest/MainActivity.java
@@ -0,0 +1,339 @@
+package shimmerresearch.com.shimmerconnectiontest;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.View;
+import android.widget.Toast;
+
+import com.shimmerresearch.android.Shimmer;
+import com.shimmerresearch.android.guiUtilities.ShimmerBluetoothDialog;
+import com.shimmerresearch.android.manager.ShimmerBluetoothManagerAndroid;
+import com.shimmerresearch.bluetooth.ShimmerBluetooth;
+import com.shimmerresearch.driver.CallbackObject;
+import com.shimmerresearch.driver.Configuration;
+import com.shimmerresearch.driver.FormatCluster;
+import com.shimmerresearch.driver.ObjectCluster;
+import com.shimmerresearch.driver.ShimmerDevice;
+import com.shimmerresearch.exceptions.ShimmerException;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import android.widget.EditText;
+
+import static com.shimmerresearch.android.guiUtilities.ShimmerBluetoothDialog.EXTRA_DEVICE_ADDRESS;
+
+public class MainActivity extends Activity {
+
+ private final static String LOG_TAG = "ShimmerConnectionTest";
+ ShimmerBluetoothManagerAndroid btManager;
+ private EditText editTextShimmerStatus;
+ private EditText editTextInterval;
+ private EditText editTextSuccessCount;
+ private EditText editTextFailureCount;
+ private EditText editTextTotalIteration;
+ private EditText editTextTestProgress;
+ private EditText editTextFirmware;
+ private EditText editTextAndroidDeviceModel;
+ private EditText editTextShimmerDeviceName;
+ private EditText editTextRetryCountLimit;
+ private EditText editTextRetryCount;
+ private EditText editTextTotalRetries;
+
+ private int interval = 0;
+ private int successCount = 0;
+ private int failureCount = 0;
+ private int totalIterationLimit = 10;
+ private int currentIteration = 0;
+ private int retryCount = 0;
+ private int retryCountLimit = 5;
+ private int durationBetweenTest = 1;
+ private int totalRetries = 0;
+
+ private String macAdd;
+ private boolean isCurrentIterationSuccess;
+ private boolean isTestStarted = false;
+ private Timer timer;
+ HashMap ResultMap = new HashMap<>(); //-1,0,1 , unknown, fail, pass
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ editTextShimmerStatus = (EditText) findViewById(R.id.shimmerStatus);
+ editTextInterval = (EditText) findViewById(R.id.interval);
+ editTextSuccessCount = (EditText) findViewById(R.id.success);
+ editTextFailureCount = (EditText) findViewById(R.id.fail);
+ editTextTotalIteration = (EditText) findViewById(R.id.testIterations);
+ editTextTestProgress = (EditText) findViewById(R.id.testProgress);
+ editTextFirmware = (EditText) findViewById(R.id.firmware);
+ editTextAndroidDeviceModel = (EditText) findViewById(R.id.androidDeviceModel);
+ editTextShimmerDeviceName = (EditText) findViewById(R.id.shimmerDeviceName);
+ editTextRetryCountLimit = (EditText) findViewById(R.id.retryCountLimit);
+ editTextRetryCount = (EditText) findViewById(R.id.retryCount);
+ editTextTotalRetries = (EditText) findViewById(R.id.totalRetries);
+
+ editTextAndroidDeviceModel.setText(Build.MANUFACTURER + " " + Build.PRODUCT);
+ editTextRetryCountLimit.setText(Integer.toString(retryCountLimit));
+ editTextTotalIteration.setText(Integer.toString(totalIterationLimit));
+ editTextInterval.setText(Integer.toString(durationBetweenTest));
+ }
+
+ public void startTest(View v){
+ if(!isTestStarted){
+ totalRetries = 0;
+ if (btManager==null) {
+ try {
+ btManager = new ShimmerBluetoothManagerAndroid(this, mHandler);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ if (btManager.getShimmer(macAdd)!=null) {
+ btManager.disconnectShimmer(macAdd);
+ }
+ Intent intent = new Intent(getApplicationContext(), ShimmerBluetoothDialog.class);
+ startActivityForResult(intent, ShimmerBluetoothDialog.REQUEST_CONNECT_SHIMMER);
+ }
+ }
+
+ public void stopTest(View v){
+ if(isTestStarted){
+ editTextInterval.setEnabled(true);
+ editTextTotalIteration.setEnabled(true);
+ editTextRetryCountLimit.setEnabled(true);
+ if(timer != null){
+ timer.cancel();
+ }
+ isTestStarted = false;
+ }
+ }
+
+ /**
+ * Messages from the Shimmer device including sensor data are received here
+ */
+ Handler mHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+
+ switch (msg.what) {
+ case ShimmerBluetooth.MSG_IDENTIFIER_NOTIFICATION_MESSAGE:
+ if (((CallbackObject)msg.obj).mIndicator==ShimmerBluetooth.NOTIFICATION_SHIMMER_FULLY_INITIALIZED) {
+
+
+ successCount += 1;
+ ResultMap.put(currentIteration,1);
+ runOnUiThread(new Runnable() {
+ public void run() {
+ editTextSuccessCount.setText(String.valueOf(successCount));
+ }
+ });
+ Log.i(LOG_TAG, "Success Count: " + successCount);
+ btManager.disconnectShimmer(macAdd);
+ if (isTestStarted) {
+ timer = new Timer();
+ timer.schedule(new ConnectTask(), Integer.parseInt(editTextInterval.getText().toString()) * 1000);
+ }
+ }
+ break;
+ case ShimmerBluetooth.MSG_IDENTIFIER_DATA_PACKET:
+ if ((msg.obj instanceof ObjectCluster)) {
+
+ //Print data to Logcat
+ ObjectCluster objectCluster = (ObjectCluster) msg.obj;
+
+ //Retrieve all possible formats for the current sensor device:
+ Collection allFormats = objectCluster.getCollectionOfFormatClusters(Configuration.Shimmer3.ObjectClusterSensorName.TIMESTAMP);
+ FormatCluster timeStampCluster = ((FormatCluster)ObjectCluster.returnFormatCluster(allFormats,"CAL"));
+ double timeStampData = timeStampCluster.mData;
+ Log.i(LOG_TAG, "Time Stamp: " + timeStampData);
+ allFormats = objectCluster.getCollectionOfFormatClusters(Configuration.Shimmer3.ObjectClusterSensorName.ACCEL_LN_X);
+ FormatCluster accelXCluster = ((FormatCluster)ObjectCluster.returnFormatCluster(allFormats,"CAL"));
+ if (accelXCluster!=null) {
+ double accelXData = accelXCluster.mData;
+ Log.i(LOG_TAG, "Accel LN X: " + accelXData);
+ }
+ }
+ break;
+ case Shimmer.MESSAGE_TOAST:
+ /** Toast messages sent from {@link Shimmer} are received here. E.g. device xxxx now streaming.
+ * Note that display of these Toast messages is done automatically in the Handler in {@link com.shimmerresearch.android.shimmerService.ShimmerService} */
+ Toast.makeText(getApplicationContext(), msg.getData().getString(Shimmer.TOAST), Toast.LENGTH_SHORT).show();
+ break;
+ case ShimmerBluetooth.MSG_IDENTIFIER_STATE_CHANGE:
+ ShimmerBluetooth.BT_STATE state = null;
+ String macAddress = "";
+
+ if (msg.obj instanceof ObjectCluster) {
+ state = ((ObjectCluster) msg.obj).mState;
+ macAddress = ((ObjectCluster) msg.obj).getMacAddress();
+ } else if (msg.obj instanceof CallbackObject) {
+ state = ((CallbackObject) msg.obj).mState;
+ macAddress = ((CallbackObject) msg.obj).mBluetoothAddress;
+ }
+
+ switch (state) {
+ case CONNECTED:
+ editTextShimmerStatus.setText("CONNECTED");
+ editTextShimmerDeviceName.setText(((ObjectCluster) msg.obj).getShimmerName());
+ ResultMap.put(currentIteration,1);
+ break;
+ case CONNECTING:
+ editTextShimmerStatus.setText("CONNECTING");
+ break;
+ case STREAMING:
+ editTextShimmerStatus.setText("STREAMING");
+ break;
+ case STREAMING_AND_SDLOGGING:
+ editTextShimmerStatus.setText("STREAMING AND LOGGING");
+ break;
+ case SDLOGGING:
+ editTextShimmerStatus.setText("SDLOGGING");
+ break;
+ case DISCONNECTED:
+ editTextShimmerStatus.setText("DISCONNECTED");
+ if (ResultMap.get(currentIteration)==-1){
+ Log.i(LOG_TAG, "Disconnected State " + "Retry Count: " + Integer.toString(retryCount) + "; Total number of retries:" + totalRetries);
+ if (retryCount= totalIterationLimit) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ editTextInterval.setEnabled(true);
+ editTextTotalIteration.setEnabled(true);
+ }
+ });
+ timer.cancel();
+ isTestStarted = false;
+ return;
+ } else {
+ currentIteration += 1;
+ runOnUiThread(new Runnable() {
+ public void run() {
+ editTextTestProgress.setText(String.valueOf(currentIteration) + " of " + String.valueOf(totalIterationLimit));
+
+ }
+ });
+ //isCurrentIterationSuccess = false;
+ ResultMap.put(currentIteration,-1);
+ //shimmer = null;
+ //shimmer = new Shimmer(mHandler);
+ //shimmer.connect(macAdd, "default");
+ Log.i(LOG_TAG, "Connect Called, retry count: " + Integer.toString(retryCount) + "; Total number of retries:" + totalRetries);
+ Shimmer shimmer = new Shimmer(mHandler);
+ shimmer.setMacIdFromUart(macAdd);
+ btManager.removeShimmerDeviceBtConnected(macAdd);
+ btManager.putShimmerGlobalMap(macAdd, shimmer);
+ btManager.connectShimmerThroughBTAddress(macAdd);
+ }
+
+ }
+ }
+ }
+
+
+}
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable-v24/ic_launcher_foreground.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..c7bd21db
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable/ic_launcher_background.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..d5fccc53
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/layout/activity_main.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..b447199b
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/layout/activity_main.xml
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..a2f59082
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..1b523998
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..ff10afd6
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher_round.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..115a4c76
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..dcd3cd80
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..459ca609
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..8ca12fe0
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..8e19b410
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..b824ebdd
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..4c19a13c
Binary files /dev/null and b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/colors.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/colors.xml
new file mode 100644
index 00000000..3ab3e9cb
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #3F51B5
+ #303F9F
+ #FF4081
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/strings.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/strings.xml
new file mode 100644
index 00000000..93cbaa0a
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Shimmer Connection Test (BT Manager)
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/styles.xml b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/styles.xml
new file mode 100644
index 00000000..ff6c9d2c
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/test/java/com/shimmerresearch/shimmerconnectiontest/ExampleUnitTest.java b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/test/java/com/shimmerresearch/shimmerconnectiontest/ExampleUnitTest.java
new file mode 100644
index 00000000..ded76056
--- /dev/null
+++ b/ShimmerAndroidInstrumentDriver/shimmerConnectionTest/src/test/java/com/shimmerresearch/shimmerconnectiontest/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.shimmerresearch.shimmerconnectiontest;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() throws Exception {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file