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

199 lines
7.0 KiB
Java

package com.rubenvandeven.heartbeatstreamer;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.rubenvandeven.heartbeatstreamer.heartrate.Activity_AsyncScanHeartRateSampler;
import com.rubenvandeven.heartbeatstreamer.heartrate.Activity_SearchUiHeartRateSampler;
import com.rubenvandeven.heartbeatstreamer.heartrate.HeartRateService;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private final String TAG = MainActivity.class.getSimpleName();
private TextView statusLabel;
private TextView serviceButton;
private TextView beatStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
statusLabel = findViewById(R.id.status_msg);
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();
} else {
startHeartRateMonitor();
}
}
});
setup();
startHeartRateMonitor();
}
@Override
protected void onResume() {
super.onResume();
setup();
}
public void setup() {
if (HeartRateService.isRunning()) {
statusLabel.setText("Running");
updateServiceButton(true);
} else {
statusLabel.setText("Stopped");
updateServiceButton(false);
}
registerBroadcastReceiver();
}
public void startHeartRateMonitor() {
Log.d(TAG, "Start HR");
if(HeartRateService.isRunning()) {
Toast.makeText(this, "Already running", Toast.LENGTH_LONG);
} else {
Intent intent = new Intent(MainActivity.this, HeartRateService.class);
intent.setAction(HeartRateService.ACTION_START);
startService(intent);
}
}
public void updateServiceButton(boolean running) {
if(running) {
serviceButton.setText(R.string.service_stop);
} else {
serviceButton.setText(R.string.service_start);
}
serviceButton.setEnabled(true);
}
public void stopHeartRateMonitor() {
// stop tracking
// Intent intent = new Intent(MainActivity.this, HeartRateService.class);
Log.d(TAG, "Stop HR");
stopService(new Intent(this, HeartRateService.class));
}
/**
* 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);
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);
registerReceiver(mBroadcastReceiver, filter);
}
/**
* On pause
*/
@Override
protected void onPause() {
unregisterReceiver(mBroadcastReceiver);
// if (db != null) {
// db.close();
// }
super.onPause();
}
/**
* 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()) {
case HeartRateService.BROADCAST_SERVICE_START:
statusLabel.setText("Started");
updateServiceButton(true);
break;
case HeartRateService.BROADCAST_SERVICE_STOPPED:
statusLabel.setText("Service Stopped");
updateServiceButton(false);
break;
case HeartRateService.BROADCAST_MONITOR_CONNECTED:
statusLabel.setText("Connected");
break;
case HeartRateService.BROADCAST_MONITOR_DISCONNECTED:
statusLabel.setText("Disconnected");
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;
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;
}
}
};
}