Skip to content

v0.2.0 - Colossal milestone reached ❀️πŸ”₯

Compare
Choose a tag to compare
@vestrel00 vestrel00 released this 25 Mar 19:34
· 230 commits to main since this release

release-banner

It's been half a year since the initial release of this project... Now, through (more) hard work, ❀️, πŸ”₯, and dedication, the biggest project milestone has been reached ⭐️

Release video in YouTube

πŸ–Ό Release overview

⚠️WARNING: This release may potentially trigger seizures for people with photosensitive epilepsy. Viewer discretion is advised.

This release contains...

πŸ’‘New featuresπŸ’‘ βš’οΈImprovementsβš’οΈ
🐞Bug fixes🐞 🚨Breaking changes🚨

This release marks the completion of the first and biggest milestone in the πŸ—ΊProject Roadmap! At this point, most of the core features have been implemented with complete πŸ“œDocumentation.

There is still a lot of work to do to reach v1.0.0, the first true semantic version of this library. Note that versions prior to v1.0.0 does not follow semantic versioning ✌️

πŸ’‘ New features

What's new?

Blocked phone numbers

You now have read & write access to blocked numbers πŸ›‘

blocked-numbers

Issue Documentation

SIM card access

You are now able to read & write contacts from the SIM card πŸ“±

sim

Issue Documentation

Contact LOOKUP_KEY

Lookup keys allow you to load contacts even if they get linked/unlinked, perfect for creating shortcuts to contacts from the launcher πŸ”

lookupkey

Issue Documentation

Google Contacts app custom data

The customdata-googlecontacts module gives you read & write access to custom data managed by the Google Contacts app 🌈

googlecontacts

Issue Documentation

Pokemon custom data

The customdata-pokemon module allows you to give your contacts their favorite Pokemons πŸ”₯

pokemon

Issue Documentation

Role Playing Game (RPG) custom data

The customdata-rpg module allows you to assign a profession and stats to your contacts βš”οΈ

rpg

Issue Documentation

βš’οΈ Improvements

Level up

Revamped documentation with MkDocs

Didn't like the old documentation website? Me neither. Now, it's prettified, structured, and searchable using Material for MkDocs πŸ†

mkdocs

Issue Announcement Documentation

BroadQuery matching for phone and email

Narrow down your broad search to just phone or email instead of all data kinds πŸ₯

Get contacts with matching data of any kind (default, unchanged),

val contacts = Contacts(context)
    .broadQuery()
    .wherePartiallyMatches(searchText)
    .find()

Get contacts with matching phone,

.match(Match.PHONE)

Get contacts with matching email,

.match(Match.EMAIL)

Of course, you can use the Query API to make your own advanced, custom matching criteria.

Issue Documentation

GroupsDelete is now available for all supported API versions (19 to 31+)

The library now allows you to delete groups starting with KitKat (API 19) πŸ‘

val deleteResult = Contacts(context).groups().delete().groups(groups).commit()

Issue Documentation

🐞 Bug fixes

Bug fixes

Fixed Query returning no results when AND'ing fields of different mime types in WHERE clause

This is one of those rare occasions when binary trees and recursion saves the day. Traversing the binary tree structure of the Where clause in post order, simplifying as needed, enables you to AND fields of different mime types together 🀯

val contacts = Contacts(context)
    .query()
    .where { Email.Address.isNotNull() and Phone.Number.isNotNull() and Name.DisplayName.isNotNull() and Organization.Company.isNotNull() }
    // Or for shorthand...
    // .where(listOf(Email.Address, Phone.Number, Name.DisplayName, Organization.Company) whereAnd { isNotNull() })
    .find()

Issue Documentation

Fixed Query and BroadQuery returning RawContacts that are pending deletion when includeBlanks(true)

RawContacts that have been marked for deletion but not yet deleted (perhaps because of no network connectivity preventing a sync) are no longer returned in queries of any configuration πŸ€—

val contacts = Contacts(context)
    .query()
    // or .broadQuery()
    .includeBlanks(true)
    .find()

Issue Documentation Documentation

Fixed GroupsQuery returning Groups that are pending deletion

Groups that have been marked for deletion but not yet deleted (perhaps because of no network connectivity preventing a sync) are no longer returned in queries πŸ€—

val groups = Contacts(context).groups().find()

Issue Documentation

Fixed possibility of DataContact, RawContactContact, and ContactRefresh extensions returning incorrect result if Contact has been linked/unlinked

The ExistingDataEntity.contact, ExistingRawContactEntity.contact, and <T : ExistingContactEntity> T.refresh will return the correct contact even if it has been linked/unlinked πŸ€—

val contactsApi = Contacts(context)
val parentContactOfData = email.contact(contactsApi)
val parentContactOfRawContact = rawContact.contact(contactsApi)
val refreshedContact = contact.refresh(contactsApi)

Issue Issue Issue Documentation

🚨 Breaking changes

Breaking changes

  1. Installing all modules in a single line is only supported when using the dependencyResolutionManagement in settings.gradle
    • Post release panic monologue Documentation
  2. Renamed BroadQuery function whereAnyContactDataPartiallyMatches to wherePartiallyMatches.
    • Issue Documentation

πŸ“ Full Changelog

Changelog

The amount of additions from v0.1.10 to v0.2.0 are... colossal!

Changelog

πŸŽ™ Acknowledgements

Give back

It has been many months since this project was featured in Android Weekly. It has also been many years since I have relied on Android Weekly to help me stay on the cutting-edge with my Android development. I am extremely grateful for the service that the Android Weekly team have been providing for the entire Android community for the past decade πŸ™

In the spirit of giving back to their legendary service and to promote this project's colossal milestone, I proudly placed a sponsored post in the upcoming Android Weekly ❀️

πŸ—£ Discuss

Discuss

Have questions, comments, or concerns about this release?

Release checklist

πŸ™ Please help support this project

Help

You think this project is useful? Are you using it? Are you impressed with this release notes? Would you care to show your appreciation? Then, please ⭐️ this repo and maybe even πŸ•ŠTweet about it! For more ways to show your support...

Help discussion

❀️ I also shared this colossal release with the r/androiddev community.

βœ… This release page has been reviewed and critiqued by the r/opensource community.