From e902e2034a0ac3fedf3253d366d5712cde225837 Mon Sep 17 00:00:00 2001 From: PartyDonut Date: Fri, 17 Oct 2025 15:00:02 +0200 Subject: [PATCH] fix: Small fix to lock-screen timeOut --- lib/main.dart | 38 +++++++++++++++---------- lib/wrappers/players/native_player.dart | 8 +++++- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 5ab6285..35ac577 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -49,6 +49,8 @@ bool get _isDesktop { ].contains(defaultTargetPlatform); } +bool nativeActivityStarted = false; + Future> loadConfig() async { final configString = await rootBundle.loadString('config/config.json'); return jsonDecode(configString); @@ -118,28 +120,36 @@ class Main extends ConsumerStatefulWidget with WindowListener { } class _MainState extends ConsumerState
with WindowListener, WidgetsBindingObserver { - DateTime dateTime = DateTime.now(); - bool hidden = false; + DateTime _lastPaused = DateTime.now(); + bool _hidden = false; late final autoRouter = AutoRouter(ref: ref); @override void didChangeAppLifecycleState(AppLifecycleState state) async { - if (ref.read(lockScreenActiveProvider) || + final ignoreLifeCycle = ref.read(lockScreenActiveProvider) || ref.read(userProvider) == null || - ref.read(videoPlayerProvider).lastState?.playing == true) { - dateTime = DateTime.now(); + ref.read(videoPlayerProvider).lastState?.playing == true || + nativeActivityStarted; + + if (ignoreLifeCycle) { + _lastPaused = DateTime.now(); + _hidden = false; return; } + switch (state) { case AppLifecycleState.resumed: - enableTimeOut(); - break; - case AppLifecycleState.hidden: + if (_hidden) { + enableTimeOut(); + _hidden = false; + } break; + case AppLifecycleState.paused: - hidden = true; - dateTime = DateTime.now(); + _hidden = true; + _lastPaused = DateTime.now(); break; + default: break; } @@ -147,14 +157,12 @@ class _MainState extends ConsumerState
with WindowListener, WidgetsBinding void enableTimeOut() async { final timeOut = ref.read(clientSettingsProvider).timeOut; - if (timeOut == null) return; - final difference = DateTime.now().difference(dateTime).abs(); + final difference = DateTime.now().difference(_lastPaused); - if (difference > timeOut && ref.read(userProvider)?.authMethod != Authentication.autoLogin && hidden) { - hidden = false; - dateTime = DateTime.now(); + if (difference > timeOut && ref.read(userProvider)?.authMethod != Authentication.autoLogin) { + _lastPaused = DateTime.now(); // Stop playback if the user was still watching a video await ref.read(videoPlayerProvider).pause(); diff --git a/lib/wrappers/players/native_player.dart b/lib/wrappers/players/native_player.dart index cec48da..669a86e 100644 --- a/lib/wrappers/players/native_player.dart +++ b/lib/wrappers/players/native_player.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:fladder/main.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/playback/direct_playback_model.dart'; import 'package:fladder/models/playback/offline_playback_model.dart'; @@ -17,6 +18,7 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback { @override Future dispose() async { + nativeActivityStarted = false; return NativeVideoActivity().disposeActivity(); } @@ -32,7 +34,10 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback { Future loadVideo(String url, bool play) async => player.open(url, play); @override - Future open(BuildContext newContext) async => NativeVideoActivity().launchActivity(); + Future open(BuildContext newContext) async { + nativeActivityStarted = true; + NativeVideoActivity().launchActivity(); + } @override Future pause() { @@ -72,6 +77,7 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback { @override Future stop() async { + nativeActivityStarted = false; return player.stop(); }