package se.dat255.grupp12; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.Fragment; import android.support.v4.app.NavUtils; import android.text.method.ScrollingMovementMethod; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import java.util.Calendar; import java.util.Locale; /** * Created by David on 10/2/13. */ public class DetailedViewActivity extends FragmentActivity implements AdapterView.OnItemSelectedListener{ private Task task; private int index; private int listid; private EditText editTitle; private EditText editContent; private Button button; private TextView deadlineText; private Spinner spinner; public DetailedViewActivity(){ } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.detailed_view); getActionBar().setDisplayHomeAsUpEnabled(true); Intent intent = getIntent(); task = (Task) intent.getSerializableExtra("task"); index = intent.getIntExtra("index", 1); listid = intent.getIntExtra("listid",0); TextView title = (TextView) findViewById(R.id.title); TextView content = (TextView) findViewById(R.id.content); title.setText(task.getTitle()); getActionBar().setDisplayShowTitleEnabled(false); editTitle = (EditText) findViewById(R.id.title); editTitle.setSingleLine(true); TextView description = (TextView) findViewById(R.id.content); description.setText(task.getContent()); description.setMovementMethod(new ScrollingMovementMethod()); editContent = (EditText) findViewById(R.id.content); editContent.setSingleLine(false); editContent.setHint("Description"); editTitle.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { if(textView.getText().toString().length()>0){ String from = task.getTitle(); String title = textView.getText().toString(); task.setTitle(title); Modification.logTaskEdit(task.getId(), listid, new Modification.Change(Modification.Change.TYPE_TITLE, from, title)); } return false; } }); editContent.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { if(textView.getText().toString().length()>0){ String from = task.getContent(); String content = textView.getText().toString(); task.setContent(content); TextView description = (TextView) findViewById(R.id.content); description.setText(content); Modification.logTaskEdit(task.getId(), listid, new Modification.Change(Modification.Change.TYPE_CONTENT, from, content)); } return false; } }); // Setup the priority spinner spinner = (Spinner) findViewById(R.id.set_prio_spinner); ArrayAdapter<CharSequence> prioAdapter = ArrayAdapter.createFromResource(this, R.array.prio_names, android.R.layout.simple_spinner_item); prioAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(prioAdapter); spinner.setSelection(getIndexFromPrio(task.getPriority())); spinner.setOnItemSelectedListener(this); //Show the current deadline setDeadlineText(); } /** * Called when the pick date button is clicked and shows the date picker * @param view the view in which the date picker will be shown */ public void showDatePickerDialog(View view) { DeadlinePickerFragment newFragment = new DeadlinePickerFragment(task,listid,this); newFragment.show(getSupportFragmentManager(), "datePicker"); } /** * Responds to the hardware back key being pressed */ @Override public void onBackPressed() { finishActivity(); } /** * Updates the label displaying the date. Also formats the date to a correct looking string */ public void setDeadlineText(){ deadlineText = (TextView) findViewById(R.id.deadline_text); if(task.getDate()!=null && deadlineText != null){ Calendar c = task.getDate(); String end = "th"; int day = c.get(c.DAY_OF_MONTH); switch (day){ case 1: end = "st"; break; case 2: end = "nd"; break; case 3: end = "rd"; break; case 21: end = "st"; break; case 22: end = "nd"; break; case 23: end = "rd"; break; } deadlineText.setText(c.getDisplayName(c.MONTH, Calendar.SHORT, Locale.getDefault()) + " " +c.get(Calendar.DAY_OF_MONTH) +end + " " + c.get(Calendar.YEAR)); } } /** * Called when an item in the spinner is selected. The corresponding prio is then * set to the current task. * @param adapterView the adapterview contained within the spinner * @param view the spinner itself * @param i the index in the adapterview * @param l not used */ @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { String prioString = adapterView.getItemAtPosition(i).toString(); String lastPrio = task.getPriority().toString(); if(prioString.equals("High")){ task.setPriority(Task.Priority.HIGH); }else if(prioString.equals("Medium")){ task.setPriority(Task.Priority.MEDIUM); }else{ task.setPriority(Task.Priority.LOW); } Modification.logTaskEdit(task.getId(), listid, new Modification.Change(Modification.Change.TYPE_PRIO, lastPrio, task.getPriority().toString())); } /** * Called when the up navigation button in the actionbar is pressed which finishes * the current activity. * @param item the button pressed i the actionbar * @return if succeded */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: this.finishActivity(); break; case R.id.done_button: this.finishActivity(); break; } return super.onOptionsItemSelected(item); } @Override public void onNothingSelected(AdapterView<?> adapterView) { ; } /** * Converts a priority enum into an index in order to display them in correct order * @param prio the priority enum * @return the corresponding index */ public int getIndexFromPrio(Task.Priority prio){ if(prio.equals(Task.Priority.HIGH)){ return 0; }else if(prio.equals(Task.Priority.MEDIUM)){ return 1; }else{ return 2; } } /** * Returns an intent to the parent activity. In this case the intent is filled with * relevant info so that the parent activity can make use of changes made in this activity */ public void finishActivity(){ TextView view = (TextView) getCurrentFocus(); if(view.getId()==R.id.title){ editTitle.onEditorAction(0); }else{ editContent.onEditorAction(0); } Intent resultData = new Intent(); resultData.putExtra("task", task); resultData.putExtra("index", index); setResult(Activity.RESULT_OK, resultData); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.detailed_view_menu, menu); return super.onCreateOptionsMenu(menu); } }