diff --git a/.idea/misc.xml b/.idea/misc.xml index 39638799269d0193201b39e5276d8236659f97fe..75dac502959ec4f6e5232282499067f85aa716f5 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ </value> </option> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/common/src/main/java/de/tudresden/inf/st/sensorsharing/common/Constants.java b/common/src/main/java/de/tudresden/inf/st/sensorsharing/common/Constants.java index 6387ae001403b0b9d9dfb4e850050ab9a5151f32..d816dd8cab25ce198796505d6aa397b8066557df 100644 --- a/common/src/main/java/de/tudresden/inf/st/sensorsharing/common/Constants.java +++ b/common/src/main/java/de/tudresden/inf/st/sensorsharing/common/Constants.java @@ -1,14 +1,24 @@ package de.tudresden.inf.st.sensorsharing.common; +import java.nio.charset.Charset; + public class Constants { public static final String BASE_KEY = "/wearable/sensors/"; public static final int BASE_KEY_LENGTH = BASE_KEY.length(); + public static final String SUB_KEY_BRIGHTNESS = "brightness"; public static final String KEY_BRIGHTNESS = BASE_KEY + SUB_KEY_BRIGHTNESS; + public static final String SUB_KEY_LINEAR_ACCELERATION = "acceleration"; public static final String KEY_LINEAR_ACCELERATION = BASE_KEY + SUB_KEY_LINEAR_ACCELERATION; + public static final String SUB_KEY_ROTATION_VECTOR = "rotation"; public static final String KEY_ROTATION_VECTOR = BASE_KEY + SUB_KEY_ROTATION_VECTOR; + public static final String SUB_KEY_NAME = "name"; + public static final String KEY_NAME = BASE_KEY + SUB_KEY_NAME; + + public static final Charset MQTT_CHARSET = Charset.forName("UTF-8"); + } diff --git a/mobile/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java b/mobile/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java index 0e8a96152c1fadfc6ebbbe2c1e8514fc6f8719d7..a1e40f929357246e2fde0e2062cd5aa3ac5245ae 100644 --- a/mobile/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java +++ b/mobile/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java @@ -5,6 +5,7 @@ import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; @@ -37,8 +38,10 @@ import java.util.Locale; import static de.tudresden.inf.st.sensorsharing.common.Constants.BASE_KEY; import static de.tudresden.inf.st.sensorsharing.common.Constants.BASE_KEY_LENGTH; +import static de.tudresden.inf.st.sensorsharing.common.Constants.MQTT_CHARSET; import static de.tudresden.inf.st.sensorsharing.common.Constants.SUB_KEY_BRIGHTNESS; import static de.tudresden.inf.st.sensorsharing.common.Constants.SUB_KEY_LINEAR_ACCELERATION; +import static de.tudresden.inf.st.sensorsharing.common.Constants.SUB_KEY_NAME; import static de.tudresden.inf.st.sensorsharing.common.Constants.SUB_KEY_ROTATION_VECTOR; public class MainActivity extends AppCompatActivity implements @@ -52,7 +55,6 @@ public class MainActivity extends AppCompatActivity implements private static final String MQTT_TOPIC_POLAR_ROTATION = MQTT_TOPIC_POLAR_BASE + "rotation"; private static final String MQTT_TOPIC_SAMSUNG = "sensors/samsung/brightness"; private static final int MQTT_DEFAULT_QOS = 0; - private static final Charset MQTT_CHARSET = Charset.forName("UTF-8"); /** Delay in milliseconds after which the wearable is assumed to be offline */ public static final int DELAY_WEARABLE_ASSUMED_OFFLINE = 30000; @@ -72,6 +74,8 @@ public class MainActivity extends AppCompatActivity implements System.setProperty("log.tag." + TAG, "INFO"); + setName(); + // setup sensor manager and light sensor mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); if (mSensorManager == null) { @@ -99,6 +103,11 @@ public class MainActivity extends AppCompatActivity implements handler.post(runnable); } + private void setName() { + TextView ownName = findViewById(R.id.value_own_name); + ownName.setText(Build.MODEL); + } + public void connectMqtt(View view) { // disconnect if there is a connected client if (mqttAndroidClient != null && mqttAndroidClient.isConnected()) { @@ -203,7 +212,7 @@ public class MainActivity extends AppCompatActivity implements final Date contactTime = new Date(); lastMessageFromWearable = contactTime.getTime(); final String updatedValue; - String topic; + String topic = null; final TextView textViewToUpdate; switch (path.substring(BASE_KEY_LENGTH)) { @@ -229,8 +238,13 @@ public class MainActivity extends AppCompatActivity implements textViewToUpdate = findViewById(R.id.value_wear_rotation); topic = MQTT_TOPIC_POLAR_ROTATION; break; + case SUB_KEY_NAME: + updatedValue = new String(messageEvent.getData(), MQTT_CHARSET); + textViewToUpdate = findViewById(R.id.value_wear_name); + break; default: - throw new IllegalArgumentException("Unknown path: " + path); + Log.w(TAG, "Unknown path: " + path); + return; } runOnUiThread(new Runnable() { @Override @@ -242,7 +256,9 @@ public class MainActivity extends AppCompatActivity implements } }); - sendUpdateOfWearable(topic, updatedValue); + if (topic != null) { + sendUpdateOfWearable(topic, updatedValue); + } } } diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index a3c2f712c9a9ab7d6bc6326e8722754eb7478d0a..98a00dc4d9b419c6427b6c54c69f846bf271e97a 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -6,6 +6,48 @@ android:layout_height="match_parent" tools:context="de.tudresden.inf.st.sensorsharing.MainActivity"> + <TextView + android:id="@+id/label_wear_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:text="@string/text_name" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/checkBox" /> + + <TextView + android:id="@+id/value_wear_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:text="@android:string/unknownName" + app:layout_constraintStart_toEndOf="@+id/label_wear_name" + app:layout_constraintTop_toBottomOf="@+id/checkBox" /> + + <TextView + android:id="@+id/label_own_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:text="@string/text_name" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/separator_own" /> + + <TextView + android:id="@+id/value_own_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:text="@android:string/unknownName" + app:layout_constraintStart_toEndOf="@+id/label_own_name" + app:layout_constraintTop_toBottomOf="@+id/separator_own" /> + <TextView android:id="@+id/separator_own" style="?android:attr/listSeparatorTextViewStyle" @@ -65,7 +107,7 @@ android:text="@string/text_own_brightness" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/separator_own" /> + app:layout_constraintTop_toBottomOf="@+id/label_own_name" /> <TextView android:id="@+id/label_wear_brightness" @@ -75,7 +117,7 @@ android:layout_marginTop="8dp" android:text="@string/text_wear_brightness" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/checkBox" /> + app:layout_constraintTop_toBottomOf="@+id/label_wear_name" /> <TextView android:id="@+id/label_wear_acceleration" @@ -105,7 +147,7 @@ android:layout_marginTop="8dp" android:text="@android:string/unknownName" app:layout_constraintStart_toEndOf="@+id/label_own_brightness" - app:layout_constraintTop_toBottomOf="@+id/separator_own" /> + app:layout_constraintTop_toBottomOf="@+id/label_own_name" /> <TextView android:id="@+id/value_wear_brightness" @@ -115,7 +157,7 @@ android:layout_marginTop="8dp" android:text="@android:string/unknownName" app:layout_constraintStart_toEndOf="@+id/label_wear_brightness" - app:layout_constraintTop_toBottomOf="@+id/checkBox" /> + app:layout_constraintTop_toBottomOf="@+id/label_wear_name" /> <TextView android:id="@+id/value_wear_acceleration" diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index 081b270ba0d08d638dcdedfe2afa2946397689cd..96cdfc471d6653babebdd44d33edc9898f1ea59c 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ <resources> <string name="app_name">SensorSharing</string> + <string name="text_name">Name</string> <string name="text_own_brightness">Own Brightness</string> <string name="text_wear_brightness">Wear Brightness</string> <string name="text_wear_acceleration">Wear Acceleration</string> diff --git a/wear/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java b/wear/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java index ec74faf0a94f15d88242507e1d328b7ff138466a..005e9cccf2cf2fb994ab516e298213e371a98ab4 100644 --- a/wear/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java +++ b/wear/src/main/java/de/tudresden/inf/st/sensorsharing/MainActivity.java @@ -5,6 +5,7 @@ import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.os.Build; import android.os.Bundle; import android.support.wearable.activity.WearableActivity; import android.util.Log; @@ -24,7 +25,9 @@ import java.util.Locale; import static de.tudresden.inf.st.sensorsharing.common.Constants.KEY_BRIGHTNESS; import static de.tudresden.inf.st.sensorsharing.common.Constants.KEY_LINEAR_ACCELERATION; +import static de.tudresden.inf.st.sensorsharing.common.Constants.KEY_NAME; import static de.tudresden.inf.st.sensorsharing.common.Constants.KEY_ROTATION_VECTOR; +import static de.tudresden.inf.st.sensorsharing.common.Constants.MQTT_CHARSET; public class MainActivity extends WearableActivity implements SensorEventListener { @@ -37,6 +40,7 @@ public class MainActivity extends WearableActivity implements SensorEventListene private float[] mLinearAccelerationValues; private Sensor mRotationVector; private float[] mRotationVectorValues; + private boolean sendName = true; @Override protected void onCreate(Bundle savedInstanceState) { @@ -132,6 +136,11 @@ public class MainActivity extends WearableActivity implements SensorEventListene final byte[] accelerationData = floatArray2ByteArray(mLinearAccelerationValues); final byte[] rotationData = floatArray2ByteArray(mRotationVectorValues); for (Node node : nodes) { + if (sendName) { + final byte[] nameData = Build.MODEL.getBytes(MQTT_CHARSET); + messageClient.sendMessage(node.getId(), KEY_NAME, nameData); + sendName = false; + } messageClient.sendMessage(node.getId(), KEY_BRIGHTNESS, brightnessData); messageClient.sendMessage(node.getId(), KEY_LINEAR_ACCELERATION, accelerationData); messageClient.sendMessage(node.getId(), KEY_ROTATION_VECTOR, rotationData);