This change should have no user impact.
`NSData#isAnimatedPngData` detects whether something is an animated
PNG. Its tests don't actually check a real APNG, though. This adds such
a test.
* Hide camera controls when switching to TEXT.
* Streamline camera capture session state tracking.
Stop camera when switching to TEXT.
* Basic text story composer.
All UI works, but needs fine-tuning and tapping on Next (->) doesn't do anything.
* Run auto-genstrings.
* Adjust text size and alignment as user enters text.
1..49 characters: 34 pt, center-aligned.
50..199 characters: 24 pt, center-aligned.
200.. characters: 18 pt, natural alignment.
* Change default text color in text story composer to white.
* Added support for changing background of text story composer.
Selection is allowed from palette of 5 gradients and 11 solid colors.
* Improve vertical alignment of text in text story composer.
Text (and possible link preview panel in the future) should be vertically
centered in the area above either bottom controls or onscreen keyboard.
* Add UI for attaching a link preview to a text story.
* Add support for posting text stories.
* Lint.
The `uuidString` property calls `uuid?.uuidString`. If we use `if let`,
we can eliminate the first `owsFailDebug` at compile-time.
If the phone number isn’t set, there’s no point in returning
`uuidString` -- this is guaranteed to be `nil` if we reach this code.
* Add story viewer onboarding UX
* fonts and image tweaks
* trigger onboarding UX from everywhere, not just the story list
* remove usages of NSLayoutConstraint. Use ManualLayoutView for button layout
* Add hidden stories section
* Observe ThreadAssociatedData in StoriesViewController. Update tableview when hidden state changes.
* pre-PR cleanup
* more little cleanup
* run translations script
* begin loading stories on storyVC init
* observe system story hidden state changes
* pr comments
* make filters lazy
* Set hidden state from stories view controller context menu
* fix toasts when shown on controllers with UIScrollViews as their root views
* delete when hiding the onboarding story
* run translations script
* respond to pr feedback
* add hidden state to systemStoryManager
* use hidden state from SystemStoryManager for onboarding story
* remove unused method
* update contactRecord and groupv2 protos to add hideStory flag
* sync contactRecord and groupv2Record with local storyHidden state on ThreadAssociatedData
This will be the interface used for storing IDs of group calls in the
future; for now there should be no functionality change, except if
there's an address mentioned with no associated thread. Previously
that thread would be created if needed; now the call action will fail.
This seems reasonable given that threads only go away if the user
explicitly deletes them.
While here, we don't need to save both the UUID and phone number of a
user's address; the UUID always wins anyway. Only worry about phone
numbers if there's no UUID.
Previously, archived groups didn't show up in the "Add to Another Group"
view. Now, they do!
This also orders groups entirely by recency.
This view used `ThreadViewHelper`, which (1) omitted archived groups
(2) had a bunch of dormant database observation code. I removed this
class and replaced it with some inline code that fetches groups.
This change should have no user impact.
This commit:
- Rewrites the tests in Swift
- Removes some redundant tests
- For North American phone numbers, uses `555-01XX` phone numbers
(because "only 555-0100 through 555-0199 are now specifically reserved
for fictional use; the other numbers have been reserved for actual
assignment)
* Add OnboardingStoryManager
* mark onboarding story viewed
* Add tests and fix issues that came up from testing
* up test timeout for slower CI
* rename SystemStoryManager and put into dependency injecton container
* Use viewed state on StoryMessage itself. Have SystemStoryManager observe app lifecyle events to automatically manage the onboarding story
* use iOS assets which are now in s3
* todo cleanup
* increment timestamp for uniqueness
* pr comments
* change literal delimiter
* Add ChainedPromise utility, tests, and use in SystemStoryManager
* discretionarily observe app backgrounding in SystemStoryManager
* renaming from PR comments
- Refactor the enum RingMode into an option set RingRestrictions
- Keep track of whether the call is empty in RingRestrictions rather
than by directly inspecting peek info every time
- Set the initial callInProgress restriction by looking for unended
calls in the database (the same thing used to show the "Join Call"
button in the conversation view)
- Use the more-reliable callInProgress restriction everywhere we need
to check if there's a call in progress
- If we think there's a call in progress but don't have peek info,
wait until we get peek info to show status text in the call lobby
This provides a more orthogonal model for ring restrictions, which is
important for tracking "group too large" and "call in progress"
independently. Either can change but the state of the other still
determines how the UI should be updated.