This does 2 things:
- Removes `AccountSwitchInterceptor`, the main culprit for the bug. APIs
can no longer change their base url after they have been created. As a
result they are not Singletons anymore.
- Additionally, I refactored how MainActivity handles Intents to make it
less likely to have multiple instances of it active.
Here is how I could reliably reproduce the bug:
- Be logged in with account A and B
- Write a post with account A, cancel it before it sends (go into flight
mode for that)
- Switch to account B
- Open the "this post failed to send" notification from account A,
drafts will open
- Go back. You are in the MainActivity of account A, everything seems
fine.
- Go back again. You are in the old, now broken MainActivity of account
B. It uses the database of account B but the network of account A.
Refreshing will show posts from A.
closes#4567closes#4554closes#4402closes#4148closes#2663
and possibly #4588
[Let's encrypt had to make some changes to their
signing](https://letsencrypt.org/2023/07/10/cross-sign-expiration.html),
as a result Android 7 doeesn't have the root certificates necessary to
trust Let's encrypt signed certificates anymore. Since most Fedi
instances use Let's encrypt, that is a problem. To work around we can
add the certificates to Tusky directly.
Details [here](https://stackoverflow.com/a/78309587).
closes#4607
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
|
[install-missing-android-tools](https://bitrise.io/integrations/steps/install-missing-android-tools)
| minor | `3.1` -> `3.2.1` |
---
> [!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://www.mend.io/free-developer-tools/renovate/). View the
[repository job log](https://developer.mend.io/github/tuskyapp/Tusky).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMC4xIiwidXBkYXRlZEluVmVyIjoiMzguMjAuMSIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Currently translated at 100.0% (651 of 651 strings)
Translated using Weblate (German)
Currently translated at 99.8% (650 of 651 strings)
Co-authored-by: Connyduck <weblate@connyduck.at>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/de/
Translation: Tusky/Tusky
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [gradle/actions](https://togithub.com/gradle/actions) | action | major
| `v3` -> `v4` |
---
### Release Notes
<details>
<summary>gradle/actions (gradle/actions)</summary>
### [`v4`](https://togithub.com/gradle/actions/compare/v3...v4)
[Compare Source](https://togithub.com/gradle/actions/compare/v3...v4)
</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://www.mend.io/free-developer-tools/renovate/). View the
[repository job log](https://developer.mend.io/github/tuskyapp/Tusky).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This will make it less likely that data from different accounts will get
mixed up.
I checked the codepaths and we shouldn't hit viewModel if account is not
there but this is still a bit of risk to assume that so I'll investigate
if we can pass in more things and use DI to make it more secure
---------
Co-authored-by: Conny Duck <git@connyduck.at>
[![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.media3:media3-ui](https://togithub.com/androidx/media) |
`1.3.1` -> `1.4.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-ui/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-ui/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-datasource-okhttp](https://togithub.com/androidx/media)
| `1.3.1` -> `1.4.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.4.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.4.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.3.1/1.4.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.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.media3:media3-exoplayer](https://togithub.com/androidx/media)
| `1.3.1` -> `1.4.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>androidx/media (androidx.media3:media3-ui)</summary>
###
[`v1.4.0`](https://togithub.com/androidx/media/blob/HEAD/RELEASENOTES.md#140-2024-07-24)
[Compare
Source](https://togithub.com/androidx/media/compare/1.3.1...1.4.0)
This release includes the following changes since the
[1.3.1 release](#​131-2024-04-11):
- Common Library:
- Forward presumed no-op seek calls to the protected
`BasePlayer.seekTo()`
and `SimpleBasePlayer.handleSeek()` methods instead of ignoring them. If
you are implementing these methods in a custom player, you may need to
handle these additional calls with `mediaItemIndex == C.INDEX_UNSET`.
- Remove compile dependency on enhanced Java 8 desugaring
([#​1312](https://togithub.com/androidx/media/issues/1312)).
- Ensure the duration passed to `MediaItem.Builder.setImageDurationMs()`
is ignored for a non-image `MediaItem` (as documented).
- Add `Format.customData` to store app-provided custom information about
`Format` instances.
- ExoPlayer:
- Add `BasePreloadManager` which coordinates the preloading for multiple
sources based on the priorities defined by their `rankingData`.
Customization is possible by extending this class. Add
`DefaultPreloadManager` which uses `PreloadMediaSource` to preload media
samples of the sources into memory, and uses an integer `rankingData`
that indicates the index of an item on the UI.
- Add `PlayerId` to most methods of `LoadControl` to enable
`LoadControl`
implementations to support multiple players.
- Remove `Buffer.isDecodeOnly()` and `C.BUFFER_FLAG_DECODE_ONLY`. There
is
no need to set this flag as renderers and decoders will decide to skip
buffers based on timestamp. Custom `Renderer` implementations should
check if the buffer time is at least
`BaseRenderer.getLastResetPositionUs()` to decide whether a sample
should be shown. Custom `SimpleDecoder` implementations can check
`isAtLeastOutputStartTimeUs()` if needed or mark other buffers with
`DecoderOutputBuffer.shouldBeSkipped` to skip them.
- Allow a null value to be returned by
`TargetPreloadStatusControl.getTargetPreloadStatus(T)` to indicate not
to preload a `MediaSource` with the given `rankingData`.
- Add `remove(MediaSource)` to `BasePreloadManager`.
- Add `reset()` to `BasePreloadManager` to release all the holding
sources
while keep the preload manager instance.
- Add `ExoPlayer.setPriority()` (and `Builder.setPriority()`) to define
the priority value used in `PriorityTaskManager` and for MediaCodec
importance from API 35.
- Fix issue with updating the last rebuffer time which resulted in
incorrect `bs` (buffer starvation) key in CMCD
([#​1124](https://togithub.com/androidx/media/issues/1124)).
- Add
`PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)`
to indicate that the source has loaded to the end. This allows the
`DefaultPreloadManager` and the custom
`PreloadMediaSource.PreloadControl` implementations to preload the next
source or take other actions.
- Fix bug where silence skipping at the end of items can trigger a
playback exception.
- Add `clear` to `PreloadMediaSource` to discard the preloading period.
- Add new error code
`PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED` that is used
when codec resources are reclaimed for higher priority tasks.
- Let `AdsMediaSource` load preroll ads before initial content media
preparation completes
([#​1358](https://togithub.com/androidx/media/issues/1358)).
- Fix bug where playback moved to `STATE_ENDED` when re-preparing a
multi-period DASH live stream after the original period was already
removed from the manifest.
- Rename `onTimelineRefreshed()` to `onSourcePrepared()` and
`onPrepared()` to `onTracksSelected()` in
`PreloadMediaSource.PreloadControl`. Also rename the IntDefs in
`DefaultPreloadManager.Stage` accordingly.
- Add experimental support for dynamic scheduling to better align work
with CPU wake-cycles and delay waking up to when renderers can progress.
You can enable this using `experimentalSetDynamicSchedulingEnabled()`
when setting up your ExoPlayer instance.
- Add `Renderer.getDurationToProgressUs()`. A `Renderer` can implement
this method to return to ExoPlayer the duration that playback must
advance for the renderer to progress. If `ExoPlayer` is set with
`experimentalSetDynamicSchedulingEnabled()` then `ExoPlayer` will call
this method when calculating the time to schedule its work task.
- Add `MediaCodecAdapter#OnBufferAvailableListener` to alert when input
and output buffers are available for use by `MediaCodecRenderer`.
`MediaCodecRenderer` will signal `ExoPlayer` when receiving these
callbacks and if `ExoPlayer` is set with
`experimentalSetDynamicSchedulingEnabled()`, then `ExoPlayer` will
schedule its work loop as renderers can make progress.
- Use data class for `LoadControl` methods instead of individual
parameters.
- Add `ExoPlayer.isReleased()` to check whether `Exoplayer.release()`
has
been called.
- Add `ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()` to configure
the maximum position for which `seekToPrevious()` seeks to the previous
item ([#​1425](https://togithub.com/androidx/media/issues/1425)).
- Fix some audio focus inconsistencies, e.g. not reporting full or
transient focus loss while the player is paused
([#​1436](https://togithub.com/androidx/media/issues/1436)).
- Fix potential `IndexOutOfBoundsException` caused by extractors
reporting
additional tracks after the initial preparation step
([#​1476](https://togithub.com/androidx/media/issues/1476)).
- `Effects` in `ExoPlayer.setVideoEffect()` will receive the timestamps
with the renderer offset removed
([#​1098](https://togithub.com/androidx/media/issues/1098)).
- Fix potential `IllegalArgumentException` when handling player error
that
happened while reading ahead into another playlist item
([#​1483](https://togithub.com/androidx/media/issues/1483)).
- Transformer:
- Add `audioConversionProcess` and `videoConversionProcess` to
`ExportResult` indicating how the respective track in the output file
was made.
- Relax trim optimization H.264 level checks.
- Add support for changing between SDR and HDR input media in a
sequence.
- Add support for composition-level audio effects.
- Add support for transcoding Ultra HDR images into HDR videos.
- Fix issue where the `DefaultAudioMixer` does not output the correct
amount of bytes after being reset and reused.
- Work around a decoder bug where the number of audio channels was
capped
at stereo when handling PCM input.
- When selecting tracks in `ExoPlayerAssetLoader`, ignore audio channel
count constraints as they only apply for playback.
- Replace `androidx.media3.transformer.Muxer` interface with
`androidx.media3.muxer.Muxer` and remove
`androidx.media3.transformer.Muxer`.
- Fix HEIC image loading from content URI schemes.
([#​1373](https://togithub.com/androidx/media/issues/1373)).
- Adjust audio track duration in `AudioGraphInput` to improve AV sync.
- Remove `ExportResult.processedInputs` field. If you use this field for
codec details, then use `DefaultDecoderFactory.listener` instead. In
case of a codec exception, codec details will be available in the
`ExportException.codecInfo`.
- Extractors:
- MPEG-TS: Roll forward the change ensuring the last frame is rendered
by
passing the last access unit of a stream to the sample queue
([#​7909](https://togithub.com/google/ExoPlayer/issues/7909)).
Incorporating fixes to resolve the issues that emerged in I-frame only
HLS
streams([#​1150](https://togithub.com/androidx/media/issues/1150))
and
H.262 HLS streams
([#​1126](https://togithub.com/androidx/media/issues/1126)).
- MP3: Prefer the data size from an `Info` frame over the size reported
by
the underlying stream (e.g. file size, or HTTP `Content-Length` header).
This helps to exclude non-playable trailer data (e.g. album artwork)
from constant bitrate seeking calculations, making seeks more accurate
([#​1376](https://togithub.com/androidx/media/issues/1376)).
- MP3: Use the frame count and other data in an `Info` frame (if
present)
to compute an average bitrate for constant bitrate seeking, rather than
extrapolating from the bitrate of the frame after the `Info` frame,
which may be artificially small, e.g. `PCUT` frame
([#​1376](https://togithub.com/androidx/media/issues/1376)).
- Fix PCM audio format extraction in AVI containers.
- Audio:
- Fix DTS:X Profile 2 encoding attributes for passthrough playback
([#​1299](https://togithub.com/androidx/media/pull/1299)).
- For offloaded playback, reset the tracking field for stream completion
in `DefaultAudioSink` prior to calling `AudioTrack.stop()` so that
`AudioTrack.StreamEventCallback#onPresentationEnded` correctly
identifies when all pending data has been played.
- Fix bug in `SilenceSkippingAudioProcessor` where transitions between
different audio formats (for example stereo to mono) can cause the
processor to throw an exception
([#​1352](https://togithub.com/androidx/media/issues/1352)).
- Implement `MediaCodecAudioRenderer.getDurationToProgressUs()` so that
ExoPlayer will dynamically schedule its main work loop to when the
MediaCodecAudioRenderer can make progress.
- Video:
- Fix issue where `Listener.onRenderedFirstFrame()` arrives too early
when
switching surfaces mid-playback.
- Fix decoder fallback logic for Dolby Vision to use a compatible AV1
decoder if needed
([#​1389](https://togithub.com/androidx/media/pull/1389)).
- Fix codec exception that may be caused by enabling a video renderer
mid-playback.
- Text:
- Fix issue where subtitles starting before a seek position are skipped.
This issue was only introduced in Media3 1.4.0-alpha01.
- Change default subtitle parsing behavior so it happens during
extraction
instead of during rendering (see
[ExoPlayer's architecture
diagram](https://developer.android.com/media/media3/exoplayer/glossary#exoplayer)
for the difference between extraction and rendering).
- This change can be overridden by calling **both**
`MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)`
and `TextRenderer.experimentalSetLegacyDecodingEnabled(true)`. See
the
[docs on
customization](https://developer.android.com/media/media3/exoplayer/customization)
for how to plumb these components into an `ExoPlayer` instance.
These methods (and all support for legacy subtitle decoding) will be
removed in a future release.
- Apps with custom `SubtitleDecoder` implementations need to update
them to implement `SubtitleParser` instead (and
`SubtitleParser.Factory` instead of `SubtitleDecoderFactory`).
- PGS: Fix run-length decoding to resolve `0` as a color index, instead
of
a literal color value
([#​1367](https://togithub.com/androidx/media/pull/1367)).
- CEA-708: Ignore `rowLock` value. The CEA-708-E S-2023 spec states that
`rowLock` and `columnLock` should both be assumed to be true, regardless
of the values present in the stream (`columnLock` support is not
implemented, so it's effectively assumed to always be false).
- This was originally included in the `1.3.0-alpha01` release notes,
but the change was accidentally reverted before the `1.3.0-rc01`
release. This is now fixed, so the change is present again.
- CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive
handling of the 'set pen location' command
([#​1315](https://togithub.com/androidx/media/pull/1315)).
- Fix an `IllegalArgumentException` from `LegacySubtitleUtil` when a
WebVTT subtitle sample contains no cues, e.g. as part of a DASH stream
([#​1516](https://togithub.com/androidx/media/issues/1516)).
- Metadata:
- Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort'
(`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4
tags were wrongly mapped to the `TSO2`, `TSOA` and `TSOP` ID3 tags
([#​1302](https://togithub.com/androidx/media/issues/1302)).
- Fix reading of MP4 (/iTunes) numeric `gnre` (genre) and `tmpo` (tempo)
tags when the value is more than one byte long.
- Propagate ID3 `TCON` frame to `MediaMetadata.genre`
([#​1305](https://togithub.com/androidx/media/issues/1305)).
- Image:
- Add support for non-square DASH thumbnail grids
([#​1300](https://togithub.com/androidx/media/pull/1300)).
- Add support for AVIF for API 34+.
- Allow `null` as parameter for `ExoPlayer.setImageOutput()` to clear a
previously set `ImageOutput`.
- DataSource:
- Implement support for `android.resource://package/id` raw resource
URIs
where `package` is different to the package of the current application.
This wasn't previously documented to work, but is a more efficient way
of accessing resources in another package than by name.
- Eagerly check `url` is non-null in the `DataSpec` constructors. This
parameter was already annotated to be non-null.
- Allow `ByteArrayDataSource` to resolve a URI to a byte array during
`open()`, instead of being hard-coded at construction
([#​1405](https://togithub.com/androidx/media/issues/1405)).
- DRM:
- Allow setting a `LoadErrorHandlingPolicy` on
`DefaultDrmSessionManagerProvider`
([#​1271](https://togithub.com/androidx/media/issues/1271)).
- Effect:
- Support multiple speed changes within the same `EditedMediaItem` or
`Composition` in `SpeedChangeEffect`.
- Support for HLG and PQ output from ultra HDR bitmap input.
- Add support for EGL_GL_COLORSPACE_BT2020\_HLG_EXT, which improves HLG
surface output in ExoPlayer.setVideoEffect and Transformer's Debug
SurfaceView.
- Update Overlay matrix implementation to make it consistent with the
documentation by flipping the x and y values applied in
`setOverlayFrameAnchor()`. If using
`OverlaySettings.Builder.setOverlayFrameAnchor()`, flip their x and y
values by multiplying them by `-1`.
- Fix bug where `TimestampWrapper` crashes when used with
`ExoPlayer#setVideoEffects`
([#​821](https://togithub.com/androidx/media/issues/821)).
- Change default SDR color working space from linear colors to
electrical
BT 709 SDR video. Also provide third option to retain the original
colorspace.
- Allow defining indeterminate z-order of EditedMediaItemSequences
([#​1055](https://togithub.com/androidx/media/pull/1055)).
- Maintain a consistent luminance range across different pieces of HDR
content (uses the HLG range).
- Add support for Ultra HDR (bitmap) overlays on HDR content.
- Allow `SeparableConvolution` effects to be used before API 26.
- Remove unused `OverlaySettings.useHdr` since dynamic range of overlay
and frame must match.
- Add HDR support for `TextOverlay`. Luminance of the text overlay can
be
adjusted with `OverlaySettings.Builder.setHdrLuminanceMultiplier()`.
- IMA extension:
- Promote API that is required for apps to play
[DAI ad
streams](https://developers.google.com/ad-manager/dynamic-ad-insertion/full-service)
to stable.
- Add `replaceAdTagParameters(Map <String, String>)` to
`ImaServerSideAdInsertionMediaSource.AdLoader` that allows replacing ad
tag parameters at runtime.
- Fix bug where `VideoAdPlayer.VideoAdPlayerCallback.onError()` was not
called when a player error happened during ad playback
([#​1334](https://togithub.com/androidx/media/issues/1334)).
- Bump IMA SDK version to 3.33.0 to fix a `NullPointerException` when
using `data://` ad tag URIs
([#​700](https://togithub.com/androidx/media/issues/700)).
- Session:
- Change default of `CommandButton.enabled` to `true` and ensure the
value
can stay false for controllers even if the associated command is
available.
- Add icon constants for `CommandButton` that should be used instead of
custom icon resources.
- Add `MediaSessionService.isPlaybackOngoing()` to let apps query
whether
the service needs to be stopped in `onTaskRemoved()`
([#​1219](https://togithub.com/androidx/media/issues/1219)).
- Add `MediaSessionService.pauseAllPlayersAndStopSelf()` that
conveniently
allows to pause playback of all sessions and call `stopSelf()` to
terminate the lifecycle of the `MediaSessionService`.
- Override `MediaSessionService.onTaskRemoved(Intent)` to provide a safe
default implementation that keeps the service running in the foreground
if playback is ongoing or stops the service otherwise.
- Hide seekbar in the media notification for live streams by not setting
the duration into the platform session metadata
([#​1256](https://togithub.com/androidx/media/issues/1256)).
- Align conversion of `MediaMetadata` to `MediaDescriptionCompat`, to
use
the same preferred order and logic when selecting metadata properties as
in media1.
- Add `MediaSession.sendError()` that allows sending non-fatal errors to
Media3 controller. When using the notification controller (see
`MediaSession.getMediaNotificationControllerInfo()`), the custom error
is used to update the `PlaybackState` of the platform session to an
error state with the given error information
([#​543](https://togithub.com/androidx/media/issues/543)).
- Add `MediaSession.Callback.onPlayerInteractionFinished()` to inform
sessions when a series of player interactions from a specific controller
finished.
- Add `SessionError` and use it in `SessionResult` and `LibraryResult`
instead of the error code to provide more information about the error
and how to resolve the error if possible.
- Publish the code for the media3 controller test app that can be used
to
test interactions with apps publishing a media session.
- Propagate extras passed to media3's
`MediaSession[Builder].setSessionExtras()` to a media1 controller's
`PlaybackStateCompat.getExtras()`.
- Map fatal and non-fatal errors to and from the platform session. A
`PlaybackException` is mapped to a fatal error state of the
`PlaybackStateCompat`. A `SessionError` sent to the media notification
controller with `MediaSession.sendError(ControllerInfo, SessionError)`
is mapped to a non-fatal error in `PlaybackStateCompat` which means that
error code and message are set but the state of the platform session
remains different to `STATE_ERROR`.
- Allow the session activity to be set per controller to override the
global session activity. The session activity can be defined for a
controller at connection time by creating a `ConnectionResult` with
`AcceptedResultBuilder.setSessionActivivty(PendingIntent)`. Once
connected, the session activity can be updated with
`MediaSession.setSessionActivity(ControllerInfo, PendingIntent)`.
- Improve error replication of calls to `MediaLibrarySession.Callback`.
Error replication can now be configured by using
`MediaLibrarySession.Builder.setLibraryErrorReplicationMode()` for
choosing the error type or opt-ing out of error replication which is on
by default.
- UI:
- Add image display support to `PlayerView` when connected to an
`ExoPlayer`
([#​1144](https://togithub.com/androidx/media/issues/1144)).
- Add customization of various icons in `PlayerControlView` through xml
attributes to allow different drawables per `PlayerView` instance,
rather than global overrides
([#​1200](https://togithub.com/androidx/media/issues/1200)).
- Work around a platform bug causing stretched/cropped video when using
`SurfaceView` inside a Compose `AndroidView` on API 34
([#​1237](https://togithub.com/androidx/media/issues/1237)).
- Downloads:
- Ensure that `DownloadHelper` does not leak unreleased `Renderer`
instances, which can eventually result in an app crashing with
`IllegalStateException: Too many receivers, total of 1000, registered
for pid`
([#​1224](https://togithub.com/androidx/media/issues/1224)).
- Cronet Extension:
- Fix `SocketTimeoutException` in `CronetDataSource`. In some versions
of
Cronet, the request provided by the callback is not always the same.
This leads to callback not completing and request timing out
(https://issuetracker.google.com/328442628).
- HLS Extension:
- Fix bug where pending EMSG samples waiting for a discontinuity were
delegated in `HlsSampleStreamWrapper` with an incorrect offset causing
an `IndexOutOfBoundsException` or an `IllegalArgumentException`
([#​1002](https://togithub.com/androidx/media/issues/1002)).
- Fix bug where non-primary playlists keep reloading for LL-HLS streams
([#​1240](https://togithub.com/androidx/media/issues/1240)).
- Fix bug where enabling CMCD for HLS with initialization segments
resulted in `Source Error` and `IllegalArgumentException`.
- Fix bug where non-primary playing playlists are not refreshed during
live playback
([#​1240](https://togithub.com/androidx/media/issues/1240)).
- Fix bug where enabling CMCD for HLS live streams causes
`ArrayIndexOutOfBoundsException`
([#​1395](https://togithub.com/androidx/media/issues/1395)).
- DASH Extension:
- Fix bug where re-preparing a multi-period live stream can throw an
`IndexOutOfBoundsException`
([#​1329](https://togithub.com/androidx/media/issues/1329)).
- Add support for `dashif:Laurl` license urls
([#​1345](https://togithub.com/androidx/media/issues/1345)).
- Cast Extension:
- Fix bug that converted the album title of the `MediaQueueItem` to the
artist in the Media3 media item
([#​1255](https://togithub.com/androidx/media/pull/1255)).
- Test Utilities:
- Implement `onInit()` and `onRelease()` in `FakeRenderer`.
- Change `TestPlayerRunHelper.runUntil()/playUntil()` methods to fail on
nonfatal errors (e.g. those reported to
`AnalyticsListener.onVideoCodecError()`). Use the new
`TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()`
method chain to disable this behavior.
- Demo app:
- Use `DefaultPreloadManager` in the short form demo app.
- Allow setting repeat mode with `Intent` arguments from command line
([#​1266](https://togithub.com/androidx/media/pull/1266)).
- Use `HttpEngineDataSource` as the `HttpDataSource` when supported by
the
device.
- Remove deprecated symbols:
- Remove `CronetDataSourceFactory`. Use `CronetDataSource.Factory`
instead.
- Remove some `DataSpec` constructors. Use `DataSpec.Builder` instead.
- Remove `setContentTypePredicate(Predicate)` method from
`DefaultHttpDataSource`, `OkHttpDataSource` and `CronetDataSource`. Use
the equivalent method on each `XXXDataSource.Factory` instead.
- Remove `OkHttpDataSource` constructors and `OkHttpDataSourceFactory`.
Use `OkHttpDataSource.Factory` instead.
- Remove `PlayerMessage.setHandler(Handler)`. Use `setLooper(Looper)`
instead.
- Remove `Timeline.Window.isLive` field. Use the `isLive()` method
instead.
- Remove `DefaultHttpDataSource` constructors. Use
`DefaultHttpDataSource.Factory` instead.
- Remove `DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS`. Use
`DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS` instead.
- Remove `MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format,
boolean)`. Use `MediaCodecInfo.canReuseCodec(Format, Format)` instead.
- Remove `DrmSessionManager.DUMMY` and `getDummyDrmSessionManager()`
method. Use `DrmSessionManager.DRM_UNSUPPORTED` instead.
- Remove `AnalyticsListener.onAudioInputFormatChanged(EventTime,
Format)`,
`AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)`,
`AudioRendererEventListener.onAudioInputFormatChanged(Format)`,
`VideoRendererEventListener.onVideoInputFormatChanged(Format)`. Use the
overloads that take a `DecoderReuseEvaluation` instead.
- Remove `RendererSupport.FormatSupport` IntDef and `FORMAT_HANDLED`,
`FORMAT_EXCEEDS_CAPABILITIES`, `FORMAT_UNSUPPORTED_DRM`,
`FORMAT_UNSUPPORTED_SUBTYPE`, `FORMAT_UNSUPPORTED_TYPE` constants. Use
the equivalent IntDef and constants in `androidx.media3.common.C`
instead (e.g. `C.FORMAT_HANDLED`).
- Remove `Bundleable` interface. This includes removing all
`Bundleable.Creator<Foo> CREATOR` constant fields. Callers should use
the `Bundle toBundle()` and `static Foo fromBundle(Bundle)` methods on
each type 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://www.mend.io/free-developer-tools/renovate/). View the
[repository job log](https://developer.mend.io/github/tuskyapp/Tusky).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Addresses issue #4573. Updates searchView in SearchActivity to clear
focus when a user makes a search. This allows the keyboard to not keep
popping up after a user goes back to search screen after clicking on a
searched item.