Commit Graph

4410 Commits

Author SHA1 Message Date
be80551645 Move store metadata out of source tree (#8601)
### Description

Move store metadata out of source tree. Running Triple-T publisher
always complains about our custom folders (screenshot creator script).
Move everything out of the actual Triple-T metadata folder and symlink
only the necessary ones instead.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-07-15 07:58:01 +02:00
e886e7979c Bump version to 3.12.0-beta5 2026-07-13 20:31:55 +02:00
3d1c1a79ba Fix some crashes reported through google play (#8579)
### Description

Possible fixes for some crashes reported through google play

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-07-09 08:48:05 +02:00
bdfd540c32 Bump version to 3.12.0-beta4 2026-06-30 08:08:02 +02:00
1f755eed98 Don't swallow PlayerStatusEvent if media changed (#8554)
### Description

Don't swallow PlayerStatusEvent if media changed. We only checked the
status, but if we directly started a new episode without going through
pause/play, we skipped sending the PlayerStatusEvent incorrectly.

Closes #8548
Closes #8516
Closes #8530

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-06-30 08:05:40 +02:00
f75b3ff1a8 Fix undo snackbar showing placeholders (#8540)
### Description

Fix undo snackbar showing placeholders

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-06-23 07:57:09 +02:00
43394f9ff3 Fix crash when speed dialog gets closed while handler is running (#8541)
### Description

Fix crash when speed dialog gets closed while handler is running. This
seems super hard to trigger, but apparently some of our beta testers
managed to do it.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-06-23 07:56:44 +02:00
1d8f354028 Bump version to 3.12.0-beta3 2026-06-04 21:33:24 +02:00
a0010694a3 Fix sleep timer and chapter notification buttons (#8499)
### Description

Fix notification buttons: Fix sleep timer button not getting displayed
and chapter button not seeing any chapters.

Closes #8473

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-30 11:19:27 +02:00
b57991fab2 Reduce padding of currently playing item background (#8498)
### Description

Reduce padding of currently playing item background

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-29 12:56:51 +02:00
7bc412a06e Fix pressing cover to start playing (#8497)
### Description

Fix pressing cover to start playing in new playback service

Closes #8492

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-29 11:43:30 +02:00
269d6b7ef1 Fix chapter buttons in new playback service (#8488)
### Description

Fix chapter buttons in new playback service. They still tried to use the
old service controls.
Closes #8483

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-28 10:58:21 +02:00
f5184b68c7 Bump version to 3.12.0-beta2 2026-05-25 22:51:11 +02:00
2a84466d3f Fix clicking position links in shownotes (#8477)
### Description

Fix clicking position links in shownotes with new playback service

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-25 22:31:18 +02:00
7c768dceca Improve deletion from local folders (#8440)
### Description

Fix two issues with deleting episodes from local folder subscriptions:

1. **#8425**: The Delete action button was missing from the
single-episode detail screen for local folder items. In
`ItemFragment.java`, `actionButton2` was only set to
`DeleteActionButton` when `media.isDownloaded()` — but local feed media
is never "downloaded" in the traditional sense, so the button was never
shown. Added `item.getFeed().isLocalFeed()` to the condition.

2. **#8424**: The multi-select Delete action silently did nothing for
local folder items. The `performMultiSelectAction` method runs on a
`Schedulers.computation()` background thread, but
`LocalDeleteModal.showLocalFeedDeleteWarningIfNecessary` needs to show a
dialog on the main thread. Wrapped the call in
`activity.runOnUiThread()` in `EpisodeMultiSelectActionHandler` so the
confirmation dialog is shown (or deletion proceeds directly for
non-local items).

Both fixes ensure the local-folder delete warning dialog is still shown
when appropriate.

Closes: #8424
Closes: #8425

### Checklist
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [ ] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
Co-authored-by: ByteHamster <info@bytehamster.com>
2026-05-20 10:38:00 +02:00
bf65dd5601 Fix dismissing miniplayer on media3 service (#8453)
### Description

Fix dismissing miniplayer on media3 service. To make this super nice, we
would need resumption support at runtime, but media3 does not support
that: https://github.com/androidx/media/issues/770
Closes #8446

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-19 12:47:16 +02:00
8e5d4dab5e Fix trying to load local files over http (#8450)
### Description

Fix trying to load local files over http.
Closes #8449

```
E  java.lang.IllegalArgumentException: Expected URL scheme 'http' or 'https' but was 'content'
	at okhttp3.HttpUrl$Builder.parse$okhttp(HttpUrl.kt:1254)
	at okhttp3.HttpUrl$Companion.get(HttpUrl.kt:1634)
	at okhttp3.Request$Builder.url(Request.kt:184)
	at de.danoeh.antennapod.ui.episodeslist.MediaSizeLoader.lambda$getFeedMediaSizeObservable$0(MediaSizeLoader.java:46)
	at de.danoeh.antennapod.ui.episodeslist.MediaSizeLoader$$ExternalSyntheticLambda0.subscribe(D8$$SyntheticClass:0)
	at io.reactivex.rxjava3.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:40)
	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
	at java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:348)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1154)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
	at java.lang.Thread.run(Thread.java:1564)

```

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-19 12:13:18 +02:00
501251d8ff Bump version to 3.12.0-beta1 2026-05-14 15:18:14 +02:00
0a1ea7bb3d Merge branch 'master' into develop 2026-05-14 15:10:05 +02:00
6c3492af72 Update store metadata 2026-05-14 14:57:03 +02:00
2fa245c093 More 'expressive' item backgrounds (#8435)
### Description

Material 3 "expressive" uses a lot more bold color. Make the currently
playing item background a bit more expressive by using a stronger color.

Before/After:
<img width="200" alt="Screenshot_20260514-135531"
src="https://github.com/user-attachments/assets/6571f48c-333b-4c3b-b4e5-799e10a3cf84"
/> <img width="200" alt="Screenshot_20260514-135455"
src="https://github.com/user-attachments/assets/c709a9d8-a5bb-4c9e-bade-b805f68e3788"
/>


### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 14:24:17 +02:00
61b227e546 Remove 'pause on focus loss' setting (#8433)
### Description

Remove 'pause on focus loss' setting. The setting is non-functional with
the new playback service, which always pauses (and never ducks) when on
media type speech. This aligns with the Android system defaults and
media3 behavior.

Closes #8390

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 14:19:34 +02:00
5fe70196eb Basic WearOS app (#8396)
### Description

An initial minimal implementation for a Wear OS app. So far, the wear
app can only display episodes and start them on the phone. No standalone
features available yet.

Contributes to #4264

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 14:17:54 +02:00
c39cfc9719 Shorten queue subtitle (#8432)
### Description

Shorten queue subtitle. In German, it sometimes broke to two lines,
which looked super messy

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 14:01:43 +02:00
188d756911 Tweak button design on home page (#8434)
### Description

Tweak button design on home page. We used text-based "arrows" (`»`).
Those don't work well depending on the language. Instead, use an actual
arrow icon.

Before/After:

<img width="200" alt="Screenshot_20260514-125712"
src="https://github.com/user-attachments/assets/da8c37c4-64c4-4904-986d-4df5020e7bc4"
/> <img width="200" alt="Screenshot_20260514-130130"
src="https://github.com/user-attachments/assets/3f527b42-b9cb-4aff-8eea-16c96e961661"
/>


### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 13:48:41 +02:00
7281fb1fc0 Animate subscription selection (#8431)
### Description

Animate subscription selection. Instead of jumping to the larger margin,
animate to it. Feels much more natural

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 12:15:41 +02:00
e0f5f278a0 Add support for searching queue only (#8419)
### Description

The search icon in the queue now searches the queue only. A chip
indicates that this is the case. This lays the groundwork for adding
other filters as well.

Contributes to #4374

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-14 09:57:18 +02:00
e1ce785d58 Show "Import error" instead of "Export error" for import failures (#8427)
### Description

Fix a bug where import errors re-used the "export error" dialog, causing
user confusion.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-13 19:22:18 +02:00
78594ecd85 Fix sleep timer hint text wrapping (#8420)
### Description

Closes: #8199

Updates the sleep timer dialog hint text so it uses `wrap_content`
height instead of a weighted zero-height layout. This lets the
disabled-continuous-playback warning expand to its full text instead of
being constrained to a single line.

This follows the layout cleanup suggested by the maintainer in the issue
thread.

### Checklist

- [x] I have read the contribution guidelines
- [x] I have performed a self-review of my code
- [ ] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project
- [x] I have mentioned the corresponding issue and the relevant keyword
in the description
- [x] If it is a core feature, I have added automated tests

Validation performed:

- `xmllint --noout app/src/main/res/layout/time_dialog.xml`
- `git diff --check`

Gradle validation attempted:

- `./gradlew :app:lintPlayDebug` could not run because the Android SDK
is not configured in this environment (`ANDROID_HOME` / `sdk.dir`
missing).
2026-05-09 07:48:50 +02:00
d3364aa085 Remove EventBus annotation processor (#8410)
### Description

Remove EventBus annotation processor. This breaks reproducible builds
without really helping with performance.

See also https://verification.f-droid.org/packages/de.danoeh.antennapod/

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-05-04 22:18:28 +02:00
9286bfb5f7 Bump version to 3.11.4 2026-04-30 23:05:48 +02:00
e839f25c84 Hide persistent playback controls preference on Android 11+ (#8398)
### Description

Hides the "Persistent playback controls" preference from the User
Interface settings screen when running on Android 11 (API 30) or newer.
Starting with Android 11, notification persistence for media sessions is
handled system-wide, so the app-level toggle is a no-op on modern
devices and can be confusing to users.

The change follows the existing pattern used for
`PREF_EXPANDED_NOTIFICATION`, which is hidden on API 26+ for the same
reason (notification channels superseded it).

On Android < 11 the preference remains visible and functional. On
Android 11+, `isPersistNotify()` continues to return its default
(`true`), so no behavioral regression for existing users.

One incidental change: `PREF_PERSISTENT_NOTIFICATION` was previously
`private` in `UserPreferences`; I changed it to `public` so
`UserInterfacePreferencesFragment` can reference it for visibility
control (matches the visibility of the adjacent
`PREF_EXPANDED_NOTIFICATION` constant).

Closes: #6809

### Checklist
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using \`./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug\`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests — N/A,
visibility-only change based on `Build.VERSION.SDK_INT`; behavior is
framework-gated and not meaningfully unit-testable.
2026-04-19 15:40:43 +02:00
9a4a50ad7a Reduce number of feed item events (#8393)
### Description

Reduce number of feed item events. Only have one type of event, instead
of item update AND unread update AND favorite update. This means that on
most screens, instead of receiving 2 events when marking something as
favorite, we receive only one event with that episode. This means we
query the database less frequently.

Additionally, for multi-select and similar batch tasks, instead of
sending one event per episode, send one combined event for all episodes
together. Again, this reduces the number of events we send and therefore
the number of database calls we make. Using multi-select to remove/add
all favorites feels noticeably faster.

Initial prototype: Claude, $2.59

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-04-19 15:38:24 +02:00
fd54ca62a2 Tweak agent instructions (#8400)
### Description

Tweak agent instructions, with special focus on Claude.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-04-19 15:11:38 +02:00
d8623ecf09 Fix some lint warnings and suppress the others (#8395)
### Description

Fix some lint warnings and suppress the others. This makes builds easier
because IntelliJ no longer jumps to those warnings (and it prevents more
from showing up).

Initial prototype: Claude, $1.99

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-04-14 23:03:48 +02:00
8419a7796f Merge branch 'master' into develop 2026-04-11 11:19:14 +02:00
0aba014583 Fix crash when opening Sleep Timer dialog due to main-thread DB access (#8366)
### Description

Fix a crash when opening the Sleep Timer dialog caused by main-thread
database access.

`SleepTimerDialog.refreshUiState()` reads playback timing via
`PlaybackController.getDuration()` and `getPosition()`. These methods
can
fall back to `getMedia()`, which lazily loads media from the database.

This results in disk I/O on the main thread and triggers a crash in
debug builds ("I/O on main thread").

Load the currently playing media asynchronously when the dialog opens
and use it for remaining-time validation instead of triggering a lazy
DB lookup.

Closes: #8360

### Checklist
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description
- [ ] If it is a core feature, I have added automated tests
2026-04-04 21:25:39 +02:00
aa2358b086 Bump version to 3.11.3 2026-03-30 23:06:18 +02:00
97416e0458 Move database calls from Schedulers.io to Schedulers.computation (#8374)
### Description

Move database calls from `Schedulers.io` to `Schedulers.computation`.
The io scheduler is unbounded, starting an arbitrary number of threads.
This might be a reason for the lock inflation failing. In contrast, the
`compute` scheduler is limited by the number of available threads.

Contributes to #8338

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint spotbugsPlayDebug spotbugsDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-03-30 22:51:36 +02:00
98712dca38 Bump version to 3.11.2 2026-03-24 23:24:09 +01:00
5de8d4b73f Merge branch 'master' into develop 2026-03-22 19:43:30 +01:00
f246b6d38c Add predictive back for main activity exit (#8356)
### Description

`OpenDefaultPageBackPressedCallback` was always enabled (`super(true)`),
meaning it intercepted every back gesture including the final app-exit
one, preventing the system from running its predictive back animation on
Android 13+.

The fix: disable the callback when no custom back action applies, so the
system owns the final exit gesture entirely.

- **`updateMainBackCallbackEnabledState()`** — new method that enables
the callback iff any of these hold:
  - fragment back stack has entries (pop)
- current page ≠ default page and default page isn't
`DEFAULT_PAGE_REMEMBER` (navigate home)
- `backButtonOpensDrawer` is set, drawer is present, bottom nav is
absent, **and drawer is currently closed** (open drawer)
- **Constructor** changed from `super(true)` → `super(false)`; state is
computed on first navigation call
- **`FragmentManager.OnBackStackChangedListener`** registered in
`onCreate()` to update on back stack changes
- **`DrawerLayout.SimpleDrawerListener`** added in `onCreate()` to
update when drawer opens/closes
- **Call sites**: `loadFragment(Fragment)`, `loadChildFragment(Fragment,
TransitionEffect, String)`, `handleNavIntent()` each call
`updateMainBackCallbackEnabledState()` after applying navigation

The existing `finish()` fallback in `handleOnBackPressed()` is retained
as a safety net but should never be reached when the callback is
properly disabled at exit-ready state.

### Checklist
- [ ] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [ ] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [ ] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [ ] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [ ] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

Implement predictive-back-friendly final-exit behavior in AntennaPod by
making MainActivity’s OpenDefaultPageBackPressedCallback conditionally
enabled.

Goal
- Ensure the *final* back gesture that closes the app is handled by the
system (predictive back animation) by having **no enabled
OnBackPressedCallback** at that point.
- Keep existing subtle back behavior intact for all other states
(fragment back stack popping, navigating to default page, opening
drawer, bottom sheet collapsing).
- No custom UI progress handling is required; rely on system animation.

Repository
- AntennaPod/AntennaPod (base branch: develop)

Current behavior
- MainActivity registers `openDefaultPageBackPressedCallback` in
`onStart()` and it is always enabled (constructor calls `super(true)`),
and its `handleOnBackPressed()` ends with `finish()`.
- Because the callback is always enabled, it intercepts back even when
the next back should simply exit, preventing the system-owned predictive
back animation for the exit gesture.

Desired behavior
- Keep `OpenDefaultPageBackPressedCallback` registered but enable it
only when pressing back would perform a custom action:
  1) Pop fragment back stack (back stack entry count > 0)
2) Navigate to default page (when last nav fragment != default page and
default page is not DEFAULT_PAGE_REMEMBER)
3) Open the drawer (when UserPreferences.backButtonOpensDrawer() is
true, drawer is present, bottomNavigation is null, and drawer is
currently closed)
- When none of the above conditions apply (i.e., exit-ready root state),
disable `openDefaultPageBackPressedCallback` so back exits via default
system behavior.

Implementation details
- Add a method on MainActivity, e.g.
`updateMainBackCallbackEnabledState()` (name is flexible but should be
clear and localized) that computes the conditions above and calls
`openDefaultPageBackPressedCallback.setEnabled(...)`.
- Add a method or inline logic to check whether the drawer is
open/closed (prefer using existing `isDrawerOpen()` if suitable;
otherwise use `drawerLayout.isDrawerOpen(navDrawer)` guard).
- Keep the existing `finish()` branch in `handleOnBackPressed()` as a
conservative fallback (should not be reached when callback disabled, but
avoids behavior regressions if an edge case fails to update the enabled
state).

Where to call update
- Ensure correct state immediately after navigation/intent handling:
- Call update at the end of `handleNavIntent()` (MainActivity) after all
navigation actions (loadFragment/loadChildFragment/open drawer/open
player etc.) have been applied.
- Ensure correct state when fragment back stack changes:
- Register
`getSupportFragmentManager().addOnBackStackChangedListener(...)` once
(in `onCreate()` after fragment manager is available) to call the update
method.
- Also call update after explicit navigation helpers if necessary for
correctness (keep minimal and avoid redundant calls unless needed):
  - After `loadFragment(String, Bundle)`
  - After `loadFeedFragmentById(...)`
  - After `loadFragment(Fragment)`
  - After `loadChildFragment(...)`
(It’s acceptable if some calls are redundant; correctness is more
important.)
- Optionally (recommended for correctness) add a DrawerListener to
update enabled state on drawer open/close; but keep changes small and
avoid behavior regressions.

Acceptance criteria
- When MainActivity is at root state where back should exit,
`openDefaultPageBackPressedCallback.isEnabled()` must be false.
- Back gesture from that state closes the activity via system default
(predictive back enabled on Android 13+ when supported), not via app
callback interception.
- In all other states, existing behavior remains unchanged:
  - back stack pops as before
  - navigating to default page works as before
  - opening drawer works as before
- bottom sheet back behavior continues to work (and remain independently
enabled/disabled)

Files likely involved
- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java

Testing notes
- Manual test scenarios:
1) Launch app to default page with no back stack: back should exit with
system predictive back.
2) Navigate to a child fragment (back stack > 0): back pops back stack.
  3) Navigate to non-default tab/page: back returns to default page.
4) With drawer mode (bottom navigation disabled) and preference
backButtonOpensDrawer enabled: back opens drawer when closed; when
already at default/root and drawer closed, ensure callback is enabled;
once drawer is open, ensure back closes drawer via DrawerLayout default
or existing behavior without breaking.
5) Bottom sheet expanded: back collapses bottom sheet; then when at
root, next back exits.


The following is the prior conversation context from the user's chat
exploration (may be truncated):

User: Figure out how to support predictive back button handling for the
very last back button press that closes the app

Assistant: To support **predictive back** for the *very last back action
that closes the app*...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

*This pull request was created from Copilot chat.*
>

<!-- START COPILOT CODING AGENT TIPS -->
---

 Quickly spin up Copilot coding agent tasks from anywhere on your macOS
or Windows machine with [Raycast](https://gh.io/cca-raycast-docs).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
2026-03-22 10:28:27 +01:00
47f921065b Add mobile data streaming confirmation to Media3PlaybackService (#8317)
### Description

Implements mobile data streaming confirmation (allow once/always
notification) in Media3PlaybackService, matching the legacy
PlaybackService behavior. Includes pre-Oreo PendingIntent compatibility,
stale notification cleanup on new media load, and a streaming guard for
queue auto-advance.

Fixes #8301 

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests

---------

Co-authored-by: ByteHamster <info@bytehamster.com>
2026-03-18 21:55:11 +01:00
0847435f5e Bump version to 3.11.1 2026-03-17 00:28:46 +01:00
7c27f12b79 Fix some NPEs reported through Google Play (#8349)
### Description

Fix some NPEs reported through Google Play

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-03-17 00:27:50 +01:00
88ee76cfcf Move favorites to a dedicated screen (#8339)
### Description

Favorites were only reachable via a hidden filter on the Episodes
screen. This adds FavoritesFragment as a proper navigation destination,
mirrors the pattern of PlaybackHistoryFragment, and removes the
now-redundant star quick-filter button from the Episodes toolbar.

Closes #8253

### Checklist
- [ ] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [ ] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [ ] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [ ] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [ ] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests

<!-- START COPILOT CODING AGENT TIPS -->
---

📱 Kick off Copilot coding agent tasks wherever you are with [GitHub
Mobile](https://gh.io/cca-mobile-docs), available on iOS and Android.

---------

Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
2026-03-15 16:07:44 +00:00
476ead8adc Add missing multi-select episode actions (#8340)
### Description

Multi-select episodes was missing four actions available in
single-select: add to favorites, remove from favorites,, share, and
reset playback position. Additionally, the two favorites actions must be
mutually exclusive in the speed dial — only one should appear depending
on the collective state of selected items.

### Checklist
- [ ] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [ ] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [ ] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [ ] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [ ] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/AntennaPod/AntennaPod/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
2026-03-15 16:50:56 +01:00
1204ee7877 Add deprecation warning when disabling bottom navigation (#8341)
### Description

When users toggle off bottom navigation in settings, show a dialog
warning them that side navigation is deprecated and will be removed in a
future release.

- **`strings.xml`**: Added `bottom_navigation_deprecation_warning`
explaining: volunteer-maintained project, too much overhead to support
both nav styles, side nav incompatible with Android gesture navigation
(hence the default change), and advice to disable auto-updates if they
depend on it.
- **`UserInterfacePreferencesFragment`**: Intercepts the
`PREF_BOTTOM_NAVIGATION` toggle-off action to show a
`MaterialAlertDialogBuilder` confirmation dialog before applying the
change.

### Checklist
- [ ] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [ ] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [ ] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [ ] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [ ] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [ ] If it is a core feature, I have added automated tests

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `checkstyle.org`
> - Triggering command:
`/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/tools/linux64/java/bin/java
/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/tools/linux64/java/bin/java
-jar
/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/xml/tools/xml-extractor.jar
--fileList=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/working/files-to-index16081311042563234079.list
--sourceArchiveDir=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/src
--outputDir=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/trap/java`
(dns block)
> - `www.puppycrawl.com`
> - Triggering command:
`/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/tools/linux64/java/bin/java
/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/tools/linux64/java/bin/java
-jar
/opt/hostedtoolcache/CodeQL/2.24.3/x64/codeql/xml/tools/xml-extractor.jar
--fileList=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/working/files-to-index16081311042563234079.list
--sourceArchiveDir=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/src
--outputDir=/tmp/codeql-scratch-a65ebc7048e6a0db/dbs/java/trap/java`
(dns block)
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/AntennaPod/AntennaPod/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Send tasks to Copilot coding agent from
[Slack](https://gh.io/cca-slack-docs) and
[Teams](https://gh.io/cca-teams-docs) to turn conversations into code.
Copilot posts an update in your thread when it's finished.

---------

Co-authored-by: Hans-Peter Lehmann <ByteHamster@users.noreply.github.com>
2026-03-15 15:06:59 +00:00
9a274a35b9 Switch away from JitPack (#8329)
### Description

JitPack was down a couple of times recently. We can easily switch the
last remaining dependencies to mvn central.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-03-10 00:32:34 +01:00
57e8ce6fbb Remove fyydlin and connect directly (#8327)
### Description

Remove fyydlin and connect directly. JitPack is not reliable. Because
the fyydlin library is so simple, we don't really need it and can just
connect directly to fyyd. This makes it possible to remove one library
hosted on JitPack. Also taking the chance to make `PodcastSearchResult`
independent from actual providers, so it becomes more of an
interface/model class.

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
2026-03-08 17:13:03 +01:00