From b58ff17dc178b04e9fba3dfc482acb91534b3429 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Wed, 23 May 2018 14:36:15 +0200 Subject: [PATCH] Add information about last contact to wearable. - uncheck connected after some delay --- .../inf/st/sensorsharing/MainActivity.java | 37 ++++++++++++++++--- mobile/src/main/res/layout/activity_main.xml | 12 +++++- 2 files changed, 42 insertions(+), 7 deletions(-) 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 7536b1a..0e8a961 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 @@ -6,6 +6,7 @@ import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.util.Log; @@ -20,7 +21,6 @@ import com.google.android.gms.wearable.MessageEvent; import com.google.android.gms.wearable.Wearable; import org.eclipse.paho.android.service.MqttAndroidClient; -import org.eclipse.paho.android.service.MqttService; import org.eclipse.paho.client.mqttv3.IMqttActionListener; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.IMqttToken; @@ -31,7 +31,9 @@ import org.eclipse.paho.client.mqttv3.MqttMessage; import java.nio.ByteBuffer; import java.nio.charset.Charset; -import java.util.Arrays; +import java.text.DateFormat; +import java.util.Date; +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; @@ -51,12 +53,17 @@ public class MainActivity extends AppCompatActivity implements 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; private SensorManager mSensorManager; private Sensor mLight; private TextView mValueWearBrightness; private MqttAndroidClient mqttAndroidClient; - private int counter = 0; + private int sensorChangedCounter = 0; + private long lastMessageFromWearable; + private DateFormat dateTimeFormat = DateFormat.getDateTimeInstance( + DateFormat.SHORT, android.icu.text.DateFormat.SHORT); @Override protected void onCreate(Bundle savedInstanceState) { @@ -76,6 +83,20 @@ public class MainActivity extends AppCompatActivity implements setChecked(false); connectMqtt(null); + + final Handler handler = new Handler(); + Runnable runnable = new Runnable() { + @Override + public void run() { + long now = System.currentTimeMillis(); + if (now - lastMessageFromWearable > DELAY_WEARABLE_ASSUMED_OFFLINE) { + setChecked(false); + } + // repeat after 30 seconds + handler.postDelayed(this, DELAY_WEARABLE_ASSUMED_OFFLINE); + } + }; + handler.post(runnable); } public void connectMqtt(View view) { @@ -148,9 +169,9 @@ public class MainActivity extends AppCompatActivity implements String stringValue = String.valueOf(lightValue); TextView textView = findViewById(R.id.value_own_brightness); textView.setText(stringValue); - if (++counter >= 5) { + if (++sensorChangedCounter >= 5) { // only send every 5th change - counter = 0; + sensorChangedCounter = 0; sendUpdateOfSmartphone(stringValue); } } @@ -175,10 +196,12 @@ public class MainActivity extends AppCompatActivity implements } @Override - public void onMessageReceived(@NonNull MessageEvent messageEvent) { + public void onMessageReceived(@NonNull final MessageEvent messageEvent) { String path = messageEvent.getPath(); if (path == null) return; if (path.startsWith(BASE_KEY)) { + final Date contactTime = new Date(); + lastMessageFromWearable = contactTime.getTime(); final String updatedValue; String topic; final TextView textViewToUpdate; @@ -213,6 +236,8 @@ public class MainActivity extends AppCompatActivity implements @Override public void run() { setChecked(true); + TextView lastContact = findViewById(R.id.value_last_contact); + lastContact.setText(dateTimeFormat.format(contactTime)); textViewToUpdate.setText(updatedValue); } diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index 5a1653c..a3c2f71 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -50,7 +50,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginTop="8dp" + android:layout_marginTop="24dp" android:text="@string/text_mqtt_server_uri" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -175,4 +175,14 @@ app:layout_constraintStart_toEndOf="@+id/value_server_uri" app:layout_constraintTop_toBottomOf="@+id/separator_mqtt" /> + <TextView + android:id="@+id/value_last_contact" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="16dp" + android:text="@android:string/unknownName" + app:layout_constraintStart_toEndOf="@+id/checkBox" + app:layout_constraintTop_toBottomOf="@+id/separator_wear" /> + </android.support.constraint.ConstraintLayout> -- GitLab