fix: Small fix to lock-screen timeOut

This commit is contained in:
PartyDonut 2025-10-17 15:00:02 +02:00
parent 318f32c7e6
commit e902e2034a
2 changed files with 30 additions and 16 deletions

View file

@ -49,6 +49,8 @@ bool get _isDesktop {
].contains(defaultTargetPlatform); ].contains(defaultTargetPlatform);
} }
bool nativeActivityStarted = false;
Future<Map<String, dynamic>> loadConfig() async { Future<Map<String, dynamic>> loadConfig() async {
final configString = await rootBundle.loadString('config/config.json'); final configString = await rootBundle.loadString('config/config.json');
return jsonDecode(configString); return jsonDecode(configString);
@ -118,28 +120,36 @@ class Main extends ConsumerStatefulWidget with WindowListener {
} }
class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBindingObserver { class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBindingObserver {
DateTime dateTime = DateTime.now(); DateTime _lastPaused = DateTime.now();
bool hidden = false; bool _hidden = false;
late final autoRouter = AutoRouter(ref: ref); late final autoRouter = AutoRouter(ref: ref);
@override @override
void didChangeAppLifecycleState(AppLifecycleState state) async { void didChangeAppLifecycleState(AppLifecycleState state) async {
if (ref.read(lockScreenActiveProvider) || final ignoreLifeCycle = ref.read(lockScreenActiveProvider) ||
ref.read(userProvider) == null || ref.read(userProvider) == null ||
ref.read(videoPlayerProvider).lastState?.playing == true) { ref.read(videoPlayerProvider).lastState?.playing == true ||
dateTime = DateTime.now(); nativeActivityStarted;
if (ignoreLifeCycle) {
_lastPaused = DateTime.now();
_hidden = false;
return; return;
} }
switch (state) { switch (state) {
case AppLifecycleState.resumed: case AppLifecycleState.resumed:
enableTimeOut(); if (_hidden) {
break; enableTimeOut();
case AppLifecycleState.hidden: _hidden = false;
}
break; break;
case AppLifecycleState.paused: case AppLifecycleState.paused:
hidden = true; _hidden = true;
dateTime = DateTime.now(); _lastPaused = DateTime.now();
break; break;
default: default:
break; break;
} }
@ -147,14 +157,12 @@ class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBinding
void enableTimeOut() async { void enableTimeOut() async {
final timeOut = ref.read(clientSettingsProvider).timeOut; final timeOut = ref.read(clientSettingsProvider).timeOut;
if (timeOut == null) return; 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) { if (difference > timeOut && ref.read(userProvider)?.authMethod != Authentication.autoLogin) {
hidden = false; _lastPaused = DateTime.now();
dateTime = DateTime.now();
// Stop playback if the user was still watching a video // Stop playback if the user was still watching a video
await ref.read(videoPlayerProvider).pause(); await ref.read(videoPlayerProvider).pause();

View file

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fladder/main.dart';
import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/media_streams_model.dart';
import 'package:fladder/models/playback/direct_playback_model.dart'; import 'package:fladder/models/playback/direct_playback_model.dart';
import 'package:fladder/models/playback/offline_playback_model.dart'; import 'package:fladder/models/playback/offline_playback_model.dart';
@ -17,6 +18,7 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback {
@override @override
Future<void> dispose() async { Future<void> dispose() async {
nativeActivityStarted = false;
return NativeVideoActivity().disposeActivity(); return NativeVideoActivity().disposeActivity();
} }
@ -32,7 +34,10 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback {
Future<void> loadVideo(String url, bool play) async => player.open(url, play); Future<void> loadVideo(String url, bool play) async => player.open(url, play);
@override @override
Future<void> open(BuildContext newContext) async => NativeVideoActivity().launchActivity(); Future<void> open(BuildContext newContext) async {
nativeActivityStarted = true;
NativeVideoActivity().launchActivity();
}
@override @override
Future<void> pause() { Future<void> pause() {
@ -72,6 +77,7 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback {
@override @override
Future<void> stop() async { Future<void> stop() async {
nativeActivityStarted = false;
return player.stop(); return player.stop();
} }