mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
[Android] Turn page by volume keys
This commit is contained in:
@@ -23,6 +23,7 @@ import 'package:venera/pages/settings/settings_page.dart';
|
||||
import 'package:venera/utils/file_type.dart';
|
||||
import 'package:venera/utils/io.dart';
|
||||
import 'package:venera/utils/translations.dart';
|
||||
import 'package:venera/utils/volume.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
part 'scaffold.dart';
|
||||
@@ -97,6 +98,8 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
||||
|
||||
var focusNode = FocusNode();
|
||||
|
||||
VolumeListener? volumeListener;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
page = widget.initialPage ?? 1;
|
||||
@@ -107,6 +110,9 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
||||
updateHistory();
|
||||
});
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
|
||||
if(appdata.settings['enableTurnPageByVolumeKey']) {
|
||||
handleVolumeEvent();
|
||||
}
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@@ -115,6 +121,7 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
||||
autoPageTurningTimer?.cancel();
|
||||
focusNode.dispose();
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||
stopVolumeEvent();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -152,6 +159,31 @@ class _ReaderState extends State<Reader> with _ReaderLocation, _ReaderWindow {
|
||||
HistoryManager().addHistory(history!);
|
||||
}
|
||||
}
|
||||
|
||||
void handleVolumeEvent() {
|
||||
if(!App.isAndroid) {
|
||||
// Currently only support Android
|
||||
return;
|
||||
}
|
||||
if(volumeListener != null) {
|
||||
volumeListener?.cancel();
|
||||
}
|
||||
volumeListener = VolumeListener(
|
||||
onDown: () {
|
||||
toNextPage();
|
||||
},
|
||||
onUp: () {
|
||||
toPrevPage();
|
||||
},
|
||||
)..listen();
|
||||
}
|
||||
|
||||
void stopVolumeEvent() {
|
||||
if(volumeListener != null) {
|
||||
volumeListener?.cancel();
|
||||
volumeListener = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract mixin class _ReaderLocation {
|
||||
|
@@ -470,6 +470,13 @@ class _ReaderScaffoldState extends State<_ReaderScaffold> {
|
||||
context.reader.mode = ReaderMode.fromKey(appdata.settings[key]);
|
||||
App.rootContext.pop();
|
||||
}
|
||||
if (key == "enableTurnPageByVolumeKey") {
|
||||
if(appdata.settings[key]) {
|
||||
context.reader.handleVolumeEvent();
|
||||
} else {
|
||||
context.reader.stopVolumeEvent();
|
||||
}
|
||||
}
|
||||
context.reader.update();
|
||||
},
|
||||
),
|
||||
|
Reference in New Issue
Block a user