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
This might look like a typo, but due to earlier flubbing the build
number, we need a larger build number to be able to upload, until the
next release at which point we can resume a sane bundle version number.
// FREEBIE
We use this to determine which legacy migrations to run.
Also, soften the "your device is too old" behavior to just exit, rather
than blow away the users installation. Ouch!
* bump version
// 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
previously fixed in: SSK:91fcd01632a81f2aa67d2d94b97c68d519e6881a
But got lost in a rebase after moving TSMessagesManager+sendMessage to
OWSMessageSender.
// FREEBIE
Fixes the bug wherein:
Given the sender had disappearing messages enabled
And the receiver thinks it's disabled (this can happen due to re-install)
When we receive a disappearing message
The message does start expiring timer and disappear
But you see a notice "<sender> disabled disappearing messages"
Rather than the expected "<Sender> set disappearing messages timer to X".
// 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
Fix animation memory leak exacerbated every time you reload a
conversation with expiration timers.
Stop animation on cells that aren't currently being displayed. This is
relatively minor compared to the above, but still, no reason to waste
cycles.
// FREEBIE
* ContactsUI framework is not available on ios<9.
And it never was, so this framework should not be "required".
* Fix conversation settings title font on ios8
* Fix fingerprint not displaying on ios8
* ios8 safety number indented on third line.
* Fix glitchy table cell animation (not ios8 specific)
The defaut slide-under animation only looks good if you're using a
standard table cell height, but our duration slider is taller than the
rest of the table's cells.
Plus add a little bottom padding to the slider cell
// 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
I botched a migration 6 months ago, which left some lingering TSRecipients serialized in our data store, laying in wait to explode the next time we enumerate every object in the database (e.g. when we add an index).
The bloom filter migration failed to remove TSRecipients in the somewhat rare event that the local user had no downloaded bloom filters. This could happen e.g. if they were low on disk space at the time of running the migration, I believe the app would remove the bloom filter cache.
// FREEBIE
* Don't attempt to send a message unless we've successfully built device-messages
* Only process message exception when we're done with retries.
// FREEBIE
Even though it's pretty obvious why we need your camera when you push a
"take photo" button...
Unfortunately this warning will be confusing if someone's first exposure
to it is to scan an identity code, but that seems like an edge case not
worth pegging an extra sentence of copy to an already unnecessary
warning.
Also, we're enabling push notifications for dev, per apple build
submission feedback.
// FREEBIE
* New bg (Bulgarian) localization!
* New sq (Albanian) localization!
* replace unfinished bg_BG localization with complete bg localization
* caps keys to make it easier to see missing localizations
* pull with newly pushed source keys
// FREEBIE
Also made identity key scanner appear faster. Previously we were
waiting for camera to initialize. Now we do this after the view has
loaded - with a black background, the affect is preferable than
lagging on the transition.
// FREEBIE
* Avoid intermittent crash in device manager via YapDatabaseModified
* Properly align refresh text when expecting new device
* Avoid glitchy activityIndicator while polling
* Expose edit mode toggle
Much of the code changes here were in the corresponding SSK update.
// FREEBIE
On older devices with lots of data, the orphan data cleaner can time
out. Here we're trading certainty that the migration completed for
confidence that the boot process doesn't time out.
// FREEBIE
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
We were ocassionally seeing extra tall error messages. This is because,
when appropriate, we were adding the space for a timestamp, but then
never actually rendering the time stamp.
So now:
- Error Messages aren't rendered too-tall
- Error Messages get a printed timestamp when appropriate
// FREEBIE
4% of our crashes are from accessing latestContactsById with an invalid
address. This was partially addressed by assigning a value on init, but
it's still happening.
By converting the ivar to an atomic property we can avoid any funny
business that would happen when accessing this var while it's being
updated in a different thread.
Also, make sure we're copying to defensively strip mutability.
Also:
* bumped release target
* removed unused code
* dealloc at the top per style.
* Rebased OWS fork of SocketRocket against upstream
* Pulling in SocketRocket directly from OWS Github rather than going
through the motions of publishing a pod that only we use.
* Bump version
// FREEBIE
* bump version
* pulled latest translations
* Register localizations with app.
- Persian (fa)
- Indonesian (id)
- Macedonian (Macedonia) (mk)
- Shona (sn)
- Galacian (gl)
(Project > Signal > Localizations > Add Localizations)
Generalized Macedonian locale since it seems like iOS doesn't support
the "Macedonia(Macedonia)" sub-locale
* disable farsi until proper RTL interface work is done
// FREEBIE
* Fixes "New Message" --> "Invite contact" exception for iPhone devices that do not support SMS messaging
* fix SMS invite on empty inbox
This code appears in two contexts - (1) in an empty inbox , where no other view
controller is presented, and (2) in compose interface where a
search controller is presented, and must first be dismissed.
* only check SMS sending ability directly, (not device model)
This is better because:
1. sometimes iPhones can't send SMS
2. Sometimes iPads/iPods can send SMS
* correct localization key
* bump build
// FREEBIE
* bump release
//FREEBIE
* fix invite over sms alert
Could not present the sms invite alert controller because we were
already presenting the UISearchController
FIXES: #1182
// FREEBIE
- Using same clang format file for old and new files.
- Moving out all TextSecure code to allow other clients (OS X, iOS) to
integrate easily TextSecure functionality.
- Use TextSecure API to signup.
- Fixing size classes rendering bugs.
- Supporting native iOS San Francisco font.
- Quick Reply
- Settings now slide to the left as suggested in original designed
opposed to modal.
- Simplification of restraints on many screens.
- Full-API compatiblity with iOS 9 and iOS 8 legacy support.
- Customized AddressBook Permission prompt when restrictions are
enabled. If user installed Signal previously and already approved
access to Contacts, don't bugg him again.
- Fixes crash in migration for users who installed Signal <2.1.3 but hadn't signed up
yet.
- Xcode 7 / iOS 9 Travis Support
- Bitcode Support is disabled until it is better understood how exactly
optimizations are performed. In a first time, we will split out the
crypto code into a separate binary to make it easier to optimize the
non-sensitive code. Blog post with more details coming.
- Partial ATS support. We are running our own Certificate Authority at
Open Whisper Systems. Signal is doing certificate pinning to verify
that certificates were signed by our own CA. Unfortunately Apple's App
Transport Security requires to hand over chain verification to their
framework with no control over the trust store. We have filed a radar
to get ATS features with pinned certificates. In the meanwhile, ATS is
disabled on our domain. We also followed Amazon's recommendations for
our S3 domain we use to upload/download attachments. (#891)
- Implement a unified `AFSecurityOWSPolicy` pinning strategy accross
libraries (AFNetworking RedPhone/TextSecure & SocketRocket).
Signal requires the AddressBook permission to use the app at the
moment. This avoids the edgecases where a user doesn’t allow access to
his address book and then tries to use the app. We’re also doing a
significantly better job at explaining why we need this permission to
the user.
- Removes large confusing UX bar and related assets. Replaced with UISwitch.
- Enhanced user experience for missed calls.
- Fixes issue where missed call would appear as incoming call in call log.
- Fixing issues where PushKit handler not called on launch.
- Tap to reply to a message.
- Badges application with the number of unread messages.
- Pick up a phone call from lock screen, or decline it.
- Settings for notification sounds while app in foreground and text displayed on local notifications.
- Revising iconography to stick to v2.0 design.
- Multiple bug fixes based on testers feedback
- Integration with system addressbook
- Removing unused assets.
- Signal preferences and keying material moved to the unified storage
- Set up for staging environment to try out the new APIs
- Changes in the push registration flow to send token to RP & TS
- Make logging optional if desired
- HTTPS external URLs
- Clean app data when re-registering
- If registration future fails, bring back user interaction
- Use of new Keychain Access attribute
- Error management (notifying the user) when opening app without
required push and microphone permission
- Enforcing APNID are sent to server, retry later if not able to reach
server