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);
}
}