This change should have no user impact.
We commonly pair a currency, like USD, and an amount, like 1.23. This
adds the `FiatMoney` struct. It's a simple struct with two fields.
After adding it, I tried to use it everywhere. (It's possible I missed a
spot.)
I think this is a useful change on its own, but it'll be nice for an
upcoming change, too.
See also: [Android's equivalent class][0].
[0]: cb65347bb3/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java (L1)
This change should have no user impact.
`DonationViewController` is now `DonationSettingsViewController`.
I think this is a better name on its own, but it'll seem even better
after upcoming change.
* fix story views + replies sheet header update when swiping
* fix my story privacy show more off-by-one
* Disable story sends when hiding a group story. Unhide when enabling story sends to a group story.
* More consistent story tab bar badge offset
* Observe story viewed ring changes in ConversationAvatarView itself
* Manage ConversationAvatarView's story observation based on the context
* remove story state from thread view model, now unused
* pr feedback renames
* Preserve selection in text story composer after changing font size.
Fixes an issue where input cursor would jump to the end when adding/deleting
text in the beginning or middle of the text and those edits caused font size
to increase / decrease.
That unwanted behavior was caused by replacing the entire `UITextView.attributedText`.
* Ensure entire text story draft has same font after undo / redo operation.
UITextView's undo manager preserves attributes of text being cut / pasted, which
might cause text view to contain fragments with different font.
The solution is to detect when there's more than one font used in UITextView
and re-apply attributes to the entire text if when that happens.
Right now, trying to add a non-gv2 member to an existing group will
present an error when selecting the row.
When creating a new group, we allow the row to be selected, and then we
show an error on the next screen. With this change, we’ll show an error
immediately when selecting the row. (This allows us to remove a few
hundred lines of migration UI that *should* be unused.)
(Also, don’t call out recipients that don’t support New Groups.)
We try to populate this picker with users we believe are registered. Now
that GV2 is fully rolled out, all the recipients we believe are
registered should have a UUID. (If any don’t, we’ll resolve that on
launch via UUIDBackfillTask.) Since these proactive fetches *shouldn’t*
run, prevent them from running by removing them entirely.
If we hit a rare race condition where a recipient is missing a UUID,
we’ll still perform a lookup when trying to select that recipient.
In these rare edge cases where a recipient doesn’t have a UUID (which,
again, shouldn’t happen), the subtitle indicating that they don’t
support New Groups will be out of date. By removing proactive fetches,
it’ll remain out of date until the user taps the row. To avoid
confusion, defer showing an error until the user taps on the recipient.
We use RequestMaker in three places: fetching pre keys, sending
messages, and fetching profiles. In the former two cases, we want to
kick off profile fetches when certain errors occur.
However, in the latter case, we’re already doing a profile fetch, so we
don’t need to kick off another.
- If the UD request fails for a profile fetch, the next thing we try
will be a non-UD profile fetch. In the prior version of the code, we’d
also kick off a fresh profile fetch; since we just marked UD as
disabled, this would initiate a redundant non-UD profile fetch.
Instead, we can just rely on the non-UD request that’s underway.
- When a UD request succeeds & we didn’t know the UD access mode, we
update the access mode to the one we used. In the prior version of the
code, we’d also kick off a profile fetch with this access mode.
However, if this is part of a profile fetch, we’ve *just* gotten the
latest profile with the access mode we just saved, so there isn’t a
reason to immediately initiate another fetch.
* Hide navigation bar when searching in chats list
* Incomplete search bar layout
* apply story search filtering
* hide my stories section when searching
* Improve transitions for story tab bar search
* Show hidden stories in search results
* visual fixes to header when searching. include all unfiltered stories in viewer contexts
* delay getting the target story frame for interactive dismissal to give the view time to update after navigation bar changes
* fix strings
* pr feedback
If we’ve recently discovered that a phone number can’t be discovered,
there isn’t much benefit to checking again.
However, for other parts of the migration flow, we still want to
consider such users. For example, sometimes we want to require all users
to have a UUID to perform a migration. Before this change, we might
return a false positive after performing a CDS lookup since we wouldn’t
check whether or not recently undiscoverable users have a UUID.
In another case, we’re intentionally excluding users without UUIDs. In
this case, the end result is the same whether we drop them during the
first pass or the second pass, but the intent is more clear if we drop
all such users during the second pass.
Lastly, we want to fetch profiles even for undiscoverable users, even
though this operation is likely to fail.