summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorErik <roboerik@android.com>2010-09-28 13:44:19 -0700
committerErik <roboerik@android.com>2010-09-28 17:40:06 -0700
commitcb81189e4868769ea016253eca104e46df2f033a (patch)
treeec0da7bfda052f75d362c3163fb9fb90fa3bddb3 /src/com
parenta7f69ee8175566d6d2b2152425acc5c3ddf9def2 (diff)
downloadandroid_packages_apps_Calendar-cb81189e4868769ea016253eca104e46df2f033a.tar.gz
android_packages_apps_Calendar-cb81189e4868769ea016253eca104e46df2f033a.tar.bz2
android_packages_apps_Calendar-cb81189e4868769ea016253eca104e46df2f033a.zip
Makes bubble and event info in search update tz
Also fix for b/3044748 by moving rebuilding of views into onResume if we were notified of a change while paused. Also discovered that if search activity refreshes with a single event earlier than today it doesn't requery correctly and fails to expand to the event. Change-Id: Id55fc8b0effe05bf35f2c4ebd71d70826784174b
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/calendar/AllInOneActivity.java20
-rw-r--r--src/com/android/calendar/CalendarController.java17
-rw-r--r--src/com/android/calendar/EventInfoFragment.java60
-rw-r--r--src/com/android/calendar/SearchActivity.java4
-rw-r--r--src/com/android/calendar/agenda/AgendaListView.java2
5 files changed, 92 insertions, 11 deletions
diff --git a/src/com/android/calendar/AllInOneActivity.java b/src/com/android/calendar/AllInOneActivity.java
index 65c65b8f..fe3035a4 100644
--- a/src/com/android/calendar/AllInOneActivity.java
+++ b/src/com/android/calendar/AllInOneActivity.java
@@ -62,6 +62,8 @@ public class AllInOneActivity extends Activity implements EventHandler,
private ContentResolver mContentResolver;
private int mPreviousView;
private int mCurrentView;
+ private boolean mPaused = true;
+ private boolean mUpdateOnResume = false;
// Create an observer so that we can update the views whenever a
// Calendar event changes.
@@ -122,6 +124,7 @@ public class AllInOneActivity extends Activity implements EventHandler,
// Listen for changes that would require this to be refreshed
SharedPreferences prefs = GeneralPreferences.getSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
+
mContentResolver = getContentResolver();
}
@@ -129,12 +132,23 @@ public class AllInOneActivity extends Activity implements EventHandler,
protected void onResume() {
super.onResume();
mContentResolver.registerContentObserver(Calendar.Events.CONTENT_URI, true, mObserver);
+ if (mUpdateOnResume) {
+ initFragments(mController.getTime(), mController.getViewType(), null);
+ mUpdateOnResume = false;
+ }
+ mPaused = false;
}
@Override
protected void onPause() {
super.onPause();
+ mPaused = true;
mContentResolver.unregisterContentObserver(mObserver);
+ if (isFinishing()) {
+ // Stop listening for changes that would require this to be refreshed
+ SharedPreferences prefs = GeneralPreferences.getSharedPreferences(this);
+ prefs.unregisterOnSharedPreferenceChangeListener(this);
+ }
// FRAG_TODO save highlighted days of the week;
if (mController.getViewType() != ViewType.EDIT) {
Utils.setDefaultView(this, mController.getViewType());
@@ -294,7 +308,11 @@ public class AllInOneActivity extends Activity implements EventHandler,
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals(GeneralPreferences.KEY_WEEK_START_DAY)) {
- initFragments(mController.getTime(), mController.getViewType(), null);
+ if (mPaused) {
+ mUpdateOnResume = true;
+ } else {
+ initFragments(mController.getTime(), mController.getViewType(), null);
+ }
}
}
diff --git a/src/com/android/calendar/CalendarController.java b/src/com/android/calendar/CalendarController.java
index b4c04dea..23cf49a9 100644
--- a/src/com/android/calendar/CalendarController.java
+++ b/src/com/android/calendar/CalendarController.java
@@ -60,6 +60,8 @@ public class CalendarController {
private LinkedHashMap<Integer,EventHandler> eventHandlers =
new LinkedHashMap<Integer,EventHandler>(5);
private LinkedList<Integer> mToBeRemovedEventHandlers = new LinkedList<Integer>();
+ private LinkedHashMap<Integer, EventHandler> mToBeAddedEventHandlers = new LinkedHashMap<
+ Integer, EventHandler>();
private boolean mDispatchInProgress;
private static WeakHashMap<Context, CalendarController> instances =
@@ -330,6 +332,8 @@ public class CalendarController {
}
}
+ mDispatchInProgress = false;
+
// Deregister removed handlers
if (mToBeRemovedEventHandlers.size() > 0) {
for (Integer zombie : mToBeRemovedEventHandlers) {
@@ -337,7 +341,12 @@ public class CalendarController {
}
mToBeRemovedEventHandlers.clear();
}
- mDispatchInProgress = false;
+ // Add new handlers
+ if (mToBeAddedEventHandlers.size() > 0) {
+ for (Entry<Integer, EventHandler> food : mToBeAddedEventHandlers.entrySet()) {
+ eventHandlers.put(food.getKey(), food.getValue());
+ }
+ }
}
if (!handled) {
@@ -377,7 +386,11 @@ public class CalendarController {
*/
public void registerEventHandler(int key, EventHandler eventHandler) {
synchronized (this) {
- eventHandlers.put(key, eventHandler);
+ if (mDispatchInProgress) {
+ mToBeAddedEventHandlers.put(key, eventHandler);
+ } else {
+ eventHandlers.put(key, eventHandler);
+ }
}
}
diff --git a/src/com/android/calendar/EventInfoFragment.java b/src/com/android/calendar/EventInfoFragment.java
index d1fc5e5c..4c83f893 100644
--- a/src/com/android/calendar/EventInfoFragment.java
+++ b/src/com/android/calendar/EventInfoFragment.java
@@ -16,6 +16,7 @@
package com.android.calendar;
+import com.android.calendar.CalendarController.EventInfo;
import com.android.calendar.CalendarController.EventType;
import com.android.calendar.event.EditEventHelper;
import com.android.calendar.event.EventViewUtils;
@@ -40,18 +41,18 @@ import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.pim.EventRecurrence;
-import android.provider.ContactsContract;
import android.provider.Calendar.Attendees;
import android.provider.Calendar.Calendars;
import android.provider.Calendar.Events;
import android.provider.Calendar.Reminders;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
+import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.Presence;
import android.provider.ContactsContract.QuickContact;
-import android.provider.ContactsContract.CommonDataKinds.Email;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -70,11 +71,11 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
-import android.view.View.OnClickListener;
-import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -92,7 +93,7 @@ import java.util.HashMap;
import java.util.regex.Pattern;
public class EventInfoFragment extends DialogFragment implements View.OnClickListener,
- AdapterView.OnItemSelectedListener {
+ AdapterView.OnItemSelectedListener, CalendarController.EventHandler {
public static final boolean DEBUG = false;
public static final String TAG = "EventInfoActivity";
@@ -284,6 +285,13 @@ public class EventInfoFragment extends DialogFragment implements View.OnClickLis
private QueryHandler mHandler;
+ private Runnable mTZUpdater = new Runnable() {
+ @Override
+ public void run() {
+ updateEvent(mView);
+ }
+ };
+
private static final int DIALOG_WIDTH = 500; // FRAG_TODO scale
private static final int DIALOG_HEIGHT = 500;
private boolean mIsDialog = false;
@@ -977,7 +985,7 @@ public class EventInfoFragment extends DialogFragment implements View.OnClickLis
flags |= DateUtils.FORMAT_24HOUR;
}
}
- when = DateUtils.formatDateRange(getActivity(), mStartMillis, mEndMillis, flags);
+ when = Utils.formatDateRange(getActivity(), mStartMillis, mEndMillis, flags);
setTextCommon(view, R.id.when, when);
//CLEANUP // Show the event timezone if it is different from the local timezone
@@ -1005,7 +1013,7 @@ public class EventInfoFragment extends DialogFragment implements View.OnClickLis
if (rRule != null) {
EventRecurrence eventRecurrence = new EventRecurrence();
eventRecurrence.parse(rRule);
- Time date = new Time();
+ Time date = new Time(Utils.getTimeZone(getActivity(), mTZUpdater));
if (allDay) {
date.timezone = Time.TIMEZONE_UTC;
}
@@ -1374,4 +1382,42 @@ public class EventInfoFragment extends DialogFragment implements View.OnClickLis
startActivity(intent);
}
}
+
+ @Override
+ public void eventsChanged() {
+ }
+
+ @Override
+ public boolean getAllDay() {
+ return false;
+ }
+
+ @Override
+ public long getSelectedTime() {
+ return mStartMillis;
+ }
+
+ @Override
+ public long getSupportedEventTypes() {
+ return EventType.EVENTS_CHANGED;
+ }
+
+ @Override
+ public void goTo(Time time, boolean animate) {
+ }
+
+ @Override
+ public void goToToday() {
+
+ }
+
+ @Override
+ public void handleEvent(EventInfo event) {
+ if (event.eventType == EventType.EVENTS_CHANGED) {
+ // reload the data
+ mHandler.startQuery(TOKEN_QUERY_EVENT, null, mUri, EVENT_PROJECTION,
+ null, null, null);
+ }
+
+ }
}
diff --git a/src/com/android/calendar/SearchActivity.java b/src/com/android/calendar/SearchActivity.java
index ba28196f..579f0cce 100644
--- a/src/com/android/calendar/SearchActivity.java
+++ b/src/com/android/calendar/SearchActivity.java
@@ -165,6 +165,7 @@ public class SearchActivity extends Activity
new EventInfoFragment(eventId, startMillis, endMillis);
ft.replace(R.id.event_info, mEventInfoFragment);
ft.commit();
+ mController.registerEventHandler(R.id.event_info, mEventInfoFragment);
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri eventUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventId);
@@ -204,6 +205,7 @@ public class SearchActivity extends Activity
ft.remove(mEventInfoFragment);
ft.commit();
mEventInfoFragment = null;
+ mController.deregisterEventHandler(R.id.event_info);
mCurrentEventId = -1;
}
}
@@ -267,6 +269,8 @@ public class SearchActivity extends Activity
protected void onResume() {
super.onResume();
mContentResolver.registerContentObserver(Events.CONTENT_URI, true, mObserver);
+ // We call this in case the user changed the time zone
+ eventsChanged();
}
@Override
diff --git a/src/com/android/calendar/agenda/AgendaListView.java b/src/com/android/calendar/agenda/AgendaListView.java
index 4b9609c8..263a3a50 100644
--- a/src/com/android/calendar/agenda/AgendaListView.java
+++ b/src/com/android/calendar/agenda/AgendaListView.java
@@ -93,7 +93,7 @@ public class AgendaListView extends ListView implements OnItemClickListener {
}
public void refresh(boolean forced) {
- Time time = new Time(mTimeZone);
+ Time time = new Time(Utils.getTimeZone(mContext, null));
long goToTime = getFirstVisibleTime();
if (goToTime <= 0) {
goToTime = System.currentTimeMillis();