settings: keep screen on
This commit is contained in:
parent
56df75a7a6
commit
ca00678915
5 changed files with 60 additions and 3 deletions
22
lib/model/settings/screen_on.dart
Normal file
22
lib/model/settings/screen_on.dart
Normal file
|
@ -0,0 +1,22 @@
|
|||
import 'package:screen/screen.dart';
|
||||
|
||||
enum KeepScreenOn { never, fullscreenOnly, always }
|
||||
|
||||
extension ExtraKeepScreenOn on KeepScreenOn {
|
||||
String get name {
|
||||
switch (this) {
|
||||
case KeepScreenOn.never:
|
||||
return 'Never';
|
||||
case KeepScreenOn.fullscreenOnly:
|
||||
return 'Viewer page only';
|
||||
case KeepScreenOn.always:
|
||||
return 'Always';
|
||||
default:
|
||||
return toString();
|
||||
}
|
||||
}
|
||||
|
||||
void apply() {
|
||||
Screen.keepOn(this == KeepScreenOn.always);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:aves/model/settings/coordinate_format.dart';
|
||||
import 'package:aves/model/settings/home_page.dart';
|
||||
import 'package:aves/model/settings/screen_on.dart';
|
||||
import 'package:aves/widgets/fullscreen/info/location_section.dart';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
||||
|
@ -23,6 +24,7 @@ class Settings extends ChangeNotifier {
|
|||
static const hasAcceptedTermsKey = 'has_accepted_terms';
|
||||
static const isCrashlyticsEnabledKey = 'is_crashlytics_enabled';
|
||||
static const mustBackTwiceToExitKey = 'must_back_twice_to_exit';
|
||||
static const keepScreenOnKey = 'keep_screen_on';
|
||||
static const homePageKey = 'home_page';
|
||||
static const catalogTimeZoneKey = 'catalog_time_zone';
|
||||
|
||||
|
@ -75,6 +77,13 @@ class Settings extends ChangeNotifier {
|
|||
|
||||
set mustBackTwiceToExit(bool newValue) => setAndNotify(mustBackTwiceToExitKey, newValue);
|
||||
|
||||
KeepScreenOn get keepScreenOn => getEnumOrDefault(keepScreenOnKey, KeepScreenOn.fullscreenOnly, KeepScreenOn.values);
|
||||
|
||||
set keepScreenOn(KeepScreenOn newValue) {
|
||||
setAndNotify(keepScreenOnKey, newValue.toString());
|
||||
newValue.apply();
|
||||
}
|
||||
|
||||
HomePageSetting get homePage => getEnumOrDefault(homePageKey, HomePageSetting.collection, HomePageSetting.values);
|
||||
|
||||
set homePage(HomePageSetting newValue) => setAndNotify(homePageKey, newValue.toString());
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'dart:math';
|
|||
|
||||
import 'package:aves/model/filters/filters.dart';
|
||||
import 'package:aves/model/image_entry.dart';
|
||||
import 'package:aves/model/settings/screen_on.dart';
|
||||
import 'package:aves/model/settings/settings.dart';
|
||||
import 'package:aves/model/source/collection_lens.dart';
|
||||
import 'package:aves/utils/change_notifier.dart';
|
||||
|
@ -23,6 +24,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
|
||||
import 'package:photo_view/photo_view.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:screen/screen.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
class FullscreenBody extends StatefulWidget {
|
||||
|
@ -97,10 +99,13 @@ class FullscreenBodyState extends State<FullscreenBody> with SingleTickerProvide
|
|||
collection: collection,
|
||||
showInfo: () => _goToVerticalPage(infoPage),
|
||||
);
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
_initVideoController();
|
||||
_registerWidget(widget);
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => _initOverlay());
|
||||
if (settings.keepScreenOn == KeepScreenOn.fullscreenOnly) {
|
||||
Screen.keepOn(true);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -327,6 +332,9 @@ class FullscreenBodyState extends State<FullscreenBody> with SingleTickerProvide
|
|||
void _onLeave() {
|
||||
if (Navigator.canPop(context)) {
|
||||
_showSystemUI();
|
||||
if (settings.keepScreenOn == KeepScreenOn.fullscreenOnly) {
|
||||
Screen.keepOn(false);
|
||||
}
|
||||
} else {
|
||||
// exit app when trying to pop a fullscreen page that is a viewer for a single entry
|
||||
SystemNavigator.pop();
|
||||
|
|
|
@ -2,6 +2,7 @@ import 'package:aves/main.dart';
|
|||
import 'package:aves/model/filters/filters.dart';
|
||||
import 'package:aves/model/image_entry.dart';
|
||||
import 'package:aves/model/settings/home_page.dart';
|
||||
import 'package:aves/model/settings/screen_on.dart';
|
||||
import 'package:aves/model/settings/settings.dart';
|
||||
import 'package:aves/model/source/collection_lens.dart';
|
||||
import 'package:aves/services/image_file_service.dart';
|
||||
|
@ -19,7 +20,6 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:pedantic/pedantic.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:screen/screen.dart';
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
static const routeName = '/';
|
||||
|
@ -43,7 +43,7 @@ class _HomePageState extends State<HomePage> {
|
|||
super.initState();
|
||||
_setup();
|
||||
imageCache.maximumSizeBytes = 512 * (1 << 20);
|
||||
Screen.keepOn(true);
|
||||
settings.keepScreenOn.apply();
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:aves/model/settings/coordinate_format.dart';
|
||||
import 'package:aves/model/settings/home_page.dart';
|
||||
import 'package:aves/model/settings/screen_on.dart';
|
||||
import 'package:aves/model/settings/settings.dart';
|
||||
import 'package:aves/widgets/common/aves_selection_dialog.dart';
|
||||
import 'package:aves/widgets/common/data_providers/media_query_data_provider.dart';
|
||||
|
@ -49,6 +50,23 @@ class SettingsPage extends StatelessWidget {
|
|||
title: Text('Tap “back” twice to exit'),
|
||||
),
|
||||
SectionTitle('Display'),
|
||||
ListTile(
|
||||
title: Text('Keep screen on'),
|
||||
subtitle: Text(settings.keepScreenOn.name),
|
||||
onTap: () async {
|
||||
final value = await showDialog<KeepScreenOn>(
|
||||
context: context,
|
||||
builder: (context) => AvesSelectionDialog<KeepScreenOn>(
|
||||
initialValue: settings.keepScreenOn,
|
||||
options: Map.fromEntries(KeepScreenOn.values.map((v) => MapEntry(v, v.name))),
|
||||
title: 'Keep Screen On',
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
settings.keepScreenOn = value;
|
||||
}
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
title: Text('SVG background'),
|
||||
trailing: SvgBackgroundSelector(),
|
||||
|
|
Loading…
Reference in a new issue