package semtex.archery; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.List; import semtex.archery.data.DatabaseHelper; import semtex.archery.data.entities.*; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import com.j256.ormlite.android.apptools.OrmLiteBaseActivity; import com.j256.ormlite.dao.RuntimeExceptionDao; /** * @author semteX * */ public class StartParcour extends OrmLiteBaseActivity<DatabaseHelper> { public static final String TAG = String.class.getName(); private final List<User> selectedUsers = new LinkedList<User>(); @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.start_parcour); final StartParcour instance = this; final Button btnAdd = (Button)findViewById(R.id.btnAddParcour); btnAdd.setOnClickListener(new View.OnClickListener() { public void onClick(final View v) { final Dialog d = new Dialog(instance); d.setContentView(R.layout.parcour_add); d.setTitle("Add Parcour"); final Button btnSave = (Button)d.findViewById(R.id.btnSave); btnSave.setOnClickListener(new View.OnClickListener() { public void onClick(final View v) { final EditText et = (EditText)d.findViewById(R.id.txtParcour); final Parcour p = new Parcour(); p.setName(et.getText().toString()); p.setCreated(new Date()); getHelper().getParcourDao().create(p); d.dismiss(); fillParcours(); } }); d.show(); } }); fillUsers(); final ListView lv = (ListView)findViewById(R.id.lvUsersAddToParcour); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(final AdapterView<?> av, final View v, final int pos, final long id) { final User user = (User)lv.getAdapter().getItem(pos); final CheckBox checkBox = (CheckBox)v.findViewById(R.id.ckbUserSelected); if (checkBox.isChecked()) { selectedUsers.remove(user); checkBox.setChecked(false); } else { selectedUsers.add(user); checkBox.setChecked(true); } } }); lv.setItemsCanFocus(false); lv.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); final Button btnStart = (Button)findViewById(R.id.btnStart); btnStart.setOnClickListener(new View.OnClickListener() { public void onClick(final View v) { final Spinner sp = (Spinner)findViewById(R.id.spParcours); startNewParcourRound((Parcour)sp.getSelectedItem()); } }); fillParcours(); checkForOpenParcours(); } private void checkForOpenParcours() { final Visit visit = getHelper().getVisitDao().findLastOpenVisit(); if (visit != null) { final AlertDialog.Builder ad = new AlertDialog.Builder(this); ad.setMessage("Found unfinished visit from " + new SimpleDateFormat().format(visit.getBeginTime())); ad.setPositiveButton("Resume", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int which) { final Intent i = new Intent(getApplicationContext(), Scoring.class); startActivity(i); finish(); } }); ad.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int which) { finish(); } }); ad.setNegativeButton("Close", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int which) { visit.setEndTime(new Date()); getHelper().getVisitDao().update(visit); } }); ad.setCancelable(false); ad.show(); } // if visit != null } protected void startNewParcourRound(final Parcour parcour) { if (parcour == null) { Toast.makeText(getApplicationContext(), "Please select a parcour first!", Toast.LENGTH_SHORT).show(); return; } if (selectedUsers.size() == 0) { Toast.makeText(getApplicationContext(), "Select at least one participant!", Toast.LENGTH_SHORT).show(); return; } // find latest version Version v = getHelper().getVersionDao().findLatestVersion(parcour); if (v == null) { v = new Version(null, parcour); getHelper().getVersionDao().create(v); // Insert the first target final Target target = new Target(1, v); getHelper().getTargetDao().create(target); } // now let's create a visit final Visit visit = new Visit(new Date(), v); getHelper().getVisitDao().create(visit); // now let's add our fellow friends int rank = 0; for (final User user : selectedUsers) { final UserVisit uv = new UserVisit(user, visit, rank); getHelper().getUserVisitDao().create(uv); rank++; } final Intent i = new Intent(getApplicationContext(), Scoring.class); startActivity(i); finish(); } @Override protected void onResume() { super.onResume(); fillParcours(); fillUsers(); } private void fillUsers() { final RuntimeExceptionDao<User, Long> userDao = getHelper().getUserDao(); final List<User> users = userDao.queryForAll(); final ListView listView = (ListView)findViewById(R.id.lvUsersAddToParcour); final ArrayAdapter<User> adapter = new UserAdapter(this, R.layout.user_selection_row, users); listView.setAdapter(adapter); selectedUsers.clear(); } private void fillParcours() { final List<Parcour> parcours = getHelper().getParcourDao().queryForAll(); final Spinner sp = (Spinner)findViewById(R.id.spParcours); final ArrayAdapter<Parcour> adapter = new ArrayAdapter<Parcour>(this, android.R.layout.simple_spinner_dropdown_item, parcours); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp.setAdapter(adapter); } public class UserAdapter extends ArrayAdapter<User> { public UserAdapter(final Context context, final int textViewResourceId, final List<User> objects) { super(context, textViewResourceId, objects); } @Override public View getView(final int position, final View convertView, final ViewGroup parent) { View v = convertView; final User currentUser = getItem(position); if (v == null) { final LayoutInflater li = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); v = li.inflate(R.layout.user_selection_row, null); } final TextView userName = (TextView)v.findViewById(R.id.txtUsername); userName.setText(currentUser.getUserName()); final TextView mail = (TextView)v.findViewById(R.id.txtMail); mail.setText(currentUser.getMail()); final CheckBox cb = (CheckBox)v.findViewById(R.id.ckbUserSelected); cb.setChecked(selectedUsers.contains(currentUser)); final GradientDrawable gd = new GradientDrawable(Orientation.RIGHT_LEFT, new int[] { currentUser.getRgbColor() & 0x00FFFFFF | 0xAA000000, 0x0 }); v.setBackgroundDrawable(gd); return v; } } }