Commit Graph

6068 Commits

Author SHA1 Message Date
Nik Clayton a012f94c94
fix: Show links, mentions, and hashtag accessibility actions for notifications (#1040)
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
2024-10-23 12:34:28 +02:00
Nik Clayton 84aae1de7d
fix: Always create per-timeline menu (#1039)
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.
2024-10-23 12:15:24 +02:00
Nik Clayton 850b702092
change: Use checkboxes to show whether an account is a member of a list (#1036)
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
2024-10-22 16:57:03 +02:00
Nik Clayton 2234c4c782
feat: Add accessibility options for tab justification and content (#1035)
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
2024-10-21 17:49:19 +02:00
Nik Clayton 8fe2850229
fix: Don't prompt to discard/save unedited scheduled posts (#1034)
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`.
2024-10-20 20:48:53 +02:00
Nik Clayton 51769773d1
feat: Show each post's scheduled time in the list of scheduled posts (#1033)
Fixes #293
2024-10-20 20:33:31 +02:00
Nik Clayton 0fe84f1611
refactor: Use Date type for scheduled post date / times (#1032)
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.
2024-10-20 16:29:32 +02:00
Nik Clayton e68ab54f95
feat: Ignore suggested accounts that haven't posted in 28 days (#1031)
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
2024-10-19 14:38:00 +02:00
Nik Clayton ffb585b349
fix: Ensure suggested account information is not cut off (#1030)
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
2024-10-19 14:20:51 +02:00
Nik Clayton a43ebab69b
feat: Add "Don't ask again" option when confirming the posting language (#1027)
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
2024-10-18 17:26:50 +02:00
Nik Clayton ba83e971b1
fix: Show all search operators on 4.3.0+ servers (#1026)
Previous code didn't include the 4.2.x search operators on a 4.3.x
servers, so only the "in:public" operator was exposed.
2024-10-18 16:45:20 +02:00
Nik Clayton c8aa4fd374
fix: Disable "Scheduled post" support on GoToSocial accounts (#1025)
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
2024-10-18 15:37:10 +02:00
Nik Clayton 8fac5c3d4d
fix: Don't clip buttons when choosing scheduled post time (#1024)
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.
2024-10-18 15:13:17 +02:00
renovate[bot] 0c4a17f073
chore(deps): update actions/upload-artifact digest to b4b15b8 (#1011)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
| action | digest | `5076954` -> `b4b15b8` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:26:35 +02:00
renovate[bot] b52f2aa23e
chore(deps): update actions/checkout digest to eef6144 (#999)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/checkout](https://redirect.github.com/actions/checkout) |
action | digest | `692973e` -> `eef6144` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMTUuMSIsInVwZGF0ZWRJblZlciI6IjM4LjExNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:25:25 +02:00
renovate[bot] 206fff6c5b
fix(deps): update dependency com.android.tools:desugar_jdk_libs to v2.1.2 (#1016)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[com.android.tools:desugar_jdk_libs](https://redirect.github.com/google/desugar_jdk_libs)
| `2.1.1` -> `2.1.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.tools:desugar_jdk_libs/2.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.tools:desugar_jdk_libs/2.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.tools:desugar_jdk_libs/2.1.1/2.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.tools:desugar_jdk_libs/2.1.1/2.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>google/desugar_jdk_libs
(com.android.tools:desugar_jdk_libs)</summary>

###
[`v2.1.2`](https://redirect.github.com/google/desugar_jdk_libs/blob/HEAD/CHANGELOG.md#Version-212--2024-08-30-)

- Added support for standalone weekday names. Before they were returned
as
    numbers 1 through 7.
    See [issue 362277530](https://issuetracker.google.com/362277530)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:24:30 +02:00
renovate[bot] b3ecc0aa42
fix(deps): update junit5 monorepo to v5.11.2 (#1018)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.junit.jupiter:junit-jupiter-params](https://junit.org/junit5/)
([source](https://redirect.github.com/junit-team/junit5)) | `5.11.0` ->
`5.11.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter-params/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.junit.jupiter:junit-jupiter-params/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.junit.jupiter:junit-jupiter-params/5.11.0/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter-params/5.11.0/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.junit.jupiter:junit-jupiter](https://junit.org/junit5/)
([source](https://redirect.github.com/junit-team/junit5)) | `5.11.0` ->
`5.11.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.junit.jupiter:junit-jupiter/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.junit.jupiter:junit-jupiter/5.11.0/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter/5.11.0/5.11.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:22:06 +02:00
renovate[bot] da1bdc0276
chore(deps): update ytanikin/prconventionalcommits action to v1.3.0 (#1020)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[ytanikin/PRConventionalCommits](https://redirect.github.com/ytanikin/PRConventionalCommits)
| action | minor | `1.2.0` -> `1.3.0` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>ytanikin/PRConventionalCommits
(ytanikin/PRConventionalCommits)</summary>

###
[`v1.3.0`](https://redirect.github.com/ytanikin/PRConventionalCommits/releases/tag/1.3.0)

[Compare
Source](https://redirect.github.com/ytanikin/PRConventionalCommits/compare/1.2.0...1.3.0)

#### What's Changed

- fix: Set breaking changes regex by
[@&#8203;alexangas](https://redirect.github.com/alexangas) in
[https://github.com/ytanikin/PRConventionalCommits/pull/24](https://redirect.github.com/ytanikin/PRConventionalCommits/pull/24)

#### New Contributors

- [@&#8203;alexangas](https://redirect.github.com/alexangas) made their
first contribution in
[https://github.com/ytanikin/PRConventionalCommits/pull/24](https://redirect.github.com/ytanikin/PRConventionalCommits/pull/24)

**Full Changelog**:
https://github.com/ytanikin/PRConventionalCommits/compare/1.2.0...1.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:20:32 +02:00
renovate[bot] e89cfb3c60
fix(deps): update dependency app.cash.turbine:turbine to v1.2.0 (#1022)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[app.cash.turbine:turbine](https://redirect.github.com/cashapp/turbine)
| `1.1.0` -> `1.2.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/app.cash.turbine:turbine/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/app.cash.turbine:turbine/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/app.cash.turbine:turbine/1.1.0/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/app.cash.turbine:turbine/1.1.0/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>cashapp/turbine (app.cash.turbine:turbine)</summary>

###
[`v1.2.0`](https://redirect.github.com/cashapp/turbine/blob/HEAD/CHANGELOG.md#120---2024-10-16)

[Compare
Source](https://redirect.github.com/cashapp/turbine/compare/1.1.0...1.2.0)

[1.2.0]: https://redirect.github.com/cashapp/turbine/releases/tag/1.2.0

##### Added

-   Add `wasmWasi` target.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 13:18:56 +02:00
Nik Clayton 2a9293cf3b
change: Document the WELLBEING_* preferences (#1010) 2024-10-18 01:29:39 +02:00
Nik Clayton a5c8bf5e7e
fix: Remove the "Liimt timeline notifications" preference (#1009)
This wasn't acting as a preference.

It presented as a switch. If the user toggled it some notification
settings were changed for all accounts.

It wasn't clear what was changed, and if the user changed some of those
settings back the switch position did not change (it couldn't, you
couldn't meaningfully represent a partial change using a single switch).

Since the user has full control over the notification filters on a
per-account basis remove this "preference" to reduce confusion.

Fixes #935
2024-10-17 22:09:22 +02:00
Nik Clayton 1b3b78a9dd
refactor: Pass pachliAccountId to more functions (#1008)
While this isn't used in many places yet, it pushes the places where the
active account is referenced further up the call stack.
2024-10-17 21:19:17 +02:00
Nik Clayton ab186d4d07
fix: Bump database version after changing foreign key constraint (#1005) 2024-10-14 20:39:34 +02:00
Nik Clayton eeca401942
fix: Don't crash if foreign key constraint is invalid in transaction (#1004)
ForeignKey constraints can be invalidated in the middle of a transaction
even if a later statement in the same transaction will make them valid
again. This seems to be causing production crashes.

Defer foreign key constraint checks until the end of the transaction to
prevent this.
2024-10-14 18:42:55 +02:00
Nik Clayton fd9cc2ea96
refactor: Improve saveVisibleId log message (#1003) 2024-10-14 17:21:04 +02:00
Nik Clayton f7c87dfe73
refactor: Use pachliAccountId in EditProfileActivity (#1002)
Pass the value to EditProfileViewModel. It's not used yet, but this
minimises diffs an upcoming large refactor.
2024-10-14 16:39:45 +02:00
Nik Clayton 9b99a78d1f
test: Ensure that all relevant MastodonAPI methods are stubbed (#1001)
Tests that rely on stubbing the MastodonAPI may have incorrect behaviour
if some of the API methods called by the system-under-test are not
stubbed. This can be difficult to track down.

Make this easier by adding a default answer for the MastodonAPI used in
tests. Any un-stubbed methods will throw an `AssertionError` with enough
information to identify the method that should be stubbed and where it
was called from.
2024-10-13 17:18:54 +02:00
Vaclovas Intas 52e66c11e0 fix(l10n): Update Lithuanian translations
Currently translated at 11.7% (2 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/lt/
2024-10-12 20:49:52 +02:00
Vaclovas Intas 6f8210316f fix(l10n): Update Lithuanian translations
Currently translated at 4.0% (1 of 25 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/lt/
2024-10-12 20:49:52 +02:00
mondstern 2c75be8936 fix(l10n): Update Ukrainian translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Pachli/App : Fdroid
Translate-URL: https://hosted.weblate.org/projects/pachli/app-fdroid/uk/
2024-10-12 20:49:52 +02:00
renovate[bot] 795f239d67
chore(deps): update kotlin (#947)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp)
([source](https://redirect.github.com/google/ksp)) | `2.0.20-1.0.24` ->
`2.0.21-1.0.25` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp/2.0.20-1.0.24/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp/2.0.20-1.0.24/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin](https://goo.gle/ksp)
([source](https://redirect.github.com/google/ksp)) | `2.0.20-1.0.24` ->
`2.0.21-1.0.25` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.20-1.0.24/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.20-1.0.24/2.0.21-1.0.25?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| org.jetbrains.kotlin.plugin.parcelize | `2.0.20` -> `2.0.21` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.plugin.parcelize/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.plugin.parcelize/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.plugin.parcelize/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.plugin.parcelize/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| org.jetbrains.kotlin.jvm | `2.0.20` -> `2.0.21` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.jvm/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.jvm/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.jvm/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.jvm/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| org.jetbrains.kotlin.android | `2.0.20` -> `2.0.21` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.android/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.android/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.android/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.android/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.jetbrains.kotlin:kotlin-gradle-plugin](https://kotlinlang.org/)
([source](https://redirect.github.com/JetBrains/kotlin)) | `2.0.20` ->
`2.0.21` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.jetbrains.kotlin:kotlin-stdlib](https://kotlinlang.org/)
([source](https://redirect.github.com/JetBrains/kotlin)) | `2.0.20` ->
`2.0.21` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin:kotlin-stdlib/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin:kotlin-stdlib/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin:kotlin-stdlib/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin:kotlin-stdlib/2.0.20/2.0.21?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-play-services](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.8.1` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-test](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.8.1` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-android](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.8.1` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.1/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>

###
[`v2.0.21-1.0.25`](https://redirect.github.com/google/ksp/releases/tag/2.0.21-1.0.25)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.0.20-1.0.25...2.0.21-1.0.25)

#### What's Changed

- UPDATE_KOTLIN_VERSION: 2.0.21 by
[@&#8203;ting-yuan](https://redirect.github.com/ting-yuan) in
[https://github.com/google/ksp/pull/2145](https://redirect.github.com/google/ksp/pull/2145)

**Full Changelog**:
https://github.com/google/ksp/compare/2.0.21-RC-1.0.25...2.0.21-1.0.25

###
[`v2.0.20-1.0.25`](https://redirect.github.com/google/ksp/releases/tag/2.0.20-1.0.25)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.0.20-1.0.24...2.0.20-1.0.25)

#### Bugs Fixed

Inlined JVM name is not correct
[#&#8203;1493](https://redirect.github.com/google/ksp/issues/1493)
\[KSP2] NullPointerException when getting name of nested annotation
[#&#8203;1963](https://redirect.github.com/google/ksp/issues/1963)
\[KSP2] The status was unresolved for FirSimpleFunctionImpl
[#&#8203;1938](https://redirect.github.com/google/ksp/issues/1938)
\[KSP2] Class values in type annotations get resolved to error type
[#&#8203;1933](https://redirect.github.com/google/ksp/issues/1933)
\[KSP2] Comparing KSType leads to exception
[#&#8203;1918](https://redirect.github.com/google/ksp/issues/1918)
\[KSP2] Can't find values in repeatable annotations
[#&#8203;1883](https://redirect.github.com/google/ksp/issues/1883)
incremental: aggregating outputs should always be invalidated
[#&#8203;2027](https://redirect.github.com/google/ksp/issues/2027)
\[KSP2] Not yet implemented: KSValueArgumentLiteImpl.getLocation
[#&#8203;2048](https://redirect.github.com/google/ksp/issues/2048)
\[KSP2] Not yet implemented: KSValueArgumentImpl.getParent
[#&#8203;2049](https://redirect.github.com/google/ksp/issues/2049)
getSymbolsWithAnnotation returns copy function from data class
[#&#8203;1996](https://redirect.github.com/google/ksp/issues/1996)
\[KSP2] Annotations got use-site target when there are none specified
[#&#8203;1882](https://redirect.github.com/google/ksp/issues/1882)
getting null pointer exception
[#&#8203;1929](https://redirect.github.com/google/ksp/issues/1929)
\[KSP2] Calling getDeclarationsInSourceOrder throws
KotlinIllegalStateExceptionWithAttachments
[#&#8203;1930](https://redirect.github.com/google/ksp/issues/1930)
\[KSP2] A failure occurred while executing
com.google.devtools.ksp.gradle.KspAAWorkerAction
[#&#8203;1941](https://redirect.github.com/google/ksp/issues/1941)
KSP2: Resolver.getJvmNames doesn't work for inline and internal classes
[#&#8203;1640](https://redirect.github.com/google/ksp/issues/1640)
kspCaches don't work together with Gradle build cache
[#&#8203;2042](https://redirect.github.com/google/ksp/issues/2042)

#### Contributors

Thank you so much! [@&#8203;ansman](https://redirect.github.com/ansman),
[@&#8203;kuanyingchou](https://redirect.github.com/kuanyingchou)

**Full Changelog**:
https://github.com/google/ksp/compare/2.0.20-1.0.24...2.0.20-1.0.25

</details>

<details>
<summary>JetBrains/kotlin
(org.jetbrains.kotlin:kotlin-gradle-plugin)</summary>

###
[`v2.0.21`](https://redirect.github.com/JetBrains/kotlin/releases/tag/v2.0.21):
Kotlin 2.0.21

##### Changelog

##### Apple Ecosystem

- [`KT-69093`](https://youtrack.jetbrains.com/issue/KT-69093) Xcode 16
support in Kotlin

##### Backend. Native. Debug

- [`KT-71374`](https://youtrack.jetbrains.com/issue/KT-71374) lldb: step
out breaks breaking in Xcode 16

##### Compiler

##### Fixes

- [`KT-69735`](https://youtrack.jetbrains.com/issue/KT-69735) K2: Static
fields are missing from the declaration list of corresponding IrClass
for java class
- [`KT-71122`](https://youtrack.jetbrains.com/issue/KT-71122) Regression
in Kotlin Compiler 2.0 causing NPE in the runtime
- [`KT-70931`](https://youtrack.jetbrains.com/issue/KT-70931) K2 /
Scripts: "cannot convert IrExpression to ConstantValue" when using
function annotation
- [`KT-70584`](https://youtrack.jetbrains.com/issue/KT-70584) K2:
"IllegalStateException: flow for PostponedLambdaExitNode not initialized
- traversing nodes in wrong order?"
- [`KT-70808`](https://youtrack.jetbrains.com/issue/KT-70808) K2: "node
has already been visited" with anonymous object in dead code
- [`KT-69985`](https://youtrack.jetbrains.com/issue/KT-69985) K2:
Classifier declarations from root package are resolved without imports
in non-root packages
- [`KT-70683`](https://youtrack.jetbrains.com/issue/KT-70683) K2:
Internal compiler error in IrFakeOverrideSymbolBase.getOwner
- [`KT-70901`](https://youtrack.jetbrains.com/issue/KT-70901) False
positive Public-API inline function cannot access non-public-API
property accessor
- [`KT-70930`](https://youtrack.jetbrains.com/issue/KT-70930) K2: Java
annotations not present on ENUM_ENTRY IR elements
- [`KT-70194`](https://youtrack.jetbrains.com/issue/KT-70194) K2 IDE:
exception on a very red file
- [`KT-69399`](https://youtrack.jetbrains.com/issue/KT-69399) Native:
IllegalStateException: "Failed to build cache"

##### Compose compiler

##### Fixes

- [`b/329477544`](https://issuetracker.google.com/issues/329477544)
Force open / overridden Composable functions to be non-restartable.
- [`b/361652128`](https://issuetracker.google.com/issues/361652128)
Disable live literal transform if the corresponding flag is disabled

##### IR. Actualizer

- [`KT-70894`](https://youtrack.jetbrains.com/issue/KT-70894) IR crash.
Unprocessed `IrFunctionFakeOverrideSymbol` when actualize to Java

##### IR. Tree

- [`KT-71191`](https://youtrack.jetbrains.com/issue/KT-71191)
SymbolTable: Check if the provided signature is public before adding a
symbol to the SymbolTable

##### Native. Build Infrastructure

- [`KT-71485`](https://youtrack.jetbrains.com/issue/KT-71485) K/N
runtime parts don't build due to \_Float16 issues on x86\_64 macOS

##### Native. C Export

- [`KT-69507`](https://youtrack.jetbrains.com/issue/KT-69507) LLVM 11
clang with Xcode 16 headers: standard c++ headers

##### Native. C and ObjC Import

- [`KT-71029`](https://youtrack.jetbrains.com/issue/KT-71029)
Investigate why stdarg.h declarations leak into testModuleA

##### Native. Platform Libraries

- [`KT-70566`](https://youtrack.jetbrains.com/issue/KT-70566) LLVM 11
clang with Xcode 16 headers: 'sys/cdefs.h' file not found
- [`KT-71624`](https://youtrack.jetbrains.com/issue/KT-71624) Eliminate
remaining UIKit/AppKit removed signatures
- [`KT-70031`](https://youtrack.jetbrains.com/issue/KT-70031) Rebuild
platform libraries in 2.0.21 with Xcode 16

##### Native. Testing

- [`KT-70603`](https://youtrack.jetbrains.com/issue/KT-70603) C++ with
-fmodules: cyclic dependency in module 'std': std -> \_wctype ->
\__wctype -> std in dev llvm toolchains

##### Tools. CLI. Native

- [`KT-71262`](https://youtrack.jetbrains.com/issue/KT-71262)
KotlinNativeLink tasks fetching from network despite
-Xoverride-konan-properties=dependenciesUrl= being set

##### Tools. Compiler Plugins

- [`KT-71038`](https://youtrack.jetbrains.com/issue/KT-71038)
PowerAssert: Constant on RHS of elvis operator leads to compiler crash

##### Tools. Daemon

- [`KT-35381`](https://youtrack.jetbrains.com/issue/KT-35381) Get rid of
the native-platform usage in kotlin compiler

##### Tools. Gradle. Multiplatform

- [`KT-71444`](https://youtrack.jetbrains.com/issue/KT-71444) Certain
POMs produced by Kotlin 2.0.20 cannot be consumed by KMP projects with
Android targets
- [`KT-70700`](https://youtrack.jetbrains.com/issue/KT-70700) Gradle
8.10: The value for task ':commonizeNativeDistribution' property
'kotlinNativeBundleBuildService' cannot be changed any further
- [`KT-71396`](https://youtrack.jetbrains.com/issue/KT-71396) Gradle
client side JVM explodes with OOM due to xcodebuild logs

##### Tools. Gradle. Native

- [`KT-71419`](https://youtrack.jetbrains.com/issue/KT-71419) Light
bundle KGP IT run against a stable K/N version

##### Tools. JPS

- [`KT-71450`](https://youtrack.jetbrains.com/issue/KT-71450) Constant
build failure: com.intellij.util.io.ClosedStorageException: storage is
already closed

</details>

<details>
<summary>Kotlin/kotlinx.coroutines
(org.jetbrains.kotlinx:kotlinx-coroutines-play-services)</summary>

###
[`v1.9.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-190)

[Compare
Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.8.1...1.9.0)

##### Features

- Wasm/WASI target support
([#&#8203;4064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4064)).
Thanks,
[@&#8203;igoriakovlev](https://redirect.github.com/igoriakovlev)!
- `limitedParallelism` now optionally accepts the name of the dispatcher
view for easier debugging
([#&#8203;4023](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4023)).
- No longer initialize `Dispatchers.IO` on the JVM when other standard
dispatchers are accessed
([#&#8203;4166](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4166)).
Thanks,
[@&#8203;metalhead8816](https://redirect.github.com/metalhead8816)!
- Introduced the `Flow<T>.chunked(size: Int): Flow<List<T>>` operator
that groups emitted values into groups of the given size
([#&#8203;1290](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1290)).
- Closeable dispatchers are instances of `AutoCloseable` now
([#&#8203;4123](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4123)).

##### Fixes

- Calling `hasNext` on a `Channel`'s iterator is idempotent
([#&#8203;4065](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4065)).
Thanks, [@&#8203;gitpaxultek](https://redirect.github.com/gitpaxultek)!
- `CoroutineScope()` created without an explicit dispatcher uses
`Dispatchers.Default` on Native
([#&#8203;4074](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4074)).
Thanks, [@&#8203;whyoleg](https://redirect.github.com/whyoleg)!
- Fixed a bug that prevented non-Android `Dispatchers.Main` from
initializing when the Firebase dependency is used
([#&#8203;3914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3914)).
- Ensured a more intuitive ordering of tasks in `runBlocking`
([#&#8203;4134](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4134)).
- Forbid casting a `Mutex` to `Semaphore`
([#&#8203;4176](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4176)).
- Worked around a stack overflow that may occur when calling
`asDeferred` on a `Future` many times
([#&#8203;4156](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4156)).

##### Deprecations and promotions

- Advanced the deprecation levels for `BroadcastChannel`-based API
([#&#8203;4197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4197)).
- Advanced the deprecation levels for the old `kotlinx-coroutines-test`
API
([#&#8203;4198](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4198)).
- Deprecated `Job.cancelFutureOnCompletion`
([#&#8203;4173](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4173)).
- Promoted `CoroutineDispatcher.limitedParallelism` to stable
([#&#8203;3864](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3864)).
- Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to
`DelicateCoroutinesApi`
([#&#8203;4169](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4169)).
- Promoted `CancellableContinuation.resume` with an `onCancellation`
lambda to stable, providing extra arguments to the lambda
([#&#8203;4088](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4088)).
- Marked the classes and interfaces that are not supposed to be
inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).
- Marked the classes and interfaces inheriting from which is not stable
with the new `ExperimentalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).

##### Other

- Kotlin was updated to 2.0
([#&#8203;4137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4137)).
- Reworked the documentation for `CoroutineStart` and `Channel`-based
API
([#&#8203;4147](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4147),
[#&#8203;4148](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4148),
[#&#8203;4167](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4167)).
Thanks, [@&#8203;globsterg](https://redirect.github.com/globsterg)!
- Simplified the internal implementation of `Job`
([#&#8203;4053](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4053)).
-   Small tweaks, fixes, and documentation improvements.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguMTE1LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-11 17:05:04 +02:00
Weblate (bot) 2bdec1d44b
fix(l10n): Translations update from Hosted Weblate (#998)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for [Pachli/Fastlane
Metadata](https://hosted.weblate.org/projects/pachli/fastlane-metadata/).


It also includes following components:

* [Pachli/App :
Fdroid](https://hosted.weblate.org/projects/pachli/app-fdroid/)

* [Pachli/Core/Ui :
Main](https://hosted.weblate.org/projects/pachli/coreui-main/)

* [Pachli/Feature/About :
Main](https://hosted.weblate.org/projects/pachli/featureabout-main/)

*
[Pachli/Feature/Login](https://hosted.weblate.org/projects/pachli/featurelogin/)

* [Pachli/Feature/Suggestions :
Main](https://hosted.weblate.org/projects/pachli/featuresuggestions-main/)

* [Pachli/App :
Main](https://hosted.weblate.org/projects/pachli/app-main/)

* [Pachli/Core/Network :
Main](https://hosted.weblate.org/projects/pachli/corenetwork-main/)

* [Pachli/Feature/Lists :
Main](https://hosted.weblate.org/projects/pachli/featurelists-main/)

* [Pachli/Core/Designsystem :
Main](https://hosted.weblate.org/projects/pachli/coredesignsystem-main/)

* [Pachli/Core/Activity :
Main](https://hosted.weblate.org/projects/pachli/coreactivity-main/)

* [Pachli/Core/Preferences :
Main](https://hosted.weblate.org/projects/pachli/corepreferences-main/)

* [Pachli/Core/Data :
Main](https://hosted.weblate.org/projects/pachli/coredata-main/)

* [Pachli/App :
Google](https://hosted.weblate.org/projects/pachli/app-google/)

* [Pachli/Core/Activity :
Orange](https://hosted.weblate.org/projects/pachli/coreactivity-orange/)



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pachli/fastlane-metadata/horizontal-auto.svg)

Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
2024-10-11 16:07:00 +02:00
Weblate (bot) 0cf50524f2
fix(l10n): Translations update from Hosted Weblate (#995)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for [Pachli/Fastlane
Metadata](https://hosted.weblate.org/projects/pachli/fastlane-metadata/).


It also includes following components:

* [Pachli/App :
Main](https://hosted.weblate.org/projects/pachli/app-main/)

* [Pachli/App :
Fdroid](https://hosted.weblate.org/projects/pachli/app-fdroid/)

*
[Pachli/Feature/Login](https://hosted.weblate.org/projects/pachli/featurelogin/)

* [Pachli/Feature/Suggestions :
Main](https://hosted.weblate.org/projects/pachli/featuresuggestions-main/)

* [Pachli/Feature/Lists :
Main](https://hosted.weblate.org/projects/pachli/featurelists-main/)

* [Pachli/Core/Ui :
Main](https://hosted.weblate.org/projects/pachli/coreui-main/)

* [Pachli/App :
Google](https://hosted.weblate.org/projects/pachli/app-google/)

* [Pachli/Core/Designsystem :
Main](https://hosted.weblate.org/projects/pachli/coredesignsystem-main/)

* [Pachli/Core/Data :
Main](https://hosted.weblate.org/projects/pachli/coredata-main/)

* [Pachli/Core/Activity :
Main](https://hosted.weblate.org/projects/pachli/coreactivity-main/)

* [Pachli/Feature/About :
Main](https://hosted.weblate.org/projects/pachli/featureabout-main/)

* [Pachli/Core/Preferences :
Main](https://hosted.weblate.org/projects/pachli/corepreferences-main/)

* [Pachli/Core/Activity :
Orange](https://hosted.weblate.org/projects/pachli/coreactivity-orange/)

* [Pachli/Core/Network :
Main](https://hosted.weblate.org/projects/pachli/corenetwork-main/)



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pachli/fastlane-metadata/horizontal-auto.svg)

---------

Co-authored-by: Vaclovas Intas <vaclovas1999@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: LibreTranslate <noreply-mt-libretranslate@weblate.org>
2024-10-10 21:42:59 +02:00
Nik Clayton a4e9c563e9
fix: Prevent crash when ModuleInstall.API is unavailable (#997)
Seen the following crash in user reports:

```
com.google.android.gms.common.api.ApiException: 17:
  API: ModuleInstall.API is not available on this device.
  Connection failed with:
  ConnectionResult{statusCode=SERVICE_INVALID, resolution=null, message=null}
```

Doesn't appear to be properly documented anywhere I can find. To work
around this catch exceptions when checking for MLKit modules or
installing them and return defaults.
2024-10-10 20:44:06 +02:00
Nik Clayton 23121459ab
refactor: Implement SharedPreferencesRepository.showSelfUsername property (#996) 2024-10-10 20:15:46 +02:00
Nik Clayton fd0957d829
fix: Parse and restore poll when editing scheduled statuses (#994)
Previous code didn't deserialise the "poll" attribute so it was never
passed to the composer when editing scheduled statuses.

Fixes #991
2024-10-10 19:43:48 +02:00
Nik Clayton f3b11d0e81
refactor: Lazy load preferences to prevent crash (#993)
Without this the values are loaded from sharedPreferencesRepository
before the variable is initialised.
2024-10-10 15:14:51 +02:00
Nik Clayton e307796251
refactor: Provide properties for more shared preferences (#992)
Continues the work of providing properties with accessors for specific
shared preferences.
2024-10-10 13:12:56 +02:00
Weblate (bot) 367747838d
fix(l10n): Translations update from Hosted Weblate (#989)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for [Pachli/Fastlane
Metadata](https://hosted.weblate.org/projects/pachli/fastlane-metadata/).


It also includes following components:

*
[Pachli/Feature/Login](https://hosted.weblate.org/projects/pachli/featurelogin/)

* [Pachli/Core/Network :
Main](https://hosted.weblate.org/projects/pachli/corenetwork-main/)

* [Pachli/Core/Preferences :
Main](https://hosted.weblate.org/projects/pachli/corepreferences-main/)

* [Pachli/Feature/Lists :
Main](https://hosted.weblate.org/projects/pachli/featurelists-main/)

* [Pachli/Core/Ui :
Main](https://hosted.weblate.org/projects/pachli/coreui-main/)

* [Pachli/App :
Google](https://hosted.weblate.org/projects/pachli/app-google/)

* [Pachli/Core/Designsystem :
Main](https://hosted.weblate.org/projects/pachli/coredesignsystem-main/)

* [Pachli/Core/Data :
Main](https://hosted.weblate.org/projects/pachli/coredata-main/)

* [Pachli/Core/Activity :
Main](https://hosted.weblate.org/projects/pachli/coreactivity-main/)

* [Pachli/Feature/About :
Main](https://hosted.weblate.org/projects/pachli/featureabout-main/)

* [Pachli/App :
Main](https://hosted.weblate.org/projects/pachli/app-main/)

* [Pachli/Core/Activity :
Orange](https://hosted.weblate.org/projects/pachli/coreactivity-orange/)

* [Pachli/App :
Fdroid](https://hosted.weblate.org/projects/pachli/app-fdroid/)

* [Pachli/Feature/Suggestions :
Main](https://hosted.weblate.org/projects/pachli/featuresuggestions-main/)



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pachli/fastlane-metadata/horizontal-auto.svg)

---------

Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: LibreTranslate <noreply-mt-libretranslate@weblate.org>
2024-10-09 14:00:51 +02:00
Nik Clayton 21ff45ac34
refactor: Update ListsViewModel to use OperationCounter (#990) 2024-10-09 11:45:13 +02:00
Nik Clayton 8587fafaa8
refactor: Expose main navigation preference as an enum (#988) 2024-10-08 15:30:56 +02:00
Nik Clayton 1c5699e282
fix: Load announcements with associated statuses correctly (#987)
The `Status` type associated with an announcement is entirely different
to the regular `Status` type, with a different JSON shape. The incorrect
type meant a deserialisation error when loading announcements with
associated statuses.
2024-10-08 14:44:19 +02:00
Nik Clayton 59a0e3087c
refactor: Pass the active account ID to activities, fragments, etc (#982)
Previous code assumed the active account could always be determined from
the account manager.

This causes a few problems.

1. The account manager has to handle the case where there is no active
account (e.g., the user is logging out of the last account). This meant
the `activeAccount` property had to be nullable, so every consumer of
that property either used it with a `let` or `!!` expression.

2. The active account can change over the life of the UI component, for
example, when the user is switching accounts. There's a theoretical race
condition where the UI component has started an operation for one
account, then the account changes and the network authentication code
uses the new account.

3. All operations assume they operate on whatever the active account is,
making it difficult to provide any features that allow the user to
temporarily operate as another account ("Boost as...", etc).

This "ambient account" was effectively global mutable state, with all
the problems that can cause.

Start to fix this. The changes in this commit do not fix the problem
completely, but they are some progress.

Each activity (except LoginActivity) is expected to be launched with an
intent that includes the ID of the Pachli account it defaults to
operating with. This is `pachliAccountId`, and is the *database ID*
(not the server ID) of the account. This is non-null, which removes one
class of bugs.

This account is passed to each fragment and any piece of code that has
to perform an operation on behalf of this account. It's not used in
most of those places yet, that will be done over a number of followup
PRs as part of modernising each module.
2024-10-07 15:56:37 +02:00
Nik Clayton 668c073822
refactor: Assorted code inspection cleanups (#985)
Code inspection found some mechanical code cleanups.
2024-10-07 12:38:35 +02:00
Nik Clayton ea635d654e
refactor: Rename ListActivityIntent to ListsActivityIntent (#984)
Since the activity it launches is called `ListsActivity`.
2024-10-07 12:33:42 +02:00
Weblate Translation Memory 931f9756c1 fix(l10n): Update Burmese translations
Currently translated at 35.7% (5 of 14 strings)

Translation: Pachli/Core/Preferences : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/corepreferences-main/my/
2024-10-07 10:55:16 +02:00
Kalle Kniivilä 3ec4e15b89 fix(l10n): Update Finnish translations
Currently translated at 100.0% (14 of 14 strings)

Translation: Pachli/Core/Preferences : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/corepreferences-main/fi/
2024-10-06 19:08:25 +02:00
Kalle Kniivilä aaf88b4ac3 fix(l10n): Update Finnish translations
Currently translated at 100.0% (728 of 728 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-10-06 19:08:25 +02:00
--//-- 268b042a95 fix(l10n): Update Burmese translations
Currently translated at 14.1% (103 of 728 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/my/
2024-10-06 19:08:25 +02:00
Languages add-on 1b28d7bae9 feat(l10n): Added Burmese translation 2024-10-06 19:08:25 +02:00