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);
}
bool nativeActivityStarted = false;
Future<Map<String, dynamic>> 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<Main> 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<Main> 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();

View file

@ -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<void> dispose() async {
nativeActivityStarted = false;
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);
@override
Future<void> open(BuildContext newContext) async => NativeVideoActivity().launchActivity();
Future<void> open(BuildContext newContext) async {
nativeActivityStarted = true;
NativeVideoActivity().launchActivity();
}
@override
Future<void> pause() {
@ -72,6 +77,7 @@ class NativePlayer extends BasePlayer implements VideoPlayerListenerCallback {
@override
Future<void> stop() async {
nativeActivityStarted = false;
return player.stop();
}