capacitor-community / contacts

Contacts Plugin for Capacitor

Home Page:https://capacitor-community.github.io/contacts/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add thumbnailImage projection

gregzo opened this issue · comments

Is your feature request related to a problem? Please describe.
As it stands, on iOS the plugin retrieves the full size image, which can slow things down considerably.

Describe the solution you'd like
When displaying contact images as thumbnails, it would be much more efficient to retrieve CNContactThumbnailImageDataKey instead of CNContactImageDataKey.

I'm happy to give it a shot on iOS. I'd simply add a new projection for thumbnailImage and implement the Swift plugin accordingly. I have no experience with Android dev unfortunately.

Describe alternatives you've considered
We could:

  • resize the images and store them in a cache. Wildly impractical and overkill.
  • write a quick and dirty plugin which only performs thumbnail image retrieval. An hour of work tops, but community wouldn't benefit and our codebase would be that much dirtier.

After looking at the Android code, and at the relevant docs (https://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo#PHOTO), it seems that the current behaviour is to get the thumbnail size asset on Android, and the full size asset on iOS.

Ideally, we would need to parametrise the image projection to retrieve the asset matching the requested size. In order to preserve the current behaviour, I propose that we:

  1. Add an imageSize?: "display" | "thumbnail" property to Projection
  2. Map accordingly native side
  3. If imageSize is undefined, default to thumbnail size OR keep current behaviour for compatibility reasons (full size on iOS, thumbnail on Android)
commented

Yeah, I have done some work on this. I've got a few changes on device locally. I'll commit them when I've got the time. If I remember correctly, I was struggling with keeping it both consistent and backwards compatible.