package org.spin.gaitlib.gaitlibdemo.beat; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ListView; import android.widget.Switch; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends Activity { public static final String GAIT_CLASSIFICATION = "org.spin.gaitlib.gaitlibdemo.gaitClassification"; private final GaitAnalysisServiceReceiver receiver = new GaitAnalysisServiceReceiver(); private Intent gaitAnalysisReceiver; private Intent gaitSoundService; private TextView text_cadence, text_gait, text_status; private Switch soundSwitch; private Switch gaitClassificationSwitch; public float cadence; public String gait; private final ArrayList<String> gaits = new ArrayList<String>(); private ArrayAdapter<String> gaitListAdapter; private final boolean startGaitSoundOnStart = true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text_cadence = (TextView) findViewById(R.id.cadenceTextView); text_gait = (TextView) findViewById(R.id.gaitTextView); text_status = (TextView) findViewById(R.id.statusTextView); soundSwitch = (Switch) findViewById(R.id.soundSwitch); gaitClassificationSwitch = (Switch) findViewById(R.id.gaitClassificationSwitch); ListView gaitListView = (ListView) findViewById(R.id.gaitListView); gaitListAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, gaits); gaitListView.setAdapter(gaitListAdapter); gaitAnalysisReceiver = new Intent(this, GaitAnalysisService.class); startService(gaitAnalysisReceiver); gaitSoundService = new Intent(this, GaitSoundService.class); gaitSoundService.putExtra(GAIT_CLASSIFICATION, false); soundSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { startSoundService(); } else { stopService(gaitSoundService); } } }); if (startGaitSoundOnStart) { soundSwitch.setChecked(true); startSoundService(); } gaitClassificationSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (soundSwitch.isChecked()) { startSoundService(); } } }); } private void startSoundService() { stopService(gaitSoundService); gaitSoundService.removeExtra(GAIT_CLASSIFICATION); gaitSoundService.putExtra(GAIT_CLASSIFICATION, gaitClassificationSwitch.isChecked()); startService(gaitSoundService); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override protected void onResume() { IntentFilter gaitUpdateFilter = new IntentFilter( GaitAnalysisService.GAIT_UPDATE); registerReceiver(receiver, gaitUpdateFilter); IntentFilter gaitLibStatusUpdateFilter = new IntentFilter( GaitAnalysisService.GAITLIB_STATUS_UPDATE); registerReceiver(receiver, gaitLibStatusUpdateFilter); super.onResume(); } @Override protected void onPause() { unregisterReceiver(receiver); super.onPause(); } @Override protected void onDestroy() { stopService(gaitAnalysisReceiver); stopService(gaitSoundService); super.onDestroy(); } public class GaitAnalysisServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action == null) { return; } if (GaitAnalysisService.GAIT_UPDATE.equals(action)) { cadence = intent.getFloatExtra(GaitAnalysisService.CADENCE, 0); gait = intent.getStringExtra(GaitAnalysisService.GAIT); text_cadence.setText(String.format("%.1f", cadence)); text_gait.setText(gait); if (gait != null && cadence > 0) { gaits.add(0, gait); gaitListAdapter.notifyDataSetChanged(); } } else if (GaitAnalysisService.GAITLIB_STATUS_UPDATE.equals(action)) { String message = intent .getStringExtra(GaitAnalysisService.GAITLIB_STATUS_MESSAGE); text_status.setText(message); } } } }