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; } } }; }