diff options
author | Erik <roboerik@android.com> | 2010-09-28 13:44:19 -0700 |
---|---|---|
committer | Erik <roboerik@android.com> | 2010-09-28 17:40:06 -0700 |
commit | cb81189e4868769ea016253eca104e46df2f033a (patch) | |
tree | ec0da7bfda052f75d362c3163fb9fb90fa3bddb3 /src/com | |
parent | a7f69ee8175566d6d2b2152425acc5c3ddf9def2 (diff) | |
download | android_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.java | 20 | ||||
-rw-r--r-- | src/com/android/calendar/CalendarController.java | 17 | ||||
-rw-r--r-- | src/com/android/calendar/EventInfoFragment.java | 60 | ||||
-rw-r--r-- | src/com/android/calendar/SearchActivity.java | 4 | ||||
-rw-r--r-- | src/com/android/calendar/agenda/AgendaListView.java | 2 |
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(); |