When you receive a message from an unknown contact their avatar is just a "+" in a circle.
Worse than just unhelpful, this gives the false impression that this should be an actionable button.
The reasoning is the "+" is the "intials" for their display name (which is just their phone number if they're not in your contacts), but if you had e.g. "David Bowie" in your contacts it would appear as "DB".
I'll take a shot at this.
Thoughts on 7d29635? I'm not in love with the way I determine the name is actually a number, but I can't find a better way to do it when we're built from a thread without adding properties to the thread object.
The artwork is from The Noun Project, and the branch includes the addition of attribution.
Here's what it looks like in the app:

Easiest solution right now is to be cohesive with Android and Desktop which use '#' until an asset is created for use across all OS's.
Easiest solution right now is to be cohesive with Android and Desktop which use '#' until an asset is created for use across all OS's.
That makes sense. Thanks @riyapenn.
With respect, I would like to argue the case that the original suggestion of using an avatar image instead of a “#” would be the better choice until a cross-platform asset is attained, because:
In addition, the proposed branch (7d29635) has a complete solution that uses images. It would be trivial to change it to use “#,” but it would be similarly trivial to just use images as-is, as the work is done.
I’m fine with the “#” suggestion, and will assume that’s the direction unless someone from the project weighs in otherwise. Just sharing this because I would be remiss if I didn’t express this opinion.
The solution for this issue can also address: Avatar for a contact saved in iOS contact list but with no name just a number.
Alternatively, I can create a new issue with "unknown contact name" where the solution relates to https://github.com/WhisperSystems/Signal-iOS/issues/1519 vs adding to this issue of "unsaved contact"

@riyapenn, while working on this issue, I encountered and fixed the "Avatar for a contact saved in iOS contact list but with no name just a number." issue, so no need to make a separate issue for that.
I liked the feedback about renaming the method, and changed it from nameStringForPlaceIdentifier to displayNameForPhoneIdentifier to match how it's commonly used. This name will require a merge of this SSK branch.
There's a new method called - (BOOL)nameExistsForPhoneIdentifier:(NSString *)identifier that reports whether or not we'll get a non-phone-number name for a contact. Because OWSContactsManager falls back on setting the first name to be the first phone number in absence of an actual name or business name, and because I didn't want to change this behavior and risk regressions, this method will compare the name to the first phone number (if it exists) and report that there is no name if it matches. This should fix the behavior riyapenn described above.
The final commit reverts the avatar image and uses "#" instead. Both commits should compile cleanly if you'd like to compare and contrast.
Looks good @roostr. When you're ready, can you submit a PR for SSK and Signal-iOS? I can take care of fixing up any Podfile references upon merging.
With respect, I would like to argue the case that the original suggestion of using an avatar image instead of a “#” would be the better choice until a cross-platform asset is attained, because:
Also, thanks for the rationale. Ultimately we prefer to stick with the "#", mainly for platform cohesion, despite your reasonable critique.
Also, thanks for the rationale. Ultimately we prefer to stick with the "#", mainly for platform cohesion, despite your reasonable critique.
Sounds good, thanks for the consideration, and I appreciate the explanation of the decision.
Going to incorporate your latest suggestions, then I'll send some PR's.
Contrary to what I've been doing in earlier PRs, I'd prefer to not squash and push --force for readability and to correspond with the evolution of this discussion and review. Does that work for you? Please feel free to squash before merging as you see fit. Also, my intention was to make this a FREEBIE, but I forgot that in the very first commit, so if you squash, my desire is to include FREEBIE.
Both PRs are now prepared for evaluation.