package eu.liveandgov.sensorcollectorstandardui;
import eu.liveandgov.sensorcollectorstandardui.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends Activity {
private ToggleButton serviceToggleButton;
private ToggleButton recordingToggleButton;
private ProgressBar recordingProgressBar;
private Button transferButton;
private ProgressBar transferProgressBar;
private Spinner annotationSpinner;
private EditText annotationText;
private Button sendButton;
private TextView logTextView;
private BroadcastReceiver universalBroadcastReceiver;
private boolean isRunning, isRecording, isTransfering;
private boolean firstSel = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Prevent keyboard automatically popping up
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
// Setup Service Toggle Button
serviceToggleButton = (ToggleButton) findViewById(R.id.serviceToggleButton);
// Setup Recording Toggle Button
recordingToggleButton = (ToggleButton) findViewById(R.id.recordingToggleButton);
recordingToggleButton.setEnabled(false);
// Setup Recording Progress Bar
recordingProgressBar = (ProgressBar) findViewById(R.id.recordingProgressBar);
recordingProgressBar.setVisibility(View.INVISIBLE);
// Setup Transfer Button
transferButton = (Button) findViewById(R.id.transferButton);
transferButton.setEnabled(false);
// Setup Transfer Progress Bar
transferProgressBar = (ProgressBar) findViewById(R.id.transferProgressBar);
transferProgressBar.setVisibility(View.INVISIBLE);
// Setup Annotation Spinner
annotationSpinner = (Spinner) findViewById(R.id.annotationSpinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.movements_array,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
annotationSpinner.setAdapter(adapter);
annotationSpinner
.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
if (firstSel) {
firstSel = false;
return;
}
String annotation = annotationSpinner.getSelectedItem()
.toString();
sendAnnotation("Activity: " + annotation);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
annotationSpinner.setEnabled(false);
// Setup Annotation Text
annotationText = (EditText) findViewById(R.id.annotationText);
annotationText.setEnabled(false);
// Setup Send Button
sendButton = (Button) findViewById(R.id.sendButton);
sendButton.setEnabled(false);
// Setup Log Text View
logTextView = (TextView) findViewById(R.id.logTextView);
// logTextView.setSingleLine(false);
logTextView.setMovementMethod(new ScrollingMovementMethod());
// Setup Broadcast Receiver
universalBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(IntentConstants.ACTION_STATUS)) {
updateStates(intent.getBooleanExtra("running", false),
intent.getBooleanExtra("recording", false));
} else if (action.equals(IntentConstants.ACTION_LOG)) {
addLogEntry(intent.getStringExtra("message"));
}
}
};
getApplicationContext().registerReceiver(universalBroadcastReceiver,
new IntentFilter(IntentConstants.ACTION_STATUS));
getApplicationContext().registerReceiver(universalBroadcastReceiver,
new IntentFilter(IntentConstants.ACTION_LOG));
// Get current states
requestStatus();
}
@Override
protected void onResume() {
super.onResume();
// Get current states
requestStatus();
}
public void onServiceToggleButtonClick(View view) {
if (isRunning) {
Intent intent = new Intent(IntentConstants.ACTION_SERVICE_STOP);
getApplicationContext().startService(intent);
} else {
Intent intent = new Intent(IntentConstants.ACTION_SERVICE_START);
getApplicationContext().startService(intent);
}
}
public void onRecordingToggleButtonClick(View view) {
if (isRecording) {
Intent intent = new Intent(IntentConstants.ACTION_SAMPLING_DISABLE);
getApplicationContext().startService(intent);
intent = new Intent(IntentConstants.ACTION_SAMPLETRANSFER_TRIGGER);
getApplicationContext().startService(intent);
} else {
Intent intent = new Intent(IntentConstants.ACTION_SAMPLING_ENABLE);
getApplicationContext().startService(intent);
}
}
public void onTransferButtonClick(View view) {
Intent intent = new Intent(
IntentConstants.ACTION_SAMPLETRANSFER_TRIGGER);
getApplicationContext().startService(intent);
}
public void onSendButtonClick(View view) {
String annotation = annotationSpinner.getSelectedItem().toString();
sendAnnotation("Activity: " + annotation);
annotation = annotationText.getText().toString();
if (annotation != null && annotation.length() != 0) {
// store annotation text as tag sensor information
sendAnnotation(annotation);
}
}
private void sendAnnotation(String annotation) {
Intent intent = new Intent(IntentConstants.ACTION_ANNOTATE);
intent.putExtra("tag", annotation);
getApplicationContext().startService(intent);
}
private void requestStatus() {
Intent intent = new Intent(IntentConstants.ACTION_GET_STATUS);
getApplicationContext().startService(intent);
}
private void updateStates(boolean isRunning, boolean isRecording) {
this.isRunning = isRunning;
this.isRecording = isRecording;
updateButtons();
}
private void updateButtons() {
if (isRunning) {
recordingToggleButton.setEnabled(true);
serviceToggleButton.setChecked(true);
transferButton.setEnabled(true);
} else {
recordingToggleButton.setEnabled(false);
recordingProgressBar.setVisibility(View.INVISIBLE);
serviceToggleButton.setChecked(false);
transferButton.setEnabled(false);
annotationSpinner.setEnabled(false);
annotationText.setEnabled(false);
sendButton.setEnabled(false);
return;
}
if (isRecording) {
serviceToggleButton.setEnabled(false);
recordingToggleButton.setChecked(true);
annotationSpinner.setEnabled(true);
annotationText.setEnabled(true);
sendButton.setEnabled(true);
recordingProgressBar.setVisibility(View.VISIBLE);
} else {
serviceToggleButton.setEnabled(true);
recordingToggleButton.setChecked(false);
annotationSpinner.setEnabled(false);
annotationText.setEnabled(false);
sendButton.setEnabled(false);
recordingProgressBar.setVisibility(View.INVISIBLE);
}
if (isTransfering) {
transferProgressBar.setVisibility(View.VISIBLE);
} else {
transferProgressBar.setVisibility(View.INVISIBLE);
}
}
private void addLogEntry(String message) {
logTextView.append(message + "\n");
if (message.startsWith("TransferManagerImpl: Preparation started")
|| message
.startsWith("TransferManagerImpl: Transmission started")) {
isTransfering = true;
updateButtons();
} else if (message
.startsWith("TransferManagerImpl: Transmission ended")) {
isTransfering = false;
updateButtons();
}
// scroll to end
logTextView.setSelected(true);
Spannable textDisplayed = (Spannable) logTextView.getText();
Selection.setSelection(textDisplayed, textDisplayed.length());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
}