80f7a04d535fd04a2b634d8cb284f2ae50517216
[unical.git] / src / ro / ieval / unical / AddEventActivity.java
1 package ro.ieval.unical;
2 import java.text.ParseException;
3 import java.text.SimpleDateFormat;
4 import java.util.Calendar;
5 import java.util.Date;
6 import java.util.GregorianCalendar;
7 import java.util.TimeZone;
8
9 import android.app.ActionBar;
10 import android.app.Activity;
11 import android.app.DatePickerDialog.OnDateSetListener;
12 import android.app.Fragment;
13 import android.app.TimePickerDialog.OnTimeSetListener;
14 import android.content.ContentValues;
15 import android.content.Context;
16 import android.content.Intent;
17 import android.graphics.Color;
18 import android.net.Uri;
19 import android.os.Bundle;
20 import android.provider.CalendarContract;
21 import android.view.Menu;
22 import android.view.MenuInflater;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.widget.*;
26
27 public final class AddEventActivity extends Activity implements OnDateSetListener, OnTimeSetListener{
28
29 private class OnCheckedChangeListener implements android.widget.CompoundButton.OnCheckedChangeListener{
30 private final LinearLayout layout;
31 public OnCheckedChangeListener(final LinearLayout layout){
32 this.layout=layout;
33 }
34
35 private class OnItemSelectedListener implements android.widget.AdapterView.OnItemSelectedListener{
36 private final View repeatCount;
37 private final View repeatUntil;
38
39 public OnItemSelectedListener(final View repeatCount, final View repeatUntil) {
40 this.repeatCount=repeatCount;
41 this.repeatUntil=repeatUntil;
42 }
43
44 @Override
45 public void onItemSelected(final AdapterView<?> whatever, final View ignored, final int pos, final long id) {
46 switch(pos){
47 case 0:
48 repeatCount.setVisibility(View.GONE);
49 repeatUntil.setVisibility(View.GONE);
50 break;
51 case 1:
52 repeatCount.setVisibility(View.GONE);
53 repeatUntil.setVisibility(View.VISIBLE);
54 break;
55 case 2:
56 repeatCount.setVisibility(View.VISIBLE);
57 repeatUntil.setVisibility(View.GONE);
58 break;
59 default:
60 }
61 }
62
63 @Override public void onNothingSelected(final AdapterView<?> arg0) { /* do nothing */ }
64 }
65
66 @Override
67 public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
68 if(isChecked) {
69 Utils.setEnabledRecursively(layout, true);
70 final Spinner repeatType = (Spinner) findViewById(R.id.repeat_type);
71 repeatType.setOnItemSelectedListener(new OnItemSelectedListener(findViewById(R.id.repeat_count),findViewById(R.id.repeat_until)));
72 }else {
73 Utils.setEnabledRecursively(layout, false);
74 }
75 }
76 }
77
78 private TextView dateTimeTextView;
79 public static final String EXTRA_EVENT = "event";
80 private static Event event=new Event();
81
82 public static void editEvent(final Context c, final Event e) {
83 final Intent i = new Intent(c,AddEventActivity.class);
84 i.putExtra(AddEventActivity.EXTRA_EVENT,e);
85 event=e;
86 c.startActivity(i);
87 }
88
89
90 @Override
91 protected void onCreate(final Bundle savedInstanceState) {
92 super.onCreate(savedInstanceState);
93 setTitle(R.string.add_event_title);
94 event = getIntent().hasExtra(EXTRA_EVENT) ? (Event) getIntent().getParcelableExtra(EXTRA_EVENT) : new Event();
95 final ActionBar actionBar = getActionBar();
96 setContentView(R.layout.add_event);
97
98 final LinearLayout layout = (LinearLayout) findViewById(R.id.repeat_layout);
99 final Switch repeatSwitch = (Switch) findViewById(R.id.repeat_switch);
100 Utils.setEnabledRecursively(layout, false);
101
102 repeatSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener(layout));
103
104 final EditText title = (EditText) findViewById(R.id.eventtitle);
105 title.requestFocus();
106 title.setText(event.title);
107
108 final TextView tstart = (TextView) findViewById(R.id.time_start);
109 final TextView tend = (TextView) findViewById(R.id.time_end);
110 final SimpleDateFormat sf=new SimpleDateFormat("HH:mm");
111 final Date d=new Date(event.dtstart);
112 tstart.setText(sf.format(d).toString());
113 d.setTime(event.dtend);
114 tend.setText(sf.format(d).toString());
115
116 final SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
117 final TextView dstart = (TextView)findViewById(R.id.date_start);
118 final TextView dend = (TextView)findViewById(R.id.date_end);
119 d.setTime(event.dtstart);
120 dstart.setText(sd.format(d).toString());
121 d.setTime(event.dtend);
122 dend.setText(sd.format(d).toString());
123 final EditText description = (EditText) findViewById(R.id.description);
124 description.setText(event.description);
125 }
126
127 @Override
128 public boolean onCreateOptionsMenu(final Menu menu) {
129 final MenuInflater inflater = getMenuInflater();
130 inflater.inflate(R.menu.add_event, menu);
131 return true;
132 }
133
134 public void createCalendar() {
135 Uri calUri,result;
136 ContentValues cv;
137 calUri = CalendarContract.Calendars.CONTENT_URI;
138 cv = new ContentValues();
139 cv.put(CalendarContract.Calendars.ACCOUNT_NAME,"unical");
140 cv.put(CalendarContract.Calendars.ACCOUNT_TYPE,CalendarContract.ACCOUNT_TYPE_LOCAL);
141 cv.put(CalendarContract.Calendars.NAME,"unical");
142 cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "Unical");
143 cv.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.BLACK);
144 cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
145 cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, "unical");
146 cv.put(CalendarContract.Calendars.VISIBLE, 1);
147 cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
148 cv.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID());
149 calUri = calUri.buildUpon()
150 .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
151 .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, "unical")
152 .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
153 .build();
154
155 this.getContentResolver().delete(calUri, CalendarContract.Calendars.ACCOUNT_NAME + " = 'unical'", new String[0]);
156 this.getContentResolver().insert(calUri, cv);
157 Event.calendarCreated=true;
158 }
159
160 @Override
161 public boolean onOptionsItemSelected(final MenuItem item) {
162 switch (item.getItemId()) {
163 case R.id.cancel:
164 finish();
165 return true;
166 case R.id.save:
167 boolean edit=false;
168 if(event.title!=null) edit=true;
169 event.title=((EditText)findViewById(R.id.eventtitle)).getText().toString();
170 String start=((TextView)findViewById(R.id.date_start)).getText().toString()+ " " +((TextView)findViewById(R.id.time_start)).getText().toString();
171 String end=((TextView)findViewById(R.id.date_end)).getText().toString()+ " "+((TextView)findViewById(R.id.time_end)).getText().toString();
172
173 try {
174 Date s=new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(start);
175 Date e=new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(end);
176 event.dtstart=s.getTime();
177 event.dtend=e.getTime();
178 } catch (ParseException e) {
179 e.printStackTrace();
180 }
181
182 event.description=((EditText) findViewById(R.id.description)).getText().toString();
183
184 if(!Event.calendarCreated)createCalendar();
185 if(event.calendarID!=Event.getUnicalId(this)) {
186 edit=false;
187 event.delete(this);
188 }
189 event.calendarID=Event.getUnicalId(this);
190 if(!edit) event.insert(this);
191 else event.edit(this);
192
193 Toast toast = Toast.makeText(getApplicationContext(),"Event saved!",Toast.LENGTH_LONG);
194 toast.show();
195 finish();
196 return true;
197 default:
198 return false;
199 }
200 }
201
202 public void showDateTimePickerDialog(final View v) {
203 dateTimeTextView=(TextView) v;
204 if(v.getId()==R.id.date_start || v.getId()==R.id.date_end || v.getId() == R.id.repeat_until){
205 final String[] parts = dateTimeTextView.getText().toString().split("-");
206 final DatePickerFragment fragment = new DatePickerFragment();
207 final Bundle args = new Bundle();
208 args.putInt(DatePickerFragment.ARGUMENT_YEAR, Integer.parseInt(parts[0]));
209 args.putInt(DatePickerFragment.ARGUMENT_MONTH, Integer.parseInt(parts[1]));
210 args.putInt(DatePickerFragment.ARGUMENT_DAY, Integer.parseInt(parts[2]));
211 fragment.setArguments(args);
212 fragment.show(getFragmentManager(), "datePicker");
213 } else {
214 final String[] parts = dateTimeTextView.getText().toString().split(":");
215 final TimePickerFragment fragment = new TimePickerFragment();
216 final Bundle args = new Bundle();
217 args.putInt(TimePickerFragment.ARGUMENT_HOUR, Integer.parseInt(parts[0]));
218 args.putInt(TimePickerFragment.ARGUMENT_MINUTE, Integer.parseInt(parts[1]));
219 fragment.setArguments(args);
220 fragment.show(getFragmentManager(), "timePicker");
221 }
222 }
223
224 @Override
225 public void onTimeSet(final TimePicker picker, final int hour, final int minute) {
226 dateTimeTextView.setText(String.format("%02d:%02d",hour,minute));
227 if(dateTimeTextView.getId() == R.id.time_start)
228 ((TextView)findViewById(R.id.time_end)).setText(String.format("%02d:%02d",hour,minute));
229 }
230
231 @Override
232 public void onDateSet(final DatePicker picker, final int year, final int monthOfYear, final int dayOfMonth) {
233 final Calendar calendar=new GregorianCalendar(year, monthOfYear, dayOfMonth);
234 dateTimeTextView.setText(Utils.formatDate(year, monthOfYear, dayOfMonth));
235 //calendar.add(Calendar.DAY_OF_MONTH, 1);
236 if(dateTimeTextView.getId() == R.id.date_start)
237 ((TextView)findViewById(R.id.date_end)).setText(Utils.formatDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)));
238 }
239 }
This page took 0.028251 seconds and 3 git commands to generate.