6158 Commits

Author SHA1 Message Date
renovate[bot]
31d24bc605
fix(deps): update androidx.media3 to v1.5.0 (#1133)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[androidx.media3:media3-ui](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-ui/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-ui/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-datasource-okhttp](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-datasource-okhttp/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-datasource-okhttp/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-datasource-okhttp/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-exoplayer-rtsp](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-rtsp/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer-rtsp/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer-rtsp/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-rtsp/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-exoplayer-hls](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-hls/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer-hls/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer-hls/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-hls/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-exoplayer-dash](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-dash/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer-dash/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer-dash/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-dash/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-exoplayer](https://redirect.github.com/androidx/media)
| `1.4.1` -> `1.5.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer/1.4.1/1.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.4.1/1.5.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>androidx/media (androidx.media3:media3-ui)</summary>

###
[`v1.5.0`](https://redirect.github.com/androidx/media/blob/HEAD/RELEASENOTES.md#150-2024-11-27)

[Compare
Source](https://redirect.github.com/androidx/media/compare/1.4.1...1.5.0)

This release includes the following changes since the
[1.4.1 release](#&#8203;141-2024-08-23):

-   Common Library:
- Add `ForwardingSimpleBasePlayer` that allows forwarding to another
player with small adjustments while ensuring full consistency and
        listener handling

([#&#8203;1183](https://redirect.github.com/androidx/media/issues/1183)).
- Replace `SimpleBasePlayer.State.playlist` by `getPlaylist()` method.
- Add override for `SimpleBasePlayer.State.Builder.setPlaylist()` to
directly specify a `Timeline` and current `Tracks` and `Metadata`
        instead of building a playlist structure.
- Increase `minSdk` to 21 (Android Lollipop). This is aligned with all
        other AndroidX libraries.
    -   Add `androidx.media3:media3-common-ktx` artifact which provides
        Kotlin-specific functionality built on top of the Common library
- Add `Player.listen` suspending extension function to spin a coroutine
to
        listen to `Player.Events` to the `media3-common-ktx` library.
- Remove `@DoNotInline` annotations from manually out-of-lined inner
        classes designed to avoid
[runtime class verification
failures](https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md).
Recent versions of [R8](https://developer.android.com/build/shrink-code)
now automatically out-of-line calls like these to avoid the runtime
failures (so the manual out-of-lining is no longer required). All Gradle
users of the library must already be a using a version of the Android
        Gradle Plugin that uses a version of R8 which does this,
[due to `compileSdk =
35`](https://issuetracker.google.com/345472586#comment7).
Users of the library with non-Gradle build systems will need to ensure
their R8-equivalent shrinking/obfuscating step does a similar automatic
out-of-lining process in order to avoid runtime class verification
        failures. This change has
[already been done in other AndroidX
libraries](http://r.android.com/3156141).
-   ExoPlayer:
- `MediaCodecRenderer.onProcessedStreamChange()` can now be called for
every media item. Previously it was not called for the first one. Use
`MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()`
        to enable this.
    -   Add `PreloadMediaSource.PreloadControl.onPreloadError` to allow
`PreloadMediaSource.PreloadControl` implementations to take actions when
        error occurs.
- Add `BasePreloadManager.Listener` to propagate preload events to apps.
- Allow changing SNTP client timeout and retry alternative addresses on
timeout
([#&#8203;1540](https://redirect.github.com/androidx/media/issues/1540)).
- Remove `MediaCodecAdapter.Configuration.flags` as the field was always
        zero.
- Allow the user to select the built-in speaker for playback on Wear OS
        API 35+ (where the device advertises support for this).
    -   Defer the blocking call to
`Context.getSystemService(Context.AUDIO_SERVICE)` until audio focus
handling is enabled. This ensures the blocking call isn't done if audio
        focus handling is not enabled
([#&#8203;1616](https://redirect.github.com/androidx/media/pull/1616)).
- Allow playback regardless of buffered duration when loading fails

([#&#8203;1571](https://redirect.github.com/androidx/media/issues/1571)).
    -   Add `AnalyticsListener.onRendererReadyChanged()` to signal when
        individual renderers allow playback to be ready.
    -   Fix `MediaCodec.CryptoException` sometimes being reported as an
"unexpected runtime error" when `MediaCodec` is operated in asynchronous
        mode (default behaviour on API 31+).
    -   Pass `bufferedDurationUs` instead of `bufferedPositionUs` with
`PreloadMediaSource.PreloadControl.onContinueLoadingRequested()`. Also
changes `DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS` to
`DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS`, apps then
need to pass a value representing a specific duration from the default
start position for which the corresponding media source has to be
        preloaded with this IntDef, instead of a position.
- Add `ForwardingRenderer` implementation that forwards all method calls
        to another renderer
        ([1703](https://redirect.github.com/androidx/media/pull/1703)).
- Add playlist preloading for the next item in the playlist. Apps can
        enable preloading by calling
`ExoPlayer.setPreloadConfiguration(PreloadConfiguration)` accordingly.
By default preloading is disabled. When opted-in and to not interfere
with playback, `DefaultLoadControl` restricts preloading to start and
continue only when the player is not loading for playback. Apps can
        change this behaviour by implementing
        `LoadControl.shouldContinuePreloading()` accordingly (like when
        overriding this method in `DefaultLoadControl`). The default
implementation of `LoadControl` disables preloading in case an app is
        using a custom implementation of `LoadControl`.
- Add method `MediaSourceEventListener.EventDispatcher.dispatchEvent()`
to
        allow invoking events of subclass listeners
        ([1736](https://redirect.github.com/androidx/media/pull/1736)).
    -   Add `DefaultPreloadManager.Builder` that builds the
`DefaultPreloadManager` and `ExoPlayer` instances with consistently
        shared configurations.
- Remove `Renderer[]` parameter from `LoadControl.onTracksSelected()` as
`DefaultLoadControl` implementation can retrieve the stream types from
        `ExoTrackSelection[]`.
- Deprecated `DefaultLoadControl.calculateTargetBufferBytes(Renderer[],
ExoTrackSelection[])` and marked method as final to prevent overrides.
        The new
`DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])`
        should be used instead.
- Report `MediaSourceEventListener` events from secondary sources in
        `MergingMediaSource`. This will result in load
start/error/cancelled/completed events being reported for sideloaded
        subtitles (those added with
`MediaItem.LocalConfiguration.subtitleConfigurations`), which may appear
        as duplicate load events emitted from `AnalyticsListener`.
- Prevent subtitle & metadata errors from completely stopping playback.
Instead the problematic track is disabled and playback of the remaining
        tracks continues

([#&#8203;1722](https://redirect.github.com/google/ExoPlayer/issues/1722)).
- In new subtitle handling (during extraction), associated parse (e.g.
invalid subtitle data) and load errors (e.g. HTTP 404) are emitted
            via `onLoadError` callbacks.
- In legacy subtitle handling (during rendering), only associated load
errors are emitted via `onLoadError` callbacks while parse errors
            are silently ignored (this is pre-existing behaviour).
- Fix bug where playlist items or periods in multi-period DASH streams
with durations that don't match the actual content could cause frame
        freezes at the end of the item

([#&#8203;1698](https://redirect.github.com/androidx/media/issues/1698)).
- Add a setter to `SntpClient` to set the max elapsed time since the
last
        update after which the client is re-initialized
([#&#8203;1794](https://redirect.github.com/androidx/media/pull/1794)).
-   Transformer:
    -   Add `SurfaceAssetLoader`, which supports queueing video data to
        Transformer via a `Surface`.
- `ImageAssetLoader` reports unsupported input via `AssetLoader.onError`
        instead of throwing an `IllegalStateException`.
    -   Make setting the image duration using
`MediaItem.Builder.setImageDurationMs` mandatory for image export.
- Add export support for gaps in sequences of audio EditedMediaItems.
-   Track Selection:
- `DefaultTrackSelector`: Prefer object-based audio over channel-based
        audio when other factors are equal.
-   Extractors:
- Allow `Mp4Extractor` and `FragmentedMp4Extractor` to identify H264
        samples that are not used as reference by subsequent samples.
    -   Add option to enable index-based seeking in `AmrExtractor`.
- Treat MP3 files with more than 128kB between valid frames as truncated
(instead of invalid). This means files with non-MP3 data at the end,
with no other metadata to indicate the length of the MP3 bytes, now stop
        playback at the end of the MP3 data instead of failing with
`ParserException: Searched too many bytes.{contentIsMalformed=true,
dataType=1}`
([#&#8203;1563](https://redirect.github.com/androidx/media/issues/1563)).
- Fix preroll sample handling for non-keyframe media start positions
when
        processing edit lists in MP4 files

([#&#8203;1659](https://redirect.github.com/google/ExoPlayer/issues/1659)).
- Improved frame rate calculation by using media duration from the
`mdhd`
        box in `Mp4Extractor` and `FragmentedMp4Extractor`

([#&#8203;1531](https://redirect.github.com/androidx/media/issues/1531)).
    -   Fix incorrect scaling of `media_time` in MP4 edit lists. While
        `segment_duration` was already correctly scaled using the movie
        timescale, `media_time` is now properly scaled using the track
        timescale, as specified by the MP4 format standard

([#&#8203;1792](https://redirect.github.com/androidx/media/issues/1792)).
- Handle out-of-order frames in `endIndices` calculation for MP4 with
edit
list
([#&#8203;1797](https://redirect.github.com/androidx/media/issues/1797)).
- Fix media duration parsing in `mdhd` box of MP4 files to handle `-1`
values
([#&#8203;1819](https://redirect.github.com/androidx/media/issues/1819)).
- Add support for identifying `h263` box in MP4 files for H.263 video

([#&#8203;1821](https://redirect.github.com/androidx/media/issues/1821)).
    -   Add AC-4 Level-4 ISO base media file format support
([#&#8203;1265](https://redirect.github.com/androidx/media/pull/1265)).
-   DataSource:
    -   Update `HttpEngineDataSource` to allow use starting at version S
        extension 7 instead of API level 34

([#&#8203;1262](https://redirect.github.com/androidx/media/issues/1262)).
- `DataSourceContractTest`: Assert that `DataSource.getUri()` returns
the
resolved URI (as documented). Where this is different to the requested
        URI, tests can indicate this using the new
`DataSourceContractTest.TestResource.Builder.setResolvedUri()` method.
    -   `DataSourceContractTest`: Assert that `DataSource.getUri()` and
`getResponseHeaders()` return their 'open' value after a failed call to
        `open()` (due to a 'not found' resource) and before a subsequent
        `close()` call.
- Overriding `DataSourceContractTest.getNotFoundResources()` allows
test sub-classes to provide multiple 'not found' resources, and to
provide any expected headers too. This allows to distinguish between
            HTTP 404 (with headers) and "server not found" (no headers).
-   Audio:
- Automatically configure CTA-2075 loudness metadata on the codec if
        present in the media.
    -   Ensure smooth volume ramp down when seeking.
    -   Fix pop sounds that may occur during seeks.
    -   Fix truncation error accumulation for Sonic's
        time-stretching/pitch-shifting algorithm.
- Fix bug in `SpeedChangingAudioProcessor` that causes dropped output
        frames.
-   Video:
- `MediaCodecVideoRenderer` avoids decoding samples that are neither
        rendered nor used as reference by other samples.
- On API 35 and above, `MediaCodecAdapter` may now receive a `null`
`Surface` in `configure` and calls to a new method `detachOutputSurface`
        to remove a previously set `Surface` if the codec supports this
        (`MediaCodecInfo.detachedSurfaceSupported`).
- Use `MediaCodecAdapter` supplied pixel aspect ratio values if provided
        when processing `onOutputFormatChanged`
([#&#8203;1371](https://redirect.github.com/androidx/media/pull/1371)).
- Add workaround for a device issue on Galaxy Tab S7 FE that causes
60fps
        secure H264 streams to be marked as unsupported

([#&#8203;1619](https://redirect.github.com/androidx/media/issues/1619)).
- Add workaround for codecs that get stuck after the last sample without
        returning an end-of-stream signal.
-   Text:
    -   Add a custom `VoiceSpan` and populate it for
[WebVTT voice
spans](https://www.w3.org/TR/webvtt1/#webvtt-cue-voice-span)

([#&#8203;1632](https://redirect.github.com/androidx/media/issues/1632)).
- Ensure WebVTT in HLS with very large subtitle timestamps (which
overflow
a 64-bit `long` when represented as microseconds and multiplied by the
        `90,000` MPEG timebase) are displayed

([#&#8203;1763](https://redirect.github.com/androidx/media/issues/1763)).
    -   Support CEA-608 subtitles in Dolby Vision content

([#&#8203;1820](https://redirect.github.com/androidx/media/issues/1820)).
- Fix playback hanging on DASH multi-period streams when CEA-608
subtitles
are enabled
([#&#8203;1863](https://redirect.github.com/androidx/media/issues/1863)).
-   Metadata:
- Assign the `C.TRACK_TYPE_METADATA` type to tracks containing icy or
        vnd.dvb.ait content.
-   Image:
- Add `ExternallyLoadedImageDecoder` for simplified integration with
        external image loading libraries like Glide or Coil.
-   DataSource:
- Add `FileDescriptorDataSource`, a new `DataSource` that can be used to
        read from a `FileDescriptor`

([#&#8203;3757](https://redirect.github.com/google/ExoPlayer/issues/3757)).
-   Effect:
- Add `DefaultVideoFrameProcessor` workaround for minor `SurfaceTexture`
scaling. `SurfaceTexture` may include a small scaling that cuts off a
1-texel border around the edge of a cropped buffer. This is now handled
        such that output is closer to expected.
- Speed up `DefaultVideoFrameProcessor.queueInputBitmap()`. As a result,
        exporting images to videos with `Transformer` is faster.
-   IMA extension:
    -   Fix bug where clearing the playlist may cause an
        `ArrayIndexOutOfBoundsException` in
        `ImaServerSideAdInsertionMediaSource`.
- Fix bug where server-side inserted DAI streams without a preroll can
result in an `ArrayIndexOutOfBoundsException` when playing past the last
midroll
([#&#8203;1741](https://redirect.github.com/androidx/media/issues/1741)).
-   Session:
- Add `MediaButtonReceiver.shouldStartForegroundService(Intent)` to
allow
apps to suppress a play command coming in for playback resumption by
overriding this method. By default, the service is always started and
playback can't be suppressed without the system crashing the service
        with a `ForegroundServiceDidNotStartInTimeException`

([#&#8203;1528](https://redirect.github.com/google/ExoPlayer/issues/1528)).
- Fix bug that caused custom commands sent from a `MediaBrowser` being
        dispatched to the `MediaSessionCompat.Callback` instead of the
`MediaBrowserServiceCompat` variant of the method when connected to a
legacy service. This prevented the `MediaBrowser` to receive the actual
        return value sent back by the legacy service

([#&#8203;1474](https://redirect.github.com/androidx/media/issues/1474)).
    -   Handle `IllegalArgumentException` thrown by devices of certain
manufacturers when setting the broadcast receiver for media button
intents
([#&#8203;1730](https://redirect.github.com/androidx/media/issues/1730)).
- Add command buttons for media items. This adds the Media3 API for what
was known as `Custom browse actions` with the legacy library with
`MediaBrowserCompat`. Note that with Media3 command buttons for media
items are available for both, `MediaBrowser` and `MediaController`. See
[Custom Browse actions of
AAOS](https://developer.android.com/training/cars/media#custom_browse_actions).
- Fix bug where a Media3 controller was sometimes unable to let a
session
        app start a foreground service after requesting `play()`.
- Restrict `CommandButton.Builder.setIconUri` to only accept content
Uris.
    -   Pass connection hints of a Media3 browser to the initial
`MediaBrowserCompat` when connecting to a legacy `MediaBrowserCompat`.
The service can receive the connection hints passed in as root hints
        with the first call to `onGetRoot()`.
- Fix bug where a `MediaBrowser` connected to a legacy browser service,
didn't receive an error sent by the service after the browser has
        subscribed to a `parentid`.
- Improve interoperability behavior, so that a Media3 browser that is
connected to a legacy `MediaBrowserService` doesn't request the children
        of a `parentId` twice when subscribing to a parent.
-   UI:
    -   Make the stretched/cropped video in
`PlayerView`-in-Compose-`AndroidView` workaround opt-in, due to issues
with XML-based shared transitions. Apps using `PlayerView` inside
        `AndroidView` need to call
`PlayerView.setEnableComposeSurfaceSyncWorkaround` in order to opt-in

([#&#8203;1237](https://redirect.github.com/androidx/media/issues/1237),

[#&#8203;1594](https://redirect.github.com/androidx/media/issues/1594)).
- Add `setFullscreenButtonState` to `PlayerView` to allow updates of
fullscreen button's icon on demand, i.e. out-of-band and not reactively
        to a click interaction

([#&#8203;1590](https://redirect.github.com/androidx/media/issues/1590),
[#&#8203;184](https://redirect.github.com/androidx/media/issues/184)).
- Fix bug where the "None" choice in the text selection is not working
if
        there are app-defined text track selection preferences.
-   DASH Extension:
    -   Add support for periods starting in the middle of a segment

([#&#8203;1440](https://redirect.github.com/androidx/media/issues/1440)).
-   Smooth Streaming Extension:
- Fix a `Bad magic number for Bundle` error when playing SmoothStreaming
        streams with text tracks

([#&#8203;1779](https://redirect.github.com/androidx/media/issues/1779)).
-   RTSP Extension:
- Fix user info removal for URLs that contain encoded @&#8203;
characters
([#&#8203;1138](https://redirect.github.com/androidx/media/pull/1138)).
    -   Fix crashing when parsing of RTP packets with header extensions
([#&#8203;1225](https://redirect.github.com/androidx/media/pull/1225)).
-   Decoder Extensions (FFmpeg, VP9, AV1, etc.):
- Add the IAMF decoder module, which provides support for playback of
MP4
        files containing IAMF tracks using the libiamf native library to
        synthesize audio.
        -   Playback is enabled with a stereo layout as well as 5.1 with
spatialization together with optional head tracking enabled, but
            binaural playback support is currently not available.
    -   Add 16 KB page support for decoder extensions on Android 15

([#&#8203;1685](https://redirect.github.com/androidx/media/issues/1685)).
-   Cast Extension:
- Stop cleaning the timeline after the CastSession disconnects, which
enables the sender app to resume playback locally after a disconnection.
- Populate CastPlayer's `DeviceInfo` when a `Context` is provided. This
enables linking the `MediaSession` to a `RoutingSession`, which is
        necessary for integrating Output Switcher

([#&#8203;1056](https://redirect.github.com/androidx/media/issues/1056)).
-   Test Utilities:
    -   `DataSourceContractTest` now includes tests to verify:
        -   Input stream `read position` is updated.
        -   Output buffer `offset` is applied correctly.
-   Demo app
    -   Resolve the memory leaks in demo short-form app

([#&#8203;1839](https://redirect.github.com/androidx/media/issues/1839)).
-   Remove deprecated symbols:
- Remove deprecated `Player.hasPrevious`, `Player.hasPreviousWindow()`.
        Use `Player.hasPreviousMediaItem()` instead.
    -   Remove deprecated `Player.previous()`method. Use
        `Player.seekToPreviousMediaItem()` instead.
- Remove deprecated `DrmSessionEventListener.onDrmSessionAcquired`
method.
    -   Remove deprecated `DefaultEncoderFactory` constructors. Use
        `DefaultEncoderFactory.Builder` instead.

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuNDIuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nik Clayton <nik@ngo.org.uk>
2024-12-02 17:52:24 +01:00
Nik Clayton
ed87f0a99b
change: Register Iconics fonts before use (#1151) 2024-12-02 17:09:08 +01:00
Nik Clayton
5a861436ba
fix: Prevent race / crash when updating main drawer items (#1150)
Previous code could crash if the main drawer items weren't created
before setting the optional items (scheduled statuses, lists, etc).

Protect the drawer item manipulation with a mutex to prevent this.
2024-12-02 17:08:58 +01:00
Nik Clayton
4c03e404d5
fix: Don't crash when toggling an account's "Show boosts" option (#1149)
Previous code would crash because toggling show boosts would treat this
as a new follow, and try and insert a follower relationship in to the
database where one already existed.

Fix this by providing explicit actions for show/hiding reblogs that
don't disturb the follower relationship.
2024-12-02 15:18:56 +01:00
Nik Clayton
cf461906df
fix: Show content warning changes when viewing status edits (#1148)
Previous code only ran the status content through the diff engine, so
changes to the content warning / spoiler text were ignored.

Fixes #1144
2024-12-02 14:53:57 +01:00
Nik Clayton
442b855c4b fix(l10n): Update Irish translations
Currently translated at 100.0% (27 of 27 strings)

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

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/ga/
2024-12-02 13:18:21 +01:00
Nik Clayton
7882f7d7a2 fix(l10n): Update Slovak translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/sk/
2024-11-29 20:27:11 +01:00
Nik Clayton
2d32bc8848 fix(l10n): Update Dutch translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/nl/
2024-11-29 20:27:11 +01:00
Nik Clayton
e4bf4ff616 fix(l10n): Update Czech translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/cs/
2024-11-29 20:27:11 +01:00
Nik Clayton
50a07072d8 fix(l10n): Update Esperanto translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/eo/
2024-11-29 20:27:11 +01:00
sunniva
9228927a24 fix(l10n): Update Norwegian Nynorsk translations
Currently translated at 67.9% (503 of 740 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/nn/
2024-11-29 20:27:11 +01:00
Kalle Kniivilä
ecf2c5d464 fix(l10n): Update Finnish translations
Currently translated at 100.0% (740 of 740 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-11-29 20:27:11 +01:00
LibreTranslate
254951cf48 fix(l10n): Update Chinese (Simplified) (zh_MO) translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/zh_MO/
2024-11-29 20:27:11 +01:00
LibreTranslate
1b20df9ce1 fix(l10n): Update Chinese (Simplified Han script, Singapore) translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/zh_Hans_SG/
2024-11-29 20:27:11 +01:00
LibreTranslate
c5384297d4 fix(l10n): Update Chinese (Simplified Han script) translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/zh_Hans/
2024-11-29 20:27:11 +01:00
LibreTranslate
c95264f4b3 fix(l10n): Update Chinese (Traditional Han script) translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/zh_Hant/
2024-11-29 20:27:11 +01:00
LibreTranslate
0f0b31c64f fix(l10n): Update Slovak translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/sk/
2024-11-29 20:27:11 +01:00
LibreTranslate
837082809b fix(l10n): Update Korean translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/ko/
2024-11-29 20:27:11 +01:00
LibreTranslate
87e4dd02fb fix(l10n): Update Persian translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/fa/
2024-11-29 20:27:11 +01:00
LibreTranslate
7afc4e7a44 fix(l10n): Update Dutch translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/nl/
2024-11-29 20:27:11 +01:00
LibreTranslate
25b369b77b fix(l10n): Update Arabic translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/ar/
2024-11-29 20:27:11 +01:00
LibreTranslate
c6b031a5f0 fix(l10n): Update Polish translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/pl/
2024-11-29 20:27:11 +01:00
LibreTranslate
2afd5a1f6c fix(l10n): Update Hebrew translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/he/
2024-11-29 20:27:11 +01:00
LibreTranslate
0e24b9adac fix(l10n): Update Hindi translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/hi/
2024-11-29 20:27:11 +01:00
LibreTranslate
8ae3ebe765 fix(l10n): Update Czech translations
Currently translated at 22.2% (6 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/cs/
2024-11-29 20:27:11 +01:00
LibreTranslate
cb42aa1436 fix(l10n): Update Japanese translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/ja/
2024-11-29 20:27:11 +01:00
LibreTranslate
0cca37b6a4 fix(l10n): Update Esperanto translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/eo/
2024-11-29 20:27:11 +01:00
LibreTranslate
e4652d81f0 fix(l10n): Update Chinese (Traditional Han script, Hong Kong) translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/zh_Hant_HK/
2024-11-29 20:27:11 +01:00
LibreTranslate
0ecb72d9a4 fix(l10n): Update Thai translations
Currently translated at 25.9% (7 of 27 strings)

Translation: Pachli/Fastlane Metadata
Translate-URL: https://hosted.weblate.org/projects/pachli/fastlane-metadata/th/
2024-11-29 20:27:11 +01:00
Nik Clayton
2652a9f850
chore: Prepare release 2.9.0 (versionCode 24) (#1142) v2.9.0 2024-11-28 15:23:19 +01:00
Nik Clayton
33f528b633
ci: Add security-events write permission for SARIF upload (#1140)
Required on `main` according to
https://github.com/github/codeql-action/issues/2117
2024-11-26 21:42:52 +01:00
Nik Clayton
d03cf09708
fix: Show correct account name in "Open as ..." menu (#1139) 2024-11-26 21:01:36 +01:00
Aindriú Mac Giolla Eoin
e9b66b69e4 fix(l10n): Update Irish translations
Currently translated at 100.0% (740 of 740 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/ga/
2024-11-26 21:01:25 +01:00
Kalle Kniivilä
b7b8c2537f fix(l10n): Update Finnish translations
Currently translated at 100.0% (740 of 740 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-11-26 21:01:25 +01:00
Nik Clayton
9bc17f0a1a
fix: Prevent crash if getItem throws IndexOutOfBoundsException (#1138) 2024-11-26 20:40:32 +01:00
Nik Clayton
4c7436ffb2
fix: Prevent NPE when adding reaction to announcement (#1137) 2024-11-26 20:40:22 +01:00
renovate[bot]
4a2a465bfe
chore(deps): update plugin ktlint to v12.1.2 (#1135)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| org.jlleitschuh.gradle.ktlint | `12.1.1` -> `12.1.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin/12.1.1/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin/12.1.1/12.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.

---

### 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-26 13:14:38 +01:00
Nik Clayton
982963b3b2
refactor: Use type converters instead calling moshi.adapter by hand (#1134)
A few places in the code were calling `moshi.adapter` to marshall
to/from strings in the database where type converters either already
exist, or are straightforward to create.

Create the missing type converters, and use them throughout. This
simplifies several places where a Moshi instance no longer needs to be
passed through several layers of method calls.

Since this doesn't change the underlying database representation of the
data there's no need to bump the database version number.
2024-11-25 21:25:28 +01:00
Nik Clayton
2ebb77e85f
fix: Don't clear content when account changes (#1132)
Previous code ran the setup routine whenever the account changed. I
think this could result in the content being cleared when a notification
arrived (processing the notification updates the marker, which updates
the account, which triggers a new collection).

Fix this by only taking the first emission of the account from the flow
to do the setup.
2024-11-25 13:38:19 +01:00
Nik Clayton
fa50b2d0c0
feat: Graduate tab alignment and content prefs from labs (#1131) 2024-11-25 13:04:53 +01:00
Nik Clayton
b8cb8cdd09
fix: Show top level error message when video playback fails (#1130)
Previous code showed the error message for the underlying cause, which
might be too technical for the user. Prefer to use top level error
message; hopefully that is more actionable.

Contributes to #1083
2024-11-25 12:59:37 +01:00
renovate[bot]
ccab076dc5
fix(deps): update dependency org.robolectric:robolectric to v4.14.1 (#1122)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.robolectric:robolectric](http://robolectric.org)
([source](https://redirect.github.com/robolectric/robolectric)) | `4.14`
-> `4.14.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.robolectric:robolectric/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.robolectric:robolectric/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.robolectric:robolectric/4.14/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.robolectric:robolectric/4.14/4.14.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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/pachli/pachli-android).

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

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nik Clayton <nik@ngo.org.uk>
2024-11-25 12:47:07 +01:00
Nik Clayton
2ebd5b746f
fix: Prevent crash with Paging IndexOutOfBoundsException (#1129)
getItemViewType is occasionally called with a position that's out of
range; trying to get the item at that position throws an
`IndexOutOfBoundsException`.

Catch it, and return the placeholder view type.
2024-11-25 12:18:11 +01:00
Nik Clayton
e009c00a76
feat: Initial support for filtering notifications by sending account (#1127)
Allow the user to define filtering rules for notifications by sending
account:

- Not followed
- Younger than 30d
- Limited by moderators

and a policy for each of either show, warn, or hide.

To do this:

## Manage followers

- Create a new `FollowingAccountEntity`, to record accounts the logged
in account is following.
- Fetch the account's followers when an account is made active, and
persist to this table.
- Provide the followers as a property on `PachliAccount`
- Update this table if the user follows/unfollows accounts during normal
operation.

## Track account creation time

- Record account creation time in `TimelineAccount`.

## Track notification creation time

- Record notification creation time in `Notification`.

## API

- Always fetch all notifications, including those the server is
filtering.

## UX and storage for account filters

- Show a new Account preference to edit account notification filters.
- Display a dialog to manage account notification filters.
- Persist the user's choice to new properties in `AccountEntity`.
- New `AccountManager` methods to update the properties

## Filtering notifications

- New `NotificationFilter.filterNotificationByAccount()` method to make
the filtering decision based on the user's preferences.
- Use this in `NotificationFetcher` to filter notifications before
creating Android notifications.
- Use this in `NotificationsViewModel` to filter notifications before
display in `NotificationsFragment`.

## UX for filtered notifications

- Display filtered (with warning) notifications inline with other
notifications, with UI to disclose the notification or edit the filters.
2024-11-25 11:35:05 +01:00
renovate[bot]
11e06fc5c9
chore(deps): update dependency gradle to v8.11.1 (#1119)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [gradle](https://gradle.org)
([source](https://redirect.github.com/gradle/gradle)) | patch | `8.11`
-> `8.11.1` |

---

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

---

### Release Notes

<details>
<summary>gradle/gradle (gradle)</summary>

###
[`v8.11.1`](https://redirect.github.com/gradle/gradle/compare/v8.11.0...v8.11.1)

[Compare
Source](https://redirect.github.com/gradle/gradle/compare/v8.11.0...v8.11.1)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 21:27:57 +01:00
renovate[bot]
aded153167
chore(deps): update github/codeql-action digest to f09c1c0 (#1116)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github/codeql-action](https://redirect.github.com/github/codeql-action)
| action | digest | `ea9e4e3` -> `f09c1c0` |

---

> [!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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-24 21:09:56 +01:00
sunniva
2206ee9856 fix(l10n): Update Norwegian Nynorsk translations
Currently translated at 55.1% (399 of 724 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/nn/
2024-11-24 21:08:37 +01:00
sunniva
70aa5e4602 fix(l10n): Update Norwegian Bokmål translations
Currently translated at 100.0% (724 of 724 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/nb_NO/
2024-11-24 21:08:37 +01:00
Nik Clayton
acdbf1e52f
refactor: Extract notification type icon code (#1126)
This code will be used elsewhere in an upcoming change, so extract it
now to minimise the diffs.

While I'm here, provide an icon for mentions, and an attribute for the
"favourite" colour.
2024-11-22 15:05:06 +01:00