After looking in the source repo I'd have to say the database design
of both Contacts and Calendar is unsuitable for multi-host
synchronization (or you will be competing with GSync for the dirty
flags).

I you're in control of the system image the best way would probably be
to fork the code for the Calendar and Contacts providers and add a
proper changelog to both databases.

On 30 Mar, 14:46, AL <aaron.long.l...@gmail.com> wrote:
> Hi, Experts
>
> Our team is creating an Exchange ActiveSync client for an Android
> product.
>
> We met the issue of tracking contacts/calendar changes. Here are some
> proposals we can image. Please advise or give your suggestions.
>
> 1. Like Funambol SyncML for Android, before the sync session,
> calculate each PIM record's hash then figure out the add/update/delete
> change.
> Pros: no dependence on android sync framework
> Cons: time cost is high. It takes 4 minutes to scan 1000 records in my
> emulator. Considering we will launch the sync once any record change
> occurs on device, it is not acceptable.
>
> 2. Make use of _sync_dirty field and _deleted_people table in PIM
> database. The problem is, ContactsProvider does not allow the client
> application to access _deleted_people and clear the _sync_dirty field.
> So we have to modify the ContactsProvider andCalendarProvider.
> The possible change maybe: Add an EasContactsProvider, extended from
> ContactsProvider, then export it by adding a provider section in
> GoogleContactsProvider's AndroidManifest.xml. In EasContactsProvider,
> override insertInternal, updateInternal, deleteInternal and
> queryInternal to allow Exchange ActiveSync service to access
> _deleted_people table or clear the _sync_dirty flag.
> Pros: performance is good
> Cons: seems not a formal way.
>
> 3. Broadcast change notification Intent in ContactsProvider/CalendarProvider. 
> The change notification includes record uri, change
> type and the process id that causes this change. Sync Engine will log
> these changes and will not use any _sync fields in later sync session.
> Changes in ContactsProvider andCalendarProvider:
> For change on single record, if main table is changed, report the
> change. If child table is changed, report UPDATE for the main record.
> For changes (update/delete) on multiple records, if main table is
> changed, query out the records and report change for each. If child
> table is changed, query out the records and report UPDATE for each
> main record.
> Pros: Other sync engines can also make use of this change
> notification.
> Cons: Low performance when multiple changes occur.
> If Google enhances its content observer to broadcast detail change
> info (uri, type, pid), that will be nice. The pid is used for a sync
> engine to check if a change is caused by itself.
>
> 4. Make use of the Android sync framework. To be honest, I doubt
> whether the current sync framework supports contacts/calendar content
> provider to be sync'd by multiple sync protocols without modifying
> Google's code. If any expert has any useful information, please let me
> know.
>
> Regards
> Aaron
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to