Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
1f35cf0
feat(playback): add independent subtitle text opacity and a gray colo…
Joloxx9 Sep 30, 2026
f0cfae4
ci: add trusted reusable Linux workflow (#425)
Quick104 Sep 30, 2026
e24d9e1
ci: route member builds to private Linux runners (#426)
Quick104 Sep 30, 2026
41f5d40
feat(detail): show the same external ratings on every title page (#423)
Quick104 Oct 1, 2026
354058b
feat(requests): make requests look and behave like the rest of the ap…
Quick104 Oct 2, 2026
1d834f5
feat(downloads): save poster and series artwork with downloads for of…
Rhainland Oct 2, 2026
d7d8580
feat(tv): add Release Date library sort on Android TV (#433)
Rhainland Oct 2, 2026
9d54e3c
feat(detail): mark a whole season watched on Android phone and TV (#437)
Rhainland Oct 2, 2026
6f1a366
fix(downloads): show why a series or episode download didn't start (#…
rangoDJ Oct 2, 2026
9518b26
fix(overlays): honor a profile's poster badge switch on phone and TV …
Rhainland Oct 2, 2026
fa0f83a
feat(settings): let profiles turn off title art on Android phone and …
Rhainland Oct 2, 2026
1e903dd
feat(settings): lay out Android and Android TV Settings like the Appl…
Quick104 Oct 2, 2026
74fc3e9
feat(auth): sign in with the server's identity provider and the new T…
Quick104 Oct 2, 2026
be56fd5
ci: run CI on GitHub-hosted runners (#453)
Quick104 Oct 2, 2026
b26ddda
feat(auth): sign in with network identity on phone and TV (#454)
Quick104 Oct 3, 2026
32488e8
fix(tv): play phone-launched titles with sequenced playback (#380)
Quick104 Oct 3, 2026
844ff74
feat(onboarding): redesign the first-run flow on Android phone and TV…
Quick104 Oct 3, 2026
7ddec04
fix(downloads): refresh saved subtitles the server retimed (#444)
Quick104 Oct 4, 2026
e21a0fa
feat(playback): play embedded MKV text subtitles from the stream (#464)
tomislav Oct 5, 2026
a8d7aea
fix(tv): offer the full subtitle-language list in search and AI trans…
tomislav Oct 5, 2026
b0e3fc3
fix(playback): stop claiming m2ts/mts direct play (#452)
Rhainland Oct 5, 2026
dc8f0b5
fix(player): reload a subtitle the server retimed during playback (#443)
Quick104 Oct 5, 2026
98b8cea
feat(subtitles): show sync status and sync/reset actions for stored s…
Quick104 Oct 5, 2026
a6611c3
fix(cast): keep the TV reachable after a TLS 1.2 client connects (#379)
Quick104 Oct 5, 2026
ca53cb0
fix(cast): speak the Remote Control protocol the way Apple does (#381)
Quick104 Oct 5, 2026
bb8d9cd
fix(tv): end the remote-playback identity after the player's session …
Quick104 Oct 5, 2026
6e61709
feat(watch-party): bring Watch Party to phone and TV behind an Experi…
Quick104 Oct 6, 2026
535ddda
fix(tv): start and stop the cast receiver as sign-in changes (#482)
Quick104 Oct 6, 2026
81e9206
feat(tv-settings): opt-in True Black Bars for grey HDR letterbox bars…
Quick104 Oct 6, 2026
b42ad84
fix(playback): never block playback on an earlier unfinished session …
Quick104 Oct 6, 2026
d71824d
fix(tv): apply quality changes from the phone remote (#485)
Quick104 Oct 6, 2026
2a50183
refactor(playback): remove dead playback code (#484)
Quick104 Oct 6, 2026
39eaf8e
feat(playback): shuffle libraries, series, seasons, and collections o…
Rhainland Oct 6, 2026
9343dde
docs(contributing): require evidence for user-visible changes (#490)
Quick104 Oct 6, 2026
975df0d
fix(settings): say connecting Tailscale keeps the Silo password (#492)
Quick104 Oct 7, 2026
3f8c867
docs(pr): offer the evidence site as an optional place for PR evidenc…
Quick104 Oct 7, 2026
95d20a9
feat(player): show the server quality menu on phone and align the TV …
Quick104 Oct 7, 2026
69c6f2f
fix(libraries): re-check the library list when the Libraries tab resu…
Quick104 Oct 7, 2026
b89b538
fix(profiles): manage household profiles as the primary profile (#493)
Rhainland Oct 7, 2026
b6a4a9a
docs: ask for issues instead of unsolicited pull requests (#504)
Quick104 Oct 7, 2026
27f30c3
docs(issues): add bug report and feature request forms (#505)
Quick104 Oct 7, 2026
8389e5c
feat(ui): restyle the player, menus and dialogs on phone and TV (#502)
Quick104 Oct 7, 2026
1574897
fix(tv): close the TV's own playback before a phone takes over (#503)
Quick104 Oct 7, 2026
8b0f374
test: keep shuffle countdown on one scheduler
Quick104 Oct 7, 2026
6808ea8
test: serialize library shrink fixtures on the test scheduler
Quick104 Oct 7, 2026
bbbb430
fix(settings): flush settings before a phone profile switch and match…
Rhainland Oct 7, 2026
7f8c7e1
test: use test scheduler for library recovery fixture
Quick104 Oct 7, 2026
b6f081b
test: scope TV startup ownership barrier
Quick104 Oct 7, 2026
7ccc5db
ci: cache Android build outputs while rerunning source checks
Quick104 Oct 7, 2026
4f19bc0
ci: keep cache baseline runs read only
Quick104 Oct 7, 2026
dcdb918
test: prove Android source checks execute with warm caches
Quick104 Oct 7, 2026
d9e4a9b
ci: report executed tests and explicit cache policy
Quick104 Oct 7, 2026
d2a2bc4
ci: count only the requested debug test profile
Quick104 Oct 7, 2026
7cb1fd2
ci(android): route prose changes and enforce validation results
Quick104 Oct 7, 2026
0ba9233
ci: overlap Android APK preparation with Play
Quick104 Oct 7, 2026
2ed1882
ci: parallelize Android unit projects within two workers
Quick104 Oct 7, 2026
dbaec2b
ci: prepare Play bundles alongside release validation
Quick104 Oct 7, 2026
f34f360
fix(tv): show mixed libraries in movie and series tabs (#441)
RXWatcher Oct 7, 2026
7fa78b4
ci: integrate verified Android CI improvements
Quick104 Oct 8, 2026
bfa6188
Merge pull request #513 from Silo-Server/ci/android-play-bundle-overlap
Quick104 Oct 8, 2026
3651536
feat(tv): ask who's watching at launch with a Profile Selection setti…
amokster88 Oct 8, 2026
cad4d0b
fix(libraries): leave hidden libraries out of navigation on phone and…
Quick104 Oct 8, 2026
ab86a85
chore(issues): apply the feature-request label from the feature reque…
Quick104 Oct 8, 2026
88e0700
fix(subtitles): prefer embedded tracks over external sidecars (#529)
Quick104 Oct 8, 2026
def0532
fix(subtitles): bound how far a PGS sidecar reads ahead (#528)
Quick104 Oct 8, 2026
cfac75b
fix(tv): keep library browse sort and filters across app restarts (#468)
Rhainland Oct 9, 2026
1b9e181
feat(artwork): show a faint brand glow with a type mark for missing a…
Quick104 Oct 9, 2026
021c5ea
fix(playback): decode DTS with FFmpeg when the HDMI sink has no DTS (…
d3v1l1989 Oct 9, 2026
67c58fc
fix(tv): keep a mixed library's Movies and Series browse filters apar…
RXWatcher Oct 9, 2026
7401e55
fix(mobile): separate movies and series in mixed libraries (#447)
RXWatcher Oct 9, 2026
c0172bf
feat(cast): start phone-to-TV playback without a handoff when the TV …
amokster88 Oct 9, 2026
05b3f91
fix(tv): show the real Silo app icon in setup step 1 (#533)
Quick104 Oct 9, 2026
1e956c3
fix(settings): let a device go back to the profile's playback setting…
Rhainland Oct 10, 2026
af99d87
fix(collections): open library-tab collection items without a library…
d3v1l1989 Oct 10, 2026
7f5e058
fix(player): consume and reconcile file-specific markers (#527)
Rhainland Oct 10, 2026
74490e9
fix(libraries): tell an empty library apart from filters that match n…
amokster88 Oct 10, 2026
e535ddc
fix(profiles): recover from access changes without failed loads (#440)
Rhainland Oct 10, 2026
95a6f21
feat(settings): hide spoilers for unwatched episodes, per profile (#427)
Quick104 Oct 10, 2026
97f6773
feat(tv): add artwork and an On Deck row to the Up Next overlay (#541)
im85288 Oct 10, 2026
747efff
feat(metadata): mark AI translations and translate episode lists and …
Rhainland Oct 11, 2026
d2c31a6
Sync upstream Silo (silo-android) into Prairie Android
JonahMMay Oct 11, 2026
3b26e43
Fix sync resolution: restore upstream additions dropped by initial me…
JonahMMay Oct 11, 2026
78f554c
feat(tv): ask who's watching on a new Android TV and offer to remembe…
Rhainland Oct 11, 2026
c1a761b
Remove duplicate silo-path files; restore phone settings row (Quick C…
JonahMMay Oct 11, 2026
538aa09
feat(profiles): ask who's watching at launch on Android phones and ta…
Rhainland Oct 11, 2026
7784600
Re-resolve using cumulative upstream diff set (merge-commit changes w…
JonahMMay Oct 11, 2026
3cf7f3c
Union-resolve remaining overlap files (keep both upstream and Prairie…
JonahMMay Oct 11, 2026
1457c4e
Hand-resolve workflow YAMLs: keep upstream ci delegation plus Prairie…
JonahMMay Oct 11, 2026
c1b1968
Adopt upstream Fastfile refactor (build/publish play bundles); keep S…
JonahMMay Oct 11, 2026
59c0749
Combine Prairie format cascade with upstream failed-flag semantics in…
JonahMMay Oct 11, 2026
354b247
Adopt upstream Fastfile and play-bundle-lanes fixture pair (rebranded)
JonahMMay Oct 11, 2026
9d9c182
Move failed/failedArtwork defs outside model initializer scope
JonahMMay Oct 11, 2026
f5f1946
Keep Prairie-only cast button block in PrairieCastButton (union artif…
JonahMMay Oct 11, 2026
0779c9b
Adopt upstream versions for source files whose union merge broke (reb…
JonahMMay Oct 11, 2026
dc3bcfc
Apply pending sync fixes
JonahMMay Oct 11, 2026
7fb9e06
Adopt upstream who's-watching features (#542 #543) rebranded; keep fo…
JonahMMay Oct 11, 2026
0279c6c
Merge upstream silo-android main (#542 #543) into sync branch; conten…
JonahMMay Oct 11, 2026
4c6f007
Add setHdrEnabled cast command (wire name set_hdr_enabled, not in kno…
JonahMMay Oct 11, 2026
a9ff917
Repair AndroidModule graph tail: restore picker/detail viewModel bloc…
JonahMMay Oct 11, 2026
0023a02
Repair PrairieMenuHeader modifier chain (earlier sync spliced setting…
JonahMMay Oct 11, 2026
e6c9134
Re-sync with corrected transform: merge3(main, transformed previous u…
JonahMMay Oct 12, 2026
10775bf
Restore Quick Connect title and Stats-for-nerds sheet title (invarian…
JonahMMay Oct 12, 2026
d38155e
Resolve TV player/shell T3 conflicts (deferred batch)
JonahMMay Oct 12, 2026
6a16b44
Fix own-repo silo-android refs to prairie-android (T3 over-protected …
JonahMMay Oct 12, 2026
009af51
Restore fork-only surface dropped by the re-merge (cast setHdrEnabled…
JonahMMay Oct 12, 2026
8ec4a57
Restore 48 fork-only files lost by the re-merge (Watch Together/Live …
JonahMMay Oct 12, 2026
6bc11d1
Place CLIENT_WATCH_TOGETHER_SURFACE_ENABLED after imports (top-level …
JonahMMay Oct 12, 2026
5a025e6
Restore pendingPlayback/pendingPlaybackCount/recoverPlayback and pend…
JonahMMay Oct 12, 2026
a71e29a
Restore pending StateFlow machinery in SequencedPlayback (fork playba…
JonahMMay Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
154 changes: 154 additions & 0 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
name: Bug report
description: Report something broken in the Android phone or TV app
title: "[bug] "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Report behavior you reproduced yourself. Keep what you observed separate from any theory about the cause. Redact credentials, tokens, personal data, server addresses, and private media details, and mark each redaction.

[Reporting a problem](https://prairieserver.org/docs/report-a-problem) explains where to find versions, stats, and diagnostics. Using Claude Code or Codex? The [Prairie troubleshooting skill](https://github.com/Prairie-Server/prairie-troubleshooting-skill) helps you collect the details and drafts this report, then has independent reviewers check it before you post. Problems that also happen in the web app usually come from the server and belong in [prairie-server](https://github.com/Prairie-Server/prairie-server/issues/new/choose). Problems in the Apple apps belong in [silo-apple](https://github.com/Prairie-Server/silo-apple/issues/new/choose).

Fabricated or AI-hallucinated reports are an immediate block. Read [CONTRIBUTING.md](https://github.com/Prairie-Server/prairie-android/blob/main/CONTRIBUTING.md) first.
- type: textarea
id: what-happened
attributes:
label: What happened
description: What did you actually observe? Include how often it happens (for example "3 of 3 attempts") and what still works, such as the same item in the web app.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to reproduce
description: Exact steps you ran, from a stated starting point.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: What should have happened, and where that expectation comes from.
validations:
required: true
- type: dropdown
id: device-type
attributes:
label: Device
multiple: true
options:
- "Phone"
- "Tablet"
- "Android TV / Google TV"
- "Other"
validations:
required: true
- type: input
id: device-details
attributes:
label: Device model and OS version
placeholder: NVIDIA SHIELD TV Pro, Android TV 11
validations:
required: true
- type: input
id: app-version
attributes:
label: App version and build
description: "**Settings > About > Version** on phones and tablets, or **Settings > Server > About > App Version** on TVs."
placeholder: "0.3.11 (5)"
validations:
required: true
- type: dropdown
id: install-source
attributes:
label: Installed from
options:
- "Google Play"
- "APK from GitHub Releases"
- "Built from source"
- "Other"
validations:
required: true
- type: input
id: server-version
attributes:
label: Prairie server version
description: The **Build** value at the bottom of the server's admin sidebar, for example `412 · 1a2b3c4d`. Ask your server admin if that is not you.
validations:
required: true
- type: textarea
id: playback-details
attributes:
label: Playback details
description: "For playback problems. On phones, **Playback settings** > **Playback stats**. On TVs, the **Stats** tab; the **Audio** tab shows whether audio is passed through or decoded to PCM. Include the delivery or route, container, video, audio, and dynamic range, plus the subtitle format and your audio setup (TV speakers, soundbar, receiver)."
- type: input
id: diagnostics-reference
attributes:
label: Diagnostics report reference
description: "In the app, open **Settings > Support > Diagnostics** (TV: **Settings > Diagnostics**), send to **Prairie Diagnostics**, and choose **Copy reference ID**. **Start Diagnostic Capture** records while you reproduce the problem."
placeholder: PRAIRIE-XXXXXXXX
- type: textarea
id: screenshots
attributes:
label: Screenshots or recording
description: Optional. Drag files here. Crop or blur server addresses, account names, and anything else private first.
- type: textarea
id: relevant-logs
attributes:
label: Relevant server logs
description: Optional. Raw lines from the server's **Admin > Logs**, filtered by playback session when you can.
render: shell
- type: textarea
id: technical-notes
attributes:
label: Technical notes
description: Optional suspected root cause or related observations. Keep this separate from what you observed above.
- type: input
id: ai-harness
attributes:
label: AI harness
description: Enter the exact agent harness or application, or "none".
validations:
required: true
- type: input
id: ai-tools
attributes:
label: AI tool(s)
description: Enter the exact tool name(s), or "none".
validations:
required: true
- type: input
id: ai-models
attributes:
label: AI model(s)
description: Enter the exact model identifier(s) reported by each tool, or "n/a".
validations:
required: true
- type: dropdown
id: ai-involvement
attributes:
label: AI involvement
options:
- No AI used
- Human-written, AI-reviewed
- AI-assisted
- Fully AI-generated, human verified
validations:
required: true
- type: textarea
id: ai-review
attributes:
label: Independent or adversarial review
description: Summarize the scope, method, findings, and resolutions, or enter "n/a" when this issue does not require independent or adversarial review.
validations:
required: true
- type: checkboxes
id: confirmations
attributes:
label: Confirmations
options:
- label: I searched open and recently closed issues and pull requests, and this is not already reported
required: true
- label: I reproduced this myself on the device and app version above
required: true
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
blank_issues_enabled: false
contact_links:
- name: Problem with the server or web app
url: https://github.com/Prairie-Server/prairie-server/issues/new/choose
about: Report it in prairie-server, especially if it also happens in the web app.
- name: Problem in the iOS, tvOS, or macOS app
url: https://github.com/Prairie-Server/silo-apple/issues/new/choose
about: Report it in silo-apple.
- name: Questions and setup help
url: https://discord.gg/prairieserver
about: Ask how to set up or use Prairie in the Prairie Discord.
- name: Report a security vulnerability
url: https://github.com/Prairie-Server/prairie-android/security/advisories/new
about: Report it privately. Do not open a public issue.
- name: How to report a problem
url: https://prairieserver.org/docs/report-a-problem
about: Where to find versions, player stats, and diagnostics, and what to include.
- name: Troubleshoot with an AI agent
url: https://github.com/Prairie-Server/prairie-troubleshooting-skill
about: Use Claude Code or Codex to collect the details and draft a reviewed report.
97 changes: 97 additions & 0 deletions .github/ISSUE_TEMPLATE/feature-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Feature request
description: Suggest an improvement to the Android phone or TV app
title: "[feature] "
labels: ["enhancement", "feature-request"]
body:
- type: markdown
attributes:
value: |
A request is most useful when it explains the problem you hit, with a concrete example, rather than prescribing a solution. One request per issue. Requests that need new server behavior belong in [prairie-server](https://github.com/Prairie-Server/prairie-server/issues/new/choose).

Prairie will not accept Live TV, OTA/DVB tuners, IPTV, EPG/XMLTV guides, DVR, or `.strm` remote-stream files; [Project non-goals](https://github.com/Prairie-Server/prairie-server/blob/main/docs/non-goals.md) explains why.
- type: textarea
id: problem
attributes:
label: Problem
description: What you are trying to do, and what stops you today. Give a concrete example.
validations:
required: true
- type: dropdown
id: device-type
attributes:
label: Device
multiple: true
options:
- "Phone"
- "Tablet"
- "Android TV / Google TV"
- "Other"
validations:
required: true
- type: textarea
id: current-workaround
attributes:
label: Current workaround
description: What you do instead today, or "none".
validations:
required: true
- type: textarea
id: proposed-behavior
attributes:
label: Proposed behavior
description: What you would like the app to do. Describe the outcome, not an implementation.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Other approaches, including other apps, and why they fall short.
- type: input
id: ai-harness
attributes:
label: AI harness
description: Enter the exact agent harness or application, or "none".
validations:
required: true
- type: input
id: ai-tools
attributes:
label: AI tool(s)
description: Enter the exact tool name(s), or "none".
validations:
required: true
- type: input
id: ai-models
attributes:
label: AI model(s)
description: Enter the exact model identifier(s) reported by each tool, or "n/a".
validations:
required: true
- type: dropdown
id: ai-involvement
attributes:
label: AI involvement
options:
- No AI used
- Human-written, AI-reviewed
- AI-assisted
- Fully AI-generated, human verified
validations:
required: true
- type: textarea
id: ai-review
attributes:
label: Independent or adversarial review
description: Summarize the scope, method, findings, and resolutions, or enter "n/a" when this issue does not require independent or adversarial review.
validations:
required: true
- type: checkboxes
id: confirmations
attributes:
label: Confirmations
options:
- label: I searched open and closed issues, including ones closed as not planned, and this is not already requested
required: true
- label: This is not one of Prairie's non-goals
required: true
71 changes: 71 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<!-- Follow CONTRIBUTING.md: plain summary first, no restated diff, no working history. -->

## Problem

Closes #NNN
<!-- One "Closes #NNN" line per issue this change fully resolves, so GitHub closes it
when the PR merges into main. Use "Closes Prairie-Server/<repo>#NNN" for an issue in
another repository. Delete the line when the PR only partly addresses an issue. -->
Related issue: #NNN
<!-- An epic, sub-issue, or partly addressed issue this work serves and that should
stay open, or "N/A". An open issue is not required — the Problem section below must
stand on its own. -->
Validation tasks: #NNN C1
<!-- Until 1.0 ships: v1.0 board tasks and cases this change unblocks or changes,
e.g. "unblocks #1144 C3; changes #1200 C1". Write "none" when no validation task is
affected. -->

A short plain-language summary: what goes wrong, who it affects, and what this
change does about it. Details come after.

## Approach

What changed and why this way, and which surfaces and repositories it affects.
Mention an alternative only if a reviewer would ask about it. Do not walk through
the diff.

## Validation

One line per kind of check and its result; do not list tests by name. Name required
checks that were not run or did not pass. Include a short output excerpt only when it
explains a failure.
<!-- Do not include private domains, hostnames, IPs, Tailscale or Report Shelf URLs,
local paths, credentials, personal data, or private media details. -->

## Evidence

| Before | After |
| ------ | ----- |
| | |

Surface and build:
<!-- Required when this change alters what a user sees: UI, or which items or what
item details a screen shows, such as search results, home sections, recommendations,
metadata, artwork, sorting, or filtering. See "Show visible changes" in
CONTRIBUTING.md. Use before-and-after screenshots of the same screen and data for each
affected surface, and a short recording when motion, timing, or focus matters. Crop or
blur private details in anything attached here. To keep captures private instead,
publish them to evidence.prairieserver.org, where only you and Prairie maintainers can open
them, and replace the table with
`Evidence: https://evidence.prairieserver.org/r/prairie-android/pr-<number>/`. When nothing
visible changes, replace this section's content with "Evidence: none, no user-visible
change". -->

## Risks

Migration, compatibility, security, operational, or release impact, or "None
identified".

## Checklist

- [ ] I read and can explain the complete diff.
- [ ] This pull request addresses one concern.
- [ ] The Evidence section shows every change a user can see, or says there is none.

## AI Disclosure

- Harness: exact agent harness or application, or "none"
- Tool(s): exact tool name(s), or "none"
- Model(s): exact model identifier(s) reported by each tool, or "n/a"
- Involvement: Fully AI-generated, human verified | AI-assisted | Human-written, AI-reviewed | No AI used
- Adversarial review: scope, method, findings, and resolutions, or "n/a" when this change does not require independent or adversarial review
8 changes: 8 additions & 0 deletions .github/evidence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Pull requests that change the phone app, the TV app, or the Android code they share
# need evidence before the Evidence check passes. The check reads this file at a pull
# request's base commit. Maintainers override it with the evidence-required and
# evidence-not-needed labels. See "Show visible changes" in CONTRIBUTING.md.
require:
- androidApp/src/androidMain/**
- androidTvApp/src/androidMain/**
- android-shared/src/androidMain/**
Loading
Loading