Fix small bug
[unical.git] / src / ro / ieval / unical / AddEventActivity.java
index d16b426714859745810799de01414440786195b9..d36bbdab6c1512a543c1cb8fc07b573107471343 100644 (file)
 package ro.ieval.unical;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.TimeZone;
 
 import android.app.ActionBar;
 import android.app.Activity;
 import android.app.DatePickerDialog.OnDateSetListener;
 import android.app.Fragment;
-import android.app.FragmentManager;
 import android.app.TimePickerDialog.OnTimeSetListener;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
 import android.os.Bundle;
+import android.provider.CalendarContract;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.DatePicker;
-import android.widget.Spinner;
-import android.widget.Switch;
-import android.widget.TextView;
-import android.widget.TimePicker;
+import android.widget.*;
 
 public final class AddEventActivity extends Activity implements OnDateSetListener, OnTimeSetListener{
+
+    private class OnCheckedChangeListener implements android.widget.CompoundButton.OnCheckedChangeListener{
+        private final LinearLayout layout;
+        public OnCheckedChangeListener(final LinearLayout layout){
+            this.layout=layout;
+        }
+
+        private class OnItemSelectedListener implements android.widget.AdapterView.OnItemSelectedListener{
+            private final View repeatCount;
+            private final View repeatUntil;
+
+            public OnItemSelectedListener(final View repeatCount, final View repeatUntil) {
+                this.repeatCount=repeatCount;
+                this.repeatUntil=repeatUntil;
+            }
+
+            @Override
+            public void onItemSelected(final AdapterView<?> whatever, final View ignored, final int pos, final long id) {
+                switch(pos){
+                    case 0:
+                        repeatCount.setVisibility(View.GONE);
+                        repeatUntil.setVisibility(View.GONE);
+                        break;
+                    case 1:
+                        repeatCount.setVisibility(View.GONE);
+                        repeatUntil.setVisibility(View.VISIBLE);
+                        break;
+                    case 2:
+                        repeatCount.setVisibility(View.VISIBLE);
+                        repeatUntil.setVisibility(View.GONE);
+                        break;
+                    default:
+                }
+            }
+
+            @Override public void onNothingSelected(final AdapterView<?> arg0) { /* do nothing */      }
+        }
+
+        @Override
+        public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
+            if(isChecked) {
+                Utils.setEnabledRecursively(layout, true);
+                final Spinner repeatType = (Spinner) findViewById(R.id.repeat_type);
+                repeatType.setOnItemSelectedListener(new OnItemSelectedListener(findViewById(R.id.repeat_count),findViewById(R.id.repeat_until)));
+            }else {
+                Utils.setEnabledRecursively(layout, false);
+            }
+        }
+    }
+
        private TextView dateTimeTextView;
+    public static final String EXTRA_EVENT = "event";
+    private static Event event=new Event();
+
+    public static void editEvent(final Context c, final Event e) {
+        final Intent i = new Intent(c,AddEventActivity.class);
+        i.putExtra(AddEventActivity.EXTRA_EVENT,e);
+        event=e;
+        c.startActivity(i);
+    }
+
 
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
-               setContentView(R.layout.add_event);
-               setTitle(R.string.addeventtitle);
+               setTitle(R.string.add_event_title);
+               event = getIntent().hasExtra(EXTRA_EVENT) ? (Event) getIntent().getParcelableExtra(EXTRA_EVENT) : new Event();
                final ActionBar actionBar = getActionBar();
-               actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-               final ActionBar.Tab t1 = actionBar.newTab().setText(this.getString(R.string.addevtab1));
-               final ActionBar.Tab t2 = actionBar.newTab().setText(this.getString(R.string.addevtab2));
-               final ActionBar.Tab t3 = actionBar.newTab().setText(this.getString(R.string.addevtab3));
-               
-               final Fragment f1 = new TrivialFragment();
-               final Bundle b1=new Bundle();
-               b1.putInt(TrivialFragment.ARGUMENT_LAYOUT, R.layout.add_event_basic_tab);
-               f1.setArguments(b1);
-
-               final Fragment f2 = new TrivialFragment();
-               final Bundle b2=new Bundle();
-               b2.putInt(TrivialFragment.ARGUMENT_LAYOUT, R.layout.add_event_details_tab);
-               f2.setArguments(b2);
-
-               final Fragment f3 = new TrivialFragment();
-               final Bundle b3=new Bundle();
-               b3.putInt(TrivialFragment.ARGUMENT_LAYOUT, R.layout.add_event_other_tab);
-               f3.setArguments(b3);
-               
-               t1.setTabListener(new AddEventTabListener(f1));
-               t2.setTabListener(new AddEventTabListener(f2));
-               t3.setTabListener(new AddEventTabListener(f3));
-               
-               actionBar.addTab(t1);
-               actionBar.addTab(t2);
-               actionBar.addTab(t3);
-               
-               handleViews(f1,f2,f3);
-               
-       }
-       
-       private void handleViews(Fragment f1,Fragment f2,Fragment f3) {
-               Switch repeatSwitch = (Switch) this.getFragmentManager().findFragmentById(f1.getId()).getView().findViewById(R.id.repeat_switch);
-               final Spinner repeatSpinner = (Spinner) this.getFragmentManager().findFragmentById(f1.getId()).getView().findViewById(R.id.repeat_spinner);
-               repeatSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-                       
-                       @Override
-                       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                               if(isChecked) {
-                                       repeatSpinner.setEnabled(true);
-                               }else {
-                                       repeatSpinner.setEnabled(false);
-                               }
-                       }
-               });
+               setContentView(R.layout.add_event);
+
+               final LinearLayout layout = (LinearLayout) findViewById(R.id.repeat_layout);
+               final Switch repeatSwitch = (Switch) findViewById(R.id.repeat_switch);
+               Utils.setEnabledRecursively(layout, false);
+
+               repeatSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener(layout));
+
+               final EditText title = (EditText) findViewById(R.id.eventtitle);
+               title.setText(event.title);
+
+               final TextView tstart = (TextView) findViewById(R.id.time_start);
+               final TextView tend = (TextView) findViewById(R.id.time_end);
+               final SimpleDateFormat sf=new SimpleDateFormat("HH:mm");
+               final Date d=new Date(event.dtstart);
+               tstart.setText(sf.format(d).toString());
+               d.setTime(event.dtend);
+               tend.setText(sf.format(d).toString());
+
+               final SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
+               final TextView dstart = (TextView)findViewById(R.id.date_start);
+               final TextView dend = (TextView)findViewById(R.id.date_end);
+               d.setTime(event.dtstart);
+               dstart.setText(sd.format(d).toString());
+               d.setTime(event.dtend);
+               dend.setText(sd.format(d).toString());
+               final EditText description = (EditText) findViewById(R.id.description);
+               description.setText(event.description);
        }
 
        @Override
@@ -84,39 +129,110 @@ public final class AddEventActivity extends Activity implements OnDateSetListene
                inflater.inflate(R.menu.add_event, menu);
                return true;
        }
-       
+
+    public void createCalendar() {
+        Uri calUri,result;
+        ContentValues cv;
+        calUri = CalendarContract.Calendars.CONTENT_URI;
+        cv = new ContentValues();
+        cv.put(CalendarContract.Calendars.ACCOUNT_NAME,"unical");
+        cv.put(CalendarContract.Calendars.ACCOUNT_TYPE,CalendarContract.ACCOUNT_TYPE_LOCAL);
+        cv.put(CalendarContract.Calendars.NAME,"unical");
+        cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "Unical");
+        cv.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.BLACK);
+        cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
+        cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, "unical");
+        cv.put(CalendarContract.Calendars.VISIBLE, 1);
+        cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
+        cv.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID());
+        calUri = calUri.buildUpon()
+                .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
+                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, "unical")
+                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
+                .build();
+
+        this.getContentResolver().delete(calUri, CalendarContract.Calendars.ACCOUNT_NAME + " = 'unical'", new String[0]);
+        this.getContentResolver().insert(calUri, cv);
+        Event.calendarCreated=true;
+    }
+
        @Override
        public boolean onOptionsItemSelected(final MenuItem item) {
                switch (item.getItemId()) {
                        case R.id.cancel:
                                finish();
                                return true;
+            case R.id.save:
+                boolean edit=false;
+                if(event.title!=null) edit=true;
+                event.title=((EditText)findViewById(R.id.eventtitle)).getText().toString();
+                String start=((TextView)findViewById(R.id.date_start)).getText().toString()+ " " +((TextView)findViewById(R.id.time_start)).getText().toString();
+                String end=((TextView)findViewById(R.id.date_end)).getText().toString()+ " "+((TextView)findViewById(R.id.time_end)).getText().toString();
+
+                try {
+                    Date s=new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(start);
+                    Date e=new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(end);
+                    event.dtstart=s.getTime();
+                    event.dtend=s.getTime();
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+
+                event.description=((EditText) findViewById(R.id.description)).getText().toString();
+
+                if(!Event.calendarCreated)createCalendar();
+                if(event.calendarID!=Event.getUnicalId(this)) {
+                    edit=false;
+                    event.delete(this);
+                }
+                event.calendarID=Event.getUnicalId(this);
+                if(!edit) event.insert(this);
+                else event.edit(this);
+
+                Toast toast = Toast.makeText(getApplicationContext(),"Event saved!",Toast.LENGTH_LONG);
+                toast.show();
+                finish();
+                return true;
                        default:
                                return false;
                }
        }
-       
-       public void showDateTimePickerDialog(final View v) {
+
+    public void showDateTimePickerDialog(final View v) {
                dateTimeTextView=(TextView) v;
-               if(v.getId()==R.id.date_start || v.getId()==R.id.date_end)
-                       new DatePickerFragment().show(getFragmentManager(), "datePicker");
-               else
-                       new TimePickerFragment().show(getFragmentManager(), "timePicker");
+               if(v.getId()==R.id.date_start || v.getId()==R.id.date_end || v.getId() == R.id.repeat_until){
+                       final String[] parts = dateTimeTextView.getText().toString().split("-");
+                       final DatePickerFragment fragment = new DatePickerFragment();
+                       final Bundle args = new Bundle();
+                       args.putInt(DatePickerFragment.ARGUMENT_YEAR, Integer.parseInt(parts[0]));
+                       args.putInt(DatePickerFragment.ARGUMENT_MONTH, Integer.parseInt(parts[1]));
+                       args.putInt(DatePickerFragment.ARGUMENT_DAY, Integer.parseInt(parts[2]));
+                       fragment.setArguments(args);
+                       fragment.show(getFragmentManager(), "datePicker");
+               } else {
+                       final String[] parts = dateTimeTextView.getText().toString().split(":");
+                       final TimePickerFragment fragment = new TimePickerFragment();
+                       final Bundle args = new Bundle();
+                       args.putInt(TimePickerFragment.ARGUMENT_HOUR, Integer.parseInt(parts[0]));
+                       args.putInt(TimePickerFragment.ARGUMENT_MINUTE, Integer.parseInt(parts[1]));
+                       fragment.setArguments(args);
+                       fragment.show(getFragmentManager(), "timePicker");
+               }
        }
 
        @Override
        public void onTimeSet(final TimePicker picker, final int hour, final int minute) {
-               dateTimeTextView.setText(String.format("%2d:%2d",hour,minute));
+               dateTimeTextView.setText(String.format("%02d:%02d",hour,minute));
                if(dateTimeTextView.getId() == R.id.time_start)
-                       ((TextView)findViewById(R.id.time_end)).setText(String.format("%2d:%2d",hour,minute));
+                       ((TextView)findViewById(R.id.time_end)).setText(String.format("%02d:%02d",hour,minute));
        }
 
        @Override
        public void onDateSet(final DatePicker picker, final int year, final int monthOfYear, final int dayOfMonth) {
                final Calendar calendar=new GregorianCalendar(year, monthOfYear, dayOfMonth);
-               dateTimeTextView.setText(String.format("%4d-%2d-%2d", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)));
-               calendar.add(Calendar.DAY_OF_MONTH, 1);
+               dateTimeTextView.setText(Utils.formatDate(year, monthOfYear, dayOfMonth));
+               //calendar.add(Calendar.DAY_OF_MONTH, 1);
                if(dateTimeTextView.getId() == R.id.date_start)
-                       ((TextView)findViewById(R.id.date_end)).setText(String.format("%4d-%2d-%2d", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)));
+                       ((TextView)findViewById(R.id.date_end)).setText(Utils.formatDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)));
        }
 }
This page took 0.014651 seconds and 4 git commands to generate.