History log of /packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
8faae52c0d012b47171ae270f4af84c43cac45f7 26-Mar-2011 Andy Stadler <stadler@google.com> DO NOT MERGE - Clear cached CalendarObservers after Calendar wipe

* This fix may resolve the bugs referenced below; the issue fixed
could cause pandemonium after the server commands a wipe of calendar
data and most likely explains these issues (via Occam's Razor)
* Also backport a SQL fix to more reliably delete calendar data

Bug: 4077499
Bug: 4064237
Backport from: I628fb14ea2c04150d4f27341751f0eab61ee33d1

Change-Id: I7667a11663d8720a92b9eba0748f60256a25edba
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
efcde27bf74acdd82bb0aad0ad1fd0b767ca5f18 14-Oct-2010 Andy Stadler <stadler@android.com> Use original all-day flag when upsyncing exceptions DO NOT MERGE

Bug: 3087410
Backport of: I4bed0039758e98d4b85054876f192605eb00ee82

Change-Id: Ibc875d58c2f6c5317ce8e4fee97b96c2fd6b2ecf
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
9c2baaabd2feff633db3ed1b782282667e541927 14-Oct-2010 Andy Stadler <stadler@android.com> Fix upsync of exceptions in EAS 2.5 (Exchange 2003) DO NOT MERGE

* Apparently, Exchange 2003 doesn't like to see Visibility set in
Exceptions
* Apparently, Exchange 2003 likes to see Exception Deleted and
ExceptionStartTime prior to other data
* The word "apparently" is used above to indicate that these
findings are not part of any specification, but have been
determined empirically

Bug: 2775885
Backport of: I163f156675f65c494a59d5233b2b6e23b3f1d6a0

Change-Id: I5d32dea5c3903147725b8df87a71e961a4d78c60
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
6f207f5df2a1b4190e5da243fd497dcf168899af 02-Jul-2010 Marc Blank <mblank@google.com> DO NOT MERGE: Interpret "busy" on new events to mean "no response"

* The meaning of a busy status of "Busy" is uncertain; it could mean
"Accepted" or "Tentative", depending on whether the event was
created via OWA/Outlook or EAS
* We have interpreted it as "Accepted", which prevents the user from
actually accepting the event (as a state change is required for us
to send updates to the server/organizer)
* This CL changes the behavior such that a newly arriving event with
a "Busy" status is shown as "No response" in the Calendar, thereby
allowing the user to pick from any of the three possible options.

Bug: 2811859
Change-Id: I321f714e54e66ee8f40f5e2c00587b98bad71a63
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
2e7a84ff26cdfb0f37d6e0a24ed6b2c5a44989f4 01-Sep-2010 Marc Blank <mblank@google.com> DO NOT MERGE: Fix error upsyncing exceptions to all-day events

* Backport of I471e487ec1f7ce11cccdde86f8d8bd8435edd27d (master)

Bug: 2893712
Change-Id: Iaada0969f77a8e41a66426f58ca2886529d3fd8f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4e03d94cccc2e798a08162c270b39233f39be093 25-Aug-2010 Marc Blank <mblank@google.com> DO NOT MERGE: Set HAS_ATTENDEE_DATA to 0 for exceptions

Bug: 2891708
Change-Id: I4eb26a6fe7be13dda34ba39a766a03c901276b73
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
043969163e8629a4d3b583b73dfa29c6e97989c0 29-Jun-2010 Marc Blank <mblank@google.com> Fix regression in Exchange calendar attendee response

* During the fix of a previous late-Froyo issue, a change was made that
appeared superficially correct, but was semantically incorrect. This
changed the sense of the test for whether a reply email was required
and caused the referenced bug.
* The trivial fix is to replace the test with the (older) proper one

Bug: 2764551

Change-Id: I7c72366252cf0607aee31ee0d76aca96a7d5fc2b
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
826c83a2310342217c1e58aeafdd397b75d40b72 10-Jun-2010 Marc Blank <mblank@google.com> Work around problem w/ large CalendarProvider2 transactions

* We're seeing binder transaction failures when we try to send more than around
1500 CPO's to CalendarProvider2 in a batch (the limit is related to memory
usage in binder transactions)
* When an event has A attendees and E exceptions in an event, we currently must
create A*E CPO's; this number can become very large and cause a binder failure
* The result of a failure is looping behavior, resulting in failed sync and very
much reduced battery life
* The workaround here is to redact all non-organizer and non-user attendees from
exceptions once we reach half of the maximum number of CPO's. This has been
determined empirically and is set to 500 CPO's in this CL
* We also reduce our sync "window" to 4 calendar/contact items per sync command
to help limit the potential size of our batch
* For later releases, we should reconsider this and see if something that is more
of a "fix", rather than a workaround, can be implemented

Bug: 2760514
Change-Id: I06ca1a1ae88c772342a9e46b5997c41678e95144
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
8c742a4c65e1ff2618e1005803edb65a42994fb6 27-May-2010 Marc Blank <mblank@google.com> Handle case of null organizerEmail in changed event

* A recent change assumed that organizerEmail couldn't be null while
an event was being added. However, there is an unusual case in
which it CAN be null, and this CL handles that case
* Regression caused by: SHA 7f448dcd470ac509a85368a84f5a55c346ae7e70
Bug: 2719254
Change-Id: Idb8fc79c898bcd2e53fcc8b3e42d0ba67ba762fa
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
b6a08f68d7c49835fffed0719e99c13b50fa525c 26-May-2010 Marc Blank <mblank@google.com> Remember to store modified organizerEmail

Bug: 2709816
Change-Id: Ib26536c127857fa8a1fdf805469872419931f21c
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
7f448dcd470ac509a85368a84f5a55c346ae7e70 25-May-2010 Marc Blank <mblank@google.com> Limit the number of attendees in a synced event

* If there are over 50 attendees in an event, we only store the
organizer as an attendee (the rest are redacted) and we set
the hasAttendeeData flag to 0
* If the user is the organizer, we reset the owner of the event
to a bogus address, which causes the UI to prevent edits to
the event (we can't upload without losing all of the attendee
information on the server). We also prevent the event from ever
being uploaded (belt & suspenders)
* If the user is an attendee, we allow changes to be uploaded
(this would be attendee status and free/busy), but the list of
attendees on the server is removed.
* We also mark events with redacted attendees, even though we don't
use that information currently. In a future version, however,
we could use this to indicate the redacted state to the user.

Bug: 2709816
Change-Id: I2b44af59c598cedf906af12bf9b4eaf7484b9d20
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
8752159c7d081e7ea4d870ae29de6e58da7d50be 25-May-2010 Marc Blank <mblank@google.com> Fix critical typo in CalendarSyncAdapter

* Used wrong name for column

Bug: 2703075
Change-Id: I8107bd2df4fdc2ee79d126a657383b46317d0495
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
3e065170f3374ecb78af2e68bcb28040b83fd928 22-May-2010 Marc Blank <mblank@google.com> Fix bugs related to TZ handling for all-day events

* In bug 2703075, all-day events from time zones at GMT or later
appear a day early; this is because the time was calculated from
the GMT date/time of the event rather than the local date/time of
the event; this CL correctly changes this to use local date/time
* In bug 2707966, device-edited all-day events disappear in Outlook
and OWA after upsync; this is due to the fact that we store all-day
events in UTC on device, whereas we need to upload all-day events
using the original (local) time zone. In this CL, we save away
the original time zone and use it on upsync
* In our decoding of Exchange time zone information, we default to
local time when we can't find a time zone that matches the bias
and DST information; we should really default to a time zone with
the same bias, if one exists; we do that in this CL.
* Add/modify unit tests

Bug: 2703075
Change-Id: Id80c481ecc0eae980b2e91dae7f105f924cfca28
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
d1e00e8aa69ccad3de61ed638b70bf5a9e5bd937 08-May-2010 Marc Blank <mblank@google.com> Fix NPE resulting from attendees-only update from server

* Code for updating attendees in CalendarProvider2 wasn't taking
an attendees-only update into consideration
* Fix code to allow for this, including proper updates for our
selfAttendeeStatus and attendees ExtendedProperty values

Bug: 2668682
Change-Id: I8c7deb971cd0b6846c09ee3cd603f6fc762a9407
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
85a63c3c2f2d00210e9f7957f3d217b7fd028dad 07-May-2010 Marc Blank <mblank@google.com> Fix issues with exception downloads

* It turns out that, in addition to other requirements of the
CalendarProvider, there is another - that the ORIGINAL_INSTANCE_TIME
also be set with hour, minute, and second as zero (in UTC)
* Change setTimes() to properly modify ORIGINAL_INSTANCE_TIME
* Also, there was a regression due to an incorrect validity test
for events; this regression caused all exception downsyncs to fail
* Changed isValidEventValues() to be correct for both exceptions
and original events
* Update tests for setTimes and isValidEventValues()
* This CL also fixes 2658988

Bug: 2664229
Change-Id: I9c8aea08e606ff58e5be37ca81a2d86a181c46f6
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
33f07963eb432704e05544dbdfa209f3f8fb9e9b 05-May-2010 Marc Blank <mblank@google.com> Add checks for Event validity before commit

* Enforce CalendarProvider2's requirements for valid Events
* Add unit tests for the new code
* Backport of change I42ad7acb from master
Bug: 2658149

Change-Id: I8151d035247a7dbb1fda3eae163b24ccfe055299
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
d2c773a80636cfc38ef0528d955c49309325b1d6 29-Apr-2010 Marc Blank <mblank@google.com> Fix issues with incorrect email replies to event organizer

* We were previously storing the user's attendee status in the
SYNC_ADAPTER_DATA column of the Event, but it turns out that
this data isn't available in the Entity we retrieve when
uploading changes to the server
* The result is that we often thought the user's status had
changed when in fact it had not; in these cases, we sent email
to the organizer, often with the wrong information.
* As of this CL, we store the user's attendee status in an
ExtendedProperties row (these values are already exposed in event
entities)
* The logic otherwise remains the same; we now get correct data,
however

Bug: 2638762
Change-Id: Ibe8db90c16b4ca06203f77fd010aa26dde89a556
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
8a19af3739aad25d26754e8a52e986cc38b41db6 22-Apr-2010 Marc Blank <mblank@google.com> Fix upload/download of attendee status

* It turns out that the UI uses selfAttendeeStatus and the attendee's status
from the Attendees table in confusing and undocumented ways
* selfAttendeeStatus is used in the UI, but only in certain cases. Generally speaking,
the Attendees table status is definitive. However, when the user sets his status
from the UI, this data is reflected in the event's selfAttendeeStatus, since for EAS,
the user is always the owner of his calendar
* On downsync, we'll put the user's busy status into the Attendees table
* On upsync, we'll send busy status based on the user's attendee status in the
Attendees table
* We'll use selfAttendeeStatus only to determine whether the user has manually changed
his status via the UI (as before)

Bug: 2615586
Change-Id: I3a82474cfd07cbf5aa595e5214807cb55005cefa
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
849ba0285c0f26b7ad18d35e9095586660a90757 17-Apr-2010 Marc Blank <mblank@google.com> Use METHOD_ALERT instead of METHOD_DEFAULT for reminders

* Exchange has been using METHOD_DEFAULT for reminders, but it turns out
that this doesn't work.
* Changed to use METHOD_ALERT

Bug: 2604156
Change-Id: Ia76bb2fc150202de9c49af9ab8caf86c9bda775f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
a8f7b3e16e97ef8e6d9fb47ae9359f2db5676c94 16-Apr-2010 Marc Blank <mblank@google.com> Store all day events w/ UTC timezone

* All day events are supposed to be stored w/ UTC as the time zone
* We already zero out hour, minute, and day
* Use DTEND for non-recurring and DURATION for recurring all day events

Bug: 2440161
Change-Id: I31f2e5a355b721c06b4022b57ccc8a29b288a5d9
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
095eee41565900a2509256ffcbf6cd67a4c4e345 16-Apr-2010 Marc Blank <mblank@google.com> Set selfAttendeeStatus and busyStatus properly on downsync/upsync

* Set selfAttendeeStatus on download from busy status
* Set busyStatus on upload from selfAttendeeStatus

Bug: 2587076

Change-Id: I34eaa0d3861bcec0cbfd51761b31965e44f5162b
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
3fdaa329692b29c0083008bcbb5c5aa62ae7b9fd 14-Apr-2010 Marc Blank <mblank@google.com> Only set ORIGINAL_INSTANCE_TIME in exceptions

* We were setting this for all events, but apparently CalendarProvider
does not approve, and generates warnings
* Only set this for exceptions

Bug: 2550631
Change-Id: I8a7152eb0d4233432b1a5b5664da964d5433fbae
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
627006a8e3e098f249a93efd2d575b0f0e504340 14-Apr-2010 Marc Blank <mblank@google.com> Fix issue with deleted recurrence

* It turns out that this bug is due to a bad rebase/merge for a previous CL
in which the changed code appears in its new form AND old form
* Fixes change SHA c3aa31820003bd62a863dc28d699cebdbcead228 (CL 48406)
* Don't say it.

Bug: 2587775
Change-Id: I3f70a97e498db30345452b942909448049680fdf
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
0005eba750a10b9b3eda9f8cfb75bdc65c80a919 13-Apr-2010 Marc Blank <mblank@google.com> Fix cancellation messages for deleted attendee

* We weren't sending a proper ics file for the deleted attendee, and
this caused Exchange to send a message to the wrong people (the
referenced bug)
* Split out code that adds attendees to outgoing mail
* Changed the optional last argument to createMessageForX to be a specified
attendee, i.e. the only addressee to be used for the message

Bug: 2548465
Change-Id: I629fcfaffe621408ea460d42c9c7c283929f7e79
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
de3022268982d1ef7e81ef563c6b3a87faa9b002 13-Apr-2010 Marc Blank <mblank@google.com> Always check serverId AND calendarId in queries

* With multiple accounts, serverId's are not guaranteed to be unique
(indeed, they rarely are)
* There were two queries in CalendarSyncAdapter that checked only
serverId and this has caused the referenced bug PLUS others that
would have turned up later on
* This is a critical fix

Bug: 2589815
Change-Id: I49bc6cb5bb4708f4bf4ca60a891ff78f0b25e989
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
e3df9f95ea267c2a6d19386f45ba849a91905902 12-Apr-2010 Marc Blank <mblank@google.com> Sync description with exceptions

* We weren't sending up the event description with exceptions, so
changes to description were being lost on upload
* Move the code uploading description so that it happens with
exceptions as well as top-level events

Bug: 2590020
Change-Id: Ifab556bed68671f3ee8cab02b657adbd8ba9c50c
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
c3aa31820003bd62a863dc28d699cebdbcead228 11-Apr-2010 Marc Blank <mblank@google.com> Send email to organizer if attendee deletes event/exception

* There are two cases, event and exception and both are fixed in this CL

Bug: 2587775
Change-Id: Id325c4877a77074ca6edd4d7fbeb54971d4cf984
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
c5c5bf7da79eeff0c79535ca816d48dc92ee3039 12-Apr-2010 Marc Blank <mblank@google.com> Always add changed exceptions to the upload list

* We were adding deleted exceptions to the "deleted" list; this is bad,
because the exception then gets deleted from the database after the
sync. The symptom is that the deleted exception reappears on the
calendar.

Bug: 2587837
Change-Id: If497f82ba0b2b817d1cef6165ded23d19876528f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
6a4eae5f4104599cddfea67705cc4d594ee7d47f 10-Apr-2010 Marc Blank <mblank@google.com> Fix upload of multi-day all day events

* We were assuming a single day for all-day events
* Use the actual end date
* Make sure we send date/time back to server in local TZ
* Also fixes #2500863

Bug: 2578776
Change-Id: I58767a574248935b9840ce93e634a24e54abe62f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
80bd83fd8550ed1b58c26241aab6830d66289b5e 11-Apr-2010 Andrew Stadler <stadler@android.com> Upsync appropriate organizer name/email

* We need to send name & email for Exchange 2007
* For Exchange 2003, only name & email if the event is new

Bug: 2586661
Change-Id: Ia35c2c7a645a3d20b7031e9a43b8b5044a40f005
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
06699c0d911ad71d5964c68e182745f5c4144569 11-Apr-2010 Andrew Stadler <stadler@android.com> Send meeting status with all upsynced changes

* Meeting status differentiates between appointments and meetings,
which is important in Outlook and OWA
* Fix older, completely incorrect code for upsyncing categories

Bug: 2586071
Change-Id: I277252ef2c31e5b8ec7ceda69c229f5fd100ecdb
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
0cd9cbf08817b18b4221efa15388f5a144ebfab4 10-Apr-2010 Marc Blank <mblank@google.com> Add organizer to Attendees before handling exceptions

* Exceptions take a copy of Attendees when they are created, but
we weren't adding the organizer to Attendees before exceptions
were parsed
* Fix this by adding the organizer just before exception parsing
* If there aren't any exceptions, we add the organizer as before

Bug: 2585817
Change-Id: Ie894682977e38a55d975135c8fc2fd8f2d4b1365
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
1b2ed80da7a438a6900a22c00a2a0052de3df124 09-Apr-2010 Marc Blank <mblank@google.com> Handle exception deletion properly

* First, make sure we catch the cases of DELETED=1 and eventStatus=cancelled
* Second, only send email updates if the user is the organizer

Bug: 2583054
Change-Id: I886efa0f28931dc815bc31d4d6adb3d700f83c6b
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
b6cbf52656f07308ee669a584b6757ca352a3889 09-Apr-2010 Marc Blank <mblank@google.com> Fix auto-send of invites when attendee status changes

* Use AS_SYNC_ADAPTER flag when changing attendee information in
downsyncs
* Allow DTSTAMP to come before new attendee information in the case
in which only attendees are changing
* Add _SYNC_DATA of "0" for all newly synced events

Bug: 2582513
Change-Id: Iacde0ddf3f2a99d108e00ef1991edfc34613f5c7
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
f1bbf0538028a0bf52ad64ae48a15af28a6a1d6d 07-Apr-2010 Marc Blank <mblank@google.com> Send busy_status = 2 on all upsync's

* Right now, we only send this for 2.5 (where it's required)
* If we don't send this for 12.0 and later, the status will be
set to "free", which is almost always going to be wrong
* So always send busy status = 2 (we can't know differently, as
we don't track free/busy)

Bug: 2575611
Change-Id: I11d952b68ac0ef7a022b030037ce6408f72d4a90
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
79976209d74c50fb15646dbc9e87ec97269bdbd9 01-Apr-2010 Marc Blank <mblank@google.com> Synchronize getSyncKey/setSyncKey in Calendar and Contacts sync

* When the sync state of Calendar/Contacts is changed, a number of observer calls
are triggered. In addition, we might have a running sync.
* The syncKey operations need to be synchronized, because we may otherwise
inadvertently use stale data when syncing, which would cause symptoms
as seen in the referenced bug

Bug: 2561864
Change-Id: I03db58fe01c45778d271fad34d8d4940edefe8fe
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
82701d77250850939e64365b8c2a45e59e822cff 01-Apr-2010 Marc Blank <mblank@google.com> Only send meeting emails after upsync is confirmed finished

* We were queueing up emails during our upsync, but before the upsync
was complete. If there were connection issues, we could pile up
multiple copies of the same message, each of which would eventually
get sent out
* Fix is to simply queue up the outgoing mail and send it all after
the sync operation is complete.

Bug: 2515975
Change-Id: Ide3eb2deb6e959d0637d28efabd613efb3c6e209
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
54585c95116e02be6940861d81033c5c02017514 27-Mar-2010 Marc Blank <mblank@google.com> Fix sending of cancellations to uninvited guests

* Had to add an optional argument to the email creator for this case,
since there may not be any remaining addressees to send to (if the
only guest was uninvited)
* The optional argument forces the creation of a message, even if there
are no addressees

Bug: 2548465
Change-Id: I88784f49ce7afedce331fc756c5ecef4e73a07bc
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4b4e00e4ce53a1c782e08f9819e394f34971565f 26-Mar-2010 Marc Blank <mblank@google.com> Fix #2548436 (Use EVENT_TIMEZONE rather than TIMEZONE)

* Prior fix used the wrong column when adding time zone information
to downloaded exceptions

Bug: 2548436
Change-Id: Idc1001fd58d2fba51823624a15862fe439c9ff6a
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
41d17202f5fd4992f870e4596de2c564659e92c3 26-Mar-2010 Marc Blank <mblank@google.com> Make sure we only upload exceptions for the correct event

* We weren't checking calendar id along with original event id when
uploading (original event id isn't unique)
* Fix the query selection to ensure finding the correct exception(s)

Bug: 2545659
Change-Id: I276dd10e2be171bd9d4f3300cdc8843bb28f2781
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
249c6f77c11137de6fbd2c8106959d6a036f0d6a 26-Mar-2010 Marc Blank <mblank@google.com> When syncing, put time zone into exception events

Bug: 2545885
Change-Id: I41d504f16e9fc4776d2d8d7bbd2682b5940cf1d1
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
eba33f8b5a0cc4a28ae5a9d6632df475c4b0a794 25-Mar-2010 Marc Blank <mblank@google.com> Don't send bare line feeds to EAS 2.5

* EAS 2.5 doesn't like seeing bare LF's in Calendar location
and description, and Events including them won't sync back to
the server
* Create a utility to replace bare LF's with CRLF and write
unit test for the utility
* Fix the bug by using this utility

Bug: 2542220
Change-Id: I2c72d23f15e3a922ebe3585e063abe9fa9e2366f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
e4cd885ec42d8f2f642b1b8c9b2740ca666b6075 19-Mar-2010 Marc Blank <mblank@google.com> Handle EAS versions better

* Properly parse the server's supported versions
* Choose the highest server version that we support
* Fail with MessagingException if we don't support any server
versions

Bug: 2527408
Change-Id: I0a2822c8fab31a65c8fea9b78b4a8c23df1804a3
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
92ef20a5c3cc4d040b81661bd21c0f7f79bc5a10 18-Mar-2010 Marc Blank <mblank@google.com> Send cancellation mail to removed attendees

* We now keep track of attendees in the Event's extended properties
* When a message is updated, we compare current attendees with the
original list, and send cancellations to those who have been removed

Bug: 25623726
Change-Id: I7b3df99e62fb3d4a1482bd6d4612647f5bdb756a
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4655cee65a79aed2fb07dc77baee35a9607d2d99 18-Mar-2010 Marc Blank <mblank@google.com> Don't show attendee status for Exchange events

* There are serious issues with showing consistent and accurate attendee
status for Exchange 2007 events
* Unless and until these can be resolved, it is better to simply not show
the user the supposed attendee status (since it might well be wrong)
* In this CL, I never set the attendee status; therefore, it will appear
"unknown" and be shown simply as "Guest" when viewing the Event in the
Calendar app.
* Will create tracking bug for this, so that we can revisit for a later
release.

Bug: 2524410
Change-Id: I97fdd26750c68ff25bbb102547071c728e4124a9
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
0a6b977939dfa508b4f7348fc145644cd62e7fef 16-Mar-2010 Marc Blank <mblank@google.com> Fix dtend synced up to server

Bug: 2511120
Change-Id: I9194da082f568d804f89d087475efcc11651b081
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
ee1ec2384fdd83a17487de2bcfbd9df3b3e4b995 15-Mar-2010 Marc Blank <mblank@google.com> Fix NPE in exception parsing

Bug: 2516099
Change-Id: I4d64c306f2c0421f0145dab11f10bfb174e46c0a
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
8c1613b4f7d942cb53744fc11006211033b81249 14-Mar-2010 Marc Blank <mblank@google.com> Only send one reminder time to Exchange server

* Upsync fails if we try to send more than one reminder time
* CalendarProvider allows an unlimited number of reminders
* If there are reminders, send the largest number (i.e. the earliest
reminder)

Bug: 2513106
Change-Id: I90a2fb145446e403edeabc654f725cc88ef1656e
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
217cfba1f64bb1f86463804bcfeea6fca9ff2aef 13-Mar-2010 Marc Blank <mblank@google.com> Delete Exceptions after deleting an Event

* CalendarProvider does NOT delete exceptions for deleted Events
because the server handles this; this isn't right for Exchange
* Add a second delete operation to delete Exceptions
* Remember to cancel this second deletion for invalid events

Bug: 2512985
Change-Id: I848c8937945b3774251e517071c81a334a77f1a8
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4b3c683014c92ff6e1c9acb96069dffa61e56a22 13-Mar-2010 Marc Blank <mblank@google.com> Improve handling of exception downsync

* We needed to copy some more columns, and also copy reminders
and attendees to the Exception
* Also found a bug in which Description was referenced as a boolean
rather than a String

Bug: 2511405
Change-Id: I485b8d44a6090f8190e681838d2141551227d8f3
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
82e51e06312c76f37900c7b1718af863caeff9af 10-Mar-2010 Marc Blank <mblank@google.com> Send email related to event exceptions

* We weren't sending out appropriate emails for exceptions and other
event updates
* Write exception specific ics file code in CalendarUtilities (in
the existing ics file creator)
* Send appropriate Update: subject for updated events/exceptions
* Compose simple message text consisting of:
When: <time>
Where: <location>
* Prepend message text for exceptions to indicate that the message
relates to a particular instance of the event:
This event has been canceled for: <date>
The details of this event have been changed for: <date>
* New strings were added in CL#44141
* Updated CalendarUtilities tests

Bug: 2501270
Change-Id: I920de8120bc56d5bd565cbde26ff4807be41579f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
019a91e53dc2aa0c2b3d899e21d056f5920b6494 11-Mar-2010 Marc Blank <mblank@google.com> Fix upload of all day events in Exchange calendar

Bug: 2500863
Change-Id: I26f793aa4297103fa513d9cecf4b2b0ec0fa47a6
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
bd2473e818691883e96c9539afd34d8a64a700ce 09-Mar-2010 Marc Blank <mblank@google.com> Only clear dirty flag if we're sure the events were uploaded

* Add new/changed id's to a list, and only clear the dirty flag for
list members
* The implementation is analogous to how deleted items are handled

Bug: 2492857
Change-Id: I3353100ab307a45a5ab684d402253eb589f22008
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
b5dce150680d17f93943a36cc6855b2d786afa90 09-Mar-2010 Marc Blank <mblank@google.com> Upload cancellation exceptions properly

* This was an omission in the code that is now handled

Bug: 2501136
Change-Id: Ib4615e04a1ef61cf07cd356eb3038da3e74a5470
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
b00a660c0af7b0385c409d0b33bd777e7c83c07e 07-Mar-2010 Marc Blank <mblank@google.com> Partially fix #2455341 (Exception adding event w/o DTSTART)

* Apparently, the Exchange server can send event changes that have
incomplete data. This is not documented, and the result is very
bad in that an exception is thrown by CP2, and the sync (and
future syncs) is prevented from finishing
* Wrote some defensive code to detect bad events and simply not
add them
* Open a new bug to track trying to determine why the Exchange
server is sending this kind of data.

Bug: 2455341
Change-Id: Ibcfd412382164351c96f368dc043f38c7b481154
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
54181220e2936163941cb3e219a64f0720acd467 06-Mar-2010 Marc Blank <mblank@google.com> Fix #2492864 (Upsync failures in Exchange 2003)

* Of all crazy things, Exchange 2003 doesn't like uploading the organizer's
email/name in changes. This isn't documented anywhere.
* Don't send up organizer name/email on changes.

Bug: 2492864
Change-Id: I1f2aefb6f9020025578325c5c7b3cf869f17e27f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
db9f3d2441d9210e8155f942ba240f9a15f88075 05-Mar-2010 Marc Blank <mblank@google.com> Fix #2490068 (Exchange 2003 won't upload)

* It turns out that Events don't store null for empty fields like location
and description, but rather an empty string.
* Exchange 2003 doesn't like seeing empty values, so check for this before
uploading.

Bug: 2490068

Change-Id: Ib208f9d6ec116a99adf798939dfbc4d4bdd15edf
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
989552c10744e2d7f8fca1bdb2baef5273a8a0b9 02-Mar-2010 Mihai Preda <preda@google.com> Move parseDateTimeToMillis() to com.android.email.Utility.
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4476b2a1da49b94569ba7501327d2e9422308f38 02-Mar-2010 Marc Blank <mblank@google.com> Fix #2478711

* We needed to check that clientId wasn't null before sending it back
to the server
* Exceptions don't have a clientId

Bug: 2478711
Change-Id: Ic0d42bb699605a7bb77535b050a4d03b4b6b8b09
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4577f71f76c94dc9fcb06efd2656970925dd3f6a 27-Feb-2010 Marc Blank <mblank@google.com> Refine meeting invitation emails; include VTIMEZONE

* VTIMEZONE blocks must be sent in our ics files for meeting
invitations that are recurring, as the originator's time zone
is critical in making attendee's calendars accurate
* Created a utility to convert TimeZone to VTIMEZONE data; the
utility successfully generates data (including recurrence rules)
for the entire tzinfo database (the source of TimeZone).
* Updated our ics files to include VTIMEZONE when appropriate and
send DTSTART/DTEND in local time in that case
* Wrote some unit tests, but more are needed

Change-Id: Iccbdd00cd3b2be2da058b344ebacd17ed6fb0e3d
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
29c38d2c84273851282ae3c799f5bf1845202065 26-Feb-2010 Marc Blank <mblank@google.com> Send cancellation email when user-created event is deleted

Bug: 2465496
Change-Id: I49bf9951e816a4500b7622cbca84fb75edfdb76c
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
ec2f181b2ce3b01a2a1c50c8a86078de992fd389 02-Mar-2010 Marc Blank <mblank@google.com> Fix build break (Calendar field changed name)

Change-Id: I9532c459f3cf624fa88269370fa36d191481e500
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
f8b45d934b7e0acf82ba96b2c48c652d182fdb98 01-Mar-2010 Marc Blank <mblank@google.com> Stop calendar/contacts sync in progress when sync setting is turned off

* Syncs in progress weren't checking the getSyncAutomatically setting in
the account; therefore, a long sync would continue running even though the
user unchecked the "Sync Calendar/Contacts" box in the settings
* Make the adapters check the flag each time through its sync loop (which
is currently 5 items); this should cause in-progress syncs to stop within
a few seconds

Bug: 2185319
Change-Id: Ie181f6de4219ecf27fff58ed59a277ae285622c5
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
4c6683f152426d60602573535164cd07d3456f45 26-Feb-2010 Marc Blank <mblank@google.com> Fix # 2467153 (Handle change in attendee status from Calendar UI)

* Fill in this missing piece of meeting related functionality.
* We keep track of the last synced attendee status in the newly
created syncAdapterData event column
* When this changes, we (in addition to syncing up the change)
send an email to the organizer (unless we're the organizer, of
course)

Bug: 2467153
Change-Id: I6332fb6d0839e33d4c54bd4358ee0f154bff6612
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
481ad6a3c5c46e6a25acf787ed1ab98423fbe136 25-Feb-2010 Marc Blank <mblank@google.com> Fix some nasty bugs w/ Exchange calendar upsync

* In #2469254, uploaded new events were rejected because the time zone was
sent after dates; this doesn't matter to Exchange 2007, but it apparently
does to Exchange 2003
* Also, I noticed that upsync was upsyncing all new events, regardless of
whether the event belonged to the Calendar being synced! So this is
fixed as well.

Bug: 2469254
Change-Id: I651d591cf26e00b414f6da19897fddcdb840c97c
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
d4dc57972d5eadad0c9059caa668cd959960949a 25-Feb-2010 Marc Blank <mblank@google.com> Fix #2469569 (Broken EAS calendar downsync)

* Category parsing switch statement was missing a break;

Bug: 2469569
Change-Id: If815300a2ef3824f837f5fa41f55b9421cac8d9b
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
89be77eaea65211fea0ca32efd538318c7e049b3 23-Feb-2010 Marc Blank <mblank@google.com> Send replies to exchange meeting requests

* When the user selects accept/decline/tentative in MessageView, we now send
an email to the organizer, with an iCalendar attachment indicating the reply
* Added a unit test for the reply case, but more tests to be added to handle
other circumstances

Change-Id: Iff799d88a92b6546735bf4965b22febf3a82b56f
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
18d7222359ac54a5fa788b4a8bb8d58ee16f152b 21-Feb-2010 Marc Blank <mblank@google.com> Send meeting invitations for new/updated Exchange events

* Wrote utility to create an ics file (iCalendar) based on a
CalendarProvider Event. This is a good first pass, but we need
to consider whether to include alarms, etc.
* Use aforementioned utility and new convenience method to send
meeting invitations to attendees of newly created meetings (events)
when they are uploaded to the server via the CalendarSyncAdapter
* Overall, attempted to modify existing provider and rfc822 output
code as little as possible. Rfc822Output is actually very limited
in its capabilities and should be made more robust in future

Change-Id: Ie20b9137df56dc414de6737d05fa40ec9cdf47e0
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
8068c99945661c7a32d3ae45e3a630d165fa2e3f 20-Feb-2010 Makoto Onuki <omakoto@google.com> Don't use hidden APIs

- The entire android.pim package is hidden.
Use java.text.ParseException instead of android.pim.DateException.

- TelephonyManager.getDefault() is hidden.
Use Context.getSystemService() instead.

- Use newly added Base64 in the framework.

Bug 2226160
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
15036ca0624b2b396beb0ef44ed8a5899f1a1db0 20-Feb-2010 Marc Blank <mblank@google.com> Fix #2457665 (Guests don't appear in Exchange events)

* The "hasAttendeeData" column needs to be set to 1 for all Exchange
events (the case in which the value would be zero doesn't pertain
to Exchange events)
* Also, move code for organizer attendee to the proper place

Bug: 2457665
Change-Id: I3260f883135bb222ce475ccbabf5ba151ab7f557
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
d3fba0a2d7e943d432cc593fe6602223fa4ae834 19-Feb-2010 Marc Blank <mblank@google.com> Fix #2451630 (No calendar after upgrading Eclair->Froyo)

* Initialization of CalendarProvider Calendar was being done at
account creation time, but Eclair accounts won't have had this
done.
* Move Calendar creation code into CalendarSyncAdapter where it
will be created before the first sync.

Bug: 2451630
Change-Id: I74c669d99f4c8aae4c5847f5cb9b0ca7f44929e2
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
476ee8f7900d55621017966a2d7396cc192af0f2 18-Feb-2010 Marc Blank <mblank@google.com> Make sure we always send an attendee name w/ email address

* EAS requires an attendee name in addition to an address in upsynced
Calendar items.

Change-Id: I9384dcba6fd2fff8be960e18297ef7f641e0abe7
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
694257cb7e7a191b3314cb209b6c38a8a07583ef 12-Feb-2010 Marc Blank <mblank@google.com> Handle calendar sync state changes by observing Calendars; cleanup

* Use a content observer to detect changes in Calendars; we use this to
determine whether or not sync has been turned off. If sync is turned
off, all events will be deleted, so we need to reset the sync key
* Make sure that all code working on Contacts also now works on Calendar
(push, etc.)
* Remove some old crufty logging and out-of-date comments
* Addresses 2433061

Bug: 2433061
Change-Id: I6299168903fcce9bf820b72b5f6bb157d9169653
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
e81b2bfe5ee4f2aa1264433583a79475b1ed0ce9 08-Feb-2010 Marc Blank <mblank@google.com> Fix bug w/ all day events (hr, min, sec need to be zero in DTSTART)

* For some reason, the recurrence expansion system requires hr, min, and sec
to be zero for DTSTART when allDay=1
* Force hr, min, and sec to zero for all day events

Bug: 2427658
Change-Id: Ief6b5b571fa6bc6947bcbc9cda02ab2c04f27549
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
204b7a3bf4f043415e04960e38827b07163633a1 05-Feb-2010 Marc Blank <mblank@google.com> Fix #2422815 (Exception in EAS calendar upsync)

* Exception is due to the presence of values in ContentValues that
are null (would normally expect those fields to be absent)
* Fix all relevant cases that might produce an NPE in this case

Bug: 2422815
Change-Id: I637a21307c2d518912edce093de90a06d94614e5
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
0bbe34bce5284bf20fb60b20fc6679c3f9b4749a 05-Feb-2010 Marc Blank <mblank@google.com> Fix #2420732 (crash in Google Services Framework)

* Exchange calendar sync created Event records for exceptions
that didn't have a _sync_id
* This caused google calendar sync to try to upload these
Events as new, which caused an Exception to be thrown
* Fixed EAS calendar sync adapter to generate a _sync_id for
exceptions in the form <parentId>_<exception start time>

Bug: 2420732
Change-Id: I46769175ca89ffa4cec4fe8b0c35ef2242536185
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
6f3013b78708321879728c28db044ab233cb2016 03-Feb-2010 Marc Blank <mblank@google.com> Build proper TimeZoneInformation strings for upsync; fix bugs

* Create full TZI strings for upload of events (previously, we
omitted DST information)
* Add documentation to some unit tests
* Put in correct logic for determining if upload needed
* Fix problem w/ parsing empty tags

Change-Id: I268ce8a2db30b3cfdf0e44f6a78befd6bd933243
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
faed6178b1858f0e6df388a409d14fb3f94afefa 02-Feb-2010 Makoto Onuki <omakoto@google.com> Move Eas.ACCOUNT_MANAGER_TYPE out of the package.

Moved Eas.ACCOUNT_MANAGER_TYPE to Email.EXCHANGE_ACCOUNT_MANAGER_TYPE.

This constant is not related to the exchange protocol, and referred in
a lot of different places. Moving it out of the package will make it a lot
simpler when removing exchange dependency.
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
31ac14aa511ddcd28746574a444b5f0660cc5fcf 01-Feb-2010 Marc Blank <mblank@google.com> Remove default EAS Calendar parser logging

Change-Id: Id05d9721b1f40242cb9f77ae21575bfef2d1b671
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
7a2776a5b4fe4413c676bbf3e8c5a21bc961fc5c 01-Feb-2010 Marc Blank <mblank@google.com> Further work on Exchange calendar sync; exception upsync

* Add code to upsync exceptions; debug same
* Use AccountManager to handle sync keys (as w/ Contacts)
* Add unit tests in next CL

Change-Id: Ib8526d70de33ed7e551b9713a3bbf1ad80612948
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
dc6930c0b36950d420c8da0e70164c5c4e083fbe 29-Jan-2010 Marc Blank <mblank@google.com> Additional work on new Event upload to EAS server

* Added support for reminders and recurrences
* Note that Duration class is copied from CalendarProvider with only
formatting changes

Change-Id: Icf399df422f813ba8e7880646bfbc96a2156a204
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
d99dbf01fb99d6e028bbbf975fab721c5a0c2562 28-Jan-2010 Marc Blank <mblank@google.com> Fix problem with Event creation by EAS calendar sync

* Turns out that DURATION is required by CalendarProvider, and
DTEND has a different meaning than it does to EAS
* Fix downsync to create proper recurring events

Change-Id: Ibf85422de73579a93de89b2c27c13f96994bedc8
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
f3fcb8929e3690bc092aec0d4d643b346f079acd 29-Oct-2009 Marc Blank <mblank@google.com> Implement Exchange calendar sync support

What should be working:
* Events sync down from server and appear in calendar
* Recurrences and exceptions appear in calendar
* Changed events on server should be reflected in calendar
* Deletions on server should be reflected in calendar
* Push of new/changed/deleted events should work
* Changes on device are NOT synced back to server
* New, single events on device are synced back to server
(no time zone, attendee, or recurrence support)
* Checkbox for syncing calendar added to setup flow
* System sync glue in manifest, etc.
* Bugs are to be expected
* A few unit tests; needs more

Change-Id: I7ca262eaba562ccb9d1af5b0cd948c6bac30e5dd
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
aa69a174774699d452233f8ffece021f9851011e 24-Aug-2009 Marc Blank <mblank@google.com> Add initial support for uploading new Contacts to Exchange server

* Refactor the sync adapters to separate out parsing from commit
* Use ContactsProvider to save the SyncKey for contacts
* Fixes #2072664 and #2072456

Change-Id: I1e85c498496e83d9523489636a75f366f7fbd106
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
1e7829fb650f73ec13c1efadf1bc220d4ab19956 08-Aug-2009 Marc Blank <mblank@google.com> Switch from HttpURLConnection to HttpClient
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java
f00dccd32125c727cc18d837b59c15c95f5d78bc 31-Jul-2009 Marc Blank <mblank@google.com> Massive reworking of EAS serialization; much smaller and faster now

* Remove all use of Strings in favor of the parser's static final int's
* Strings remain in Tags for debugging output only
* Renamed lots of classes to be more consistent
* Centralized logging behavior in Eas class
* Found and fixed some bugs in the process:
- Account deletion wasn't removing HostAuth's correctly in the trigger
- Adding a second EAS account was trashing the first one
- Fixed looping sync behavior caused by Exchange 2003 bug
/packages/apps/Email/src/com/android/exchange/adapter/CalendarSyncAdapter.java