Commit Graph

5703 Commits

Author SHA1 Message Date
Nik Clayton bad502e6c3
fix: Use show()/hide() to ensure animation is delayed (#834) 2024-07-24 17:20:44 +02:00
Nik Clayton e4a305f608
refactor: Shorten search operator chip label strings (#833)
Improves the information density when selecting search operators.
2024-07-23 15:48:08 +02:00
Nik Clayton 11444bd27d
feat: Search whenever one of the search operators changes (#832) 2024-07-23 15:02:54 +02:00
Nik Clayton ae8584422c
fix: Ensure trending tag name is fully visible (#831)
Previously re-binding the tag's text wouldn't re-measure the layout when
the text changed. So scrolling down a longer tag could be placed in a
textview that previously held a shorter tag.

Then it was cut off and the user couldn't see what the tag was. Use
`wrap_content` so size is measured when the content changes.
2024-07-22 17:27:52 +02:00
Nik Clayton 71e006b0d2
feat: Provide a UI to edit different search operators (#829)
Mastodon supports in-query search operators, such as `has:image`,
`language:en`, or `in:library`. Previously the user had to enter them in
to the query directly.

This provides a chip-based UI that allows the user to set values for
these operators.

## Server

- Add new search capabilities to record the faceted search features the
server reports.
- Update definitions for Mastodon, Friendica, and GoToSocial to specify
which versions of the operations they support.

## SearchOperator / SearchOperatorViewData

- Represents each supported operator and associated viewdata.

## SearchActivity / activity_search.xml

- Conditionally display a chip for each facet depending on the server's
level of support.
- Implement the UI for each chip. They display dialogs of varying levels
of complexity depending on the underlying operation.

## FragmentSearch

- Display the progress as a LinearProgressIndicator instead of an
indeterminate ProgressBar. This makes it more visible under the search
facets.
2024-07-22 17:11:08 +02:00
Nik Clayton e063ae69e6
fix: Support same capabilities on Glitch as Mastodon (#828)
The Glitch fork reports the same version number as stock Mastodon and is
supposed to have the same baseline capabilities as stock Mastodon at
that version number.
2024-07-22 16:37:26 +02:00
Nik Clayton c4bc7f81da
refactor: Use withStyledAttributes in FontFamilyDialogFragment (#827)
Ensures it is not possible to forget to recycle the attribute array.
2024-07-22 16:29:53 +02:00
Nik Clayton 526ee27a6a
fix: Enable server filtering on GoToSocial 0.16+ (#826)
Previous code had the version test in the wrong order, so the check for
>= 0.15.0 took precedence.
2024-07-22 16:22:01 +02:00
Nik Clayton 92e5304b84
fix: Use colorPrimary for checked/selected dialog items (#825)
RadioButton and CheckBox color the selected radio button or check box
using `colorPrimary`. For some reason Material dialogs don't, and use
`colorSecondary` for this (and only this), which leads to visual
inconstencices through the app.

Fix this by setting `colorSecondary` to `colorPrimary` to force it.
2024-07-22 16:19:08 +02:00
Nik Clayton 6b55d107c1
feat: Edit a matching filter directly from the timeline (#819)
Previously, if a status was filtered with "WARN" and was shown in the
timeline with the name of the filter, and the user then decided to
change
that filter, they had to:

1. Open the left navigation menu
2. Navigate to "Account preferences"
3. Open "Filters"
4. Find the filter they want to edit, tap it
5. Make the change, and save
6. "Back" to the list of filters
7. "Back" to "Account preferences"
8. "Back" to the timeline

That's a lot of clicks for a simple action.

Change this. Now the filtered status includes an "Edit filter" button
that takes the user directly to step 5, and when they press "Back" they
return directly to the timeline.

To do this create a new filter action, `onEditFilterById`. Update the
listeners to launch `EditFilterActivity` if appropriate.

Modify `item_status_filtered.xml` to show the new button.

Update the accessibility delegate to show just the "Show anyway" and
"Edit filter" actions. Modify `FilterableStatusViewHolder` to expose
the information it needs to do this.
2024-07-19 13:45:24 +02:00
Nik Clayton 7ef692c2c8
fix: Don't focus search query when returning to the results list (#824)
Previous code always focused the search query. This meant that if the
user:

1. Searched for something
2. Opened a result (post, hashtag, account)
3. Navigated back to the search results

then because the query was focused the soft-keyboard would open,
obscuring the list of results. The user had to press "Back" again to
dismiss the keyboard.

New code only focuses the search query view if it is empty. This allows
the user to come back to the list of results and immediately open a new
result.
2024-07-15 09:02:07 +02:00
Nik Clayton b757765383
change: Remove copyWithCollapsed helper (#823)
Holdover from when Java interoperability was required.
2024-07-15 00:00:36 +02:00
Nik Clayton e560868749
feat: Animate filter keywords when added or removed (#817)
This makes it a little easier to see what's been changed.
2024-07-14 23:43:20 +02:00
Nik Clayton b878211891
feat: Show a specific message if requests are rate-limited (#818) 2024-07-14 23:43:10 +02:00
Nik Clayton af11e3d3a1
refactor: Replace `getOrElse { null }` with get() (#820)
`getOrElse { null }` is synonymous with `get()` when using
kotlin-result.
2024-07-14 23:42:59 +02:00
renovate[bot] 8aa521890f
chore(deps): update kotlin (#800)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp)
([source](https://togithub.com/google/ksp)) | `2.0.0-1.0.22` ->
`2.0.0-1.0.23` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin](https://goo.gle/ksp)
([source](https://togithub.com/google/ksp)) | `2.0.0-1.0.22` ->
`2.0.0-1.0.23` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.0-1.0.23?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.0-1.0.23?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.0-1.0.22/2.0.0-1.0.23?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.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-play-services](https://togithub.com/Kotlin/kotlinx.coroutines)
| `1.4.1` -> `1.8.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.8.1?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.8.1?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.4.1/1.8.1?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.4.1/1.8.1?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.0-1.0.23`](https://togithub.com/google/ksp/compare/2.0.0-1.0.22...2.0.0-1.0.23)

[Compare
Source](https://togithub.com/google/ksp/compare/2.0.0-1.0.22...2.0.0-1.0.23)

</details>

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

###
[`v1.8.1`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-181)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.8.0...1.8.1)

- Remove the `@ExperimentalTime` annotation from usages of `TimeSource`
([#&#8203;4046](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4046)).
Thanks, [@&#8203;hfhbd](https://togithub.com/hfhbd)!
- Introduce a workaround for an Android bug that caused an occasional
`NullPointerException` when setting the `StateFlow` value on old Android
devices
([#&#8203;3820](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3820)).
- No longer use `kotlin.random.Random` as part of `Dispatchers.Default`
and `Dispatchers.IO` initialization
([#&#8203;4051](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4051)).
- `Flow.timeout` throws the exception with which the channel was closed
([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)).
-   Small tweaks and documentation fixes.

##### Changelog relative to version 1.8.1-Beta

- `Flow.timeout` throws the exception with which the channel was closed
([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)).
-   Small documentation fixes.

###
[`v1.8.0`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-180)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0)

- Implement the library for the Web Assembly (Wasm) for JavaScript
([#&#8203;3713](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3713)).
Thanks [@&#8203;igoriakovlev](https://togithub.com/igoriakovlev)!
-   Major Kotlin version update: was 1.8.20, became 1.9.21.
- On Android, ensure that `Dispatchers.Main !=
Dispatchers.Main.immediate`
([#&#8203;3545](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3545),
[#&#8203;3963](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3963)).
- Fixed a bug that caused `Flow` operators that limit cancel the
upstream flow to forget that they were already finished if there is
another such operator upstream
([#&#8203;4035](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4035),
[#&#8203;4038](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4038))
- `kotlinx-coroutines-debug` is published with the correct Java 9 module
info
([#&#8203;3944](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3944)).
- `kotlinx-coroutines-debug` no longer requires manually setting
`DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the
default
([#&#8203;3783](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3783)).
- `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60
seconds, added the ability to configure it on the JVM with the
`kotlinx.coroutines.test.default_timeout=10s`
([#&#8203;3800](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `kotlinx-coroutines-test`: fixed a bug that could lead to not all
uncaught exceptions being reported after some tests failed
([#&#8203;3800](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `delay(Duration)` rounds nanoseconds up to whole milliseconds and not
down
([#&#8203;3920](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3920)).
Thanks [@&#8203;kevincianfarini](https://togithub.com/kevincianfarini)!
- `Dispatchers.Default` and the default thread for background work are
guaranteed to use the same context classloader as the object containing
it them
([#&#8203;3832](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3832)).
- It is guaranteed that by the time `SharedFlow.collect` suspends for
the first time, it's registered as a subscriber for that `SharedFlow`
([#&#8203;3885](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3885)).
Before, it was also true, but not documented.
- Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic
transformations are enabled, reducing the footprint of coroutine-heavy
code
([#&#8203;3954](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3954)).
- Added a workaround for miscompilation of `withLock` on JS
([#&#8203;3881](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3881)).
Thanks [@&#8203;CLOVIS-AI](https://togithub.com/CLOVIS-AI)!
-   Small tweaks and documentation fixes.

##### Changelog relative to version 1.8.0-RC2

- `kotlinx-coroutines-debug` no longer requires manually setting
`DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the
default
([#&#8203;3783](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3783)).
- Fixed a bug that caused `Flow` operators that limit cancel the
upstream flow to forget that they were already finished if there is
another such operator upstream
([#&#8203;4035](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4035),
[#&#8203;4038](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4038))
-   Small documentation fixes.

###
[`v1.7.3`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-173)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.2...1.7.3)

- Disabled the publication of the multiplatform library metadata for the
old (1.6 and earlier) KMP Gradle plugin
([#&#8203;3809](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3809)).
- Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger
in IDEA
([#&#8203;3822](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3822)).

###
[`v1.7.2`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-172)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.1...1.7.2)

##### Bug fixes and improvements

- Coroutines debugger no longer keeps track of coroutines with empty
coroutine context
([#&#8203;3782](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3782)).
- `CopyableThreadContextElement` now properly copies an element when
crossing the coroutine boundary in `flowOn`
([#&#8203;3787](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3787)).
Thanks [@&#8203;wanyingd1996](https://togithub.com/wanyingd1996)!
- Coroutine timeouts no longer prevent K/N `newSingleThreadContext` from
closing
([#&#8203;3768](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3768)).
- A non-linearizability in `Mutex` during `tryLock`/`unlock` sequence
with owners is fixed
([#&#8203;3745](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3745)).
-   Atomicfu version is updated to 0.21.0.

###
[`v1.7.1`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-171)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.0...1.7.1)

##### Bug fixes and improvements

- Special characters in coroutine names in JSON dumps are supported
([#&#8203;3747](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3747))
- The binary compatibility of the experimental overload of `runTest` is
restored
([#&#8203;3673](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3673))
- Channels that don't use `onUndeliveredElement` now allocate less
memory
([#&#8203;3646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3646))

###
[`v1.7.0`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-170)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.0)

##### Core API significant improvements

- New `Channel` implementation with significant performance improvements
across the API
([#&#8203;3621](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3621)).
- New `select` operator implementation: faster, more lightweight, and
more robust
([#&#8203;3020](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Mutex` and `Semaphore` now share the same underlying data structure
([#&#8203;3020](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Dispatchers.IO` is added to K/N
([#&#8203;3205](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3205))
- `newFixedThreadPool` and `Dispatchers.Default` implementations on K/N
were wholly rewritten to support graceful growth under load
([#&#8203;3595](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3595)).
-   `kotlinx-coroutines-test` rework:
- Add the `timeout` parameter to `runTest` for the whole-test timeout,
10 seconds by default
([#&#8203;3270](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3270)).
This replaces the configuration of quiescence timeouts, which is now
deprecated
([#&#8203;3603](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3603)).
- The `withTimeout` exception messages indicate if the timeout used the
virtual time
([#&#8203;3588](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3588)).
- `TestCoroutineScheduler`, `runTest`, and `TestScope` API are promoted
to stable
([#&#8203;3622](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3622)).
- `runTest` now also fails if there were uncaught exceptions in
coroutines not inherited from the test coroutine
([#&#8203;1205](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1205)).

##### Breaking changes

- Old K/N memory model is no longer supported
([#&#8203;3375](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3375)).
- New generic upper bounds were added to reactive integration API where
the language since 1.8.0 dictates
([#&#8203;3393](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3393)).
- `kotlinx-coroutines-core` and `kotlinx-coroutines-jdk8` artifacts were
merged into a single artifact
([#&#8203;3268](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3268)).
- Artificial stackframes in stacktrace recovery no longer contain the
`\b` symbol and are now navigable in IDE and supplied with proper
documentation
([#&#8203;2291](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2291)).
- `CoroutineContext.isActive` returns `true` for contexts without any
job in them
([#&#8203;3300](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3300)).

##### Bug fixes and improvements

-   Kotlin version is updated to 1.8.20
-   Atomicfu version is updated to 0.20.2.
- `JavaFx` version is updated to 17.0.2 in `kotlinx-coroutines-javafx`
([#&#8203;3671](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3671))..
- JPMS is supported
([#&#8203;2237](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2237)).
Thanks [@&#8203;lion7](https://togithub.com/lion7)!
- `BroadcastChannel` and all the corresponding API are deprecated
([#&#8203;2680](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2680)).
- Added all supported K/N targets
([#&#8203;3601](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3601),
[#&#8203;812](https://togithub.com/Kotlin/kotlinx.coroutines/issues/812),
[#&#8203;855](https://togithub.com/Kotlin/kotlinx.coroutines/issues/855)).
- K/N `Dispatchers.Default` is backed by the number of threads equal to
the number of available cores
([#&#8203;3366](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3366)).
- Fixed an issue where some coroutines' internal exceptions were not
properly serializable
([#&#8203;3328](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Introduced `Job.parent` API
([#&#8203;3201](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3201)).
- Fixed a bug when `TestScheduler` leaked cancelled jobs
([#&#8203;3398](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3398)).
- `TestScope.timeSource` now provides comparable time marks
([#&#8203;3617](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3617)).
Thanks [@&#8203;hfhbd](https://togithub.com/hfhbd)!
- Fixed an issue when cancelled `withTimeout` handles were preserved in
JS runtime
([#&#8203;3440](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3440)).
- Ensure `awaitFrame` only awaits a single frame when used from the main
looper
([#&#8203;3432](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3432)).
Thanks [@&#8203;pablobaxter](https://togithub.com/pablobaxter)!
- Obsolete `Class-Path` attribute was removed from
`kotlinx-coroutines-debug.jar` manifest
([#&#8203;3361](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3361)).
- Fixed a bug when `updateThreadContext` operated on the parent context
([#&#8203;3411](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3411)).
- Added new `Flow.filterIsInstance` extension
([#&#8203;3240](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3240)).
- `Dispatchers.Default` thread name prefixes are now configurable with
system property
([#&#8203;3231](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3231)).
- Added `Flow.timeout` operator as `@FlowPreview`
([#&#8203;2624](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2624)).
Thanks [@&#8203;pablobaxter](https://togithub.com/pablobaxter)!
- Improved the performance of the `future` builder in case of exceptions
([#&#8203;3475](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3475)).
Thanks [@&#8203;He-Pin](https://togithub.com/He-Pin)!
- `Mono.awaitSingleOrNull` now waits for the `onComplete` signal
([#&#8203;3487](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3487)).
- `Channel.isClosedForSend` and `Channel.isClosedForReceive` are
promoted from experimental to delicate
([#&#8203;3448](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3448)).
- Fixed a data race in native `EventLoop`
([#&#8203;3547](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3547)).
- `Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)` no longer
creates an additional wrapper
([#&#8203;3442](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3442)).
Thanks [@&#8203;dovchinnikov](https://togithub.com/dovchinnikov)!
- Various `@FlowPreview` and `@ExperimentalCoroutinesApi` are promoted
to experimental and stable respectively
([#&#8203;3542](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3542),
[#&#8203;3097](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3097),
[#&#8203;3548](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3548)).
- Performance improvements in `Dispatchers.Default` and `Dispatchers.IO`
([#&#8203;3416](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3416),
[#&#8203;3418](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3418)).
- Fixed a bug when internal `suspendCancellableCoroutineReusable` might
have hanged
([#&#8203;3613](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3613)).
- Introduced internal API to process events in the current system
dispatcher
([#&#8203;3439](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3439)).
- Global `CoroutineExceptionHandler` is no longer invoked in case of
unprocessed `future` failure
([#&#8203;3452](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3452)).
- Performance improvements and reduced thread-local pressure for the
`withContext` operator
([#&#8203;3592](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3592)).
- Improved performance of `DebugProbes`
([#&#8203;3527](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3527)).
- Fixed a bug when the coroutine debugger might have detected the state
of a coroutine incorrectly
([#&#8203;3193](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3193)).
- `CoroutineDispatcher.asExecutor()` runs tasks without dispatching if
the dispatcher is unconfined
([#&#8203;3683](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3683)).
Thanks [@&#8203;odedniv](https://togithub.com/odedniv)!
- `SharedFlow.toMutableList` and `SharedFlow.toSet` lints are introduced
([#&#8203;3706](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3706)).
- `Channel.invokeOnClose` is promoted to stable API
([#&#8203;3358](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3358)).
- Improved lock contention in `Dispatchers.Default` and `Dispatchers.IO`
during the startup phase
([#&#8203;3652](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3652)).
- Fixed a bug that led to threads oversubscription in
`Dispatchers.Default`
([#&#8203;3642](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3642)).
- Fixed a bug that allowed `limitedParallelism` to perform dispatches
even after the underlying dispatcher was closed
([#&#8203;3672](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3672)).
- Fixed a bug that prevented stacktrace recovery when the exception's
constructor from `cause` was selected
([#&#8203;3714](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Improved sanitizing of stracktrace-recovered traces
([#&#8203;3714](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Introduced an internal flag to disable uncaught exceptions reporting
in tests as a temporary migration mechanism
([#&#8203;3736](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3736)).
-   Various documentation improvements and fixes.

Changelog for previous versions may be found in
[CHANGES_UP_TO\_1.7.md](CHANGES_UP_TO\_1.7.md)

###
[`v1.6.4`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.4)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4)

- Added `TestScope.backgroundScope` for launching coroutines that
perform work in the background and need to be cancelled at the end of
the test
([#&#8203;3287](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3287)).
- Fixed the POM of `kotlinx-coroutines-debug` having an incorrect
reference to `kotlinx-coroutines-bom`, which cause the builds of Maven
projects using the debug module to break
([#&#8203;3334](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3334)).
- Fixed the `Publisher.await` functions in `kotlinx-coroutines-reactive`
not ensuring that the `Subscriber` methods are invoked serially
([#&#8203;3360](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3360)).
Thank you, [@&#8203;EgorKulbachka](https://togithub.com/EgorKulbachka)!
- Fixed a memory leak in `withTimeout` on K/N with the new memory model
([#&#8203;3351](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3351)).
- Added the guarantee that all `Throwable` implementations in the core
library are serializable
([#&#8203;3328](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Moved the documentation to
<https://kotlinlang.org/api/kotlinx.coroutines/>
([#&#8203;3342](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3342)).
-   Various documentation improvements.

###
[`v1.6.3`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.3)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3)

- Updated atomicfu version to 0.17.3
([#&#8203;3321](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3321)),
fixing the projects using this library with JS IR failing to build
([#&#8203;3305](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3305)).

###
[`v1.6.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2)

- Fixed a bug with `ThreadLocalElement` not being correctly updated when
the most outer `suspend` function was called directly without
`kotlinx.coroutines`
([#&#8203;2930](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Fixed multiple data races: one that might have been affecting
`runBlocking` event loop, and a benign data race in `Mutex`
([#&#8203;3250](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3250),
[#&#8203;3251](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3251)).
- Obsolete `TestCoroutineContext` is removed, which fixes the
`kotlinx-coroutines-test` JPMS package being split between
`kotlinx-coroutines-core` and `kotlinx-coroutines-test`
([#&#8203;3218](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3218)).
- Updated the ProGuard rules to further shrink the size of the resulting
DEX file with coroutines
([#&#8203;3111](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3111),
[#&#8203;3263](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3263)).
Thanks, [@&#8203;agrieve](https://togithub.com/agrieve)!
- Atomicfu is updated to `0.17.2`, which includes a more efficient and
robust JS IR transformer
([#&#8203;3255](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3255)).
- Kotlin is updated to `1.6.21`, Gradle version is updated to `7.4.2`
([#&#8203;3281](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3281)).
Thanks,
[@&#8203;wojtek-kalicinski](https://togithub.com/wojtek-kalicinski)!
-   Various documentation improvements.

###
[`v1.6.1`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.1)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)

- Rollback of time-related functions dispatching on `Dispatchers.Main`.
This behavior was introduced in 1.6.0 and then found inconvenient and
erroneous
([#&#8203;3106](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3106),
[#&#8203;3113](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3113)).
- Reworked the newly-introduced `CopyableThreadContextElement` to solve
issues uncovered after the initial release
([#&#8203;3227](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3227)).
- Fixed a bug with `ThreadLocalElement` not being properly updated in
racy scenarios
([#&#8203;2930](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Reverted eager loading of default `CoroutineExceptionHandler` that
triggered ANR on some devices
([#&#8203;3180](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3180)).
- New API to convert a `CoroutineDispatcher` to a Rx scheduler
([#&#8203;968](https://togithub.com/Kotlin/kotlinx.coroutines/issues/968),
[#&#8203;548](https://togithub.com/Kotlin/kotlinx.coroutines/issues/548)).
Thanks [@&#8203;recheej](https://togithub.com/recheej)!
- Fixed a memory leak with the very last element emitted from `flow`
builder being retained in memory
([#&#8203;3197](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3197)).
- Fixed a bug with `limitedParallelism` on K/N with new memory model
throwing `ClassCastException`
([#&#8203;3223](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3223)).
- `CoroutineContext` is added to the exception printed to the default
`CoroutineExceptionHandler` to improve debuggability
([#&#8203;3153](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3153)).
- Static memory consumption of `Dispatchers.Default` was significantly
reduced
([#&#8203;3137](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3137)).
- Updated slf4j version in `kotlinx-coroutines-slf4j` from 1.7.25 to
1.7.32.

###
[`v1.6.0`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.0)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)

Note that this is a full changelog relative to the 1.5.2 version.
Changelog relative to 1.6.0-RC3 can be found at the end.

##### kotlinx-coroutines-test rework

- `kotlinx-coroutines-test` became a multiplatform library usable from
K/JVM, K/JS, and K/N.
- Its API was completely reworked to address long-standing issues with
consistency, structured concurrency and correctness
([#&#8203;1203](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1203),
[#&#8203;1609](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1609),
[#&#8203;2379](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2379),
[#&#8203;1749](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1749),
[#&#8203;1204](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1204),
[#&#8203;1390](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1390),
[#&#8203;1222](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1222),
[#&#8203;1395](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1395),
[#&#8203;1881](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1881),
[#&#8203;1910](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1910),
[#&#8203;1772](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1772),
[#&#8203;1626](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1626),
[#&#8203;1742](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1742),
[#&#8203;2082](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2082),
[#&#8203;2102](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2102),
[#&#8203;2405](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2405),
[#&#8203;2462](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2462)
    ).
- The old API is deprecated for removal, but the new API is based on the
similar concepts ([README](kotlinx-coroutines-test/README.md)), and the
migration path is designed to be graceful: [migration
guide](kotlinx-coroutines-test/MIGRATION.md).

##### Dispatchers

- Introduced `CoroutineDispatcher.limitedParallelism` that allows
obtaining a view of the original dispatcher with limited parallelism
([#&#8203;2919](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2919)).
- `Dispatchers.IO.limitedParallelism` usages ignore the bound on the
parallelism level of `Dispatchers.IO` itself to avoid starvation
([#&#8203;2943](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2943)).
- Introduced new `Dispatchers.shutdown` method for containerized
environments
([#&#8203;2558](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2558)).
- `newSingleThreadContext` and `newFixedThreadPoolContext` are promoted
to delicate API
([#&#8203;2919](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2919)).

##### Breaking changes

- When racing with cancellation, the `future` builder no longer reports
unhandled exceptions into the global `CoroutineExceptionHandler`. Thanks
[@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)!
([#&#8203;2774](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2774),
[#&#8203;2791](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2791)).
- `Mutex.onLock` is deprecated for removal
([#&#8203;2794](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2794)).
- `Dispatchers.Main` is now used as the default source of time for
`delay` and `withTimeout` when present
([#&#8203;2972](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2972)).
- To opt-out from this behaviour, `kotlinx.coroutines.main.delay` system
property can be set to `false`.
- Java target of coroutines build is now 8 instead of 6
([#&#8203;1589](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1589)).
- **Source-breaking change**: extension `collect` no longer resolves
when used with a non-in-place argument of a functional type. This is a
candidate for a fix, uncovered after 1.6.0, see
[#&#8203;3107](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3107)
for the additional details.

##### Bug fixes and improvements

-   Kotlin is updated to 1.6.0.
- Kotlin/Native [new memory
model](https://blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-development-preview/)
is now supported in regular builds of coroutines conditionally depending
on whether `kotlin.native.binary.memoryModel` is enabled
([#&#8203;2914](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2914)).
- Introduced `CopyableThreadContextElement` for mutable context elements
shared among multiple coroutines. Thanks
[@&#8203;yorickhenning](https://togithub.com/yorickhenning)!
([#&#8203;2893](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2893)).
- `transformWhile`, `awaitClose`, `ProducerScope`, `merge`,
`runningFold`, `runingReduce`, and `scan` are promoted to stable API
([#&#8203;2971](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2971)).
- `SharedFlow.subscriptionCount` no longer conflates incoming updates
and gives all subscribers a chance to observe a short-lived subscription
([#&#8203;2488](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2488),
[#&#8203;2863](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2863),
[#&#8203;2871](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2871)).
- `Flow` exception transparency mechanism is improved to be more
exception-friendly
([#&#8203;3017](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3017),
[#&#8203;2860](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2860)).
- Cancellation from `flat*` operators that leverage multiple coroutines
is no longer propagated upstream
([#&#8203;2964](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2964)).
- `SharedFlow.collect` now returns `Nothing`
([#&#8203;2789](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2789),
[#&#8203;2502](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2502)).
- `DisposableHandle` is now `fun interface`, and corresponding inline
extension is removed
([#&#8203;2790](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2790)).
- `FlowCollector` is now `fun interface`, and corresponding inline
extension is removed
([#&#8203;3047](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3047)).
- Deprecation level of all previously deprecated signatures is raised
([#&#8203;3024](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3024)).
- The version file is shipped with each JAR as a resource
([#&#8203;2941](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2941)).
- Unhandled exceptions on K/N are passed to the standard library
function `processUnhandledException`
([#&#8203;2981](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2981)).
- A direct executor is used for `Task` callbacks in
`kotlinx-coroutines-play-services`
([#&#8203;2990](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2990)).
- Metadata of coroutines artifacts leverages Gradle platform to have all
versions of dependencies aligned
([#&#8203;2865](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2865)).
- Default `CoroutineExceptionHandler` is loaded eagerly and does not
invoke `ServiceLoader` on its exception-handling path
([#&#8203;2552](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2552)).
- Fixed the R8 rules for `ServiceLoader` optimization
([#&#8203;2880](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2880)).
- Fixed BlockHound integration false-positives
([#&#8203;2894](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2894),
[#&#8203;2866](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2866),
[#&#8203;2937](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2937)).
- Fixed the exception handler being invoked several times on Android,
thanks to [@&#8203;1zaman](https://togithub.com/1zaman)
([#&#8203;3056](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3056)).
- `SendChannel.trySendBlocking` is now available on Kotlin/Native
([#&#8203;3064](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3064)).
- The exception recovery mechanism now uses `ClassValue` when available
([#&#8203;2997](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2997)).
- JNA is updated to 5.9.0 to support Apple M1
([#&#8203;3001](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3001)).
- Obsolete method on internal `Delay` interface is deprecated
([#&#8203;2979](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2979)).
-   Support of deprecated `CommonPool` is removed.
- `@ExperimentalTime` is no longer needed for methods that use
`Duration`
([#&#8203;3041](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3041)).
- JDK 1.6 is no longer required for building the project
([#&#8203;3043](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3043)).
- New version of Dokka is used, fixing the memory leak when building the
coroutines and providing brand new reference visuals
(https://kotlin.github.io/kotlinx.coroutines/)
([#&#8203;3051](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3051),
[#&#8203;3054](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3054)).

###
[`v1.5.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.1...1.5.2)

-   Kotlin is updated to 1.5.30.
-   New native targets for Apple Silicon are introduced.
- Fixed a bug when `onUndeliveredElement` was incorrectly called on
properly received elements on JS
([#&#8203;2826](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2826)).
- Fixed `Dispatchers.Default` on React Native, it now fully relies on
`setTimeout` instead of stub `process.nextTick`. Thanks to
[@&#8203;Legion2](https://togithub.com/Legion2)
([#&#8203;2843](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2843)).
- Optimizations of `Mutex` implementation
([#&#8203;2581](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2581)).
- `Mutex` implementation is made completely lock-free as stated
([#&#8203;2590](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2590)).
- Various documentation and guides improvements. Thanks to
[@&#8203;MasoodFallahpoor](https://togithub.com/MasoodFallahpoor) and
[@&#8203;Pihanya](https://togithub.com/Pihanya).

###
[`v1.5.1`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.1)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.0...1.5.1)

- Atomic `update`, `getAndUpdate`, and `updateAndGet` operations of
`MutableStateFlow`
([#&#8203;2720](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2720)).
- `Executor.asCoroutineDispatcher` implementation improvements
([#&#8203;2601](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2601)):
- If the target executor is `ScheduledExecutorService`, then its
`schedule` API is used for time-related coroutine operations.
    -   `RemoveOnCancelPolicy` is now part of the public contract.
- Introduced overloads for `Task.asDeferred` and `Task.await` that
accept `CancellationTokenSource` for bidirectional cancellation
([#&#8203;2527](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2527)).
- Reactive streams are updated to `1.0.3`
([#&#8203;2740](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2740)).
- `CopyableThrowable` is allowed to modify the exception message during
stacktrace recovery
([#&#8203;1931](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1931)).
- `CoroutineDispatcher.releaseInterceptedContinuation` is now a `final`
method
([#&#8203;2785](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2785)).
- Closing a Handler underlying `Handler.asCoroutineDispatcher` now
causes the dispatched coroutines to be canceled on `Dispatchers.IO
(#&#8203;2778)`.
-   Kotlin is updated to 1.5.20.
- Fixed a spurious `ClassCastException` in
`releaseInterceptedContinuation` and `IllegalStateException` from
`tryReleaseClaimedContinuation`
([#&#8203;2736](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2736),
[#&#8203;2768](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2768)).
- Fixed inconsistent exception message during stacktrace recovery for
non-suspending channel iterators
([#&#8203;2749](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2749)).
- Fixed linear stack usage for `CompletableFuture.asDeferred` when the
target future has a long chain of listeners
([#&#8203;2730](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2730)).
- Any exceptions from `CoroutineDispatcher.isDispatchNeeded` are now
considered as fatal and are propagated to the caller
([#&#8203;2733](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2733)).
- Internal `DebugProbesKt` (used in the debugger implementation) are
moved from `debug` to `core` module.

###
[`v1.5.0`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.0)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.3...1.5.0)

Note that this is a full changelog relative to 1.4.3 version. Changelog
relative to 1.5.0-RC can be found in the end.

##### Channels API

- Major channels API rework
([#&#8203;330](https://togithub.com/Kotlin/kotlinx.coroutines/issues/330),
[#&#8203;974](https://togithub.com/Kotlin/kotlinx.coroutines/issues/974)).
Existing `offer`, `poll`, and `sendBlocking` methods are deprecated,
internal `receiveCatching` and `onReceiveCatching` removed,
`receiveOrNull` and `onReceiveOrNull` are completely deprecated.
Previously deprecated `SendChannel.isFull` declaration is removed.
Channel operators deprecated with `ERROR` are now `HIDDEN`.
- New methods `receiveCatching`, `onReceiveCatching` `trySend`,
`tryReceive`, and `trySendBlocking` along with the new result type
`ChannelResult` are introduced. They provide better type safety, are
less error-prone, and have a consistent future-proof naming scheme. The
full rationale behind this change can be found
[here](https://togithub.com/Kotlin/kotlinx.coroutines/issues/974#issuecomment-806569582).
- `BroadcastChannel` and `ConflatedBroadcastChannel` are marked as
`ObsoleteCoroutinesApi` in the favor or `SharedFlow` and `StateFlow`.
The migration scheme can be found in their documentation. These classes
will be deprecated in the next major release.
-   `callbackFlow` and `channelFlow` are promoted to stable API.

##### Reactive integrations

- All existing API in modules `kotlinx-coroutines-rx2`,
`kotlinx-coroutines-rx3`, `kotlinx-coroutines-reactive`,
`kotlinx-coroutines-reactor`, and `kotlinx-coroutines-jdk9` were
revisited and promoted to stable
([#&#8203;2545](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2545)).
- `publish` is no longer allowed to emit `null` values
([#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).
- Misleading `awaitSingleOr*` functions on `Publisher` type are
deprecated
([#&#8203;2591](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2591)).
- `MaybeSource.await` is deprecated in the favor of `awaitSingle`,
additional lint functions for `Mono` are added in order to prevent
ambiguous `Publisher` usages
([#&#8203;2628](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2628),
[#&#8203;1587](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1587)).
- `ContextView` support in `kotlinx-coroutines-reactor`
([#&#8203;2575](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2575)).
- All reactive builders no longer ignore inner cancellation exceptions
preventing their completion
([#&#8203;2262](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2262),
[#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).
- `MaybeSource.collect` and `Maybe.collect` properly finish when they
are completed without a value
([#&#8203;2617](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2617)).
- All exceptions are now consistently handled according to reactive
specification, whether they are considered 'fatal' or not by reactive
frameworks
([#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).

##### Other improvements

- Kotlin version is upgraded to 1.5.0 and JVM target is updated to 1.8.
- `Flow.last` and `Flow.lastOrNull` operators
([#&#8203;2246](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2246)).
- `Flow.runningFold` operator
([#&#8203;2641](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2641)).
- `CoroutinesTimeout` rule for JUnit5
([#&#8203;2197](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2197)).
- Internals of `Job` and `AbstractCoroutine` was reworked, resulting in
smaller code size, less memory footprint, and better performance
([#&#8203;2513](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2513),
[#&#8203;2512](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2512)).
- `CancellationException` from Kotlin standard library is used for
cancellation on Koltin/JS and Kotlin/Native
([#&#8203;2638](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2638)).
- Introduced new `DelicateCoroutinesApi` annotation that warns users
about potential target API pitfalls and suggests studying API's
documentation first. The only delicate API right now is `GlobalScope`
([#&#8203;2637](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2637)).
- Fixed bug introduced in `1.4.3` when `kotlinx-coroutines-core.jar`
triggered IDEA debugger failure
([#&#8203;2619](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2619)).
- Fixed memory leak of `ChildHandlerNode` with reusable continuations
([#&#8203;2564](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2564)).
- Various documentation improvements
([#&#8203;2555](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2555),
[#&#8203;2589](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2589),
[#&#8203;2592](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2592),
[#&#8203;2583](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2583),
[#&#8203;2437](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2437),
[#&#8203;2616](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2616),
[#&#8203;2633](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2633),
[#&#8203;2560](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2560)).

##### Changelog relative to version 1.5.0-RC

- Fail-fast during `emitAll` called from cancelled `onCompletion`
operator
([#&#8203;2700](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2700)).
- Flows returned by `stateIn`/`shareIn` keep strong reference to sharing
job
([#&#8203;2557](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2557)).
- Rename internal `TimeSource` to `AbstractTimeSource` due to import
issues
([#&#8203;2691](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2691)).
- Reverted the change that triggered IDEA coroutines debugger crash
([#&#8203;2695](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2695),
reverted
[#&#8203;2291](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2291)).
- `watchosX64` target support for Kotlin/Native
([#&#8203;2524](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2524)).
-   Various documentation fixes and improvements.

###
[`v1.4.3`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.4.3)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.2...1.4.3)

##### General changes

- Thread context is properly preserved and restored for coroutines
without `ThreadContextElement`
([#&#8203;985](https://togithub.com/Kotlin/kotlinx.coroutines/issues/985))
- `ThreadContextElement`s are now restored in the opposite order from
update
([#&#8203;2195](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2195))
- Improved performance of combine with 4 parameters, thanks to
[@&#8203;alexvanyo](https://togithub.com/alexvanyo)
([#&#8203;2419](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2419))
- Debug agent sanitizer leaves at least one frame with source location
([#&#8203;1437](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1437))
- Update Reactor version in `kotlinx-coroutines-reactor` to `3.4.1`,
thanks to [@&#8203;sokomishalov](https://togithub.com/sokomishalov)
([#&#8203;2432](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2432))
- `callsInPlace` contract added to `ReceiveChannel.consume`
([#&#8203;941](https://togithub.com/Kotlin/kotlinx.coroutines/issues/941))
- `CoroutineStart.UNDISPATCHED` promoted to stable API
([#&#8203;1393](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1393))
-   Kotlin updated to 1.4.30
-   `kotlinx.coroutines` are now released directly to MavenCentral
-   Reduced the size of `DispatchedCoroutine` by a field
- Internal class `TimeSource` renamed to `SchedulerTimeSource` to
prevent wildcard import issues
([#&#8203;2537](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2537))

##### Bug fixes

- Fixed the problem that prevented implementation via delegation for
`Job` interface
([#&#8203;2423](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2423))
- Fixed incorrect ProGuard rules that allowed shrinking volatile felds
([#&#8203;1564](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1564))
- Fixed `await`/`asDeferred` for `MinimalStage` implementations in jdk8
module
([#&#8203;2456](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2456))
- Fixed bug when `onUndeliveredElement` wasn't called for unlimited
channels
([#&#8203;2435](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2435))
- Fixed a bug when `ListenableFuture.isCancelled` returned from
`asListenableFuture` could have thrown an exception, thanks to
[@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)
([#&#8203;2421](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2421))
- Coroutine in `callbackFlow` and `produce` is properly cancelled when
the channel was closed separately
([#&#8203;2506](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2506))

###
[`v1.4.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.4.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.1...1.4.2)

- Fixed `StackOverflowError` in `Job.toString` when `Job` is observed in
its intermediate state
([#&#8203;2371](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2371)).
- Improved liveness and latency of `Dispatchers.Default` and
`Dispatchers.IO` in low-loaded mode
([#&#8203;2381](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2381)).
- Improved performance of consecutive `Channel.cancel` invocations
([#&#8203;2384](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2384)).
- `SharingStarted` is now `fun` interface
([#&#8203;2397](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2397)).
- Additional lint settings for `SharedFlow` to catch programmatic errors
early
([#&#8203;2376](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2376)).
- Fixed bug when mutex and semaphore were not released during
cancellation
([#&#8203;2390](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2390),
thanks to [@&#8203;Tilps](https://togithub.com/Tilps) for reproducing).
- Some corner cases in cancellation propagation between coroutines and
listenable futures are repaired
([#&#8203;1442](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1442),
thanks to [@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)).
- Fixed unconditional cast to `CoroutineStackFrame` in exception
recovery that triggered failures of instrumented code
([#&#8203;2386](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2386)).
- Platform-specific dependencies are removed from
`kotlinx-coroutines-javafx`
([#&#8203;2360](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2360)).

</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://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 23:00:07 +02:00
renovate[bot] f24b86cacb
fix(deps): update dependency androidx.test.espresso:espresso-core to v3.6.1 (#786)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[androidx.test.espresso:espresso-core](https://developer.android.com/testing)
| `3.6.0` -> `3.6.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.espresso:espresso-core/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.espresso:espresso-core/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.espresso:espresso-core/3.6.0/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.espresso:espresso-core/3.6.0/3.6.1?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 this update
again.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 22:59:48 +02:00
renovate[bot] 807f5db027
fix(deps): update dependency androidx.test.ext:junit to v1.2.1 (#787)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [androidx.test.ext:junit](https://developer.android.com/testing) |
`1.2.0` -> `1.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.ext:junit/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.ext:junit/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.ext:junit/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.ext:junit/1.2.0/1.2.1?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 this update
again.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 22:59:39 +02:00
Nik Clayton 311e45168e
fix: Ensure initial status length calculation includes the content warning (#821)
Previous code set `doOnTextChanged` listener for the content warning
*after* the initial value had been set. This meant the initial content
warning text was not included when calculating the status' initial
length.

Fix that by setting the listener before the text is set.

Fixes #815
2024-07-14 22:59:26 +02:00
Nik Clayton 00a2cd32d3
change: Implement more of FiltersRepository (#816)
The previous code had a number of problems, including:

- Calls to the filters API were scattered through UI and viewmodel code.
- Repeated places where the differences between the v1 and v2 Mastodon
filters API had to be handled.
- UI and viewmodel code using the network filter classes, which tied
them to the API implementation.
- Error handling was inconsistent.

Fix this.

## FiltersRepository

- All filter management now goes through `FiltersRepository`.
- `FiltersRepository` exposes the current set of filters as a
`StateFlow`, and automatically updates it when the current server
changes or any changes to filters are made. This makes
`FilterChangeEvent` obsolete.
- Other operations on filters are exposed through `FiltersRepository` as
functions for viewmodels to call.
- Within the bulk of the app a new `Filter` class is used to represent a
filter; handling the differences between the v1 and v2 APIs is
encapsulated in `FiltersRepository`.
- Represent errors when handling filters as subclasses of `PachliError`,
and use `Result<V, E>` throughout, including using `ApiResult` for all
filter API results.
- Provide different types to distinguish between new-and-unsaved
filters, new-and-unsaved keywords, and in-progress edits to filters.

## Editing filters

- Accept an optional complete filter, or filter ID, as parameters in the
intent that launches `EditFilterActivity`. Pass those to the viewmodel
using assisted injection so the viewmodel has the info immediately.
- In the viewmodel use a new `FilterViewData` type to model the data
used to display and edit the filter.
- Start using the UiSuccess/UiError model. Refrain from cutting over to
full the action implementation as that would be a much larger change.
- Use `FiltersRepository` instead of making any API calls directly.

## Listing filters

- Use `FiltersRepository` instead of making any API calls directly.

## EventHub

- Remove `FilterChangedEvent`. Update everywhere that used it to use the
flow from `FiltersRepository`.
2024-07-14 15:36:52 +02:00
Aindriú Mac Giolla Eoin 1177948c9b fix(l10n): Update Irish translations
Currently translated at 100.0% (20 of 20 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin 4642031ddd fix(l10n): Update Irish translations
Currently translated at 100.0% (18 of 18 strings)

Translation: Pachli/Feature/Suggestions : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featuresuggestions-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin a66e905692 fix(l10n): Update Irish translations
Currently translated at 100.0% (21 of 21 strings)

Translation: Pachli/Feature/Lists : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelists-main/ga/
2024-07-13 09:43:18 +02:00
Kalle Kniivilä 14e7bccfda fix(l10n): Update Finnish translations
Currently translated at 99.8% (610 of 611 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-07-13 09:43:18 +02:00
Miles Krell 963441e1e4 fix(l10n): Update Spanish translations
Currently translated at 99.8% (610 of 611 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/es/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin ba23edfc57 fix(l10n): Update Irish translations
Currently translated at 100.0% (10 of 10 strings)

Translation: Pachli/Core/Network : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/corenetwork-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin e8c6093d90 fix(l10n): Update Irish translations
Currently translated at 100.0% (6 of 6 strings)

Translation: Pachli/Core/Data : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coredata-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin 9b55e5cdf7 fix(l10n): Update Irish translations
Currently translated at 100.0% (3 of 3 strings)

Translation: Pachli/Core/Activity : Orange
Translate-URL: https://hosted.weblate.org/projects/pachli/coreactivity-orange/ga/
2024-07-13 09:43:18 +02:00
Miles Krell f950fce82f fix(l10n): Update Spanish translations
Currently translated at 99.0% (605 of 611 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/es/
2024-07-13 09:43:18 +02:00
Miles Krell bb6cff1abb fix(l10n): Update Spanish translations
Currently translated at 100.0% (10 of 10 strings)

Translation: Pachli/Core/Network : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/corenetwork-main/es/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin e0ce148a88 fix(l10n): Update Irish translations
Currently translated at 100.0% (17 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin 3a535aa0bf fix(l10n): Update Irish translations
Currently translated at 100.0% (14 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin f9434b04d4 fix(l10n): Update Irish translations
Currently translated at 100.0% (62 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin 58a5136153 fix(l10n): Update Irish translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Pachli/App : Fdroid
Translate-URL: https://hosted.weblate.org/projects/pachli/app-fdroid/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin f28b8e7717 fix(l10n): Update Irish translations
Currently translated at 100.0% (4 of 4 strings)

Translation: Pachli/Core/Activity : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreactivity-main/ga/
2024-07-13 09:43:18 +02:00
Aindriú Mac Giolla Eoin 16b7257ac0 fix(l10n): Update Irish translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Pachli/App : Google
Translate-URL: https://hosted.weblate.org/projects/pachli/app-google/ga/
2024-07-13 09:43:18 +02:00
sunniva c8e35f89ed fix(l10n): Update Norwegian Bokmål translations
Currently translated at 100.0% (18 of 18 strings)

Translation: Pachli/Feature/Suggestions : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featuresuggestions-main/nb_NO/
2024-07-08 00:11:01 +02:00
sunniva 2ff67bf799 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 98.3% (61 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/nb_NO/
2024-07-08 00:11:01 +02:00
sunniva a37a971257 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 100.0% (4 of 4 strings)

Translation: Pachli/Core/Activity : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreactivity-main/nb_NO/
2024-07-08 00:11:01 +02:00
sunniva 53d43a6036 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 25.0% (5 of 20 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/nb_NO/
2024-07-08 00:11:01 +02:00
Nik Clayton 0f80ec4abf
fix: Correctly punctuate a status content description (#808)
Previous code blindly inserted commas and semi-colons as separators
between the components of a content description. If some of those
components were null you could have a content description that looked
like "... , , , ..." or similar, and the repeated reading of "comma" by
screen readers was jarring and reduced accessibility.

Fix this by inserting punctuation only where necessary, building up the
string piece by piece instead of using a string resource with hardcoded
punctuation.

Fixes #791.
2024-07-06 19:29:02 +02:00
Nik Clayton 4dac29cc52
feat: Show autocomplete hashtags with usage counts, sort by popularity (#807)
When autocompleting hashtags while composing a status the previous code
showed the hashtags in the same order they're returned by the server,
with no additional information.

This doesn't allow the user to make an informed choice about which
hashtag might be better to use. For example, trying to choose between
"#nivenly" and "#NivenlyFoundation".

To fix that, include the hashtag's usage when receiving data from the
server. Sum that, and show it to the user in the hashtag list. Sort the
hashtags by popularity, most popular first.
2024-07-06 14:25:46 +02:00
sunniva df232ebd4c fix(l10n): Update Norwegian Bokmål translations
Currently translated at 82.2% (51 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/nb_NO/
2024-07-06 14:13:42 +02:00
sunniva 18d33468b1 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Pachli/App : Google
Translate-URL: https://hosted.weblate.org/projects/pachli/app-google/nb_NO/
2024-07-06 14:13:42 +02:00
sunniva f308a9bedc fix(l10n): Update Norwegian Bokmål translations
Currently translated at 98.6% (600 of 608 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/nb_NO/
2024-07-06 14:13:42 +02:00
sunniva 8b79090349 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Pachli/App : Fdroid
Translate-URL: https://hosted.weblate.org/projects/pachli/app-fdroid/nb_NO/
2024-07-06 14:13:42 +02:00
Nik Clayton ea05dec6c5
feat: Show author bylines on preview cards, tap to view profile (#805)
Mastodon now supports additional (optional) author information to show
as a byline on preview cards.

Use this (if included), to show the author's avatar, name, and link to
their profile. If tapped a click on a new `Target.BYLINE` target is
registered allowing fragments/activities to launch
`ViewProfileActivity`.

Include this as an action in `ListStatusAccessibilityDelegate`, and
provide `TrendingLinksAccessibilityDelegate` to provide accessibility
actions when viewing trending links.
2024-07-06 00:30:24 +02:00
Weblate (bot) 222d7afba4
fix(l10n): Translations update from Hosted Weblate (#804)
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/Core/Network :
Main](https://hosted.weblate.org/projects/pachli/corenetwork-main/)

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

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

* [Pachli/Feature/Suggestions :
Main](https://hosted.weblate.org/projects/pachli/featuresuggestions-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/Feature/Login](https://hosted.weblate.org/projects/pachli/featurelogin/)

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

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

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

* [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/Ui :
Main](https://hosted.weblate.org/projects/pachli/coreui-main/)



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pachli/fastlane-metadata/horizontal-auto.svg)
2024-07-05 20:18:28 +02:00
Nik Clayton 8f5307b65f
revert: Downgrade androidx-paging to version 3.2.1 (#803)
3.3.0 has a race condition when `getItem` is called.

The fix is in
https://android-review.googlesource.com/c/platform/frameworks/support/+/3156343
but not released yet.

See:

- https://issuetracker.google.com/issues/343124454
- https://issuetracker.google.com/issues/349090863
2024-07-05 12:00:12 +02:00
Nik Clayton 5aacb02ea0
feat: Provide more detail in errors, especially media upload errors (#801)
Previous code assumed server responses would always be JSON, and had no
special handling for mis-configured servers that sometimes return HTML;
for example, if the server has a bug, or there's a reverse proxy in
front of the server issuing DoS-prevention challenges.

This could cause errors to show with no useful debugging information.

Update `ApiResult` to check the content-type in the response and return
one of two new errors if the content-type is missing or wrong. Also
include the HTTP code in `ApiResponse` for use elsewhere.

Update `ThrowableExtensions` to pull the `error` and optional
`description` out of the error body.

Update `PachliError` so `formatArgs` can be an array of arbitrary types,
not just strings.

Update `MediaUploader`; expose the different errors as new
`MediaUploaderError` types instead of `Exception` subclasses, and return
`Result<V, E>` where appropriate.

Update `ComposeViewModel` to use the new `MediaUploaderError` types and
create new `PickMediaError` to report issues there, replacing
`VideoOrImageException`.

Update `ComposeActivity` to use the new error types and show errors
until the user dismisses them, so they're better able to see and report
problems.

Fixes #704.
2024-07-04 19:16:24 +02:00