Commit graph

3564 commits

Author SHA1 Message Date
GunChleoc
af7e883165 Translated using Weblate (Gaelic)
Currently translated at 100.0% (604 of 604 strings)

Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
2023-06-19 14:26:14 +02:00
XoseM
75d5f247c7 Translated using Weblate (Galician)
Currently translated at 100.0% (604 of 604 strings)

Co-authored-by: XoseM <xosem@disroot.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gl/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Hồ Nhất Duy
7942d497b2 Translated using Weblate (Vietnamese)
Currently translated at 99.8% (603 of 604 strings)

Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Chaitanya
eacdc40268 Translated using Weblate (Hindi)
Currently translated at 58.1% (351 of 604 strings)

Co-authored-by: Chaitanya <hellochaitanya@protonmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hi/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Eric
4de9e1446b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (604 of 604 strings)

Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
junius
0273beb3bd Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (604 of 604 strings)

Co-authored-by: junius <fifteenkilos@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Quentí
7bbc4a9b00 Translated using Weblate (Occitan)
Currently translated at 100.0% (604 of 604 strings)

Co-authored-by: Quentí <quentinantonin@free.fr>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/oc/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
GunChleoc
87a85fe875 Translated using Weblate (Gaelic)
Currently translated at 100.0% (603 of 603 strings)

Co-authored-by: GunChleoc <fios@foramnagaidhlig.net>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/gd/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Oliebol
73ccc81764 Translated using Weblate (Dutch)
Currently translated at 97.3% (587 of 603 strings)

Co-authored-by: Oliebol <schrijfmedan@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/nl/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Danial Behzadi
7b344067a9 Translated using Weblate (Persian)
Currently translated at 100.0% (604 of 604 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (603 of 603 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
2023-06-18 13:46:58 +02:00
Nik Clayton
100673aa9c
Handle status edit histories with < 2 entries (#3747)
This can happen if the edit history has not been propogated to the user's server.

If the edit history is missing then show an error with a link to the specifc Mastodon issue.

Fixes #3743
2023-06-15 19:59:30 +02:00
Konrad Pozniak
9fedb6d5b2
Fix trending tags being cut off (#3745)
Fixes https://github.com/tuskyapp/Tusky/issues/3742
2023-06-15 11:27:57 +02:00
Eric
885b54a683 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (603 of 603 strings)

Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2023-06-15 11:27:03 +02:00
Oliebol
cdb7194fec Translated using Weblate (Dutch)
Currently translated at 97.3% (587 of 603 strings)

Co-authored-by: Oliebol <schrijfmedan@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/nl/
Translation: Tusky/Tusky
2023-06-15 11:27:03 +02:00
L.Yo
0efd95b503 Translated using Weblate (Dutch)
Currently translated at 97.3% (587 of 603 strings)

Co-authored-by: L.Yo <pseudolyo@gmx.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/nl/
Translation: Tusky/Tusky
2023-06-15 11:27:03 +02:00
sk
30a2af70ea Translated using Weblate (Japanese)
Currently translated at 92.3% (556 of 602 strings)

Co-authored-by: sk <sk736b@protonmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/ja/
Translation: Tusky/Tusky
2023-06-15 11:27:03 +02:00
Prat
485a4c364e
Improve prompts when draft is empty (#3699)
When the user is closing the compose view,

    if it's new and empty, don't show a prompt.
    if it's an existing draft and now empty, ask if the user wants to delete it or continue editing. I don't think there is much value in saving an empty draft.
---------
2023-06-13 15:45:17 +02:00
Nik Clayton
eedf6abf91
Catch missing classes in WorkerFactory (#3744)
When NotificationWorker was moved from ...components.notifications to
...worker.

Installing Tusky with this change doesn't remove any future periodic
jobs queued under the old class name. So when Class.forName() is
called the old class name is not found, and the exception is thrown.

Handle this the same way androidx.work.WorkerFactory does -- catch
the exception, log it, and return null.

Fixes #3740
2023-06-12 22:04:58 +02:00
Eric
5327c9f572 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (602 of 602 strings)

Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
2023-06-12 12:18:02 +02:00
Danial Behzadi
ac49222d8c Translated using Weblate (Persian)
Currently translated at 100.0% (602 of 602 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
2023-06-12 11:36:31 +02:00
Balázs Meskó
78f4954ee3 Translated using Weblate (Hungarian)
Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Balázs Meskó <mesko.balazs@fsf.hu>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/
Translation: Tusky/Tusky
2023-06-12 11:36:31 +02:00
Konrad Pozniak
6e06e656b4
Make sure the active account is always correctly saved to database (#3720)
Fixes #3702
2023-06-11 20:24:26 +02:00
Konrad Pozniak
3698c72109
Correctly show non-square custom emojis (#3711)
Instead of forcing all emojis to be square, only the width is fixed now and the emoji scaled to fit.

Fixes #635
2023-06-11 20:06:34 +02:00
Nik Clayton
5755801e6f
Add a menu option to load the newest notifications (#3708)
- Create a flow with new items (arbitrary ints) when a reload from the top should happen
- Combine this flow with notificationFilter, so changes to either of them trigger a reload
- Provide a menu item in NotificationsFragment to initiate the reload
- Handle the action in the view model
2023-06-11 20:04:49 +02:00
Levi Bard
4cddd2c5e6
Add delete button to edit filter activity. (#3553)
Adds workaround for #3545
2023-06-11 19:59:26 +02:00
Nik Clayton
66a394245b
Remove ReplacementSpan, display diffs using CharacterStyle (#3431)
Remove the use of ReplacementSpan. It turns out this span type is incompatible with spans that occupy more than one line, and the result is that a longer diff can run off the end of the screen. The alternative means that the diff'd text doesn't have additional padding and rounded corners, but it's better than not being visible.

Display the most recent version of the status with larger text. Again, consistent with the thread view.

Display the avatar, name, and username of the poster in a pinned header at the top of the screen, instead of duplicating the information on every edit. This reduces the amount of redundant information on the screen.
2023-06-11 19:12:05 +02:00
Nik Clayton
84486c7f13
Ensure textview fields can be copy/pasted (#3707)
The Android libraries have a bug where a TextView can forget that it contains selectable text, can be pasted in to, etc.

See https://issuetracker.google.com/issues/37095917

Fix this with an extension method that toggles the selectable state to re-enable it, and use this on the profile fields when editing an account.

Fixes https://github.com/tuskyapp/Tusky/issues/3706
2023-06-11 18:39:48 +02:00
Nik Clayton
5fd532d69b
Notification tab cleanups (#3692)
- Use NO_POSITION instead of hardcoding 0.
- Don't set a state restoration policy, PagingDataAdapter already does that
- Return the closest item, not just the closest page, in getRefreshKey
2023-06-11 16:23:52 +02:00
Nik Clayton
327254d759
Remove android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small" (#3663)
It caused text size differences between the text in this view and all the other textviews in this layout.

It's not used in other layouts.

Fixes https://github.com/tuskyapp/Tusky/issues/3494
2023-06-11 15:50:34 +02:00
Nik Clayton
2a9ad92e55
Make AccountPreferenceDataStore injectable (#3653)
This will make tests that need it easier.

- Rename from AccountPreferenceHandler
- Inject its dependencies
- Create an injectable CoroutineScope it can use for launching coroutines
- Use it in AccountPreferences
2023-06-11 15:34:58 +02:00
João Alves
fc3b3f76bf Translated using Weblate (Portuguese (Portugal))
Currently translated at 84.6% (509 of 601 strings)

Co-authored-by: João Alves <joao.2003.couto+weblate@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/pt_PT/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Hồ Nhất Duy
ea064edddf Translated using Weblate (Vietnamese)
Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Nik Clayton
152ca710c9 Translated using Weblate (Persian)
Currently translated at 100.0% (601 of 601 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (601 of 601 strings)

Translated using Weblate (Icelandic)

Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Nik Clayton <nik@ngo.org.uk>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/is/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Danial Behzadi
48c435d499 Translated using Weblate (Persian)
Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Quentí
d131df06a4 Translated using Weblate (Occitan)
Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Quentí <quentinantonin@free.fr>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/oc/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Mārtiņš Bruņenieks
c3229760c1 Translated using Weblate (Latvian)
Currently translated at 92.8% (558 of 601 strings)

Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/lv/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Sveinn í Felli
97b44228b7 Translated using Weblate (Icelandic)
Currently translated at 100.0% (601 of 601 strings)

Translated using Weblate (Icelandic)

Currently translated at 99.8% (600 of 601 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/is/
Translation: Tusky/Tusky
2023-06-11 15:14:11 +02:00
Nik Clayton
8fec41c2ae
Send UI errors to a channel instead of a shared flow (#3652)
In the previous code any errors that occured *before* a subscriber was
listening to `uiError` would be dropped, so the user would be unware
of them.

By implementing as a channel these errors will be shown to the user,
with an opportunity to retry the operation or report the error.
2023-06-11 14:00:05 +02:00
Nik Clayton
5e8a63a046
Throttle UI actions instead of debouncing (#3651)
Introduce Flow<T>.throttleFirst(). In a flow this emits the first value,
and each value afterwards that is > some timeout after the previous
value.

This prevents accidental double-taps on UI elements from generating
multiple-actions.

The previous code used debounce(). That has a similar effect, but with
debounce() the code has to wait until after the timeout period has
elapsed before it can process the action, leading to an unnecessary
UI delay.

With throttleFirst a value is emitted immediately, there's no need
to wait. It's subsequent values that are potentially throttled.
2023-06-11 13:34:22 +02:00
Nik Clayton
4025ab35ff
Move cache pruning to a WorkManager worker (#3649)
- Extend what was `NotificationWorkerFactory` to `WorkerFactory`. This
  can construct arbitrary Workers as long as they provide their own
  Factory for construction.

  The per-Worker factory contains any injected components just for that
  worker type, keeping `WorkerFactory` clean.

- Move `NotificationWorkerFactory` to the new model.

- Implement `PruneCacheWorker`, and remove the code from
 `CachedTimelineViewModel`.

- Create the periodic worker in `TuskyApplication`, ensuring that the
  database is only pruned when the device is idle.
2023-06-11 13:17:30 +02:00
Konrad Pozniak
85b7caa887
Replace deprecated getParcelable* methods with compat versions (#3633) 2023-06-11 12:58:55 +02:00
Konrad Pozniak
f23c0cc634
Refactor "trending hashtags" code (#3595)
- Fix codeformatting
- Add new refreshing state
- Disable LogConditional lint rule
- Update lint-baseline
2023-06-10 19:47:07 +02:00
Nik Clayton
071e00774e
Replace shortNumber() with formatNumber() (#3519)
formatNumber() was existing code to show numbers with suffixes like K, M, etc, so re-use that code and delete shortNumber().

Update the tests to (a) test formatNumber(), and (b) be parameterised.
2023-06-10 16:29:26 +02:00
Nik Clayton
039f18ce25
Prepare 22.0 (versionCode 110) (#3718) 2023-06-08 12:35:09 +02:00
Nik Clayton
3be1e1150a
Prepare 22.0 beta 7 (versionCode 109) (#3710) 2023-06-05 13:02:32 +02:00
Nik Clayton
01b3cb3a53
Fetch all outstanding Mastodon notifications when creating Android notifications (#3700)
* Fetch all outstanding Mastodon notifications when creating Android notifications

Previous code fetched the oldest page of unfetched Mastodon notifications.

If you had more than a page of Mastodon notifications you'd get Android notifications for that page, then ~ 15 minutes later Android notifications for the next page, and so on.

This code fetches all the outstanding notifications at once.

If this results in more than 40 total notifications the list is still trimmed so that a maximum of 40 Android notifications is displayed.

Fixes https://github.com/tuskyapp/Tusky/issues/3648

* Build the list using buildList
2023-06-01 19:31:30 +02:00
Nik Clayton
346dabffc5
Write notification account information to the correct account (#3697)
Don't use `accountManager.activeAccount` throughout the code.

Instead, get the active account once, and use that over the life of the viewmodel.

As shown in https://github.com/tuskyapp/Tusky/issues/3689#issuecomment-1567219338 the active account can change before the view model is destroyed, and if that happens account information for the account will be written to the wrong account.
2023-06-01 19:19:18 +02:00
Manuel
61374c5180 Translated using Weblate (Italian)
Currently translated at 93.5% (562 of 601 strings)

Co-authored-by: Manuel <mannivuwiki@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/it/
Translation: Tusky/Tusky
2023-05-29 23:35:34 +02:00
Nik Clayton
34de33220c
Don't overwrite the active account when composing from a notification (#3688)
Fix a bug where the active account can be overwritten.

1. Have two accounts logged in to Tusky, A and B
2. Open Tusky as account A
3. Send a DM to account B (doesn't have to be a DM, just anything that creates a notification for account B)
4. Restart Tusky so the Android notification for the DM is displayed immediately. You are still acting as account A.
5. Drag down the Android notification, you should see two options, "Quick reply" and "Compose"
6. Tap "Compose"
7. ComposeActivity will start. You are now acting as account B. Compose and send a reply
8. You'll be returned to the "Home" tab.

The UI will show you are still account A (i.e., it's account A's avatar at the top of the screen, if you have the "Show username in toolbars" option turned on it will be account A's username in the toolbar).

But you are now seeing the home timeline for account B.

Fix this.

ComposeViewModel
- Do not rely on the active account in sendStatus(), receive the account ID as a parameter

ComposeActivity
- Use either the account ID from the intent, or the current active account. **Do not** change the active account
- Pass the account ID to use in the sendStatus() call
2023-05-29 13:32:56 +02:00
Deleted User
8183ef29e4 Translated using Weblate (German)
Currently translated at 100.0% (601 of 601 strings)

Co-authored-by: Deleted User <noreply+280@weblate.org>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/de/
Translation: Tusky/Tusky
2023-05-27 16:21:10 +02:00