Обнаружение одновременных изменений события - PullRequest
0 голосов
/ 06 июня 2018

Я пишу SyncAdapter для синхронизации календаря, и мне интересно, как я могу обнаружить правки, которые совпадают с синхронизацией.Я не нашел ничего в документации по этому делу.

Пример: 1) SyncAdapter получает курсор от провайдера календаря со всеми грязными событиями, 2) синхронизирует их и 3) сбрасывает грязные флаги.Между 1) и 3) пользователь изменяет одно из грязных событий.Эта модификация не будет синхронизирована, потому что флаг сброса сбрасывается после редактирования!

Я знаю, что у поставщика контактов есть поле версии, которое можно использовать для этого.А как насчет провайдера календаря?

1 Ответ

0 голосов
/ 25 июня 2018

Вот «хакерское» решение (я сам не пробовал).

Перед выполнением шага 1 вы заменяете значение поля DIRTY на 2 (или любое другое значение).кроме 0 и 1) для всех строк, которые имеют DIRTY = 1.

, т. е. в SQL это будет что-то вроде

update events set DIRTY = 2 where DIRTY = 1 and account_type = 'account type'  and account_name = 'account name';

Тогда вы синхронизируете только те, которые имеютDIRTY = 2.

Когда вы сбрасываете флаг DIRTY, вы делаете это только для тех, у кого все еще есть DIRTY = 2.

Если событие имеет DIRTY = 1, оно былоизменено между ними, и вам нужно начать все сначала.

CalendarProvider устанавливает DIRTY = 1 всякий раз, когда вызов не-синхронизирующего адаптера изменяет событие.Вы можете использовать это для обнаружения любых изменений во время синхронизации и «подтверждать» только те события, которые не были изменены.

...