* Ensure NotificationsManager has dependencies
Otherwise it's easy to mess up the order of the required dependencies.
* move AccountManager into Environment, it's heavy to construct
// FREEBIE
number
The invite contact picker was rendering the "#" avatar for contacts who
had a name, but no phone number.
In some ways this approach is dumber. But since we have "surprising"
logic to set the contacts firstName to a phone number or maybe a company
name when contacts are built from ABContacts, this approach is more on
the level with the existing assumptions of what could be in that field
(which is to say, pretty much anything).
// FREEBIE
For consistency with the Android and Desktop client behavior.
* Show a placeholder avatar when no image, initials (#1512)
If all we know about the user is their phone number, their avatar image
is rendered as a placeholder. Previously, it would render the first few
characters of their phone number as if they were initials (eg. "+")
* Rename, extend OWSContactsManager methods (#1512)
Rename from: nameStringForPhoneIdentifier
to: displayNameForPhoneIdentifier
Also, add:
- (BOOL)nameExistsForPhoneIdentifier:(NSString *)identifier;
Which reports whether there's any "name" for a contact.
* Remove unused typedefs
These aren't used in the project anymore, and they were causing
compiling warnings due to a lack of nullability indication.
* Resolve some OWSContactsManager nullability warnings
Did a pass through all of the existing nullability warnings in
OWSContactsManager. Tried to pick descriptors that best reflected the
behavior of the methods.
// FREEBIE
Preferred to the system contact picker because:
1. removes "group" clutter from header, unlikely to be used much.
2. can select while searching
3. fixes unified contact problem where e.g.
If only one of your contact has a phone number, they appear disabled
when choosing to invite via messaging, even though the other linked
contact *does* have a phone number.
4. label users w/o email so it's clearer why they can't be selected
Also:
* Twitter share-image was too tall
// FREEBIE
* Spruce up compose contact-picker
- Fix random sorting for contacts missing first or last name
- Add Avatar to contact picker
- de-dupe contacts
Better copy for INVALID_MESSAGE error.
// FREEBIE
There was a bug in voiceover mode. When reading messages, Voiceover
would read out "message author: message content" for each chat bubble,
but the message author was always the name of the chat. So if it was
a contact chat, every message would be read as if from the other party,
and if it was a group chat, every message would be from the title of
the group.
This patch looks up the display name for the given signal id so
Voiceover reads the correct name for each message. It will read "Me" if
the message is outgoing.
This is an expedient, but not good, "fix". Some messages are going to
have extra space at the bottom of the bubble. But, for the time being,
that's preferable to getting messages clipped.
// FREEBIE
The earlier fix for the broken ios10 emoji font ended up breaking
messages for some users with a tall font.
Here we have a lighter touch - ensuring we don't touch messages that
don't use emoji.
Also, introduce a different approach to the fix, rather than trying to
compute the bounding rect of an appropriately attributed string, just
add an extra bit of height per line.
This approach isn't ideal for long messages with only one emoji line in
them, but the previous approach was incompatible with Chinese messages
that also contain emoji. See the new
`MesssagesBubblesSizeCalculatorTest.swift` for test cases considered.
// FREEBIE
* Separate registering an account from registering for push notifications
* Allows us to complete registration without prompting user for
notification settings.
UX Changes
----------
* Automatically keep push tokens in sync on startup.
Push tokens *can* change, though they rarely do. It happens more often
for people switching between appstore/beta builds.
fixes#1174
* Show alert with registration failure
* add secret 8-tap debug log gesture to registration flow
* Move registration to separate flow
* don't see flash of inbox when first launching
* show useful error messages when given wrong code / no code
* remove background fetch
We werent using it, but only relying on a side effect of it which is
no longer necessary.
Code Changes
------------
* More registration logging.
* Install PromiseKit with carthage
Our dependencies are not yet framework compatible, so we can't use
cocoapods.
* Merge preferences util "category" into superclass.
The immediate reason for this is Swift interop was assuming optional
types were not optional, and exploding when a value was nil.
This is clearer anyway, since we were treating it like a subclass, and
it was the only thing using the class anyway.
* auto-genstrings now searches *.swift (and *.h, which was previously
broken) for translateable strings.
// FREEBIE
On iPhone 6 and above, media bubble sizes are 10% wider
On iPhone 5s and below, media bubbles are fixed in their larger dimension and the other dimension is calculated based on the aspect ratio of the underlying image (clamped to a reasonable min/max height).
// FREEBIE
Media bubbles (for photo, video and animated) sizes are calculated using shared logic. The bubbles are fixed width and their height is calculated based on the aspect ratio of the underlying image (clamped to a reasonable min/max height).
Fixes#1270
// FREEBIE
fixes#1231
Motivation
----------
Previously when messages failed to send, there was no reason given.
Furthermore, when media messages failed to send there was no indication
that any attempt to send the message even occurred, nor a retry
dialog.
UX Changes
----------
- Show "uploading" status for media
- Show specific error message in retry-send dialog
- Only scroll to bottom when new message is inserted
- Show specific errors when group creation fails
Code Changes
-----------
- Updated incorrect references to TSMessageAdapters which were actually
references to OWSMessageData
- MessageSender was extracted from SSK MessagesManager
- access MessagesManager as property
- idiomatic init/properties for Env
- log contact intersections
- Move scroll-to-bottom animation to main thread.
// FREEBIE
* calculate size of info message using the info message font.
* offset by the info message header
There were instances of lines getting cropped, or an extra line being
added. The previous, more conservative, solution was to just make every
bubble too big, but it looked terrible.
// FREEBIE
fixes#1368
Apple switched emoji fonts from AppleColorEmoji to AppleColorEmojiUI.
The new font doesn't compute it's size correctly, causing containing
rectangles to be too small.
This commit scrubs strings of the new emoji font, and replaces it with
the old.
// FREEBIE
* Per thread settings menu accessed by tapping on thread title
This removed the toggle-phone behavior. You'll be able to see the phone
number in the settings table view.
This removed the "add contact" functionality, although it was already
broken for ios>=9 (which is basically everybody).
The group actions menu was absorbed into this screen
* Added a confirm alert to leave group (fixes#938)
* New Translation Strings
* Extend "Add People" label to fit translations.
* resolved issues with translations not fitting in group menu
* Fix the long standing type warning where TSCalls were assigned to a TSMessageAdapter.
* Can delete info messages
Follow the JSQMVC pattern and put UIResponder-able content in the
messageBubbleContainer. This gives us more functionality *and* allows us
to delete some code. yay!
It's still not yet possible to delete phone messages. =(
* Fixed some compiler warnings.
* xcode8 touching storyboard. So long xcode7!
* Fixup multiline info messages.
We were seeing info messages like "You set disappearing message timer to
10" instead of "You set disappearing message timer to 10 seconds."
Admittedly this isn't a very good fix, as now one liners feel like they
have too much padding.
If the message is well over one line, we were wrapping properly, but
there's a problem when the message is *just barely* two lines, the cell
height grows, but the label still thinks it's just one line (as evinced
by the one line appearing in the center of the label frame. The result
being that the last word of the label is cropped.
* Disable group actions after leaving group.
// FREEBIE
Rather than verifying eachothers keys separately, you now verify the
privacy with your recipient by sharing a single composite number or
QRCode.
This is a breaking change, in coordination with Desktop and Android.
UX
--
Fingeprint is no longer in line with identity key error. Instead you
have the option of going to the full-screen safety number verification
experience.
Overhauled fingerprint design
-----------------------------
* use same modal dismiss button as elsewhere
* remove fingerprint from settings.
* quick slide in animation vs slow fade
* existing was painfully slow
* blur effect is better metaphor for something slide over top
* anyway there was a rendering glitch in the end of fade where
underlying navbar would "snap" out
Also Fixed
----------
Always provide a name string for contact
* Centralize all the nil-checking
* Fall back to "unknown contact"
allow multi-line error messages
// FREEBIE
TSAnimatedAdapter is used when rendering GIFs. TSAnimatedAdapter
inherits from JSQMediaItem but does not provide a custom implementation
of the hash method. The default implementation of hash in JSQMediaItem
results in all messages of a given interaction type (incoming,
outgoing) sharing a cached bubble size. For this reason, JSQMediaItem
subclasses are required to implement hash (see
https://github.com/jessesquires/JSQMessagesViewController/issues/631).
This commit fixes issue #1275 by implementing hash in TSAnimatedAdapter
the same way TSPhotoAdapter does.
The object is already cached & the waveform view constructed when scrolling,
so there's no need to re-create the view.
This doesn't fix the problem with the wave-form generation on the first
view of the message. That is a more critical problem in the underlying
SCWaveformView class which renders on the main thread instead of doing
it asynchronously.
FIXES#1258
Most of the work was done in SignalServiceKit 0.0.7, this adapts to
those changes.
Migration to clean any orphaned interactions/attachments.
- don't set new migration version until migration was successful.
- remove dead code from migrations
- rename message.attachments->message.attachmentIds
- Remove unused parameter from GroupModel
- formatting touched method/'s signatures
//FREEBIE
copy/save/delete is accessed via longpress for all media messages, just
like for simple text messages.
Notes
-----
We don't support saving audio attachments as it's not clear where they should go.
(I don't think users expect them to end up in their iTunes library.)
There is still no UX for "pasting" media into Signal.
Removed the now redundant (and confusing) "share" button interface.
//FREEBIE
* Use NS_DESIGNATE_INTIALIZER to ensure we're setting all the variables we need to be in OWSCall
* no need to nil properties in dealloc on ARC
* use declarative dictionaries for legability
// FREEBIE
use declarative dictionaries for clarity
This was done as part of unforking JSQMessagesViewController, but is
intentionally a separate commit so we can separate formatting changes
from code changes in git history.
* Import frameworks like:
#import <FrameworkName/HeaderName.h>
* instead of:
#import "HeaderName.h"
// FREEBIE
This is part of unforking JSQMVC, but I'm only reformatting files
otherwise changed rather than reformatting the entire project for git
sanity.
This is intentionally a second commit so we can separate formatting
changes from code changes
* brace should drop after method definition (this is common across
almost all objc projects, and allows you to quickly differentiate
multi-line method signatures from their implementation.
* aligning consecutive assignments ongoingly muddies git history
// FREEBIE
Geting back on upstream fixes a couple bugs (see ##Bugfixes), and also
will make future updates easier.
The unforking process was basically this:
* move custom message types (Calls and DisplayedMessages) classes from our
custom JSQMVC fork into Signal-iOS.
* Move any method customization into our subclass. Including
ColletionView stuff, bubble sizing, and gesture behavior
Bug Fixes
---------
* Fix mis-sized incoming media bubbles.
Bubble size was being cached by interaction id. Which broke when
receiving an attachment. The problem is that incoming media messages
were initially the height of a "Downloading Attachment" info message.
Instead we use the mediaHash for media messages to expire the bubble
size when the media changes.
* fix missized bubble when MVC did appear
The MessagesViewController isn't sized correctly until ViewWillAppear.
This caused the first round of bubbles to be rendered incorrectly (they
assumed a larger container than they had). I think is reflected in the
current version of the app by a reflow occurring shortly after the view
appears.
Chores
------
* bump travis to build with xcode8
* specify RQV development team for device build. required by xcode 8 beta
Cleanup
------
* Refactor messageing XIB so that elements are hangning outside of
the views frame
* Fix compiler warning with explicit cast
* delete deprecated lineBreakmode, it's the default value anyway.
// FREEBIE