summaryrefslogtreecommitdiff
path: root/src/com/android/calendar/EventInfoActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/calendar/EventInfoActivity.java')
-rw-r--r--src/com/android/calendar/EventInfoActivity.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/com/android/calendar/EventInfoActivity.java b/src/com/android/calendar/EventInfoActivity.java
new file mode 100644
index 00000000..626e099d
--- /dev/null
+++ b/src/com/android/calendar/EventInfoActivity.java
@@ -0,0 +1,190 @@
+/*
+ * 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;
+
+import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME;
+import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME;
+import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.CalendarContract;
+import android.provider.CalendarContract.Attendees;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EventInfoActivity extends Activity {
+ private static final String TAG = "EventInfoActivity";
+ private EventInfoFragment mInfoFragment;
+ private long mStartMillis, mEndMillis;
+ private long mEventId;
+
+ // Create an observer so that we can update the views whenever a
+ // Calendar event changes.
+ private final ContentObserver mObserver = new ContentObserver(new Handler()) {
+ @Override
+ public boolean deliverSelfNotifications() {
+ return false;
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ if (selfChange) return;
+ if (mInfoFragment != null) {
+ mInfoFragment.reloadEvents();
+ }
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ // Get the info needed for the fragment
+ Intent intent = getIntent();
+ int attendeeResponse = 0;
+ mEventId = -1;
+ boolean isDialog = false;
+
+ if (icicle != null) {
+ mEventId = icicle.getLong(EventInfoFragment.BUNDLE_KEY_EVENT_ID);
+ mStartMillis = icicle.getLong(EventInfoFragment.BUNDLE_KEY_START_MILLIS);
+ mEndMillis = icicle.getLong(EventInfoFragment.BUNDLE_KEY_END_MILLIS);
+ attendeeResponse = icicle.getInt(EventInfoFragment.BUNDLE_KEY_ATTENDEE_RESPONSE);
+ isDialog = icicle.getBoolean(EventInfoFragment.BUNDLE_KEY_IS_DIALOG);
+ } else if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
+ mStartMillis = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, 0);
+ mEndMillis = intent.getLongExtra(EXTRA_EVENT_END_TIME, 0);
+ attendeeResponse = intent.getIntExtra(ATTENDEE_STATUS,
+ Attendees.ATTENDEE_STATUS_NONE);
+ Uri data = intent.getData();
+ if (data != null) {
+ try {
+ List<String> pathSegments = data.getPathSegments();
+ int size = pathSegments.size();
+ if (size > 2 && "EventTime".equals(pathSegments.get(2))) {
+ // Support non-standard VIEW intent format:
+ //dat = content://com.android.calendar/events/[id]/EventTime/[start]/[end]
+ mEventId = Long.parseLong(pathSegments.get(1));
+ if (size > 4) {
+ mStartMillis = Long.parseLong(pathSegments.get(3));
+ mEndMillis = Long.parseLong(pathSegments.get(4));
+ }
+ } else {
+ mEventId = Long.parseLong(data.getLastPathSegment());
+ }
+ } catch (NumberFormatException e) {
+ if (mEventId == -1) {
+ // do nothing here , deal with it later
+ } else if (mStartMillis == 0 || mEndMillis ==0) {
+ // Parsing failed on the start or end time , make sure the times were not
+ // pulled from the intent's extras and reset them.
+ mStartMillis = 0;
+ mEndMillis = 0;
+ }
+ }
+ }
+ }
+
+ if (mEventId == -1) {
+ Log.w(TAG, "No event id");
+ Toast.makeText(this, R.string.event_not_found, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+
+ // If we do not support showing full screen event info in this configuration,
+ // close the activity and show the event in AllInOne.
+ Resources res = getResources();
+ if (!res.getBoolean(R.bool.agenda_show_event_info_full_screen)
+ && !res.getBoolean(R.bool.show_event_info_full_screen)) {
+ CalendarController.getInstance(this)
+ .launchViewEvent(mEventId, mStartMillis, mEndMillis, attendeeResponse);
+ finish();
+ return;
+ }
+
+ setContentView(R.layout.simple_frame_layout);
+
+ // Get the fragment if exists
+ mInfoFragment = (EventInfoFragment)
+ getFragmentManager().findFragmentById(R.id.main_frame);
+
+
+ // Remove the application title
+ ActionBar bar = getActionBar();
+ if (bar != null) {
+ bar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME);
+ }
+
+ // Create a new fragment if none exists
+ if (mInfoFragment == null) {
+ FragmentManager fragmentManager = getFragmentManager();
+ FragmentTransaction ft = fragmentManager.beginTransaction();
+ mInfoFragment = new EventInfoFragment(this, mEventId, mStartMillis, mEndMillis,
+ attendeeResponse, isDialog, (isDialog ?
+ EventInfoFragment.DIALOG_WINDOW_STYLE :
+ EventInfoFragment.FULL_WINDOW_STYLE));
+ ft.replace(R.id.main_frame, mInfoFragment);
+ ft.commit();
+ }
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ // From the Android Dev Guide: "It's important to note that when
+ // onNewIntent(Intent) is called, the Activity has not been restarted,
+ // so the getIntent() method will still return the Intent that was first
+ // received with onCreate(). This is why setIntent(Intent) is called
+ // inside onNewIntent(Intent) (just in case you call getIntent() at a
+ // later time)."
+ setIntent(intent);
+ }
+
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ getContentResolver().registerContentObserver(CalendarContract.Events.CONTENT_URI,
+ true, mObserver);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ getContentResolver().unregisterContentObserver(mObserver);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+}