You are on page 1of 19

Panji Purwanto / 1104101080

package course.labs.todomanager; import import import import import import import import import import import import import import import import import import import import import import import import import import import import import import import import import java.io.BufferedReader; java.io.BufferedWriter; java.io.FileInputStream; java.io.FileNotFoundException; java.io.FileOutputStream; java.io.IOException; java.io.InputStreamReader; java.io.OutputStreamWriter; java.io.PrintWriter; java.text.ParseException; java.util.Date; java.util.zip.Inflater; android.app.AlertDialog; android.app.AlertDialog.Builder; android.app.ListActivity; android.content.Context; android.content.ContextWrapper; android.content.DialogInterface; android.content.Intent; android.os.Bundle; android.util.Log; android.view.LayoutInflater; android.view.Menu; android.view.MenuItem; android.view.View; android.view.View.OnClickListener; android.widget.AdapterView; android.widget.AdapterView.OnItemClickListener; android.widget.AdapterView.OnItemLongClickListener; android.widget.ListView; android.widget.TextView; course.labs.todomanager.ToDoItem.Priority; course.labs.todomanager.ToDoItem.Status;

public class ToDoManagerActivity extends ListActivity { // Add a ToDoItem Request Code private static final int ADD_TODO_ITEM_REQUEST = 0; private static final String FILE_NAME = "TodoManagerActivityData.txt"; private static final String TAG = "Lab-UserInterface"; // IDs for menu items private static final int MENU_DELETE = Menu.FIRST; private static final int MENU_DUMP = Menu.FIRST + 1; static ToDoListAdapter mAdapter; ListView lv;

@Override public void onCreate(Bundle savedInstanceState ) { super.onCreate(savedInstanceState); // Create a new TodoListAdapter for this ListActivity's ListView mAdapter = new ToDoListAdapter(getApplicationContext()); // Put divider between ToDoItems and FooterView getListView().setFooterDividersEnabled(true); //TODO - Inflate footerView for footer_view.xml file View footerView = getLayoutInflater().inflate(R.layout.footer_view, null); //TODO - Add footerView to ListView getListView().addFooterView(footerView); footerView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { log("Entered footerView.OnClickListener.onClick()" ); //TODO - Attach Listener to FooterView. Implement onClick(). startActivityForResult(new Intent(v.getContext(),AddToDoActivity.class),1); } }); //TODO - Attach the adapter to this ListActivity's ListView setListAdapter(mAdapter); } public void removelist(final int position){ mAdapter.remove(position); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { log("Entered onActivityResult()" ); // TODO - Check result code and request code. // If user submitted a new ToDoItem // Create a new ToDoItem from the data Intent // and then add it to the adapter Log.i(TAG,resultCode+""); if(resultCode==-1){ mAdapter.add(new ToDoItem(data)); saveItems(); } } // Do not modify below here @Override

public void onResume() { super.onResume(); // Load saved ToDoItems, if necessary if (mAdapter.getCount() == 0) loadItems(); } @Override protected void onPause() { super.onPause(); // Save ToDoItems saveItems(); } @Override public boolean onCreateOptionsMenu (Menu menu) { super.onCreateOptionsMenu(menu); menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete all"); menu.add(Menu.NONE, MENU_DUMP, Menu.NONE, "Dump to log"); return true; } @Override public boolean onOptionsItemSelected (MenuItem item) { switch (item.getItemId()) { case MENU_DELETE: mAdapter.clear(); return true; case MENU_DUMP: dump(); return true; default: return super.onOptionsItemSelected(item); } } private void dump() { for (int i = 0; i < mAdapter.getCount(); i++) { String data = ((ToDoItem) mAdapter.getItem(i)).toLog(); log("Item " + i + ": " + data.replace(ToDoItem.ITEM_SEP, ",")); } } // Load stored ToDoItems private void loadItems() { BufferedReader reader = null; try {

FileInputStream fis = openFileInput(FILE_NAME); reader = new BufferedReader(new InputStreamReader(fis)); String title = null; String priority = null; String status = null; Date date = null; while (null != (title = reader.readLine())) { priority = reader.readLine(); status = reader.readLine(); date = ToDoItem.FORMAT.parse(reader.readLine()); mAdapter.add(new ToDoItem(title, Priority.valueOf(priority), Status.valueOf(status), date)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } finally { if (null != reader) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } // Save ToDoItems to file private void saveItems() { PrintWriter writer = null; try { FileOutputStream fos =openFileOutput(FILE_NAME, MODE_PRIVATE); writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter( fos))); for (int idx = 0; idx < mAdapter.getCount(); idx++) { writer.println(mAdapter.getItem(idx)); } } catch (IOException e) { e.printStackTrace(); } finally { if (null != writer) { writer.close(); } } }

private void log(String msg) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG, msg); } }

package course.labs.todomanager; import java.util.Calendar; import java.util.Date; import import import import import import import import import import import import import import import import import import import android.app.Activity; android.app.DatePickerDialog; android.app.Dialog; android.app.DialogFragment; android.app.TimePickerDialog; android.content.Intent; android.os.Bundle; android.util.Log; android.view.View; android.view.View.OnClickListener; android.widget.Button; android.widget.DatePicker; android.widget.EditText; android.widget.RadioButton; android.widget.RadioGroup; android.widget.TextView; android.widget.TimePicker; course.labs.todomanager.ToDoItem.Priority; course.labs.todomanager.ToDoItem.Status;

public class AddToDoActivity extends Activity { // 7 days in milliseconds - 7 * 24 * 60 * 60 * 1000 private static final int SEVEN_DAYS = 604800000; private static final String TAG = "Lab-UserInterface";

private private private private

static static static static

String timeString ; String dateString ; TextView dateView ; TextView timeView ;

private private private private private private

Date mDate; RadioGroup mPriorityRadioGroup ; RadioGroup mStatusRadioGroup ; EditText mTitleText ; RadioButton mDefaultStatusButton ; RadioButton mDefaultPriorityButton ;

@Override protected void onCreate(Bundle savedInstanceState ) { super.onCreate(savedInstanceState); setContentView(R.layout.add_todo); mTitleText = (EditText) findViewById(R.id.title); mDefaultStatusButton = (RadioButton) findViewById(R.id.statusNotDone); mDefaultPriorityButton = (RadioButton) findViewById(R.id.medPriority); mPriorityRadioGroup = (RadioGroup) findViewById(R.id.priorityGroup); mStatusRadioGroup = (RadioGroup) findViewById(R.id.statusGroup); dateView = (TextView) findViewById(R.id.date); timeView = (TextView) findViewById(R.id.time); // Set the default date and time setDefaultDateTime(); // OnClickListener for the Date button, calls showDatePickerDialog() to show // the Date dialog final Button datePickerButton = (Button) findViewById(R.id.date_picker_button); datePickerButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showDatePickerDialog(); } }); // OnClickListener for the Time button, calls showTimePickerDialog() to show // the Time Dialog final Button timePickerButton = (Button) findViewById(R.id.time_picker_button); timePickerButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showTimePickerDialog(); }

}); // OnClickListener for the Cancel Button, final Button cancelButton = (Button) findViewById(R.id.cancelButton); cancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { log("Entered cancelButton.OnClickListener.onClick()" ); finish(); //TODO - Implement onClick(). } }); //OnClickListener for the Reset Button final Button resetButton = (Button) findViewById(R.id.resetButton); resetButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { log("Entered resetButton.OnClickListener.onClick()" ); //TODO - Reset data fields to default values mTitleText.setText(""); mDefaultStatusButton.setChecked(true); mDefaultPriorityButton.setChecked(true); //mPriorityRadioGroup.setSelected(true); //mStatusRadioGroup setDefaultDateTime();

} }); // OnClickListener for the Submit Button // Implement onClick(). final Button submitButton = (Button) findViewById(R.id.submitButton); submitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { log("Entered submitButton.OnClickListener.onClick()" ); // Gather ToDoItem data

//TODO - Get Priority Priority priority = getPriority(); //TODO - Get Status Status status = getStatus();

//TODO - Title String titleString = mTitleText.getText().toString(); // Date String fullDate = dateString + " " + timeString; // Package ToDoItem data into an Intent Intent data = new Intent(); ToDoItem.packageIntent(data, titleString, priority, status, fullDate); //TODO - return data Intent and finish setResult(RESULT_OK, data); finish();

} }); } // Do not modify below here // Use this method to set the default date and time private void setDefaultDateTime() { // Default is current time + 7 days mDate = new Date(); mDate = new Date(mDate.getTime() + SEVEN_DAYS); Calendar c = Calendar.getInstance(); c.setTime(mDate); setDateString(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); dateView.setText(dateString); setTimeString(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.MILLISECOND)); timeView.setText(timeString); } private static void setDateString (int year, int monthOfYear, int dayOfMonth) { // Increment monthOfYear for Calendar/Date -> Time Format setting monthOfYear++; String mon = "" + monthOfYear; String day = "" + dayOfMonth; if (monthOfYear < 10) mon = "0" + monthOfYear; if (dayOfMonth < 10)

day = "0" + dayOfMonth; dateString = year + "-" + mon + "-" + day; } private static void setTimeString (int hourOfDay, int minute, int mili) { String hour = "" + hourOfDay; String min = "" + minute; if (hourOfDay < 10) hour = "0" + hourOfDay; if (minute < 10) min = "0" + minute; timeString = hour + ":" + min + ":00"; } private Priority getPriority () { switch (mPriorityRadioGroup.getCheckedRadioButtonId()) { case R.id.lowPriority: { return Priority.LOW; } case R.id.highPriority: { return Priority.HIGH; } default: { return Priority.MED; } } } private Status getStatus () { switch (mStatusRadioGroup.getCheckedRadioButtonId()) { case R.id.statusDone: { return Status.DONE; } default: { return Status.NOTDONE; } } } // DialogFragment used to pick a ToDoItem deadline date public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog (Bundle savedInstanceState) { // Use the current date as the default date in the picker final Calendar c = Calendar.getInstance();

int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); // Create a new instance of DatePickerDialog and return it return new DatePickerDialog(getActivity(), this, year, month, day); } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { setDateString(year, monthOfYear, dayOfMonth); dateView.setText(dateString); } } // DialogFragment used to pick a ToDoItem deadline time public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog (Bundle savedInstanceState) { // Use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return return new TimePickerDialog(getActivity(), this, hour, minute, true); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { setTimeString(hourOfDay, minute, 0); timeView.setText(timeString); } } private void showDatePickerDialog () { DialogFragment newFragment = new DatePickerFragment(); newFragment.show(getFragmentManager(), "datePicker"); } private void showTimePickerDialog () { DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getFragmentManager(), "timePicker"); } private void log(String msg) { try {

Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG, msg); } }

package course.labs.todomanager; import java.util.ArrayList; import java.util.List; import java.util.zip.Inflater; import import import import import import import import import import import import import import import android.app.AlertDialog; android.app.AlertDialog.Builder; android.content.Context; android.content.DialogInterface; android.util.Log; android.view.LayoutInflater; android.view.View; android.view.ViewGroup; android.widget.BaseAdapter; android.widget.CheckBox; android.widget.CompoundButton; android.widget.CompoundButton.OnCheckedChangeListener; android.widget.RelativeLayout; android.widget.TextView; course.labs.todomanager.ToDoItem.Status;

public class ToDoListAdapter extends BaseAdapter { // List of ToDoItems private final List<ToDoItem> mItems = new ArrayList<ToDoItem>(); private final Context mContext ; private static final String TAG = "Lab-UserInterface";

public ToDoListAdapter(Context context) { mContext = context; } // Add a ToDoItem to the adapter // Notify observers that the data set has changed public void add(ToDoItem item) { mItems.add(item); notifyDataSetChanged(); }

public void remove(int x){ mItems.remove(x); notifyDataSetChanged(); } // Clears the list adapter of all items. public void clear(){ mItems.clear(); notifyDataSetChanged(); } // Returns the number of ToDoItems @Override public int getCount() { return mItems.size(); } // Retrieve the number of ToDoItems @Override public Object getItem(int pos) { return mItems.get(pos); } // Get the ID for the ToDoItem // In this case it's just the position @Override public long getItemId(int pos) { return pos;

} //Create a View to display the ToDoItem // at specified position in mItems @Override public View getView(int position, View convertView, ViewGroup parent) {

//TODO - Get the current ToDoItem final ToDoItem toDoItem = (ToDoItem) getItem(position); //TODO - Inflate the View for this ToDoItem // from todo_item.xml. LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemLayout = inflater.inflate(R.layout.todo_item,null); //TODO - Fill in specific ToDoItem data // Remember that the data that goes in this View // corresponds to the user interface elements defined // in the layout file final int pos = position; final String name=toDoItem.getTitle(); itemLayout.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick (View v) { final ToDoManagerActivity tdm = new ToDoManagerActivity(); //tdm.removelist(pos); new AlertDialog.Builder(v.getRootView().getContext()) .setTitle("Delete Item") .setMessage("Are you sure to delete " +name+" ?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { tdm.removelist(pos); } }) .setNegativeButton("No", null) .show(); return false; } }); //TODO - Display Title in TextView final TextView titleView = (TextView) itemLayout.findViewById(R.id.titleView); titleView.setText(toDoItem.getTitle()); // TODO - Set up Status CheckBox

final CheckBox statusView = (CheckBox)itemLayout.findViewById(R.id.statusCheckBox); final TextView statusText=(TextView)itemLayout.findViewById(R.id.StatusLabel); if(toDoItem.getStatus()!=Status.DONE){ statusText.setText(ToDoItem.Status.NOTDONE.toString()); statusView.setChecked(false); }else statusView.setChecked(true); statusView.setOnCheckedChangeListener (new OnCheckedChangeListener() { @Override public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) { log("Entered onCheckedChanged()" ); if(isChecked) statusText.setText(ToDoItem.Status.DONE.toString()); else statusText.setText(ToDoItem.Status.NOTDONE.toString()); } }); //TODO - Display Priority in a TextView final TextView priorityView =(TextView)itemLayout.findViewById(R.id.priorityView); priorityView.setText(toDoItem.getPriority().toString()); // TODO - Display Time and Date. // Hint - use ToDoItem.FORMAT.format(toDoItem.getDate()) to get date and time String final TextView dateView =(TextView)itemLayout.findViewById(R.id.dateView); dateView.setText(ToDoItem.FORMAT.format(toDoItem.getDate())); // Return the View you just created return itemLayout; } private void log(String msg) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG, msg); } }

package course.labs.todomanager; import java.text.ParseException; import java.text.SimpleDateFormat;

import java.util.Date; import java.util.Locale; import android.content.Intent; // Do not modify public class ToDoItem { public static final String ITEM_SEP = System.getProperty("line.separator"); public enum Priority { LOW, MED, HIGH }; public enum Status { NOTDONE, DONE }; public public public public public final final final final final static static static static static String String String String String TITLE = "title"; PRIORITY = "priority"; STATUS = "status"; DATE = "date"; FILENAME = "filename";

public final static SimpleDateFormat FORMAT = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.US); private private private private String mTitle = new String(); Priority mPriority = Priority.LOW; Status mStatus = Status.NOTDONE; Date mDate = new Date();

ToDoItem(String title, Priority priority, Status status, Date date) { this.mTitle = title; this.mPriority = priority; this.mStatus = status; this.mDate = date; } // Create a new ToDoItem from data packaged in an Intent ToDoItem(Intent intent) { mTitle = intent.getStringExtra(ToDoItem.TITLE); mPriority = Priority.valueOf(intent.getStringExtra(ToDoItem.PRIORITY)); mStatus = Status.valueOf(intent.getStringExtra(ToDoItem.STATUS)); try { mDate = ToDoItem.FORMAT.parse(intent.getStringExtra(ToDoItem.DATE)); } catch (ParseException e) { mDate = new Date(); } }

public String getTitle() { return mTitle; } public void setTitle(String title) { mTitle = title; } public Priority getPriority() { return mPriority; } public void setPriority(Priority priority) { mPriority = priority; } public Status getStatus() { return mStatus; } public void setStatus(Status status) { mStatus = status; } public Date getDate() { return mDate; } public void setDate(Date date) { mDate = date; } // Take a set of String data values and // package them for transport in an Intent public static void packageIntent(Intent intent, String title, Priority priority, Status status, String date) { intent.putExtra(ToDoItem.TITLE, title); intent.putExtra(ToDoItem.PRIORITY, priority.toString()); intent.putExtra(ToDoItem.STATUS, status.toString()); intent.putExtra(ToDoItem.DATE, date); } public String toString() { return mTitle + ITEM_SEP + mPriority + ITEM_SEP + mStatus + ITEM_SEP + FORMAT.format(mDate); } public String toLog() { return "Title:" + mTitle + ITEM_SEP + "Priority:" + mPriority + ITEM_SEP + "Status:" + mStatus + ITEM_SEP + "Date:" + FORMAT.format(mDate); }

You might also like