Move EditEventFragment into AllInOneActivity
This change makes AllInOneActivity be the launch point for edit event
and causes it to take over as a full screen view. This way we can
handle message passing between edit event and the rest of calendar
as well as maintain the actionbar items.
Also fixes b/2954347
Change-Id: Ib28e5382abbfe4f72a183c0945f27e61b7fd176e
diff --git a/src/com/android/calendar/AllInOneActivity.java b/src/com/android/calendar/AllInOneActivity.java
index b2f4e5d..70ec26e 100644
--- a/src/com/android/calendar/AllInOneActivity.java
+++ b/src/com/android/calendar/AllInOneActivity.java
@@ -16,11 +16,15 @@
package com.android.calendar;
+import static android.provider.Calendar.EVENT_BEGIN_TIME;
+import static android.provider.Calendar.EVENT_END_TIME;
+
import com.android.calendar.CalendarController.EventHandler;
import com.android.calendar.CalendarController.EventInfo;
import com.android.calendar.CalendarController.EventType;
import com.android.calendar.CalendarController.ViewType;
import com.android.calendar.agenda.AgendaFragment;
+import com.android.calendar.event.EditEventFragment;
import com.android.calendar.selectcalendars.SelectCalendarsFragment;
import android.app.ActionBar;
@@ -28,10 +32,12 @@
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.ContentResolver;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Configuration;
import android.database.ContentObserver;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Calendar;
@@ -97,8 +103,6 @@
setContentView(R.layout.all_in_one);
initFragments(timeMillis, viewType);
- mPreviousView = viewType;
- mCurrentView = viewType;
// Listen for changes that would require this to be refreshed
SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(this);
@@ -117,7 +121,9 @@
super.onPause();
mContentResolver.unregisterContentObserver(mObserver);
//FRAG_TODO save highlighted days of the week;
- Utils.setDefaultView(this, mController.getViewType());
+ if (mController.getViewType() != ViewType.EDIT) {
+ Utils.setDefaultView(this, mController.getViewType());
+ }
}
@Override
@@ -146,18 +152,58 @@
Fragment selectCalendarsFrag = new SelectCalendarsFragment();
ft.replace(R.id.calendar_list, selectCalendarsFrag);
- } else {
+ }
+ if (!mIsMultipane || viewType == ViewType.EDIT){
findViewById(R.id.mini_month).setVisibility(View.GONE);
findViewById(R.id.calendar_list).setVisibility(View.GONE);
}
- setMainPane(ft, R.id.main_pane, viewType, timeMillis, true);
+ EventInfo info = null;
+ if (viewType == ViewType.EDIT) {
+ mPreviousView = CalendarPreferenceActivity.getSharedPreferences(this).getInt(
+ CalendarPreferenceActivity.KEY_START_VIEW,
+ CalendarPreferenceActivity.DEFAULT_START_VIEW);
+
+ int eventId = -1;
+ Intent intent = getIntent();
+ Uri data = intent.getData();
+ if (data != null) {
+ try {
+ eventId = Integer.parseInt(data.getLastPathSegment());
+ } catch (NumberFormatException e) {
+ if (DEBUG) {
+ Log.d(TAG, "Create new event");
+ }
+ }
+ }
+ long begin = intent.getLongExtra(EVENT_BEGIN_TIME, -1);
+ long end = intent.getLongExtra(EVENT_END_TIME, -1);
+ info = new EventInfo();
+ if (end != -1) {
+ info.endTime = new Time();
+ info.endTime.set(end);
+ }
+ if (begin != -1) {
+ info.startTime = new Time();
+ info.startTime.set(begin);
+ }
+ info.id = eventId;
+ // We set the viewtype so if the user presses back when they are
+ // done editing the controller knows we were in the Edit Event
+ // screen.
+ mController.setViewType(viewType);
+ } else {
+ mPreviousView = viewType;
+ }
+ setMainPane(ft, R.id.main_pane, viewType, timeMillis, true, info);
ft.commit(); // this needs to be after setMainPane()
Time t = new Time();
t.set(timeMillis);
- mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType);
+ if (viewType != ViewType.EDIT) {
+ mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType);
+ }
}
@Override
@@ -165,8 +211,7 @@
if (mPreviousView == mCurrentView) {
super.onBackPressed();
} else {
- mCurrentView = mPreviousView;
- mController.sendEvent(this, EventType.GO_TO, null, null, -1, mCurrentView);
+ mController.sendEvent(this, EventType.GO_TO, null, null, -1, mPreviousView);
}
}
@@ -230,15 +275,17 @@
}
private void setMainPane(FragmentTransaction ft, int viewId, int viewType,
- long timeMillis, boolean force) {
- if(!force && mController.getPreviousViewType() == viewType) {
+ long timeMillis, boolean force, EventInfo e) {
+ if(!force && mCurrentView == viewType) {
return;
}
if (viewType != mCurrentView) {
// The rules for this previous view are different than the
// controller's and are used for intercepting the back button.
- mPreviousView = mCurrentView;
+ if (mCurrentView != ViewType.EDIT && mCurrentView > 0) {
+ mPreviousView = mCurrentView;
+ }
mCurrentView = viewType;
}
// Create new fragment
@@ -256,6 +303,9 @@
case ViewType.MONTH:
frag = new MonthFragment(false, timeMillis, false);
break;
+ case ViewType.EDIT:
+ frag = new EditEventFragment(e, mPreviousView);
+ break;
default:
throw new IllegalArgumentException(
"Must be Agenda, Day, Week, or Month ViewType, not " + viewType);
@@ -300,7 +350,8 @@
@Override
public long getSupportedEventTypes() {
- return EventType.GO_TO | EventType.VIEW_EVENT;
+ return EventType.GO_TO | EventType.VIEW_EVENT | EventType.EDIT_EVENT |
+ EventType.CREATE_EVENT;
}
@Override
@@ -310,7 +361,7 @@
setTitleInActionBar(event);
setMainPane(null, R.id.main_pane, event.viewType,
- event.startTime.toMillis(false), false);
+ event.startTime.toMillis(false), false, event);
if (!mIsMultipane) {
return;
@@ -329,6 +380,12 @@
.toMillis(false), event.endTime.toMillis(false));
fragment.setDialogParams(event.x, event.y);
fragment.show(getFragmentManager(), "EventInfoFragment");
+ } else if (event.eventType == EventType.EDIT_EVENT ||
+ event.eventType == EventType.CREATE_EVENT) {
+ setMainPane(null, R.id.main_pane, ViewType.EDIT, -1, true, event);
+ // hide minimonth and calendar frag
+ findViewById(R.id.mini_month).setVisibility(View.GONE);
+ findViewById(R.id.calendar_list).setVisibility(View.GONE);
}
}