153 Commits

Author SHA1 Message Date
5de8d4b73f Merge branch 'master' into develop 2026-03-22 19:43:30 +01:00
292320ffee Make sure to close all streams and cursors, enable spotbugs (#8357)
### Description

Make sure to close all streams and cursors, enable spotbugs

### 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-22 19:39:14 +01:00
a6899a43b2 Reduce number of database queries (#8358)
### Description

Reduce number of database queries. Instead of loading queue and
favorites lists in separate queries, let sqlite do the join

### 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-22 10:57:38 +01:00
b07b9d249b Fix "Too many inflation attempts" crash from SQLite lock contention (#8346)
### Description

Remove the explicit disableWriteAheadLogging() call in
PodDBAdapter.openDb(). Without WAL, SQLite allows only one connection at
a time, forcing all threads to serialize on a single lock. When multiple
UI fragments (ExternalPlayerFragment, CoverFragment,
ItemDescriptionFragment, PlaybackHistoryFragment) simultaneously query
the database on separate RxJava IO threads, the resulting lock
contention on the same monitor exhausts the ART monitor inflation limit,
causing a fatal crash (monitor.cc:1125).

Fixes #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
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:13:40 +01:00
17a9bc1b47 Flush WAL and verify temp copy before database export (#8347)
### Description

We don't have WAL enabled right now, but before we can, we have to make
sure that imports/exports handle WAL properly by flushing the file
before exporting. Also, copy the file to a temporary location and fail
if it is invalid to ensure that what we are exporting is actually a
proper backup.

Contributes to #8338
Closes: #5099

### 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 (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

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

📍 Connect Copilot coding agent with [Jira](https://gh.io/cca-jira-docs),
[Azure Boards](https://gh.io/cca-azure-boards-docs) or
[Linear](https://gh.io/cca-linear-docs) to delegate work to Copilot in
one click without leaving your project management tool.

---------

Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
Co-authored-by: pc-bert <88080348+pc-bert@users.noreply.github.com>
2026-03-16 23:29:28 +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
95d3f37d25 Build media item stub on main thread and full item on background thread (#8321)
### Description

Build media item stub in main thread and full item in background thread.
We later plan to add more things to load to the main item creation code,
which should not run on the main thread.
Contributes to #8261

### 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 08:38:59 +01:00
c51a0710a8 Move Statistics screen from Subscriptions menu to navigation drawer (#8313)
### Description

Make the Statistics screen a top-level navigation destination in the
drawer and bottom navigation, instead of being hidden behind the
Subscriptions overflow menu. This makes it easier to discover and
reflects that statistics aren't just about subscriptions.

Fixes #8310 

### 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-02-26 20:24:57 +01:00
5ee4012160 Re-implement delete after playback (#8299)
### Description

Re-implement delete after playback in the new playback service. To avoid
a race condition (that we already had in the old playback service), we
have to replace `setMedia` in `deleteFeedMediaSynchronous` with a new
`setMediaDownloadInformation`. Otherwise, we might reset the position
but then it gets overwritten again by deletion setting all attributes.

Closes #8285

### 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-02-21 17:46:08 +01:00
1562188546 Remove Android 5 support (#8276)
### Description

Remove Android 5 support. For supporting Chromecast playback via media3,
we need to upgrade the media3 library. This library no longer supports
Android 5, so we need to bump our minimum version as well. Only 0.13% of
our Google Play users are still on this ancient Android version released
in 2014. Dropping support seems okay now, especially considering that no
one should expose such an old device to the internet anymore. The app
will continue to work on Android 5 but will not receive updates anymore.

### 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
- [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-02-14 22:06:08 +01:00
e709128b57 Fix multi select actions to match single select action (#8233) 2026-01-19 22:19:51 +01:00
3941bac55a Remember last sleep timer value per type (#8175) 2025-12-26 09:18:20 +01:00
8dfb0c2a8e Enable bottom navigation for users who never touched the setting (#8158)
* Enable bottom navigation for users who never opened the settings

* Make tests more independent of navigation setting
2025-12-14 16:26:21 +01:00
4f4fd516d9 Move 'Untagged' chip to end and center selected tag in subscription view (#8141) 2025-12-11 22:45:45 +01:00
eb4cc10c45 Add default sort for episode list (#7972) 2025-12-05 22:19:27 +01:00
41edd00b39 Crash debug version when doing I/O on main thread (#8064) 2025-11-02 08:33:00 +01:00
27d9d0ca9b Merge branch 'master' into develop 2025-10-31 21:18:08 +01:00
0debbc3973 Add episode count sleep timers (#7841) 2025-10-30 22:51:03 +01:00
77c813f62c Faster unit tests (#8043) 2025-10-14 07:43:10 +02:00
23d862185d Add more explicit feature to archive feeds (#8022) 2025-10-11 13:48:08 +02:00
198c151a22 Migrate update interval from hours to minutes (#8005)
This is a bit of a hack so that we have "1" available for "global" (instead of 1 hour) because we cannot change sql default values.
2025-09-22 22:45:16 +02:00
07e72f8b9d Ignore 'show in main list' for subscriptions screen (#8001)
This no longer makes sense with tags always at the top,
users can always create their own main list.

After we remove the side navigation, we can remove the tag setting.
2025-09-21 15:41:33 +02:00
af187ca551 Show all tags on subscriptions screen, even if filtered (#7994) 2025-09-16 20:19:17 +02:00
720aba1602 Move remaining subscription settings to subscription screen (#7981) 2025-09-12 21:27:23 +02:00
0772b4998d Fix and tune feed item duplicate guesser (#7979) 2025-09-12 21:00:56 +02:00
9db9dc7732 Run download log cleaner regularly (#7975) 2025-09-07 22:34:40 +02:00
e8a18d4887 Only load the download log entries we actually need (#7974) 2025-09-07 21:39:26 +02:00
ad94f2f647 Tags above subscriptions screen (#7954) 2025-08-31 11:35:04 +02:00
9e53b1ecec Run update worker hourly (#7943)
Only refresh the feeds that have not been refreshed since their last interval.
This solves the problem where force-stopping the app during a long feed refresh
would start the refresh all over instead of just taking the feeds that were not
refreshed already.
2025-08-23 20:52:11 +02:00
c8cd0de157 Handle release stats for multi-per-day podcasts (#7755) 2025-08-20 20:23:55 +02:00
e539479f2c Upgrade dependencies (#7936) 2025-08-18 20:24:58 +02:00
e32dbaeb31 Communicate to user if db backup files could not be deleted (#7872) 2025-07-17 16:13:38 +02:00
c2f7dabc8b Add incompletely played episodes to playback history (#7815) 2025-05-27 22:52:43 +02:00
b196f348bf Fix Echo "check out again" recommendation logic (#7803) 2025-05-08 22:54:21 +02:00
af81e44a0c Write database exports without seeking export file (#7760)
This can lead to problems with WebDAV because the file does not exist yet.
2025-04-13 22:21:16 +02:00
5459368e51 Add move to top/bottom multi select action in queue (#7696) 2025-04-09 20:19:35 +02:00
84907b114f Merge branch 'master' into develop 2025-04-08 22:54:15 +02:00
7a79fdef9c Add more real-world release date tests (#7747) 2025-04-08 22:36:05 +02:00
4a9b37f6f8 Fix new episodes action for local feeds (#7745) 2025-04-07 23:25:52 +02:00
5b2648393a Ignore new episodes action if autodownload is enabled (#7728) 2025-03-31 21:13:33 +02:00
f89e54a99d Fix removing items from favorites (#7720)
We check the feed id and the item id when removing from favorites.
However, the item ids are unique, so there is no need to check the feed id.
Actually, I have no idea why it was even added there in the first place.

Now that we have users who somehow ended up with a database where
they cannot un-favorite some of the items, removed the check.

Also make sure to clear the favorites table when deleting a feed.
2025-03-29 15:46:54 +01:00
ba56f5c76e Show social comment icon on playing screen (#7127) 2025-02-21 22:34:31 +01:00
dd82ec143f Reduce log spam during feed update (#7667) 2025-02-21 21:51:50 +01:00
3ed5b0bfa4 Add option to automatically download queue (#7627)
We already added the queue to the auto-download candidates.
Now that auto-download was rewritten to not be a "master switch",
the code is called even if auto-download is turned off for all subscriptions.
This lead to queued episodes being downloaded for users who had auto-download disabled.

Convert the feature to an explicit setting to avoid behavior changes for users.
Also, this implements a setting to auto-download the queue,
which users have requested because they did not know that AntennaPod already does this.
Finally, it should solve user confusion where they automatically add episodes to the queue
but set the auto-download filter to ignore specific episodes.
2025-02-02 19:28:23 +01:00
e4ac872b74 Convert autodownloads from master switch to per-podcast setting (#7458) 2025-01-18 12:31:44 +01:00
476a9d2a7e Add option to have Play/Pause button in Downloads (#7569) 2025-01-17 21:33:26 +01:00
35241b64fd Fix non-subscribed feed cleaner removing feed even when episode is queued (#7572) 2024-12-27 10:55:57 +01:00
ae58f21218 Remove notification permission nag (#7489) 2024-11-10 11:46:10 +01:00
047a31b799 Change default drawer order to better fit bottom navigation (#7488) 2024-11-10 11:02:25 +01:00
4a92a5e019 Make sync service interface more standard (#7479) 2024-10-30 21:30:29 +01:00