package edu.fordham.cis.wisdm.actipebble;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
/**
* Allows users to set their name and choose an activity to collect data for
* @author Andrew H. Johnston <a href="mailto:ajohnston9@fordham.edu">ajohnston9@fordham.edu</a>
* @version 1.0STABLE
*/
public class LoginActivity extends Activity {
/**
* The field for setting a user's name
*/
private EditText mName;
/**
* The button that takes a user to the training activity
*/
private Button mStartTraining;
/**
* The spinner for choosing an activity
*/
private Spinner mSpinner;
/**
* The map that maps a character to its activity name
*/
private static HashMap<String,Character> spinnerEntries = new HashMap<String, Character>();
/**
* A button to force data to be sent to an email
*/
private Button mForceDataSend;
//I know this is ugly, but it has to go *somewhere*
static {
spinnerEntries.put("Standard- Walking", 'A');
spinnerEntries.put("Standard- Jogging", 'B');
spinnerEntries.put("Standard- Stairs", 'C');
spinnerEntries.put("Standard- Sitting", 'D');
spinnerEntries.put("Standard- Standing", 'E');
spinnerEntries.put("Standard- Typing", 'F');
spinnerEntries.put("Standard- Brushing Teeth", 'G');
spinnerEntries.put("Eating- Soup/Cereal", 'H');
spinnerEntries.put("Eating- Fries/Chips", 'I');
spinnerEntries.put("Eating- Twirling Pasta", 'J');
spinnerEntries.put("Eating- Drinking Water", 'K');
spinnerEntries.put("Eating- Sandwich", 'L');
spinnerEntries.put("Sports- Ball Kicking", 'M');
spinnerEntries.put("Sports- Tennis", 'N');
spinnerEntries.put("Sports- Catch", 'O');
spinnerEntries.put("Sports- Dancing", 'P');
spinnerEntries.put("Sports- Curls", 'Q');
spinnerEntries.put("Sports- Shoulder Press", 'R');
spinnerEntries.put("Sports- Bouncing a Ball", 'S');
spinnerEntries.put("Sports- Bicycling", 'T');
spinnerEntries.put("Other- Reading", 'U');
spinnerEntries.put("Other- Writing", 'V');
spinnerEntries.put("Other- Clapping", 'W');
spinnerEntries.put("Other- Driving", 'X');
spinnerEntries.put("Other- Folding Clothes", 'Y');
spinnerEntries.put("Other- Writing (Whiteboard)", 'Z');
spinnerEntries.put("Other- Playing Guitar", '1');
spinnerEntries.put("Gait- Hemiplegic Gait", '2');
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mName = (EditText)findViewById(R.id.name);
mSpinner = (Spinner) findViewById(R.id.spinner);
final Object[] activities = spinnerEntries.keySet().toArray();
//sort() is called so the activities will be ordered by grouping (otherwise they'd be in a random order)
Arrays.sort(activities);
ArrayAdapter adapter =
new ArrayAdapter(this, android.R.layout.simple_spinner_item, activities);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
mForceDataSend = (Button) findViewById(R.id.pushDataButton);
mForceDataSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alert = new AlertDialog.Builder(LoginActivity.this);
alert.setTitle("Force send data");
alert.setMessage("Enter email to send data to: ");
final EditText input = new EditText(LoginActivity.this);
alert.setView(input);
alert.setPositiveButton("Send", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final String email = input.getText().toString();
//Do work in new thread so UI doesn't get clogged up
new Thread(new Runnable() {
@Override
public void run() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
GMailSender sender = new GMailSender(DataManagementService.EMAIL_SENDER, DataManagementService.EMAIL_PASSWORD);
ArrayList<File> files = new ArrayList<File>();
File[] dirfiles = getFilesDir().listFiles();
for (File file : dirfiles) {
if (!file.isDirectory() && file.getName().endsWith(".txt")) {
files.add(file);
}
}
File[] toSend = files.toArray(new File[files.size()]);
try {
sender.sendMail("Data dump from phone", "Attached are all files on phone", DataManagementService.EMAIL_SENDER, email, toSend);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
});
alert.setNegativeButton("Forget it", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
//Do nothing
}
});
alert.show();
}
});
mStartTraining = (Button)findViewById(R.id.login);
mStartTraining.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = mName.getText().toString().toLowerCase().trim().replace(" ", "_");
char activity = spinnerEntries.get(mSpinner.getSelectedItem());
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.putExtra("ACTIVITY", activity);
i.putExtra("ACTIVITY_NAME", mSpinner.getSelectedItem().toString());
i.putExtra("NAME", name);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}