Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
5e1df35
ci: add debug APK build workflow
Trendyzima Aug 24, 2026
743d323
feat(studio): add professional broadcast studio dashboard
Trendyzima Aug 24, 2026
2519c6e
feat(studio): add broadcast dashboard layout
Trendyzima Aug 24, 2026
e713ff1
feat(studio): register production studio activity
Trendyzima Aug 24, 2026
9a07fd4
Build professional FadCam studio dashboard
Trendyzima Aug 24, 2026
28460cb
[Studio] Connect dashboard to real recording, streaming, graphics, au…
Trendyzima Aug 24, 2026
1feaeba
[Studio] Add production controls for graphics, audio routing, replay,…
Trendyzima Aug 24, 2026
621becd
[Studio] Verify graphics/program sync and route remote control throug…
Trendyzima Aug 24, 2026
aeb1fdd
[Studio] Keep program output stable until an explicit CUT/FADE/MIX tr…
Trendyzima Aug 24, 2026
d4266fd
[CI] Trigger final Studio APK verification
Trendyzima Aug 24, 2026
70441af
[CI] Add Studio verification note
Trendyzima Aug 24, 2026
5f7d69c
[Cleanup] Remove temporary APK verification marker
Trendyzima Aug 24, 2026
a292b94
[Cleanup] Remove temporary CI verification marker
Trendyzima Aug 24, 2026
22fc684
Add Studio RTMP destination configuration
Trendyzima Aug 24, 2026
db30597
Protect Studio RTMP stream keys with Android Keystore
Trendyzima Aug 24, 2026
1bb28a8
Add real Studio RTMP/RTMPS output service
Trendyzima Aug 24, 2026
a1185fe
Bridge Studio graphics into the existing GL encoder watermark path
Trendyzima Aug 24, 2026
86c74ce
Wire Studio graphics into encoded recording and add RTMP output controls
Trendyzima Aug 24, 2026
d9c7c2d
Add professional RTMP destination controls to Studio dashboard
Trendyzima Aug 24, 2026
b02e802
Register Studio RTMP foreground service for debug builds
Trendyzima Aug 24, 2026
8ffb2ef
[Security] Minimize sensitive permissions in debug Studio APK
Trendyzima Aug 24, 2026
5bca56f
[Verify] Mark Play Protect hardened Studio build for verification
Trendyzima Aug 24, 2026
09fc3cf
[Verify] Trigger hardened Studio build
Trendyzima Aug 24, 2026
695a26f
[Verify] Trigger hardened Studio build
Trendyzima Aug 24, 2026
e875b3c
[Verify] Document hardened Studio build
Trendyzima Aug 24, 2026
48b16b0
[Verify] CI note for hardened Studio APK
Trendyzima Aug 24, 2026
2ed47e0
[CI] Create verified FadCam Studio APK workflow
Trendyzima Aug 24, 2026
f47fcf9
[CI Step 1] Isolate APK build from flaky unit-test gate
Trendyzima Aug 24, 2026
28acd37
[CI Step 1] Keep unit-test gate and correct debug package verification
Trendyzima Aug 24, 2026
2bd0970
Fix stale recording toggle unit test
Trendyzima Aug 24, 2026
f158c15
Prevent CI verification runs from cancelling each other
Trendyzima Aug 24, 2026
bca8683
Document CI verification lesson
Trendyzima Aug 24, 2026
4713b3b
Add Studio verification checklist
Trendyzima Aug 24, 2026
68f5b42
Overhaul CI verification and publish verified Studio APK
Trendyzima Aug 24, 2026
3989e58
Add verified Studio APK download to README
Trendyzima Aug 24, 2026
e8d0b42
Fix CI test scope for Studio debug variant
Trendyzima Aug 24, 2026
0b98753
Fix Studio RTMP notification icon compile error
Trendyzima Aug 24, 2026
805b4d8
Make lint audit legacy-safe while blocking Studio lint errors
Trendyzima Aug 24, 2026
01c5629
[Release] Document verified Studio APK publication gate
Trendyzima Aug 24, 2026
36063ce
[CI] Trigger clean master Studio verification after PR cleanup
Trendyzima Aug 24, 2026
7fd5c1d
[Verify] Merge fully passing Studio verification
Trendyzima Aug 24, 2026
93d28ed
Build Studio as non-debuggable release for Play Protect compatibility
Trendyzima Aug 24, 2026
9b9c78b
Switch Studio delivery from debug APK to non-debuggable release APK
Trendyzima Aug 24, 2026
d4b97f9
Harden Studio release manifest against Play Protect sensitive-access …
Trendyzima Aug 24, 2026
12db60b
Update README to verified Studio release APK
Trendyzima Aug 24, 2026
42c8602
Fix Studio CI cancellation and remove debug-keystore fallback
Trendyzima Aug 24, 2026
9cd0833
Remove debug signing fallback from Studio release build
Trendyzima Aug 24, 2026
24da4c5
Remove unnecessary system overlay permission from Studio release
Trendyzima Aug 24, 2026
d7369f6
Document hardened CI signing and Play Protect verification
Trendyzima Aug 24, 2026
4b5514b
Remove citation markup from README
Trendyzima Aug 24, 2026
e011bc5
Strengthen final Studio APK manifest verification
Trendyzima Aug 24, 2026
4f204db
Harden Studio release CI diagnostics and action runtime
Trendyzima Aug 24, 2026
370030d
Harden Studio CI verification, signing and release publication
Trendyzima Aug 24, 2026
c5c90f3
Track CI recovery verification gates
Trendyzima Aug 24, 2026
1522569
Record CI recovery lessons
Trendyzima Aug 24, 2026
46ef596
Make verified APK artifact available even if release publication fails
Trendyzima Aug 24, 2026
9cfc534
Prevent stale CI runs from racing the rolling Studio release
Trendyzima Aug 24, 2026
900ca2a
Record final CI race and artifact safeguards
Trendyzima Aug 24, 2026
a830a97
fix: disable Gradle VFS watcher for stable CI builds
Trendyzima Aug 24, 2026
f2142fa
fix: make Gradle CI task verification accurate and watcher-safe
Trendyzima Aug 24, 2026
c303577
ci: make Studio release verification single-pass and race-safe
Trendyzima Aug 24, 2026
f6778b8
docs: replace broken APK link with verified release and CI links
Trendyzima Aug 24, 2026
f6a5856
ci: harden Studio release build diagnostics and Gradle stability
Trendyzima Aug 24, 2026
35bee71
build: increase Gradle release-build memory and keep VFS watcher disa…
Trendyzima Aug 24, 2026
411c009
fix: make release lint audit report without aborting Gradle
Trendyzima Aug 24, 2026
f2ad505
docs: point README directly to verified Studio APK asset
Trendyzima Aug 24, 2026
8da5007
fix: restore NanoHTTPD dependency for streaming server
Trendyzima Aug 24, 2026
eb06dc9
fix: declare Studio RTMP foreground service type
Trendyzima Aug 24, 2026
3195b34
fix: scope Wear password lint suppression to Studio UI
Trendyzima Aug 24, 2026
94512db
fix: remove Wear OS password-input lint violation without exposing st…
Trendyzima Aug 24, 2026
fd97bb4
chore: remove obsolete Studio Wear lint suppression
Trendyzima Aug 24, 2026
f706701
feat: unlock Pro features and add FadDrive sync
Trendyzima Aug 25, 2026
f614f07
ci: add clean TV production release verification
Trendyzima Aug 25, 2026
f06d27d
revert: remove accidentally added TV verification workflow from master
Trendyzima Aug 25, 2026
155a0c3
feat: implement production tools and mini-app features
Trendyzima Aug 25, 2026
e6d6f3c
feat: add scheduled production recording alarm receiver
Trendyzima Aug 25, 2026
8540694
chore: add verified production-tools wiring patcher
Trendyzima Aug 25, 2026
4fb88f5
ci: apply production tools wiring safely
Trendyzima Aug 25, 2026
90664ff
ci: make production tools wiring workflow self-cleaning
Trendyzima Aug 25, 2026
0e1a6b4
feat: wire production tools and remove coming soon states
github-actions[bot] Aug 25, 2026
acd25b5
chore: remove one-shot production tools wiring
github-actions[bot] Aug 25, 2026
43eb44e
fix: correct production tools Java compile errors
Trendyzima Aug 25, 2026
e2485bf
feat: implement and verify all former Coming Soon production tools
Trendyzima Aug 25, 2026
6c3843f
feat: add local SD and USB recording destinations
Trendyzima Aug 25, 2026
a4df8c6
docs: document verified local SD and USB recording storage
Trendyzima Aug 25, 2026
3fef107
fix: report accurate removable storage capacity
Trendyzima Aug 25, 2026
d67478b
fix: reject invalid persisted storage stats cleanly
Trendyzima Aug 25, 2026
7ea2b26
fix: publish checksum beside verified APK
Trendyzima Aug 25, 2026
2001edc
feat: add expandable TV production control room v1
Trendyzima Aug 25, 2026
3efa1ca
feat: expand TV production room with streaming review and social dest…
Trendyzima Aug 25, 2026
54d3852
docs: update README for verified TV streaming release
Trendyzima Aug 25, 2026
49bd6fa
feat: add hidden producer broadcast cockpit drawer
Trendyzima Aug 25, 2026
4735028
docs: document producer cockpit and verified APK delivery
Trendyzima Aug 25, 2026
c709a6f
docs: refresh verified Studio APK delivery section
Trendyzima Aug 25, 2026
d6939f3
docs: pin README to verified Studio APK provenance
Trendyzima Aug 25, 2026
881dfe6
docs: record APK delivery verification lesson
Trendyzima Aug 25, 2026
e3d8e53
feat: add recording social publishing hub
Trendyzima Aug 25, 2026
a9cbffc
feat: wire voice ducking mixer into duet studio
Trendyzima Aug 25, 2026
ce36181
chore: trigger verified voice ducking wiring
Trendyzima Aug 25, 2026
a75b640
chore: add verified voice ducking wiring workflow
Trendyzima Aug 25, 2026
a2e6bbd
chore: trigger voice ducking verification workflow
Trendyzima Aug 25, 2026
f7a7bdd
fix: make voice ducking verification workflow trigger-safe
Trendyzima Aug 25, 2026
c383e44
ci: verify and wire production voice ducking telemetry
Trendyzima Aug 25, 2026
bd88bb0
fix: include production audio mixer implementation files
Trendyzima Aug 25, 2026
ec0943f
feat: wire voice ducking into recorder mic telemetry
github-actions[bot] Aug 25, 2026
85cdf77
fix: separate preview program and camera slot state
Trendyzima Aug 25, 2026
51dbc0f
feat: add producer camera slot model
Trendyzima Aug 25, 2026
b282bba
feat: persist producer camera slots and invite tokens
Trendyzima Aug 25, 2026
1068c75
fix: make production room a live program switcher
Trendyzima Aug 25, 2026
ca94169
fix: wire program monitor and remote camera sources
Trendyzima Aug 25, 2026
d578a08
test: verify production preview program and camera slot behavior
Trendyzima Aug 25, 2026
9ee9b92
fix: add Media3 HLS playback for remote camera feeds
Trendyzima Aug 25, 2026
b00f990
fix: harden duet voice ducking against background noise
Trendyzima Aug 25, 2026
90ba8dc
docs: update README to verified voice-ducking APK
Trendyzima Aug 25, 2026
46dc101
Fix TV production control room: real Program monitor, switching, came…
Trendyzima Aug 25, 2026
28958f7
Fix guest-camera verification environment
Trendyzima Aug 25, 2026
fe95a7f
ci: add verified Studio APK publishing workflow
Trendyzima Aug 25, 2026
47bb19a
fix(ci): clone patched Media3 before Studio APK build
Trendyzima Aug 25, 2026
95a9020
fix(ci): force-add verified APK despite gitignore
Trendyzima Aug 25, 2026
01fa928
fix(ci): use lightweight Media3 verification before APK publish
Trendyzima Aug 25, 2026
9351883
ci: cancel stale APK publish runs when a newer verified build starts
Trendyzima Aug 25, 2026
6840811
feat: harden and polish producer cockpit controls
Trendyzima Aug 26, 2026
81ca8d0
feat: model guest camera invite lifecycle
Trendyzima Aug 26, 2026
449a255
feat: create one-use FadCam guest camera links
Trendyzima Aug 26, 2026
79bfaaa
feat: add FadCam guest camera invite receiver
Trendyzima Aug 26, 2026
9dea299
feat: route FadCam guest invite links into camera publisher
Trendyzima Aug 26, 2026
ef673ad
fix: make guest links variant-safe and non-rotating
Trendyzima Aug 26, 2026
7eab585
feat: add in-app WebRTC guest receiver for six camera slots
Trendyzima Aug 26, 2026
629ad23
feat: make camera invites, video source and program switching operati…
Trendyzima Aug 26, 2026
0e72648
fix: attach real program canvas and polish source controls
Trendyzima Aug 26, 2026
1b75b72
fix: restrict guest WebView camera permissions to VDO.Ninja
Trendyzima Aug 26, 2026
4a25e3d
fix: dock guest receiver into the real program monitor
Trendyzima Aug 26, 2026
6b523b6
chore: remove unused guest activity
Trendyzima Aug 26, 2026
26f2451
fix: repair guest camera publisher compile errors
Trendyzima Aug 26, 2026
58cd9ca
chore: add one-time control room compile repair workflow
Trendyzima Aug 26, 2026
5856460
fix: repair control room monitor label type
Trendyzima Aug 26, 2026
dbe7769
chore: remove temporary compile repair workflow
Trendyzima Aug 26, 2026
af0d958
fix: clone patched Media3 before Studio build
Trendyzima Aug 26, 2026
3956c31
fix: make Preview to Program promotion switcher-correct
Trendyzima Aug 26, 2026
4da4a97
feat: add functional production playback mix bus
Trendyzima Aug 26, 2026
19dd690
feat: route media ducking through production mix bus
Trendyzima Aug 26, 2026
be3799d
feat: wire cockpit faders into production mix bus
Trendyzima Aug 26, 2026
d562963
test: update switcher promotion invariant
Trendyzima Aug 26, 2026
9ff1460
fix: publish verified APK as GitHub release asset instead of oversize…
Trendyzima Aug 26, 2026
b1e1419
fix: harden guest camera invite lifecycle
Trendyzima Aug 26, 2026
3744b79
fix: preserve shared guest invite token
Trendyzima Aug 26, 2026
a8a728a
fix: make voice-ducking maintenance workflow manual
Trendyzima Aug 26, 2026
8e67564
chore: add verified online TV delivery patcher
Trendyzima Aug 26, 2026
8fb3617
ci: verify online TV relay delivery before commit
Trendyzima Aug 26, 2026
49c07e9
ci: trigger verified online TV delivery gate
Trendyzima Aug 26, 2026
e7cf353
fix: provide isolated CI signing for online TV verification build
Trendyzima Aug 26, 2026
22d87a0
ci: use sparse Media3 clone for reliable verification
Trendyzima Aug 26, 2026
acb346a
ci: correct sparse Media3 file checkout
Trendyzima Aug 26, 2026
9302ef0
fix: guarantee acknowledged online TV relay delivery
github-actions[bot] Aug 26, 2026
5c8624d
docs: update README with verified Studio APK
Trendyzima Aug 26, 2026
e34c4aa
fix: integrate reliable HLS media delivery
Trendyzima Aug 26, 2026
c25891e
Fix Scenes crash by isolating control-room preview
Trendyzima Aug 26, 2026
8949cb4
docs: define conditional duet production modes
Trendyzima Aug 26, 2026
889e565
Merge PR #31: fix TV Production Scenes crash and isolate preview
Trendyzima Aug 26, 2026
4b64117
feat: make production state authoritative and publish program changes
Trendyzima Aug 26, 2026
6d87214
feat: persist cockpit transition and mixer settings
Trendyzima Aug 26, 2026
8fa435c
feat: add real-time production mix listeners
Trendyzima Aug 26, 2026
f30c767
fix: publish only completed program promotions
Trendyzima Aug 26, 2026
8590b68
ci: add clean final production build verification
Trendyzima Aug 26, 2026
60990d5
fix: keep CUT transition duration truly instant
Trendyzima Aug 26, 2026
629a111
ci: rerun final production verification after switcher fix
Trendyzima Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions .github/workflows/apply-production-tools.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Apply and verify production tools

on:
pull_request:
branches: [master]
types: [opened, synchronize, reopened]

permissions:
contents: write

jobs:
patch-verify:
if: github.event.pull_request.head.ref == 'feat/unlimited-recording-sd-storage'
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: feat/unlimited-recording-sd-storage
- uses: actions/setup-java@v5
with:
java-version: '17'
distribution: temurin
cache: gradle
- name: Clone patched Media3
run: git clone --depth 1 https://github.com/anonfaded/media3-patched.git /tmp/media3-patched
- name: Patch existing UI and manifest
shell: bash
run: |
python3 - <<'PY'
from pathlib import Path

settings = Path('app/src/main/java/com/fadcam/ui/SettingsHomeFragment.java')
s = settings.read_text()
anchor = ' manageBadgeVisibility(root);\n'
call = ' com.fadcam.ui.ProductionFeatureUnlocker.install(root);\n'
if call not in s:
if anchor not in s: raise SystemExit('SettingsHomeFragment anchor not found')
settings.write_text(s.replace(anchor, anchor + call, 1))

home = Path('app/src/main/java/com/fadcam/ui/HomeFragment.java')
s = home.read_text()
old = 'getString(R.string.recording_time_left)'
new = 'getString(R.string.recording_storage_time_left)'
if old in s and new not in s: home.write_text(s.replace(old, new, 1))

strings = Path('app/src/main/res/values/strings.xml')
s = strings.read_text()
entry = ' <string name="recording_storage_time_left">Storage time available</string>\n'
if 'name="recording_storage_time_left"' not in s:
strings.write_text(s.replace('</resources>', entry + '</resources>', 1))

hub = Path('app/src/main/java/com/fadcam/ui/ProductionFeatureHubActivity.java')
s = hub.read_text()
if 'private LinearLayout contentRoot;' not in s:
s = s.replace(' private String currentFeature;\n', ' private String currentFeature;\n private LinearLayout contentRoot;\n', 1)
s = s.replace(' LinearLayout root = new LinearLayout(this);\n root.setOrientation(LinearLayout.VERTICAL);', ' LinearLayout root = new LinearLayout(this);\n contentRoot = root;\n root.setOrientation(LinearLayout.VERTICAL);', 1)
old = ' private void addTransient(View v) { ((LinearLayout)((ScrollView)findViewById(android.R.id.content)).getChildAt(0)).addView(v, lp(0, -2)); }'
new = ' private void addTransient(View v) { if (contentRoot != null) contentRoot.addView(v, lp(0, -2)); }'
if old in s: s = s.replace(old, new, 1)
hub.write_text(s)

manifest = Path('app/src/main/AndroidManifest.xml')
s = manifest.read_text()
if 'android:name=".ui.ProductionFeatureHubActivity"' not in s:
s = s.replace(' </application>', ' <activity android:name=".ui.ProductionFeatureHubActivity" android:theme="@style/Base.Theme.FadCam" android:exported="false" />\n <receiver android:name=".ui.ScheduledRecordingReceiver" android:exported="false" />\n </application>', 1)
manifest.write_text(s)

print('Production tool source patch: PASS')
PY
- name: Verify source invariants
run: |
set -euo pipefail
grep -q 'ProductionFeatureUnlocker.install(root)' app/src/main/java/com/fadcam/ui/SettingsHomeFragment.java
grep -q 'recording_storage_time_left' app/src/main/java/com/fadcam/ui/HomeFragment.java
grep -q 'name="recording_storage_time_left"' app/src/main/res/values/strings.xml
grep -q 'ProductionFeatureHubActivity' app/src/main/AndroidManifest.xml
grep -q 'ScheduledRecordingReceiver' app/src/main/AndroidManifest.xml
grep -q 'com.journeyapps.barcodescanner.BarcodeEncoder' app/src/main/java/com/fadcam/ui/ProductionFeatureHubActivity.java
grep -q 'Constants.INTENT_ACTION_START_RECORDING' app/src/main/java/com/fadcam/ui/ScheduledRecordingReceiver.java
echo 'Source invariants: PASS'
- name: Build and unit-test the exact release variant
shell: bash
run: |
chmod +x ./gradlew
./gradlew :app:testDefaultReleaseUnitTest :app:assembleDefaultRelease --stacktrace --no-daemon --no-watch-fs --no-configuration-cache --max-workers=2
- name: Commit only verified source changes
shell: bash
run: |
set -euo pipefail
git config user.name 'Trendyzima'
git config user.email 'momanyitrendy@gmail.com'
git add app/src/main/java/com/fadcam/ui/SettingsHomeFragment.java \
app/src/main/java/com/fadcam/ui/HomeFragment.java \
app/src/main/java/com/fadcam/ui/ProductionFeatureHubActivity.java \
app/src/main/java/com/fadcam/ui/ProductionFeatureUnlocker.java \
app/src/main/java/com/fadcam/ui/ScheduledRecordingReceiver.java \
app/src/main/res/values/strings.xml \
app/src/main/AndroidManifest.xml
if git diff --cached --quiet; then
echo 'No uncommitted patch remains; verification is already applied.'
exit 0
fi
git commit -m 'feat: wire production tools into settings'
git push origin HEAD:feat/unlimited-recording-sd-storage
Loading