heartbeatapp/app/src/main/java/com/rubenvandeven/heartbeatstreamer/MainActivity.java

199 lines
7.0 KiB
Java
Raw Normal View History

2018-10-22 11:42:35 +02:00
package com.rubenvandeven.heartbeatstreamer;
2018-10-23 22:08:11 +02:00
import android.content.BroadcastReceiver;
import android.content.Context;
2018-10-22 11:42:35 +02:00
import android.content.Intent;
2018-10-23 22:08:11 +02:00
import android.content.IntentFilter;
2018-10-22 11:42:35 +02:00
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
2018-10-23 22:08:11 +02:00
import android.util.Log;
2018-10-30 15:39:54 +01:00
import android.view.View;
2018-10-23 22:08:11 +02:00
import android.widget.TextView;
import android.widget.Toast;
2018-10-22 11:42:35 +02:00
2018-10-23 22:08:11 +02:00
import com.rubenvandeven.heartbeatstreamer.heartrate.Activity_AsyncScanHeartRateSampler;
2018-10-22 11:42:35 +02:00
import com.rubenvandeven.heartbeatstreamer.heartrate.Activity_SearchUiHeartRateSampler;
2018-10-23 22:08:11 +02:00
import com.rubenvandeven.heartbeatstreamer.heartrate.HeartRateService;
2018-10-30 13:14:57 +01:00
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
2018-10-23 22:08:11 +02:00
import java.text.SimpleDateFormat;
import java.util.Date;
2018-10-22 11:42:35 +02:00
public class MainActivity extends AppCompatActivity {
2018-10-23 22:08:11 +02:00
private final String TAG = MainActivity.class.getSimpleName();
private TextView statusLabel;
2018-10-30 15:39:54 +01:00
private TextView serviceButton;
private TextView beatStatus;
2018-10-23 22:08:11 +02:00
2018-10-22 11:42:35 +02:00
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
2018-10-23 22:08:11 +02:00
statusLabel = findViewById(R.id.status_msg);
2018-10-30 15:39:54 +01:00
serviceButton = findViewById(R.id.service_button);
beatStatus = findViewById(R.id.beat_status);
// View.OnClickListener listener = new On;
serviceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
serviceButton.setEnabled(false);
if(HeartRateService.isRunning()) {
stopHeartRateMonitor();
2018-11-13 11:49:28 +01:00
} else {
startHeartRateMonitor();
2018-10-30 15:39:54 +01:00
}
}
});
2018-10-23 22:08:11 +02:00
setup();
startHeartRateMonitor();
}
@Override
protected void onResume() {
super.onResume();
setup();
}
public void setup() {
if (HeartRateService.isRunning()) {
statusLabel.setText("Running");
2018-10-30 15:39:54 +01:00
updateServiceButton(true);
2018-10-23 22:08:11 +02:00
} else {
statusLabel.setText("Stopped");
2018-10-30 15:39:54 +01:00
updateServiceButton(false);
2018-10-23 22:08:11 +02:00
}
registerBroadcastReceiver();
}
public void startHeartRateMonitor() {
2018-11-13 11:49:28 +01:00
Log.d(TAG, "Start HR");
2018-10-23 22:08:11 +02:00
if(HeartRateService.isRunning()) {
Toast.makeText(this, "Already running", Toast.LENGTH_LONG);
} else {
Intent intent = new Intent(MainActivity.this, HeartRateService.class);
2018-10-30 15:39:54 +01:00
intent.setAction(HeartRateService.ACTION_START);
2018-10-23 22:08:11 +02:00
startService(intent);
}
}
2018-10-30 15:39:54 +01:00
public void updateServiceButton(boolean running) {
if(running) {
serviceButton.setText(R.string.service_stop);
} else {
serviceButton.setText(R.string.service_start);
}
serviceButton.setEnabled(true);
}
2018-10-23 22:08:11 +02:00
public void stopHeartRateMonitor() {
// stop tracking
2018-11-13 11:49:28 +01:00
// Intent intent = new Intent(MainActivity.this, HeartRateService.class);
Log.d(TAG, "Stop HR");
stopService(new Intent(this, HeartRateService.class));
2018-10-23 22:08:11 +02:00
}
/**
* Register broadcast receiver for synchronization
* and tracking status updates
*/
private void registerBroadcastReceiver() {
Log.d(TAG, "register broadcastreceiver");
IntentFilter filter = new IntentFilter();
filter.addAction(HeartRateService.BROADCAST_MONITOR_CONNECTED);
filter.addAction(HeartRateService.BROADCAST_MONITOR_DISCONNECTED);
filter.addAction(HeartRateService.BROADCAST_MONITOR_UPDATE);
filter.addAction(HeartRateService.BROADCAST_MONITOR_UNKNOWN);
filter.addAction(HeartRateService.BROADCAST_SOCKET_SENT);
2018-10-30 15:39:54 +01:00
filter.addAction(HeartRateService.BROADCAST_SERVICE_START);
filter.addAction(HeartRateService.BROADCAST_SERVICE_STOPPED);
filter.addAction(HeartRateService.BROADCAST_BEAT);
filter.addAction(HeartRateService.BROADCAST_MONITOR_CONNECT_ATTEMPT);
filter.addAction(HeartRateService.BROADCAST_MONITOR_CONNECT_RESULT);
2018-10-23 22:08:11 +02:00
registerReceiver(mBroadcastReceiver, filter);
}
2018-10-22 11:42:35 +02:00
2018-10-23 22:08:11 +02:00
/**
* On pause
*/
@Override
protected void onPause() {
unregisterReceiver(mBroadcastReceiver);
// if (db != null) {
// db.close();
// }
super.onPause();
2018-10-22 11:42:35 +02:00
}
2018-10-23 22:08:11 +02:00
/**
* Broadcast receiver
*/
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "[broadcast received " + intent + "]");
if (intent == null || intent.getAction() == null) {
return;
}
switch (intent.getAction()) {
2018-10-30 15:39:54 +01:00
case HeartRateService.BROADCAST_SERVICE_START:
statusLabel.setText("Started");
updateServiceButton(true);
break;
case HeartRateService.BROADCAST_SERVICE_STOPPED:
statusLabel.setText("Service Stopped");
updateServiceButton(false);
break;
2018-10-23 22:08:11 +02:00
case HeartRateService.BROADCAST_MONITOR_CONNECTED:
2018-10-30 15:39:54 +01:00
statusLabel.setText("Connected");
2018-10-23 22:08:11 +02:00
break;
case HeartRateService.BROADCAST_MONITOR_DISCONNECTED:
2018-10-30 15:39:54 +01:00
statusLabel.setText("Disconnected");
2018-10-23 22:08:11 +02:00
break;
case HeartRateService.BROADCAST_MONITOR_UPDATE:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
statusLabel.setText("Last update: %s".format(currentDateandTime));
break;
case HeartRateService.BROADCAST_SOCKET_SENT:
String msg = intent.getStringExtra("msg");
statusLabel.setText("Last msg: %s".format(msg));
break;
2018-10-30 15:39:54 +01:00
case HeartRateService.BROADCAST_MONITOR_UNKNOWN:
int status = intent.getIntExtra("status", -1);
statusLabel.setText("Unknown state: %s".format(String.valueOf(status)));
break;
case HeartRateService.BROADCAST_BEAT:
String rate = intent.getStringExtra("rate");
String count = intent.getStringExtra("count");
String time = intent.getStringExtra("time");
Log.d(TAG, "Beat: " + rate);
beatStatus.setText(rate + " bpm / " + count + " beats / "+time + " s");
break;
case HeartRateService.BROADCAST_MONITOR_CONNECT_ATTEMPT:
beatStatus.setText("Attempting connection to monitor");
break;
case HeartRateService.BROADCAST_MONITOR_CONNECT_RESULT:
String connectMsg = intent.getStringExtra("msg");
beatStatus.setText("Connection: %s".format(connectMsg ));
break;
2018-10-23 22:08:11 +02:00
}
}
};
2018-10-30 13:14:57 +01:00
2018-10-22 11:42:35 +02:00
}