Optimization for detemining conversation position

When the UnderlyingCursorWrapper is created, the positions of
conversations are saved. When the UI wants to determine the position
of a conversation, the ConversationCursor first looks up the position
in the underlying cursor wrapper.  Then for each of the deleted items
in the cache map, if the deleted items is before the desired
conversation, the position is decremented.

Note: If the ConversationCursor ever deals with insertions of items
that are not in the underlying cursor, this logic will need to be
updated.

Bug: 7543652

Change-Id: Ic46a16c6e93f9afd08835f2600cbcfbaa6f308aa
3 files changed