#131 viewer max brightness option
This commit is contained in:
parent
005339094b
commit
b3500edd10
16 changed files with 207 additions and 81 deletions
|
@ -797,20 +797,10 @@
|
||||||
|
|
||||||
"settingsSectionViewer": "Viewer",
|
"settingsSectionViewer": "Viewer",
|
||||||
"@settingsSectionViewer": {},
|
"@settingsSectionViewer": {},
|
||||||
"settingsViewerShowOverlayOnOpening": "Show overlay on opening",
|
|
||||||
"@settingsViewerShowOverlayOnOpening": {},
|
|
||||||
"settingsViewerShowMinimap": "Show minimap",
|
|
||||||
"@settingsViewerShowMinimap": {},
|
|
||||||
"settingsViewerShowInformation": "Show information",
|
|
||||||
"@settingsViewerShowInformation": {},
|
|
||||||
"settingsViewerShowInformationSubtitle": "Show title, date, location, etc.",
|
|
||||||
"@settingsViewerShowInformationSubtitle": {},
|
|
||||||
"settingsViewerShowShootingDetails": "Show shooting details",
|
|
||||||
"@settingsViewerShowShootingDetails": {},
|
|
||||||
"settingsViewerEnableOverlayBlurEffect": "Overlay blur effect",
|
|
||||||
"@settingsViewerEnableOverlayBlurEffect": {},
|
|
||||||
"settingsViewerUseCutout": "Use cutout area",
|
"settingsViewerUseCutout": "Use cutout area",
|
||||||
"@settingsViewerUseCutout": {},
|
"@settingsViewerUseCutout": {},
|
||||||
|
"settingsViewerMaximumBrightness": "Maximum brightness",
|
||||||
|
"@settingsViewerMaximumBrightness": {},
|
||||||
"settingsImageBackground": "Image background",
|
"settingsImageBackground": "Image background",
|
||||||
"@settingsImageBackground": {},
|
"@settingsImageBackground": {},
|
||||||
|
|
||||||
|
@ -827,6 +817,23 @@
|
||||||
"settingsViewerQuickActionEmpty": "No buttons",
|
"settingsViewerQuickActionEmpty": "No buttons",
|
||||||
"@settingsViewerQuickActionEmpty": {},
|
"@settingsViewerQuickActionEmpty": {},
|
||||||
|
|
||||||
|
"settingsViewerOverlayTile": "Overlay",
|
||||||
|
"@settingsViewerOverlayTile": {},
|
||||||
|
"settingsViewerOverlayTitle": "Overlay",
|
||||||
|
"@settingsViewerOverlayTitle": {},
|
||||||
|
"settingsViewerShowOverlayOnOpening": "Show on opening",
|
||||||
|
"@settingsViewerShowOverlayOnOpening": {},
|
||||||
|
"settingsViewerShowMinimap": "Show minimap",
|
||||||
|
"@settingsViewerShowMinimap": {},
|
||||||
|
"settingsViewerShowInformation": "Show information",
|
||||||
|
"@settingsViewerShowInformation": {},
|
||||||
|
"settingsViewerShowInformationSubtitle": "Show title, date, location, etc.",
|
||||||
|
"@settingsViewerShowInformationSubtitle": {},
|
||||||
|
"settingsViewerShowShootingDetails": "Show shooting details",
|
||||||
|
"@settingsViewerShowShootingDetails": {},
|
||||||
|
"settingsViewerEnableOverlayBlurEffect": "Blur effect",
|
||||||
|
"@settingsViewerEnableOverlayBlurEffect": {},
|
||||||
|
|
||||||
"settingsVideoPageTitle": "Video Settings",
|
"settingsVideoPageTitle": "Video Settings",
|
||||||
"@settingsVideoPageTitle": {},
|
"@settingsVideoPageTitle": {},
|
||||||
"settingsSectionVideo": "Video",
|
"settingsSectionVideo": "Video",
|
||||||
|
|
|
@ -375,13 +375,8 @@
|
||||||
"settingsCollectionSelectionQuickActionEditorBanner": "Maintenez votre doigt appuyé pour déplacer les boutons et choisir les actions affichées lors de la sélection d’éléments.",
|
"settingsCollectionSelectionQuickActionEditorBanner": "Maintenez votre doigt appuyé pour déplacer les boutons et choisir les actions affichées lors de la sélection d’éléments.",
|
||||||
|
|
||||||
"settingsSectionViewer": "Visionneuse",
|
"settingsSectionViewer": "Visionneuse",
|
||||||
"settingsViewerShowOverlayOnOpening": "Afficher les incrustations à l’ouverture",
|
|
||||||
"settingsViewerShowMinimap": "Afficher la mini-carte",
|
|
||||||
"settingsViewerShowInformation": "Afficher les détails",
|
|
||||||
"settingsViewerShowInformationSubtitle": "Afficher les titre, date, lieu, etc.",
|
|
||||||
"settingsViewerShowShootingDetails": "Afficher les détails de prise de vue",
|
|
||||||
"settingsViewerEnableOverlayBlurEffect": "Effets de flou des incrustations",
|
|
||||||
"settingsViewerUseCutout": "Utiliser la zone d’encoche",
|
"settingsViewerUseCutout": "Utiliser la zone d’encoche",
|
||||||
|
"settingsViewerMaximumBrightness": "Luminosité maximale",
|
||||||
"settingsImageBackground": "Arrière-plan de l’image",
|
"settingsImageBackground": "Arrière-plan de l’image",
|
||||||
|
|
||||||
"settingsViewerQuickActionsTile": "Actions rapides",
|
"settingsViewerQuickActionsTile": "Actions rapides",
|
||||||
|
@ -391,6 +386,15 @@
|
||||||
"settingsViewerQuickActionEditorAvailableButtons": "Boutons disponibles",
|
"settingsViewerQuickActionEditorAvailableButtons": "Boutons disponibles",
|
||||||
"settingsViewerQuickActionEmpty": "Aucun bouton",
|
"settingsViewerQuickActionEmpty": "Aucun bouton",
|
||||||
|
|
||||||
|
"settingsViewerOverlayTile": "Incrustations",
|
||||||
|
"settingsViewerOverlayTitle": "Incrustations",
|
||||||
|
"settingsViewerShowOverlayOnOpening": "Afficher à l’ouverture",
|
||||||
|
"settingsViewerShowMinimap": "Afficher la mini-carte",
|
||||||
|
"settingsViewerShowInformation": "Afficher les détails",
|
||||||
|
"settingsViewerShowInformationSubtitle": "Afficher les titre, date, lieu, etc.",
|
||||||
|
"settingsViewerShowShootingDetails": "Afficher les détails de prise de vue",
|
||||||
|
"settingsViewerEnableOverlayBlurEffect": "Effets de flou",
|
||||||
|
|
||||||
"settingsVideoPageTitle": "Réglages vidéo",
|
"settingsVideoPageTitle": "Réglages vidéo",
|
||||||
"settingsSectionVideo": "Vidéo",
|
"settingsSectionVideo": "Vidéo",
|
||||||
"settingsVideoShowVideos": "Afficher les vidéos",
|
"settingsVideoShowVideos": "Afficher les vidéos",
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
"showTooltip": "보기",
|
"showTooltip": "보기",
|
||||||
"hideTooltip": "숨기기",
|
"hideTooltip": "숨기기",
|
||||||
"removeTooltip": "제거",
|
"removeTooltip": "제거",
|
||||||
|
"resetButtonTooltip": "복원",
|
||||||
|
|
||||||
"doubleBackExitMessage": "종료하려면 한번 더 누르세요.",
|
"doubleBackExitMessage": "종료하려면 한번 더 누르세요.",
|
||||||
|
|
||||||
|
@ -373,13 +374,8 @@
|
||||||
"settingsCollectionSelectionQuickActionEditorBanner": "버튼을 길게 누른 후 이동하여 항목 선택할 때 표시될 버튼을 선택하세요.",
|
"settingsCollectionSelectionQuickActionEditorBanner": "버튼을 길게 누른 후 이동하여 항목 선택할 때 표시될 버튼을 선택하세요.",
|
||||||
|
|
||||||
"settingsSectionViewer": "뷰어",
|
"settingsSectionViewer": "뷰어",
|
||||||
"settingsViewerShowOverlayOnOpening": "열릴 때 오버레이 표시",
|
|
||||||
"settingsViewerShowMinimap": "미니맵 표시",
|
|
||||||
"settingsViewerShowInformation": "상세 정보 표시",
|
|
||||||
"settingsViewerShowInformationSubtitle": "제목, 날짜, 장소 등 표시",
|
|
||||||
"settingsViewerShowShootingDetails": "촬영 정보 표시",
|
|
||||||
"settingsViewerEnableOverlayBlurEffect": "오버레이 흐림 효과",
|
|
||||||
"settingsViewerUseCutout": "컷아웃 영역 사용",
|
"settingsViewerUseCutout": "컷아웃 영역 사용",
|
||||||
|
"settingsViewerMaximumBrightness": "최대 밝기",
|
||||||
"settingsImageBackground": "이미지 배경",
|
"settingsImageBackground": "이미지 배경",
|
||||||
|
|
||||||
"settingsViewerQuickActionsTile": "빠른 작업",
|
"settingsViewerQuickActionsTile": "빠른 작업",
|
||||||
|
@ -389,6 +385,15 @@
|
||||||
"settingsViewerQuickActionEditorAvailableButtons": "추가 가능한 버튼",
|
"settingsViewerQuickActionEditorAvailableButtons": "추가 가능한 버튼",
|
||||||
"settingsViewerQuickActionEmpty": "버튼이 없습니다",
|
"settingsViewerQuickActionEmpty": "버튼이 없습니다",
|
||||||
|
|
||||||
|
"settingsViewerOverlayTile": "오버레이",
|
||||||
|
"settingsViewerOverlayTitle": "오버레이",
|
||||||
|
"settingsViewerShowOverlayOnOpening": "열릴 때 표시",
|
||||||
|
"settingsViewerShowMinimap": "미니맵 표시",
|
||||||
|
"settingsViewerShowInformation": "상세 정보 표시",
|
||||||
|
"settingsViewerShowInformationSubtitle": "제목, 날짜, 장소 등 표시",
|
||||||
|
"settingsViewerShowShootingDetails": "촬영 정보 표시",
|
||||||
|
"settingsViewerEnableOverlayBlurEffect": "흐림 효과",
|
||||||
|
|
||||||
"settingsVideoPageTitle": "동영상 설정",
|
"settingsVideoPageTitle": "동영상 설정",
|
||||||
"settingsSectionVideo": "동영상",
|
"settingsSectionVideo": "동영상",
|
||||||
"settingsVideoShowVideos": "미디어에 동영상 표시",
|
"settingsVideoShowVideos": "미디어에 동영상 표시",
|
||||||
|
|
|
@ -373,12 +373,6 @@
|
||||||
"settingsCollectionSelectionQuickActionEditorBanner": "Нажмите и удерживайте, чтобы переместить кнопки и выбрать, какие действия будут отображаться при выборе элементов.",
|
"settingsCollectionSelectionQuickActionEditorBanner": "Нажмите и удерживайте, чтобы переместить кнопки и выбрать, какие действия будут отображаться при выборе элементов.",
|
||||||
|
|
||||||
"settingsSectionViewer": "Просмотрщик",
|
"settingsSectionViewer": "Просмотрщик",
|
||||||
"settingsViewerShowOverlayOnOpening": "Показывать наложение при открытии",
|
|
||||||
"settingsViewerShowMinimap": "Показать миникарту",
|
|
||||||
"settingsViewerShowInformation": "Показывать информацию",
|
|
||||||
"settingsViewerShowInformationSubtitle": "Показать название, дату, местоположение и т.д.",
|
|
||||||
"settingsViewerShowShootingDetails": "Показать детали съёмки",
|
|
||||||
"settingsViewerEnableOverlayBlurEffect": "Наложение эффекта размытия",
|
|
||||||
"settingsViewerUseCutout": "Использовать область выреза",
|
"settingsViewerUseCutout": "Использовать область выреза",
|
||||||
"settingsImageBackground": "Фон изображения",
|
"settingsImageBackground": "Фон изображения",
|
||||||
|
|
||||||
|
@ -389,6 +383,15 @@
|
||||||
"settingsViewerQuickActionEditorAvailableButtons": "Доступные кнопки",
|
"settingsViewerQuickActionEditorAvailableButtons": "Доступные кнопки",
|
||||||
"settingsViewerQuickActionEmpty": "Нет кнопок",
|
"settingsViewerQuickActionEmpty": "Нет кнопок",
|
||||||
|
|
||||||
|
"settingsViewerOverlayTile": "Наложение",
|
||||||
|
"settingsViewerOverlayTitle": "Наложение",
|
||||||
|
"settingsViewerShowOverlayOnOpening": "Показывать наложение при открытии",
|
||||||
|
"settingsViewerShowMinimap": "Показать миникарту",
|
||||||
|
"settingsViewerShowInformation": "Показывать информацию",
|
||||||
|
"settingsViewerShowInformationSubtitle": "Показать название, дату, местоположение и т.д.",
|
||||||
|
"settingsViewerShowShootingDetails": "Показать детали съёмки",
|
||||||
|
"settingsViewerEnableOverlayBlurEffect": "Наложение эффекта размытия",
|
||||||
|
|
||||||
"settingsVideoPageTitle": "Настройки видео",
|
"settingsVideoPageTitle": "Настройки видео",
|
||||||
"settingsSectionVideo": "Видео",
|
"settingsSectionVideo": "Видео",
|
||||||
"settingsVideoShowVideos": "Показывать видео",
|
"settingsVideoShowVideos": "Показывать видео",
|
||||||
|
|
|
@ -65,6 +65,7 @@ class SettingsDefaults {
|
||||||
static const showOverlayShootingDetails = false;
|
static const showOverlayShootingDetails = false;
|
||||||
static const enableOverlayBlurEffect = true; // `enableOverlayBlurEffect` has a contextual default value
|
static const enableOverlayBlurEffect = true; // `enableOverlayBlurEffect` has a contextual default value
|
||||||
static const viewerUseCutout = true;
|
static const viewerUseCutout = true;
|
||||||
|
static const viewerMaxBrightness = false;
|
||||||
|
|
||||||
// video
|
// video
|
||||||
static const videoQuickActions = [
|
static const videoQuickActions = [
|
||||||
|
|
|
@ -81,6 +81,7 @@ class Settings extends ChangeNotifier {
|
||||||
static const showOverlayShootingDetailsKey = 'show_overlay_shooting_details';
|
static const showOverlayShootingDetailsKey = 'show_overlay_shooting_details';
|
||||||
static const enableOverlayBlurEffectKey = 'enable_overlay_blur_effect';
|
static const enableOverlayBlurEffectKey = 'enable_overlay_blur_effect';
|
||||||
static const viewerUseCutoutKey = 'viewer_use_cutout';
|
static const viewerUseCutoutKey = 'viewer_use_cutout';
|
||||||
|
static const viewerMaxBrightnessKey = 'viewer_max_brightness';
|
||||||
|
|
||||||
// video
|
// video
|
||||||
static const videoQuickActionsKey = 'video_quick_actions';
|
static const videoQuickActionsKey = 'video_quick_actions';
|
||||||
|
@ -352,6 +353,10 @@ class Settings extends ChangeNotifier {
|
||||||
|
|
||||||
set viewerUseCutout(bool newValue) => setAndNotify(viewerUseCutoutKey, newValue);
|
set viewerUseCutout(bool newValue) => setAndNotify(viewerUseCutoutKey, newValue);
|
||||||
|
|
||||||
|
bool get viewerMaxBrightness => getBoolOrDefault(viewerMaxBrightnessKey, SettingsDefaults.viewerMaxBrightness);
|
||||||
|
|
||||||
|
set viewerMaxBrightness(bool newValue) => setAndNotify(viewerMaxBrightnessKey, newValue);
|
||||||
|
|
||||||
// video
|
// video
|
||||||
|
|
||||||
List<VideoAction> get videoQuickActions => getEnumListOrDefault(videoQuickActionsKey, SettingsDefaults.videoQuickActions, VideoAction.values);
|
List<VideoAction> get videoQuickActions => getEnumListOrDefault(videoQuickActionsKey, SettingsDefaults.videoQuickActions, VideoAction.values);
|
||||||
|
@ -587,6 +592,7 @@ class Settings extends ChangeNotifier {
|
||||||
case showOverlayShootingDetailsKey:
|
case showOverlayShootingDetailsKey:
|
||||||
case enableOverlayBlurEffectKey:
|
case enableOverlayBlurEffectKey:
|
||||||
case viewerUseCutoutKey:
|
case viewerUseCutoutKey:
|
||||||
|
case viewerMaxBrightnessKey:
|
||||||
case enableVideoHardwareAccelerationKey:
|
case enableVideoHardwareAccelerationKey:
|
||||||
case enableVideoAutoPlayKey:
|
case enableVideoAutoPlayKey:
|
||||||
case subtitleShowOutlineKey:
|
case subtitleShowOutlineKey:
|
||||||
|
|
|
@ -132,6 +132,11 @@ class Constants {
|
||||||
license: 'Apache 2.0',
|
license: 'Apache 2.0',
|
||||||
sourceUrl: 'https://github.com/DavBfr/dart_pdf',
|
sourceUrl: 'https://github.com/DavBfr/dart_pdf',
|
||||||
),
|
),
|
||||||
|
Dependency(
|
||||||
|
name: 'Screen Brightness',
|
||||||
|
license: 'MIT',
|
||||||
|
sourceUrl: 'https://github.com/aaassseee/screen_brightness',
|
||||||
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Shared Preferences',
|
name: 'Shared Preferences',
|
||||||
license: 'BSD 3-Clause',
|
license: 'BSD 3-Clause',
|
||||||
|
|
91
lib/widgets/settings/viewer/overlay.dart
Normal file
91
lib/widgets/settings/viewer/overlay.dart
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
import 'package:aves/model/settings/settings.dart';
|
||||||
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
|
class ViewerOverlayTile extends StatelessWidget {
|
||||||
|
const ViewerOverlayTile({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ListTile(
|
||||||
|
title: Text(context.l10n.settingsViewerOverlayTile),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
settings: const RouteSettings(name: ViewerOverlayPage.routeName),
|
||||||
|
builder: (context) => const ViewerOverlayPage(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ViewerOverlayPage extends StatelessWidget {
|
||||||
|
static const routeName = '/settings/viewer_overlay';
|
||||||
|
|
||||||
|
const ViewerOverlayPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
title: Text(context.l10n.settingsViewerOverlayTitle),
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: ListView(
|
||||||
|
children: [
|
||||||
|
Selector<Settings, bool>(
|
||||||
|
selector: (context, s) => s.showOverlayOnOpening,
|
||||||
|
builder: (context, current, child) => SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: (v) => settings.showOverlayOnOpening = v,
|
||||||
|
title: Text(context.l10n.settingsViewerShowOverlayOnOpening),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Selector<Settings, bool>(
|
||||||
|
selector: (context, s) => s.showOverlayMinimap,
|
||||||
|
builder: (context, current, child) => SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: (v) => settings.showOverlayMinimap = v,
|
||||||
|
title: Text(context.l10n.settingsViewerShowMinimap),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Selector<Settings, bool>(
|
||||||
|
selector: (context, s) => s.showOverlayInfo,
|
||||||
|
builder: (context, current, child) => SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: (v) => settings.showOverlayInfo = v,
|
||||||
|
title: Text(context.l10n.settingsViewerShowInformation),
|
||||||
|
subtitle: Text(context.l10n.settingsViewerShowInformationSubtitle),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Selector<Settings, Tuple2<bool, bool>>(
|
||||||
|
selector: (context, s) => Tuple2(s.showOverlayInfo, s.showOverlayShootingDetails),
|
||||||
|
builder: (context, s, child) {
|
||||||
|
final showInfo = s.item1;
|
||||||
|
final current = s.item2;
|
||||||
|
return SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: showInfo ? (v) => settings.showOverlayShootingDetails = v : null,
|
||||||
|
title: Text(context.l10n.settingsViewerShowShootingDetails),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Selector<Settings, bool>(
|
||||||
|
selector: (context, s) => s.enableOverlayBlurEffect,
|
||||||
|
builder: (context, current, child) => SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: (v) => settings.enableOverlayBlurEffect = v,
|
||||||
|
title: Text(context.l10n.settingsViewerEnableOverlayBlurEffect),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,10 +7,10 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_expansion_tile.dart';
|
import 'package:aves/widgets/common/identity/aves_expansion_tile.dart';
|
||||||
import 'package:aves/widgets/settings/common/tile_leading.dart';
|
import 'package:aves/widgets/settings/common/tile_leading.dart';
|
||||||
import 'package:aves/widgets/settings/viewer/entry_background.dart';
|
import 'package:aves/widgets/settings/viewer/entry_background.dart';
|
||||||
|
import 'package:aves/widgets/settings/viewer/overlay.dart';
|
||||||
import 'package:aves/widgets/settings/viewer/viewer_actions_editor.dart';
|
import 'package:aves/widgets/settings/viewer/viewer_actions_editor.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
|
||||||
|
|
||||||
class ViewerSection extends StatelessWidget {
|
class ViewerSection extends StatelessWidget {
|
||||||
final ValueNotifier<String?> expandedNotifier;
|
final ValueNotifier<String?> expandedNotifier;
|
||||||
|
@ -32,52 +32,16 @@ class ViewerSection extends StatelessWidget {
|
||||||
showHighlight: false,
|
showHighlight: false,
|
||||||
children: [
|
children: [
|
||||||
const ViewerActionsTile(),
|
const ViewerActionsTile(),
|
||||||
Selector<Settings, bool>(
|
const ViewerOverlayTile(),
|
||||||
selector: (context, s) => s.showOverlayOnOpening,
|
|
||||||
builder: (context, current, child) => SwitchListTile(
|
|
||||||
value: current,
|
|
||||||
onChanged: (v) => settings.showOverlayOnOpening = v,
|
|
||||||
title: Text(context.l10n.settingsViewerShowOverlayOnOpening),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Selector<Settings, bool>(
|
|
||||||
selector: (context, s) => s.showOverlayMinimap,
|
|
||||||
builder: (context, current, child) => SwitchListTile(
|
|
||||||
value: current,
|
|
||||||
onChanged: (v) => settings.showOverlayMinimap = v,
|
|
||||||
title: Text(context.l10n.settingsViewerShowMinimap),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Selector<Settings, bool>(
|
|
||||||
selector: (context, s) => s.showOverlayInfo,
|
|
||||||
builder: (context, current, child) => SwitchListTile(
|
|
||||||
value: current,
|
|
||||||
onChanged: (v) => settings.showOverlayInfo = v,
|
|
||||||
title: Text(context.l10n.settingsViewerShowInformation),
|
|
||||||
subtitle: Text(context.l10n.settingsViewerShowInformationSubtitle),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Selector<Settings, Tuple2<bool, bool>>(
|
|
||||||
selector: (context, s) => Tuple2(s.showOverlayInfo, s.showOverlayShootingDetails),
|
|
||||||
builder: (context, s, child) {
|
|
||||||
final showInfo = s.item1;
|
|
||||||
final current = s.item2;
|
|
||||||
return SwitchListTile(
|
|
||||||
value: current,
|
|
||||||
onChanged: showInfo ? (v) => settings.showOverlayShootingDetails = v : null,
|
|
||||||
title: Text(context.l10n.settingsViewerShowShootingDetails),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Selector<Settings, bool>(
|
|
||||||
selector: (context, s) => s.enableOverlayBlurEffect,
|
|
||||||
builder: (context, current, child) => SwitchListTile(
|
|
||||||
value: current,
|
|
||||||
onChanged: (v) => settings.enableOverlayBlurEffect = v,
|
|
||||||
title: Text(context.l10n.settingsViewerEnableOverlayBlurEffect),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const _CutoutModeSwitch(),
|
const _CutoutModeSwitch(),
|
||||||
|
Selector<Settings, bool>(
|
||||||
|
selector: (context, s) => s.viewerMaxBrightness,
|
||||||
|
builder: (context, current, child) => SwitchListTile(
|
||||||
|
value: current,
|
||||||
|
onChanged: (v) => settings.viewerMaxBrightness = v,
|
||||||
|
title: Text(context.l10n.settingsViewerMaximumBrightness),
|
||||||
|
),
|
||||||
|
),
|
||||||
Selector<Settings, EntryBackground>(
|
Selector<Settings, EntryBackground>(
|
||||||
selector: (context, s) => s.imageBackground,
|
selector: (context, s) => s.imageBackground,
|
||||||
builder: (context, current, child) => ListTile(
|
builder: (context, current, child) => ListTile(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:aves/model/entry.dart';
|
import 'package:aves/model/entry.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
|
@ -12,6 +13,7 @@ import 'package:aves/widgets/viewer/info/notifications.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
|
import 'package:screen_brightness/screen_brightness.dart';
|
||||||
|
|
||||||
class ViewerVerticalPageView extends StatefulWidget {
|
class ViewerVerticalPageView extends StatefulWidget {
|
||||||
final CollectionLens? collection;
|
final CollectionLens? collection;
|
||||||
|
@ -42,6 +44,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
|
||||||
final ValueNotifier<bool> _isVerticallyScrollingNotifier = ValueNotifier(false);
|
final ValueNotifier<bool> _isVerticallyScrollingNotifier = ValueNotifier(false);
|
||||||
Timer? _verticalScrollMonitoringTimer;
|
Timer? _verticalScrollMonitoringTimer;
|
||||||
AvesEntry? _oldEntry;
|
AvesEntry? _oldEntry;
|
||||||
|
Future<double>? _systemBrightness;
|
||||||
|
|
||||||
CollectionLens? get collection => widget.collection;
|
CollectionLens? get collection => widget.collection;
|
||||||
|
|
||||||
|
@ -49,10 +52,16 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
|
||||||
|
|
||||||
AvesEntry? get entry => widget.entryNotifier.value;
|
AvesEntry? get entry => widget.entryNotifier.value;
|
||||||
|
|
||||||
|
static const double maximumBrightness = 1.0;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_registerWidget(widget);
|
_registerWidget(widget);
|
||||||
|
|
||||||
|
if (settings.viewerMaxBrightness) {
|
||||||
|
_systemBrightness = ScreenBrightness().system;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -144,9 +153,18 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onVerticalPageControllerChanged() {
|
void _onVerticalPageControllerChanged() {
|
||||||
final opacity = min(1.0, widget.verticalPager.page!);
|
final page = widget.verticalPager.page!;
|
||||||
|
|
||||||
|
final opacity = min(1.0, page);
|
||||||
_backgroundColorNotifier.value = _backgroundColorNotifier.value.withOpacity(opacity * opacity);
|
_backgroundColorNotifier.value = _backgroundColorNotifier.value.withOpacity(opacity * opacity);
|
||||||
|
|
||||||
|
if (page <= 1 && settings.viewerMaxBrightness) {
|
||||||
|
_systemBrightness?.then((system) {
|
||||||
|
final transition = max(system, lerpDouble(system, maximumBrightness, page / 2)!);
|
||||||
|
ScreenBrightness().setScreenBrightness(transition);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_isVerticallyScrollingNotifier.value = true;
|
_isVerticallyScrollingNotifier.value = true;
|
||||||
_stopScrollMonitoringTimer();
|
_stopScrollMonitoringTimer();
|
||||||
_verticalScrollMonitoringTimer = Timer(Durations.infoScrollMonitoringTimerDelay, () {
|
_verticalScrollMonitoringTimer = Timer(Durations.infoScrollMonitoringTimerDelay, () {
|
||||||
|
|
|
@ -34,6 +34,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:screen_brightness/screen_brightness.dart';
|
||||||
|
|
||||||
class EntryViewerStack extends StatefulWidget {
|
class EntryViewerStack extends StatefulWidget {
|
||||||
final CollectionLens? collection;
|
final CollectionLens? collection;
|
||||||
|
@ -83,6 +84,9 @@ class _EntryViewerStackState extends State<EntryViewerStack> with FeedbackMixin,
|
||||||
if (!settings.viewerUseCutout) {
|
if (!settings.viewerUseCutout) {
|
||||||
windowService.setCutoutMode(false);
|
windowService.setCutoutMode(false);
|
||||||
}
|
}
|
||||||
|
if (settings.viewerMaxBrightness) {
|
||||||
|
ScreenBrightness().setScreenBrightness(1);
|
||||||
|
}
|
||||||
if (settings.keepScreenOn == KeepScreenOn.viewerOnly) {
|
if (settings.keepScreenOn == KeepScreenOn.viewerOnly) {
|
||||||
windowService.keepScreenOn(true);
|
windowService.keepScreenOn(true);
|
||||||
}
|
}
|
||||||
|
@ -521,6 +525,9 @@ class _EntryViewerStackState extends State<EntryViewerStack> with FeedbackMixin,
|
||||||
if (!settings.viewerUseCutout) {
|
if (!settings.viewerUseCutout) {
|
||||||
windowService.setCutoutMode(true);
|
windowService.setCutoutMode(true);
|
||||||
}
|
}
|
||||||
|
if (settings.viewerMaxBrightness) {
|
||||||
|
ScreenBrightness().resetScreenBrightness();
|
||||||
|
}
|
||||||
if (settings.keepScreenOn == KeepScreenOn.viewerOnly) {
|
if (settings.keepScreenOn == KeepScreenOn.viewerOnly) {
|
||||||
windowService.keepScreenOn(false);
|
windowService.keepScreenOn(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ packages:
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.99"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
|
|
|
@ -13,6 +13,7 @@ dependencies:
|
||||||
path: ../aves_report
|
path: ../aves_report
|
||||||
firebase_core:
|
firebase_core:
|
||||||
firebase_crashlytics:
|
firebase_crashlytics:
|
||||||
|
stack_trace:
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
|
|
16
pubspec.lock
16
pubspec.lock
|
@ -861,6 +861,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1+1"
|
version: "3.0.1+1"
|
||||||
|
screen_brightness:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: screen_brightness
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.1"
|
||||||
|
screen_brightness_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: screen_brightness_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.0.2"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -986,7 +1000,7 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1+1"
|
version: "2.0.1+1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: "direct main"
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
|
|
|
@ -57,9 +57,9 @@ dependencies:
|
||||||
permission_handler:
|
permission_handler:
|
||||||
printing:
|
printing:
|
||||||
provider:
|
provider:
|
||||||
|
screen_brightness:
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
sqflite:
|
sqflite:
|
||||||
stack_trace:
|
|
||||||
streams_channel:
|
streams_channel:
|
||||||
git:
|
git:
|
||||||
url: git://github.com/deckerst/aves_streams_channel.git
|
url: git://github.com/deckerst/aves_streams_channel.git
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
"ko": [
|
"ko": [
|
||||||
"resetButtonTooltip",
|
|
||||||
"entryInfoActionEditTags",
|
"entryInfoActionEditTags",
|
||||||
"tagEditorPageTitle",
|
"tagEditorPageTitle",
|
||||||
"tagEditorPageNewTagFieldLabel",
|
"tagEditorPageNewTagFieldLabel",
|
||||||
|
@ -10,6 +9,7 @@
|
||||||
"ru": [
|
"ru": [
|
||||||
"resetButtonTooltip",
|
"resetButtonTooltip",
|
||||||
"entryInfoActionEditTags",
|
"entryInfoActionEditTags",
|
||||||
|
"settingsViewerMaximumBrightness",
|
||||||
"tagEditorPageTitle",
|
"tagEditorPageTitle",
|
||||||
"tagEditorPageNewTagFieldLabel",
|
"tagEditorPageNewTagFieldLabel",
|
||||||
"tagEditorPageAddTagTooltip"
|
"tagEditorPageAddTagTooltip"
|
||||||
|
|
Loading…
Reference in a new issue