Introduced format aware phone number comparison to allow improved
matching phone numbers with contacts.
Phone numbers are also displayed formatted on a phonebook/calllog
list view and on detailed contact info view.
Entered and e164 number are verified to match each other during
processing db request.
Signed-off-by: Marcin Smoczyński <smoczynski.marcin@gmail.com>
Fix empty calllog title when number comes in national format. The
problem was caused by:
1. making assumption that every number from cellular network comes in
e164 format which is not true,
2. using e164 number when looking for contact matching calllog entry
without checking if e164 exists for calllog entry.
Fix problem by:
a.d.1 - replacing `PhoneNumber::viewFromE164` with less strict
`PhoneNumber::Parse` method which basically is a convenience method
which creates `PhoneNumber` entity and uses it to create a `View`.
a.d.2 - instead of fetching e164 directly introduce `getNonEmpty` method
of a View, which returns e164 number if it is present and entered number
otherwise.
Signed-off-by: Marcin Smoczyński <smoczynski.marcin@gmail.com>
Bugs:
- invalid number validation
- no `const` qualifier in comparison operators
- lack of comparison operator for PhoneNumber::View
Add appropriate unit tests.
Use specialized class to to pass phone number between apps and services
instead of ambigious std::string. Introduced class (utils::PhoneNumber)
wraps calls to libphonenumber providing more convienient interface.
However using libphonenumber directly may be resource hungry in terms
of stack, heap and cpu usage, so helper class has been introduced to
pass information about phone numbers (utils::PhoneNumber::View). It is
designed to maintain integrity thus can be created from an instance of
utils::PhoneNumber only or moved/copied to.
Add new field to the calllog db holding e164 formatted number. Both
entered and e164 numbers will be needed to be able to match with
contacts correctly.
Add constexpr information about country codes (utils::country).