blob: 173a573515cc8392a371dcb1635ce4e9c2b238d3 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.calendar.event;
import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY;
import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME;
import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract.Events;
import android.text.format.Time;
import android.util.Log;
import android.view.MenuItem;
import com.android.calendar.AbstractCalendarActivity;
import com.android.calendar.CalendarController;
import com.android.calendar.CalendarController.EventInfo;
import com.android.calendar.CalendarEventModel.ReminderEntry;
import com.android.calendar.R;
import com.android.calendar.Utils;
import java.util.ArrayList;
public class EditEventActivity extends AbstractCalendarActivity {
private static final String TAG = "EditEventActivity";
private static final boolean DEBUG = false;
private static final String BUNDLE_KEY_EVENT_ID = "key_event_id";
public static final String EXTRA_EVENT_COLOR = "event_color";
public static final String EXTRA_EVENT_REMINDERS = "reminders";
private static boolean mIsMultipane;
private EditEventFragment mEditFragment;
private ArrayList<ReminderEntry> mReminders;
private int mEventColor;
private boolean mEventColorInitialized;
private EventInfo mEventInfo;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.simple_frame_layout);
mEventInfo = getEventInfoFromIntent(icicle);
mReminders = getReminderEntriesFromIntent();
mEventColorInitialized = getIntent().hasExtra(EXTRA_EVENT_COLOR);
mEventColor = getIntent().getIntExtra(EXTRA_EVENT_COLOR, -1);
mEditFragment = (EditEventFragment) getFragmentManager().findFragmentById(R.id.main_frame);
mIsMultipane = Utils.getConfigBool(this, R.bool.multiple_pane_config);
if (mIsMultipane) {
getActionBar().setDisplayOptions(
ActionBar.DISPLAY_SHOW_TITLE,
ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME
| ActionBar.DISPLAY_SHOW_TITLE);
getActionBar().setTitle(
mEventInfo.id == -1 ? R.string.event_create : R.string.event_edit);
}
else {
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME|
ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_CUSTOM);
}
if (mEditFragment == null) {
Intent intent = null;
if (mEventInfo.id == -1) {
intent = getIntent();
}
mEditFragment = new EditEventFragment(mEventInfo, mReminders, mEventColorInitialized,
mEventColor, false, intent);
mEditFragment.mShowModifyDialogOnLaunch = getIntent().getBooleanExtra(
CalendarController.EVENT_EDIT_ON_LAUNCH, false);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_frame, mEditFragment);
ft.show(mEditFragment);
ft.commit();
}
}
@SuppressWarnings("unchecked")
private ArrayList<ReminderEntry> getReminderEntriesFromIntent() {
Intent intent = getIntent();
return (ArrayList<ReminderEntry>) intent.getSerializableExtra(EXTRA_EVENT_REMINDERS);
}
private EventInfo getEventInfoFromIntent(Bundle icicle) {
EventInfo info = new EventInfo();
long eventId = -1;
Intent intent = getIntent();
Uri data = intent.getData();
if (data != null) {
try {
eventId = Long.parseLong(data.getLastPathSegment());
} catch (NumberFormatException e) {
if (DEBUG) {
Log.d(TAG, "Create new event");
}
}
} else if (icicle != null && icicle.containsKey(BUNDLE_KEY_EVENT_ID)) {
eventId = icicle.getLong(BUNDLE_KEY_EVENT_ID);
}
boolean allDay = intent.getBooleanExtra(EXTRA_EVENT_ALL_DAY, false);
long begin = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, -1);
long end = intent.getLongExtra(EXTRA_EVENT_END_TIME, -1);
if (end != -1) {
info.endTime = new Time();
if (allDay) {
info.endTime.timezone = Time.TIMEZONE_UTC;
}
info.endTime.set(end);
}
if (begin != -1) {
info.startTime = new Time();
if (allDay) {
info.startTime.timezone = Time.TIMEZONE_UTC;
}
info.startTime.set(begin);
}
info.id = eventId;
info.eventTitle = intent.getStringExtra(Events.TITLE);
info.calendarId = intent.getLongExtra(Events.CALENDAR_ID, -1);
if (allDay) {
info.extraLong = CalendarController.EXTRA_CREATE_ALL_DAY;
} else {
info.extraLong = 0;
}
return info;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
Utils.returnToCalendarHome(this);
return true;
}
return super.onOptionsItemSelected(item);
}
}