* 3408: First draft of help message on empty home timeline
* 3408: Move image spanning to utils; tweak gui a bit (looks like status)
* 3408: Use proper R again; appease linter
* 3408: Add doc; remove narrow comment
* 3408: null is default
* 3408: Add German text
* 3408: Stack refresh animation on top of help message (reorder)
Currently translated at 100.0% (597 of 597 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (597 of 597 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
Currently translated at 91.1% (543 of 596 strings)
Translated using Weblate (Latvian)
Currently translated at 90.7% (541 of 596 strings)
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/lv/
Translation: Tusky/Tusky
* Show better errors with notification loading fails
The errors are returned as a JSON object, parse it, and show the error
message it contains.
Handle the cases where there might be no error message, or the JSON may be
malformed.
Add tests.
Fixes#3445
* Lint
* Show reblog/favourite confirmations as menus not dialogs
The previous code used dialogs and displayed the text of the status when
reblogging or favouriting.
This didn't work when the post just contained images, and other material
from the status (content warning, polls) was not shown either.
Fix this by displaying a popup menu instead. The status remains visible so
the user can clearly see what they're acting on.
In addition, this lays the groundwork for supporting a long-press menu
in the future to allow the user to reblog/favourite from a different
account.
Fixes https://github.com/tuskyapp/Tusky/issues/3308
* Revert the change that puts the menu immediately over the icon
Although this behavious is consistent with how the option menu works, I
decided that the risk of someone inadvertently double-tapping in the same
location, and the first tap opens the menu and the second tap confirms the
action was too great.
So now the menu appears either above or below the icon depending on space,
and the user has to tap in two slightly different spaces.
This is also consistent with the previous behaviour, where it's highly
unlikely that the confirm button on the dialog would have been directly
under the user's finger if they double-tapped.
Clickable spans in textviews do not normally meet the Android accessibility
guidelines of a minimum 48dp square touch target.
This can't be fixed with a `TouchDelegate`, as the span is not a separate
view to which the delegate can be attached.
Add `ClickableSpanTextView`. If used instead of a `TextView`, any spans
from `ClickableSpan` will have their touchable area extended to meet the
48dp minimum.
The touchable area is still bounded by the size of the view.
If two spans are closer together than 48dp then the closest span to the
touch wins.
Co-authored-by: Konrad Pozniak <connyduck@users.noreply.github.com>
* Show toot stat inline
* Correct elements position
* Format stats and show it according to setting
* inline toot statistics setting
* Code formatting
* Use kotlin functions
* Change the statistics setting description
* Use capital letters for all variants
* increase the statistics margin
* Merge fixes
* Code review fixes
* move setReblogsCount and setFavouritedCount to StatusViewHolder
* code cleaning
* code cleaning
* import lexicographical order
---------
Co-authored-by: Grigorii Ioffe <zikasaks@gmail.com>
Co-authored-by: grigoriiioffe <zikasaks@icloud.com>
Currently translated at 93.2% (556 of 596 strings)
Co-authored-by: ButterflyOfFire <butterflyoffire@protonmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/ar/
Translation: Tusky/Tusky
Currently translated at 100.0% (596 of 596 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (579 of 579 strings)
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
Currently translated at 96.1% (573 of 596 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (567 of 567 strings)
Co-authored-by: Ricard Torres <ricard@ricard.dev>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/ca/
Translation: Tusky/Tusky
Currently translated at 100.0% (596 of 596 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (579 of 579 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (567 of 567 strings)
Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (596 of 596 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (579 of 579 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (567 of 567 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
Currently translated at 100.0% (596 of 596 strings)
Translated using Weblate (Persian)
Currently translated at 100.0% (579 of 579 strings)
Translated using Weblate (Persian)
Currently translated at 100.0% (567 of 567 strings)
Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
* Enforce lint cleanliness when building
The volume of lintable issues is growing. To stem the tide:
1. Add `app/lint-baseline.xml`, which contains the current set of lint issues.
Any issue appearing here will not cause the build to fail.
2. Move lint configuration settings in to `lint.xml`.
3. Update the lint configuration so that any issue (i.e., any issue not
in lint-baseline.xml) causes a build failure.
4. Add the lint tasks as depedency when assembling an APK, to ensure the
lint checks are run.
* lint: Convert launcher images to webp
* Move lint.xml location
* Don't lint when assembling
* Update baseline
* Move compose.* tests to own namespace
* Ignore "@instance..." part of username when computing status length
In a status with a mention ("@foo@example.org") only the "@foo" part should
be included in the calculated status length. It wasn't, so the app was
prevening people from posting statuses that should have been allowed.
Fix this.
- Lift the length calculation code in to a separate static function (easier
and faster to test)
- Add a `MentionSpan` type, to reuse existing code for detecting mentions
- Fix a bug in `FakeSpannable.getSpans()` (it was returning the outer type,
not the wrapped inner span)
- Add additional fast tests
The tests made sense under the `components.compose.ComposeActivity` package,
so I also created that and moved the existing ComposeActivity tests there.
Fixes https://github.com/tuskyapp/Tusky/issues/3339
* Static import assertEquals
The previous code returned the text representation of the error body type, which resulted in errors appearing in the UI as:
```
okhttp3.ResponseBody$Companion$asResponseBody$1@...
```
This code actually converts the *body* of the error response to a string, so the error is displayed correctly.
* Replace "warn"-filtered posts in timelines and thread view with placeholders
* Adapt hashtag muting interface
* Rework filter UI
* Add icon for account preferences
* Clean up UI
* WIP: Use chips instead of a list. Adjust padding
* Scroll the filter edit activity
Nested scrolling views (e.g., an activity that scrolls with an embedded list
that also scrolls) can be difficult UI.
Since the list of contexts is fixed, replace it with a fixed collection of
switches, so there's no need to scroll the list.
Since the list of actions is only two (warn, hide), and are mutually
exclusive, replace the spinner with two radio buttons.
Use the accent colour and title styles on the different heading titles in
the layout, to match the presentation in Preferences.
Add an explicit "Cancel" button.
The layout is a straightforward LinearLayout, so use that instead of
ConstraintLayout, and remove some unncessary IDs.
Update EditFilterActivity to handle the new layout.
* Cleanup
* Add more information to the filter list view
* First pass on code review comments
* Add view model to filters activity
* Add view model to edit filters activity
* Only use the status wrapper for filtered statuses
* Relint
---------
Co-authored-by: Nik Clayton <nik@ngo.org.uk>
* Show the difference between edited statuses
Diff each status against the previous version, comparing the different
HTML as XML to produce a structured diff.
Mark new content with `<ins>`, deleted content with `<del>`.
Convert these to styled spans in `ViewEditsAdapter`.
* Update diffx to 1.1.1
Fixes issue with diffs splitting on accented characters
* Style edited strings with Android spans
Don't use HTML spans and try and format them, create real Android spans.
Do this with a custom tag handler that can add custom spans that set the
text paint appropriately.
* Lint
* Move colors in to theme_colors.xml
* Draw a roundrect for the backoround, add start/end padding
Make the background slightlysofter by drawing it as a roundrect.
Make the spans easier to understand by padding the start/end of each one with
the width of a " " character. This is visual only, the underlying text is not
changed.
* Catch exceptions when parsing XML
* Move sorting in to Dispatchers.Default coroutine
* Scope the loader type
* Remove alpha
* Replace DefaultTextWatcher with extensions in core-ktx
* Fix positiveButton.isEnabled
* editable!! for highlightSpans
* Fix style
* Put noteWatcher back
* Use more Sequences to reduce collection processing
https://kotlinlang.org/docs/sequences.html
* Use joinToString
* Fix style
* Revert "Use more Sequences to reduce collection processing"
This reverts commit acf8071d9e62af1366b40dc6cb0ce43b4b355ec2.
* Fix