This makes it easier to share links from a regular timeline (where text
is not selectable).
Listen for long clicks on spans by launching a delayed runnable that
waits `getLongPressTimeout()` ms before sending an intent that shows the
share sheet for the clicked span.
If the span's link is not the same as the text (e.g., it's a mention or
a hashtag) then the text of the span is also sent as the title to show
in the share sheet.
While I'm here, the official LinkMovementMethodCompat does the same job
as NoTrailingSpaceLinkMovementMethod, so delete the latter code in
favour of the former.
Fixes#695
Previous layout didn't enable the character counter for entered text, so
it was difficult for the user to see how much they had used.
Fix that. To get the layout to play nicely switch to a ConstraintLayout
with a chain to split the dialog roughly 50/50 between the image and the
caption views.
While I'm here:
- Remove the margins around the image, so it's clearer, and is more
consistent with the "set focus" dialog.
- Set focus on the description immediately, so the keyboard pops up.
- Remove focusability from the image, since the user shouldn't be able
to interact with it.
Previous code passed the actionable status, so "Open boost author"
actually opened the account that posted the original status.
Pass the status representing the boost, so the correct account is
opened.
Fixes#1042
Users report that copying items can be difficult using Talkback.
Make this easier in the dialogs that appear for links, mentions, and
hashtags by using a dedicated adapter that displays a "Copy" button at
the end of each item.
Fixes#1038
Previous code checked the item was a `StatusViewData`, which is not true
for notifications, and meant the links, mentions, and hashtags
accessibility features were not available.
Change this to `IStatusViewData`, which notifications do implement.
Fixes#1037
Previous code only inflated the timeline fragment menu if swipe/refresh
was enabled -- a hold over from when "Refresh" was the only menu item.
There are other menu items now, and they were also hidden. Fix this by
always inflating the menu.
User reports suggested that the "x" / "+" icons used to add / remove
accounts from lists could be difficult to visually distinguish.
Replace with checkboxes. Checked indicates the account is in the list,
unchecked indicates it isn't. Clicking the checkbox to change state
changes the presence in the list.
Fixes#812
Provide two new lab preferences for controlling the layout and content
of main navigation tabs.
Tabs can now be justfied to start, end, or fully (if room). Start/end
justification may put the tabs closer to the user's fingers, depending
on how they hold the device. Fully justified uses the full width of the
tab bar (if the tabs don't require scrolling).
The content can be set to one of:
- Icon only (previous behaviour)
- Text only
- Icon with text beside
- Icon with text below
Fixes#336
Previous code didn't send the language to ComposeActivity when editing a
scheduled status so it always appeared to be dirty. This prompted the
user to save/discard changes when backing out, even if they hadn't made
any changes.
Fix this by collecting the language code when fetching scheduled posts
and passing it in `ComposeOptions`.
Previous code accepted the `scheduledAt` value as a String, and kept it
as a String (including when serialising as part of a draft). Then it was
converted to an actual Date for display.
Refactor to keep it as a Date for as long as possible. Moshi decodes
Dates correctly over the network, and the database is configured to
serialise Dates as Longs.
This necessitates two migration steps to preserve any existing
`scheduledAt` values for drafts. The first step adds a new column to
store the date as a Long and copies over existing data. The second step
replaces the old column with the new column.
The "Suggested accounts" API returns dormant accounts. See this bug
report: https://github.com/mastodon/mastodon/issues/30674.
That's bad UX, so filter out any account that hasn't posted in the last
28 days.
Fixes#1029
Previous layout didn't constraint the metadata elements to the parent's
edge, so could run off the screen if the content was too long.
Constrain them so the content wraps correctly.
Fixes#876
For some users this feature has too many false positives, particularly
when emojis are used.
Provide a preference that enables/disables the feature, default to
"enable".
When the user is prompted the dialog has a third "Don't ask again"
option. If chosen the preference is set to prevent future prompts and
the status is sent as-is.
Fixes#893
GoToSocial servers don't support scheduled posts; they return the wrong
type, and this can cause a loop of posting.
The GoToSocial bug to implement scheduled posts is
https://github.com/superseriousbusiness/gotosocial/issues/1006.
Fix this by adding a new server capability for scheduled post support,
using it for most servers, and disabling it for GoToSocial.
If scheduled post support is not available for an account:
- The "Scheduled posts" menu option is not shown.
- The scheduling button (clock) when composing a post is hidden, so the
user cannot set scheduling parameters.
Fixes#963
The MaterialTimePicker library has a bug that results in the "Cancel"
and "Ok" buttons on the dialog being cut off.
See
https://github.com/material-components/material-components-android/issues/3584
Work around this by updating their layout params and explicitly setting
the "bottomToBottom" constraint to their parent.