settings: display refresh rate hint
This commit is contained in:
parent
b183f9ddbb
commit
531f70b503
13 changed files with 117 additions and 12 deletions
|
@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file.
|
|||
- Info: option to set date from other item
|
||||
- Info: improved DNG tags display
|
||||
- warn and optionally set metadata date before moving undated items
|
||||
- Settings: display refresh rate hint
|
||||
|
||||
### Changed
|
||||
|
||||
|
|
|
@ -177,6 +177,9 @@
|
|||
"accessibilityAnimationsRemove": "Prevent screen effects",
|
||||
"accessibilityAnimationsKeep": "Keep screen effects",
|
||||
|
||||
"displayRefreshRatePreferHighest": "Prefer highest rate",
|
||||
"displayRefreshRatePreferLowest": "Prefer lowest rate",
|
||||
|
||||
"themeBrightnessLight": "Light",
|
||||
"themeBrightnessDark": "Dark",
|
||||
"themeBrightnessBlack": "Black",
|
||||
|
@ -703,6 +706,8 @@
|
|||
"settingsSectionDisplay": "Display",
|
||||
"settingsThemeBrightness": "Theme",
|
||||
"settingsThemeColorful": "Colorful",
|
||||
"settingsDisplayRefreshRateModeTile": "Display refresh rate",
|
||||
"settingsDisplayRefreshRateModeTitle": "Display Refresh Rate",
|
||||
|
||||
"settingsSectionLanguage": "Language & Formats",
|
||||
"settingsLanguage": "Language",
|
||||
|
|
|
@ -16,6 +16,7 @@ class SettingsDefaults {
|
|||
static const canUseAnalysisService = true;
|
||||
static const isInstalledAppAccessAllowed = false;
|
||||
static const isErrorReportingAllowed = false;
|
||||
static const displayRefreshRateMode = DisplayRefreshRateMode.auto;
|
||||
static const themeBrightness = AvesThemeBrightness.system;
|
||||
static const themeColorMode = AvesThemeColorMode.polychrome;
|
||||
static const tileLayout = TileLayout.grid;
|
||||
|
|
33
lib/model/settings/enums/display_refresh_rate_mode.dart
Normal file
33
lib/model/settings/enums/display_refresh_rate_mode.dart
Normal file
|
@ -0,0 +1,33 @@
|
|||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_displaymode/flutter_displaymode.dart';
|
||||
|
||||
import 'enums.dart';
|
||||
|
||||
extension ExtraDisplayRefreshRateMode on DisplayRefreshRateMode {
|
||||
String getName(BuildContext context) {
|
||||
switch (this) {
|
||||
case DisplayRefreshRateMode.auto:
|
||||
return context.l10n.settingsSystemDefault;
|
||||
case DisplayRefreshRateMode.highest:
|
||||
return context.l10n.displayRefreshRatePreferHighest;
|
||||
case DisplayRefreshRateMode.lowest:
|
||||
return context.l10n.displayRefreshRatePreferLowest;
|
||||
}
|
||||
}
|
||||
|
||||
void apply() {
|
||||
debugPrint('Apply display refresh rate: $name');
|
||||
switch (this) {
|
||||
case DisplayRefreshRateMode.auto:
|
||||
FlutterDisplayMode.setPreferredMode(DisplayMode.auto);
|
||||
break;
|
||||
case DisplayRefreshRateMode.highest:
|
||||
FlutterDisplayMode.setHighRefreshRate();
|
||||
break;
|
||||
case DisplayRefreshRateMode.lowest:
|
||||
FlutterDisplayMode.setLowRefreshRate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,6 +19,8 @@ enum HomePageSetting { collection, albums }
|
|||
|
||||
enum KeepScreenOn { never, viewerOnly, always }
|
||||
|
||||
enum DisplayRefreshRateMode { auto, highest, lowest }
|
||||
|
||||
enum UnitSystem { metric, imperial }
|
||||
|
||||
enum VideoLoopMode { never, shortOnly, always }
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'enums.dart';
|
||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
|
||||
extension ExtraAvesThemeBrightness on AvesThemeBrightness {
|
||||
String getName(BuildContext context) {
|
||||
|
@ -16,6 +16,7 @@ extension ExtraAvesThemeBrightness on AvesThemeBrightness {
|
|||
return context.l10n.themeBrightnessBlack;
|
||||
}
|
||||
}
|
||||
|
||||
ThemeMode get appThemeMode {
|
||||
switch (this) {
|
||||
case AvesThemeBrightness.system:
|
||||
|
|
|
@ -41,6 +41,7 @@ class Settings extends ChangeNotifier {
|
|||
static const isInstalledAppAccessAllowedKey = 'is_installed_app_access_allowed';
|
||||
static const isErrorReportingAllowedKey = 'is_crashlytics_enabled';
|
||||
static const localeKey = 'locale';
|
||||
static const displayRefreshRateModeKey = 'display_refresh_rate_mode';
|
||||
static const themeBrightnessKey = 'theme_brightness';
|
||||
static const themeColorModeKey = 'theme_color_mode';
|
||||
static const catalogTimeZoneKey = 'catalog_time_zone';
|
||||
|
@ -245,6 +246,10 @@ class Settings extends ChangeNotifier {
|
|||
return _appliedLocale!;
|
||||
}
|
||||
|
||||
DisplayRefreshRateMode get displayRefreshRateMode => getEnumOrDefault(displayRefreshRateModeKey, SettingsDefaults.displayRefreshRateMode, DisplayRefreshRateMode.values);
|
||||
|
||||
set displayRefreshRateMode(DisplayRefreshRateMode newValue) => setAndNotify(displayRefreshRateModeKey, newValue.toString());
|
||||
|
||||
AvesThemeBrightness get themeBrightness => getEnumOrDefault(themeBrightnessKey, SettingsDefaults.themeBrightness, AvesThemeBrightness.values);
|
||||
|
||||
set themeBrightness(AvesThemeBrightness newValue) => setAndNotify(themeBrightnessKey, newValue.toString());
|
||||
|
@ -709,6 +714,7 @@ class Settings extends ChangeNotifier {
|
|||
}
|
||||
break;
|
||||
case localeKey:
|
||||
case displayRefreshRateModeKey:
|
||||
case themeBrightnessKey:
|
||||
case themeColorModeKey:
|
||||
case keepScreenOnKey:
|
||||
|
|
|
@ -111,6 +111,11 @@ class Constants {
|
|||
license: 'MIT',
|
||||
sourceUrl: 'https://github.com/deckerst/fijkplayer',
|
||||
),
|
||||
Dependency(
|
||||
name: 'Flutter Display Mode',
|
||||
license: 'MIT',
|
||||
sourceUrl: 'https://github.com/ajinasokan/flutter_displaymode',
|
||||
),
|
||||
Dependency(
|
||||
name: 'Google API Availability',
|
||||
license: 'MIT',
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:aves/app_mode.dart';
|
|||
import 'package:aves/l10n/l10n.dart';
|
||||
import 'package:aves/model/device.dart';
|
||||
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
||||
import 'package:aves/model/settings/enums/display_refresh_rate_mode.dart';
|
||||
import 'package:aves/model/settings/enums/enums.dart';
|
||||
import 'package:aves/model/settings/enums/screen_on.dart';
|
||||
import 'package:aves/model/settings/enums/theme_brightness.dart';
|
||||
|
@ -242,9 +243,8 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
|||
}
|
||||
}
|
||||
|
||||
void applyKeepScreenOn() {
|
||||
settings.keepScreenOn.apply();
|
||||
}
|
||||
void applyDisplayRefreshRateMode() => settings.displayRefreshRateMode.apply();
|
||||
void applyKeepScreenOn() => settings.keepScreenOn.apply();
|
||||
|
||||
void applyIsRotationLocked() {
|
||||
if (!settings.isRotationLocked) {
|
||||
|
@ -253,9 +253,11 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
|||
}
|
||||
|
||||
settings.updateStream.where((event) => event.key == Settings.isInstalledAppAccessAllowedKey).listen((_) => applyIsInstalledAppAccessAllowed());
|
||||
settings.updateStream.where((event) => event.key == Settings.displayRefreshRateModeKey).listen((_) => applyDisplayRefreshRateMode());
|
||||
settings.updateStream.where((event) => event.key == Settings.keepScreenOnKey).listen((_) => applyKeepScreenOn());
|
||||
settings.updateStream.where((event) => event.key == Settings.platformAccelerometerRotationKey).listen((_) => applyIsRotationLocked());
|
||||
|
||||
applyDisplayRefreshRateMode();
|
||||
applyKeepScreenOn();
|
||||
applyIsRotationLocked();
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:aves/model/settings/enums/display_refresh_rate_mode.dart';
|
||||
import 'package:aves/model/settings/enums/enums.dart';
|
||||
import 'package:aves/model/settings/enums/theme_brightness.dart';
|
||||
import 'package:aves/model/settings/settings.dart';
|
||||
|
@ -42,6 +43,14 @@ class DisplaySection extends StatelessWidget {
|
|||
onChanged: (v) => settings.themeColorMode = v ? AvesThemeColorMode.polychrome : AvesThemeColorMode.monochrome,
|
||||
title: context.l10n.settingsThemeColorful,
|
||||
),
|
||||
SettingsSelectionListTile<DisplayRefreshRateMode>(
|
||||
values: DisplayRefreshRateMode.values,
|
||||
getName: (context, v) => v.getName(context),
|
||||
selector: (context, s) => s.displayRefreshRateMode,
|
||||
onSelection: (v) => settings.displayRefreshRateMode = v,
|
||||
tileTitle: context.l10n.settingsDisplayRefreshRateModeTile,
|
||||
dialogTitle: context.l10n.settingsDisplayRefreshRateModeTitle,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
|
|
@ -360,6 +360,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.1"
|
||||
flutter_displaymode:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_displaymode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.2"
|
||||
flutter_driver:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
|
|
|
@ -44,6 +44,7 @@ dependencies:
|
|||
ref: aves
|
||||
flex_color_picker:
|
||||
fluster:
|
||||
flutter_displaymode:
|
||||
flutter_highlight:
|
||||
flutter_map:
|
||||
flutter_markdown:
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"de": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -18,10 +20,14 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"es": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -40,10 +46,14 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"fr": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -62,7 +72,9 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"id": [
|
||||
|
@ -72,6 +84,8 @@
|
|||
"videoControlsPlaySeek",
|
||||
"videoControlsPlayOutside",
|
||||
"videoControlsNone",
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -97,10 +111,14 @@
|
|||
"settingsVideoGestureSideDoubleTapSeek",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"ja": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -119,10 +137,14 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"ko": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -141,10 +163,14 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"pt": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -163,10 +189,14 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
],
|
||||
|
||||
"ru": [
|
||||
"displayRefreshRatePreferHighest",
|
||||
"displayRefreshRatePreferLowest",
|
||||
"themeBrightnessLight",
|
||||
"themeBrightnessDark",
|
||||
"themeBrightnessBlack",
|
||||
|
@ -185,6 +215,8 @@
|
|||
"settingsConfirmationDialogMoveUndatedItems",
|
||||
"settingsSectionDisplay",
|
||||
"settingsThemeBrightness",
|
||||
"settingsThemeColorful"
|
||||
"settingsThemeColorful",
|
||||
"settingsDisplayRefreshRateModeTile",
|
||||
"settingsDisplayRefreshRateModeTitle"
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue