@@ -1,10 +1,22 @@
|
|||||||
package com.edde746.plezy
|
package com.edde746.plezy
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
import com.edde746.plezy.mpv.MpvPlayerPlugin
|
import com.edde746.plezy.mpv.MpvPlayerPlugin
|
||||||
|
|
||||||
class MainActivity : FlutterActivity() {
|
class MainActivity : FlutterActivity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
// Disable Android's default focus highlight ring that appears when using
|
||||||
|
// D-pad navigation so the Flutter UI can render its own focus state.
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
window.decorView.defaultFocusHighlightEnabled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||||
super.configureFlutterEngine(flutterEngine)
|
super.configureFlutterEngine(flutterEngine)
|
||||||
flutterEngine.plugins.add(MpvPlayerPlugin())
|
flutterEngine.plugins.add(MpvPlayerPlugin())
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ class SettingsScreen extends StatefulWidget {
|
|||||||
|
|
||||||
class _SettingsScreenState extends State<SettingsScreen> {
|
class _SettingsScreenState extends State<SettingsScreen> {
|
||||||
late settings.SettingsService _settingsService;
|
late settings.SettingsService _settingsService;
|
||||||
late KeyboardShortcutsService _keyboardService;
|
KeyboardShortcutsService? _keyboardService;
|
||||||
|
late final bool _keyboardShortcutsSupported =
|
||||||
|
KeyboardShortcutsService.isPlatformSupported();
|
||||||
bool _isLoading = true;
|
bool _isLoading = true;
|
||||||
|
|
||||||
bool _enableDebugLogging = false;
|
bool _enableDebugLogging = false;
|
||||||
@@ -59,7 +61,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
|
|
||||||
Future<void> _loadSettings() async {
|
Future<void> _loadSettings() async {
|
||||||
_settingsService = await settings.SettingsService.getInstance();
|
_settingsService = await settings.SettingsService.getInstance();
|
||||||
_keyboardService = await KeyboardShortcutsService.getInstance();
|
if (_keyboardShortcutsSupported) {
|
||||||
|
_keyboardService = await KeyboardShortcutsService.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_enableDebugLogging = _settingsService.getEnableDebugLogging();
|
_enableDebugLogging = _settingsService.getEnableDebugLogging();
|
||||||
@@ -99,8 +103,10 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
_buildDownloadsSection(),
|
_buildDownloadsSection(),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
_buildKeyboardShortcutsSection(),
|
if (_keyboardShortcutsSupported) ...[
|
||||||
const SizedBox(height: 24),
|
_buildKeyboardShortcutsSection(),
|
||||||
|
const SizedBox(height: 24),
|
||||||
|
],
|
||||||
_buildAdvancedSection(),
|
_buildAdvancedSection(),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
if (UpdateService.isUpdateCheckEnabled) ...[
|
if (UpdateService.isUpdateCheckEnabled) ...[
|
||||||
@@ -531,6 +537,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildKeyboardShortcutsSection() {
|
Widget _buildKeyboardShortcutsSection() {
|
||||||
|
if (_keyboardService == null) return const SizedBox.shrink();
|
||||||
|
|
||||||
return Card(
|
return Card(
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
@@ -854,7 +862,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
_settingsService.setSeekTimeSmall(parsed);
|
_settingsService.setSeekTimeSmall(parsed);
|
||||||
});
|
});
|
||||||
// Reload keyboard shortcuts service to use new settings
|
// Reload keyboard shortcuts service to use new settings
|
||||||
await _keyboardService.refreshFromStorage();
|
await _keyboardService?.refreshFromStorage();
|
||||||
if (dialogContext.mounted) {
|
if (dialogContext.mounted) {
|
||||||
Navigator.pop(dialogContext);
|
Navigator.pop(dialogContext);
|
||||||
}
|
}
|
||||||
@@ -922,7 +930,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
_settingsService.setSeekTimeLarge(parsed);
|
_settingsService.setSeekTimeLarge(parsed);
|
||||||
});
|
});
|
||||||
// Reload keyboard shortcuts service to use new settings
|
// Reload keyboard shortcuts service to use new settings
|
||||||
await _keyboardService.refreshFromStorage();
|
await _keyboardService?.refreshFromStorage();
|
||||||
if (dialogContext.mounted) {
|
if (dialogContext.mounted) {
|
||||||
Navigator.pop(dialogContext);
|
Navigator.pop(dialogContext);
|
||||||
}
|
}
|
||||||
@@ -1073,11 +1081,13 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _showKeyboardShortcutsDialog() {
|
void _showKeyboardShortcutsDialog() {
|
||||||
|
if (_keyboardService == null) return;
|
||||||
|
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) =>
|
builder: (context) =>
|
||||||
_KeyboardShortcutsScreen(keyboardService: _keyboardService),
|
_KeyboardShortcutsScreen(keyboardService: _keyboardService!),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1131,7 +1141,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
final navigator = Navigator.of(context);
|
final navigator = Navigator.of(context);
|
||||||
final messenger = ScaffoldMessenger.of(context);
|
final messenger = ScaffoldMessenger.of(context);
|
||||||
await _settingsService.resetAllSettings();
|
await _settingsService.resetAllSettings();
|
||||||
await _keyboardService.resetToDefaults();
|
await _keyboardService?.resetToDefaults();
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
navigator.pop();
|
navigator.pop();
|
||||||
messenger.showSnackBar(
|
messenger.showSnackBar(
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:hotkey_manager/hotkey_manager.dart';
|
import 'package:hotkey_manager/hotkey_manager.dart';
|
||||||
@@ -24,6 +26,11 @@ class KeyboardShortcutsService {
|
|||||||
return _instance!;
|
return _instance!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Keyboard shortcut customization is only supported on desktop platforms.
|
||||||
|
static bool isPlatformSupported() {
|
||||||
|
return Platform.isWindows || Platform.isLinux || Platform.isMacOS;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _init() async {
|
Future<void> _init() async {
|
||||||
_settingsService = await SettingsService.getInstance();
|
_settingsService = await SettingsService.getInstance();
|
||||||
// Ensure settings service is fully initialized before loading data
|
// Ensure settings service is fully initialized before loading data
|
||||||
|
|||||||
Reference in New Issue
Block a user