diff --git a/apps/web/src/app/services/parental-lock-enforcement.service.spec.ts b/apps/web/src/app/services/parental-lock-enforcement.service.spec.ts index 8f23f8812..bbe593eba 100644 --- a/apps/web/src/app/services/parental-lock-enforcement.service.spec.ts +++ b/apps/web/src/app/services/parental-lock-enforcement.service.spec.ts @@ -369,3 +369,45 @@ describe('ParentalLockEnforcementService apply serialization', () => { expect(xtreamStore.setSelectedCategory).toHaveBeenCalledTimes(1); }); }); + +describe('ParentalLockEnforcementService busy probe', () => { + it('counts playing audio (the radio player) as activity', () => { + let probe: (() => boolean) | undefined; + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + providers: [ + { + provide: ParentalLockService, + useValue: { + version: signal(0), + registerBusyProbe: (fn: () => boolean) => (probe = fn), + }, + }, + { provide: XtreamStore, useValue: {} }, + { provide: StalkerStore, useValue: {} }, + { provide: Router, useValue: { url: '/' } }, + { + provide: Store, + useValue: { selectSignal: () => signal(null) }, + }, + { + provide: PlaybackKeepAwakeService, + useValue: { hasPlayingVideo: () => false }, + }, + ], + }); + const service = TestBed.inject(ParentalLockEnforcementService); + TestBed.runInInjectionContext(() => service.start()); + expect(probe?.()).toBe(false); + + const audio = document.createElement('audio'); + Object.defineProperty(audio, 'paused', { value: false }); + Object.defineProperty(audio, 'ended', { value: false }); + document.body.appendChild(audio); + try { + expect(probe?.()).toBe(true); + } finally { + audio.remove(); + } + }); +}); diff --git a/apps/web/src/app/services/parental-lock-enforcement.service.ts b/apps/web/src/app/services/parental-lock-enforcement.service.ts index 9574a00fc..e355926ad 100644 --- a/apps/web/src/app/services/parental-lock-enforcement.service.ts +++ b/apps/web/src/app/services/parental-lock-enforcement.service.ts @@ -41,8 +41,11 @@ export class ParentalLockEnforcementService { return; } this.started = true; - this.parentalLock.registerBusyProbe(() => - this.keepAwake.hasPlayingVideo() + // Playback counts as activity: video through the keep-awake + // tracker, and audio (the radio player) read directly, since the + // keep-awake service deliberately ignores