PCIOS-712: Inconsistent episode count display on Android and iOS#4462
PCIOS-712: Inconsistent episode count display on Android and iOS#4462pocketcasts wants to merge 8 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
Updates the iOS Up Next queue header to include an episode count alongside the remaining time, aiming to match the Android presentation.
Changes:
- Updates
UpNextViewController.updateTimeRemainingLabel()to format the header differently for 0/1/plural Up Next episode counts. - Adds two new localized string keys for the Up Next header (singular/plural forms).
- Regenerates/updates SwiftGen
L10naccessors to expose the new strings.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| podcasts/UpNextViewController.swift | Builds the new “episode count + time” header text using upNextCount() and existing time formatting. |
| podcasts/Strings+Generated.swift | Adds SwiftGen accessors for the new Up Next header localization keys. |
| podcasts/en.lproj/Localizable.strings | Introduces the new English localization entries for the Up Next header (singular/plural). |
| /* Up Next header showing episode count and time remaining for a single episode. '%1$@' is a placeholder for the total time remaining. */ | ||
| "queue_up_next_header_one_episode" = "1 episode · %1$@"; | ||
|
|
||
| /* Up Next header showing episode count and time remaining for multiple episodes. '%1$@' is a placeholder for the episode count. '%2$@' is a placeholder for the total time remaining. */ | ||
| "queue_up_next_header_plural" = "%1$@ episodes · %2$@"; |
There was a problem hiding this comment.
Not sure if this is needed here since we use GlotPress, where en.lproj/Localizable.strings is the source of truth. Feature PRs add keys to en.lproj only (and Strings+Generated.swift); the other 14 .lproj files are populated automatically by the release bot ("Update localization files with up-to-date values from GlotPress"). MANUALLY_MAINTAINED_STRINGS_FILES in the Fastfile lists only en.lproj, and no CI check enforces locale parity. Hand-adding English copies to the other locales would be overwritten and could clobber translations already in GlotPress, so the English fallback until the next sync is expected/by design.
Pass the count through .localized() instead of string-interpolating it, so digits and grouping respect the user's locale, matching the project's established plural call sites (e.g. episodeCountPluralFormat). Addresses Copilot review feedback.
SergioEstevao
left a comment
There was a problem hiding this comment.
While it's now showing the total of episodes too, I think there is still some inconsistencies comparing to Android:
-
When there is only the current playing episode
- iOS shows
10m total time remaining - Android shows
10m left
- iOS shows
-
When there is one episode on the upnext quee
- iOS shows
1 episode 10m - Android shows
1 episode 10m left
- iOS shows
-
When there is mored episode on the upnext quee
- iOS shows
2 episodes 10m - Android shows
2 episodes 10m left
- iOS shows
Do we want iOS to use left as Android?
I would say we make iOS follow the same wording as Android, as per the feedback we had from the design team. I will add the changes |
Addresses PR review feedback on PCIOS-712: iOS now matches Android's
wording in all three Up Next header states —
0 queued -> 10m left
1 queued -> 1 episode · 10m left
2+ queued -> 2 episodes · 10m left
Adds a dedicated queue_up_next_header_time_left ("%1$@ left") for the
empty-queue case and removes the now-unused queue_total_time_remaining.
Keeps the middle-dot separator per design.
|
Updated in 015bd0b to match Android's wording — all three states now end with
The empty-queue case now uses a new |
|
One more thing I noticed while making this consistent with Android, @SergioEstevao: the now-playing row inside Up Next still reads Do you want me to align that row to |
|
@copilot review again |
…up-next-episode-count
Reviewed the latest changes. The header wording now matches the agreed Android phrasing ( |
|
Version |
SergioEstevao
left a comment
There was a problem hiding this comment.
Looking good, if you want this on 8.14 please retarget the branch, or if you are happy with 8.15 then you need to change the changelog.
Regarding the top cell, if we are aligning with Android it makes sense to update that string too
…up-next-episode-count # Conflicts: # podcasts/Strings+Generated.swift
|
Thank you so much, @SergioEstevao Changes have been made |
|
Thanks @SergioEstevao! Addressed both:
|
Resolves PCIOS-712
Summary
Updates the Up Next queue header on iOS to display the episode count alongside the time remaining, matching Android's existing behavior (e.g. "5 episodes · 3h 58m left").
Changes
queue_up_next_header_one_episode("1 episode · %1$@") andqueue_up_next_header_plural("%1$@ episodes · %2$@")Strings+Generated.swiftupdateTimeRemainingLabel()inUpNextViewController.swiftto include the episode count fromupNextCount()(which already excludes the currently-playing episode), with a fallback to the existing time-only format when the queue is emptyVerification
make formatran cleanCarPlaySceneDelegate+Convert.swift(unrelatedCPPlaybackConfigurationscope error) — not caused by these changesConfidence
HIGH — The change is a straightforward label format update. The episode count (
upNextCount()) and time calculation already existed and are well-tested. The new strings follow established patterns in the codebase (playlist_detail_description). The existing notification observers already triggerupdateTimeRemainingLabel()on queue and playback changes.Known Issues
CarPlaySceneDelegate+Convert.swiftreferencingCPPlaybackConfiguration— this error exists on trunk and is unrelated to this PR.This PR was created autonomously by linear-solver.
Triage complexity: simple | Linear issue