198 lines
7.0 KiB
Java
198 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()) {
|
|
startHeartRateMonitor();
|
|
} else {
|
|
stopHeartRateMonitor();
|
|
}
|
|
}
|
|
});
|
|
|
|
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() {
|
|
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);
|
|
intent.setAction(HeartRateService.ACTION_STOP);
|
|
startService(intent);
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
}
|