* 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)
* 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
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 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>
* 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
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
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.