accessibility: optional alternative to pinch-to-zoom thumbnails
This commit is contained in:
parent
564d86d5a8
commit
e809e8df48
13 changed files with 161 additions and 10 deletions
|
@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Viewer: long press on share quick action to share parts of motion photo
|
- Viewer: long press on share quick action to share parts of motion photo
|
||||||
- Search: missing address, portrait, landscape filters
|
- Search: missing address, portrait, landscape filters
|
||||||
- Map: edit cluster location
|
- Map: edit cluster location
|
||||||
|
- Accessibility: optional alternative to pinch-to-zoom thumbnails
|
||||||
- Lithuanian translation (thanks Gediminas Murauskas)
|
- Lithuanian translation (thanks Gediminas Murauskas)
|
||||||
- Norsk (Bokmål) translation (thanks Allan Nordhøy)
|
- Norsk (Bokmål) translation (thanks Allan Nordhøy)
|
||||||
- Chinese (Traditional) translation (thanks pemibe)
|
- Chinese (Traditional) translation (thanks pemibe)
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
"count": {}
|
"count": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"columnCount": "{count, plural, =1{1 column} other{{count} columns}}",
|
||||||
|
"@columnCount": {
|
||||||
|
"placeholders": {
|
||||||
|
"count": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"timeSeconds": "{seconds, plural, =1{1 second} other{{seconds} seconds}}",
|
"timeSeconds": "{seconds, plural, =1{1 second} other{{seconds} seconds}}",
|
||||||
"@timeSeconds": {
|
"@timeSeconds": {
|
||||||
|
@ -800,6 +806,7 @@
|
||||||
"settingsRemoveAnimationsTile": "Remove animations",
|
"settingsRemoveAnimationsTile": "Remove animations",
|
||||||
"settingsRemoveAnimationsDialogTitle": "Remove Animations",
|
"settingsRemoveAnimationsDialogTitle": "Remove Animations",
|
||||||
"settingsTimeToTakeActionTile": "Time to take action",
|
"settingsTimeToTakeActionTile": "Time to take action",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives": "Show pinch gesture alternatives",
|
||||||
|
|
||||||
"settingsDisplaySectionTitle": "Display",
|
"settingsDisplaySectionTitle": "Display",
|
||||||
"settingsThemeBrightnessTile": "Theme",
|
"settingsThemeBrightnessTile": "Theme",
|
||||||
|
|
|
@ -123,6 +123,7 @@ class SettingsDefaults {
|
||||||
static const enableBin = true;
|
static const enableBin = true;
|
||||||
|
|
||||||
// accessibility
|
// accessibility
|
||||||
|
static const showPinchGestureAlternatives = false;
|
||||||
static const accessibilityAnimations = AccessibilityAnimations.system;
|
static const accessibilityAnimations = AccessibilityAnimations.system;
|
||||||
static const timeToTakeAction = AccessibilityTimeout.s3;
|
static const timeToTakeAction = AccessibilityTimeout.s3;
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,7 @@ class Settings extends ChangeNotifier {
|
||||||
static const enableBinKey = 'enable_bin';
|
static const enableBinKey = 'enable_bin';
|
||||||
|
|
||||||
// accessibility
|
// accessibility
|
||||||
|
static const showPinchGestureAlternativesKey = 'show_pinch_gesture_alternatives';
|
||||||
static const accessibilityAnimationsKey = 'accessibility_animations';
|
static const accessibilityAnimationsKey = 'accessibility_animations';
|
||||||
static const timeToTakeActionKey = 'time_to_take_action';
|
static const timeToTakeActionKey = 'time_to_take_action';
|
||||||
|
|
||||||
|
@ -266,6 +267,7 @@ class Settings extends ChangeNotifier {
|
||||||
videoGestureDoubleTapTogglePlay = false;
|
videoGestureDoubleTapTogglePlay = false;
|
||||||
videoGestureSideDoubleTapSeek = false;
|
videoGestureSideDoubleTapSeek = false;
|
||||||
enableBin = false;
|
enableBin = false;
|
||||||
|
showPinchGestureAlternatives = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -707,6 +709,10 @@ class Settings extends ChangeNotifier {
|
||||||
|
|
||||||
// accessibility
|
// accessibility
|
||||||
|
|
||||||
|
bool get showPinchGestureAlternatives => getBool(showPinchGestureAlternativesKey) ?? SettingsDefaults.showPinchGestureAlternatives;
|
||||||
|
|
||||||
|
set showPinchGestureAlternatives(bool newValue) => setAndNotify(showPinchGestureAlternativesKey, newValue);
|
||||||
|
|
||||||
AccessibilityAnimations get accessibilityAnimations => getEnumOrDefault(accessibilityAnimationsKey, SettingsDefaults.accessibilityAnimations, AccessibilityAnimations.values);
|
AccessibilityAnimations get accessibilityAnimations => getEnumOrDefault(accessibilityAnimationsKey, SettingsDefaults.accessibilityAnimations, AccessibilityAnimations.values);
|
||||||
|
|
||||||
set accessibilityAnimations(AccessibilityAnimations newValue) => setAndNotify(accessibilityAnimationsKey, newValue.toString());
|
set accessibilityAnimations(AccessibilityAnimations newValue) => setAndNotify(accessibilityAnimationsKey, newValue.toString());
|
||||||
|
@ -1010,6 +1016,7 @@ class Settings extends ChangeNotifier {
|
||||||
case subtitleShowOutlineKey:
|
case subtitleShowOutlineKey:
|
||||||
case tagEditorCurrentFilterSectionExpandedKey:
|
case tagEditorCurrentFilterSectionExpandedKey:
|
||||||
case saveSearchHistoryKey:
|
case saveSearchHistoryKey:
|
||||||
|
case showPinchGestureAlternativesKey:
|
||||||
case filePickerShowHiddenFilesKey:
|
case filePickerShowHiddenFilesKey:
|
||||||
case screenSaverFillScreenKey:
|
case screenSaverFillScreenKey:
|
||||||
case screenSaverAnimatedZoomEffectKey:
|
case screenSaverAnimatedZoomEffectKey:
|
||||||
|
|
|
@ -61,6 +61,8 @@ class AIcons {
|
||||||
static const IconData layoutList = Icons.list_outlined;
|
static const IconData layoutList = Icons.list_outlined;
|
||||||
static const IconData sort = Icons.sort_outlined;
|
static const IconData sort = Icons.sort_outlined;
|
||||||
static const IconData sortOrder = Icons.swap_vert_outlined;
|
static const IconData sortOrder = Icons.swap_vert_outlined;
|
||||||
|
static const IconData thumbnailLarge = Icons.photo_size_select_large_outlined;
|
||||||
|
static const IconData thumbnailSmall = Icons.photo_size_select_small_outlined;
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
static const IconData add = Icons.add_circle_outline;
|
static const IconData add = Icons.add_circle_outline;
|
||||||
|
|
|
@ -30,6 +30,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_app_bar.dart';
|
import 'package:aves/widgets/common/identity/aves_app_bar.dart';
|
||||||
import 'package:aves/widgets/common/identity/buttons/captioned_button.dart';
|
import 'package:aves/widgets/common/identity/buttons/captioned_button.dart';
|
||||||
import 'package:aves/widgets/common/search/route.dart';
|
import 'package:aves/widgets/common/search/route.dart';
|
||||||
|
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
||||||
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
||||||
import 'package:aves/widgets/search/search_delegate.dart';
|
import 'package:aves/widgets/search/search_delegate.dart';
|
||||||
|
@ -638,6 +639,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
||||||
settings.getTileLayout(CollectionPage.routeName),
|
settings.getTileLayout(CollectionPage.routeName),
|
||||||
settings.collectionSortReverse,
|
settings.collectionSortReverse,
|
||||||
);
|
);
|
||||||
|
final extentController = context.read<TileExtentController>();
|
||||||
final value = await showDialog<Tuple4<EntrySortFactor?, EntryGroupFactor?, TileLayout?, bool>>(
|
final value = await showDialog<Tuple4<EntrySortFactor?, EntryGroupFactor?, TileLayout?, bool>>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
@ -648,6 +650,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
||||||
layoutOptions: _layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
layoutOptions: _layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
||||||
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
||||||
canGroup: (s, g, l) => s == EntrySortFactor.date,
|
canGroup: (s, g, l) => s == EntrySortFactor.date,
|
||||||
|
tileExtentController: extentController,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'dart:math';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
class TileExtentController {
|
class TileExtentController {
|
||||||
final String settingsRouteKey;
|
final String settingsRouteKey;
|
||||||
|
@ -52,6 +53,8 @@ class TileExtentController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double setUserPreferredColumnCount(int columnCount) => _update(userPreferredExtent: _extentForColumnCount(columnCount));
|
||||||
|
|
||||||
double setUserPreferredExtent(double extent) => _update(userPreferredExtent: extent.roundToDouble());
|
double setUserPreferredExtent(double extent) => _update(userPreferredExtent: extent.roundToDouble());
|
||||||
|
|
||||||
double _update({double? userPreferredExtent}) {
|
double _update({double? userPreferredExtent}) {
|
||||||
|
@ -95,6 +98,8 @@ class TileExtentController {
|
||||||
|
|
||||||
double get effectiveExtentMax => _extentForColumnCount(_effectiveColumnCountMin());
|
double get effectiveExtentMax => _extentForColumnCount(_effectiveColumnCountMin());
|
||||||
|
|
||||||
|
Tuple2<int, int> get effectiveColumnRange => Tuple2(_effectiveColumnCountMin(), _effectiveColumnCountMax());
|
||||||
|
|
||||||
int get columnCount => _effectiveColumnCountForExtent(extentNotifier.value);
|
int get columnCount => _effectiveColumnCountForExtent(extentNotifier.value);
|
||||||
|
|
||||||
Duration getTileAnimationDelay(Duration pageTarget) {
|
Duration getTileAnimationDelay(Duration pageTarget) {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/theme/durations.dart';
|
import 'package:aves/theme/durations.dart';
|
||||||
import 'package:aves/theme/icons.dart';
|
import 'package:aves/theme/icons.dart';
|
||||||
import 'package:aves/theme/themes.dart';
|
import 'package:aves/theme/themes.dart';
|
||||||
|
@ -5,6 +6,7 @@ import 'package:aves/widgets/common/basic/text_dropdown_button.dart';
|
||||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_caption.dart';
|
import 'package:aves/widgets/common/identity/aves_caption.dart';
|
||||||
import 'package:aves/widgets/common/identity/highlight_title.dart';
|
import 'package:aves/widgets/common/identity/highlight_title.dart';
|
||||||
|
import 'package:aves/widgets/common/tile_extent_controller.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';
|
import 'package:tuple/tuple.dart';
|
||||||
|
@ -17,6 +19,7 @@ class TileViewDialog<S, G, L> extends StatefulWidget {
|
||||||
final List<TileViewDialogOption<G>> groupOptions;
|
final List<TileViewDialogOption<G>> groupOptions;
|
||||||
final List<TileViewDialogOption<L>> layoutOptions;
|
final List<TileViewDialogOption<L>> layoutOptions;
|
||||||
final String Function(S sort, bool reverse) sortOrder;
|
final String Function(S sort, bool reverse) sortOrder;
|
||||||
|
final TileExtentController tileExtentController;
|
||||||
final bool Function(S? sort, G? group, L? layout)? canGroup;
|
final bool Function(S? sort, G? group, L? layout)? canGroup;
|
||||||
|
|
||||||
const TileViewDialog({
|
const TileViewDialog({
|
||||||
|
@ -27,6 +30,7 @@ class TileViewDialog<S, G, L> extends StatefulWidget {
|
||||||
this.layoutOptions = const [],
|
this.layoutOptions = const [],
|
||||||
required this.sortOrder,
|
required this.sortOrder,
|
||||||
this.canGroup,
|
this.canGroup,
|
||||||
|
required this.tileExtentController,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -38,6 +42,8 @@ class _TileViewDialogState<S, G, L> extends State<TileViewDialog<S, G, L>> with
|
||||||
late G? _selectedGroup;
|
late G? _selectedGroup;
|
||||||
late L? _selectedLayout;
|
late L? _selectedLayout;
|
||||||
late bool _reverseSort;
|
late bool _reverseSort;
|
||||||
|
late int _columnMin, _columnMax;
|
||||||
|
late final ValueNotifier<int> _columnCountNotifier = ValueNotifier(tileExtentController.columnCount);
|
||||||
|
|
||||||
List<TileViewDialogOption<S>> get sortOptions => widget.sortOptions;
|
List<TileViewDialogOption<S>> get sortOptions => widget.sortOptions;
|
||||||
|
|
||||||
|
@ -45,6 +51,8 @@ class _TileViewDialogState<S, G, L> extends State<TileViewDialog<S, G, L>> with
|
||||||
|
|
||||||
List<TileViewDialogOption<L>> get layoutOptions => widget.layoutOptions;
|
List<TileViewDialogOption<L>> get layoutOptions => widget.layoutOptions;
|
||||||
|
|
||||||
|
TileExtentController get tileExtentController => widget.tileExtentController;
|
||||||
|
|
||||||
bool get canGroup => (widget.canGroup ?? (s, g, l) => true).call(_selectedSort, _selectedGroup, _selectedLayout);
|
bool get canGroup => (widget.canGroup ?? (s, g, l) => true).call(_selectedSort, _selectedGroup, _selectedLayout);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -55,6 +63,11 @@ class _TileViewDialogState<S, G, L> extends State<TileViewDialog<S, G, L>> with
|
||||||
_selectedGroup = initialValue.item2;
|
_selectedGroup = initialValue.item2;
|
||||||
_selectedLayout = initialValue.item3;
|
_selectedLayout = initialValue.item3;
|
||||||
_reverseSort = initialValue.item4;
|
_reverseSort = initialValue.item4;
|
||||||
|
|
||||||
|
final extentController = tileExtentController;
|
||||||
|
final columnRange = extentController.effectiveColumnRange;
|
||||||
|
_columnMin = columnRange.item1;
|
||||||
|
_columnMax = columnRange.item2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -107,6 +120,29 @@ class _TileViewDialogState<S, G, L> extends State<TileViewDialog<S, G, L>> with
|
||||||
value: _selectedLayout,
|
value: _selectedLayout,
|
||||||
onChanged: (v) => _selectedLayout = v,
|
onChanged: (v) => _selectedLayout = v,
|
||||||
),
|
),
|
||||||
|
if (settings.showPinchGestureAlternatives)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
const Icon(AIcons.thumbnailLarge),
|
||||||
|
Expanded(
|
||||||
|
child: ValueListenableBuilder<int>(
|
||||||
|
valueListenable: _columnCountNotifier,
|
||||||
|
builder: (context, columnCount, child) => Slider(
|
||||||
|
label: context.l10n.columnCount(columnCount),
|
||||||
|
value: columnCount.toDouble(),
|
||||||
|
onChanged: (v) => _columnCountNotifier.value = v.round(),
|
||||||
|
min: _columnMin.toDouble(),
|
||||||
|
max: _columnMax.toDouble(),
|
||||||
|
divisions: (_columnMax - _columnMin),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Icon(AIcons.thumbnailSmall),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
|
@ -115,7 +151,10 @@ class _TileViewDialogState<S, G, L> extends State<TileViewDialog<S, G, L>> with
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
key: const Key('button-apply'),
|
key: const Key('button-apply'),
|
||||||
onPressed: () => Navigator.pop(context, Tuple4(_selectedSort, _selectedGroup, _selectedLayout, _reverseSort)),
|
onPressed: () {
|
||||||
|
tileExtentController.setUserPreferredColumnCount(_columnCountNotifier.value);
|
||||||
|
Navigator.pop(context, Tuple4(_selectedSort, _selectedGroup, _selectedLayout, _reverseSort));
|
||||||
|
},
|
||||||
child: Text(l10n.applyButtonLabel),
|
child: Text(l10n.applyButtonLabel),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -20,6 +20,7 @@ import 'package:aves/utils/android_file_utils.dart';
|
||||||
import 'package:aves/widgets/aves_app.dart';
|
import 'package:aves/widgets/aves_app.dart';
|
||||||
import 'package:aves/widgets/common/action_mixins/entry_storage.dart';
|
import 'package:aves/widgets/common/action_mixins/entry_storage.dart';
|
||||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
|
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
||||||
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
||||||
import 'package:aves/widgets/dialogs/filter_editors/create_album_dialog.dart';
|
import 'package:aves/widgets/dialogs/filter_editors/create_album_dialog.dart';
|
||||||
import 'package:aves/widgets/dialogs/filter_editors/rename_album_dialog.dart';
|
import 'package:aves/widgets/dialogs/filter_editors/rename_album_dialog.dart';
|
||||||
|
@ -146,6 +147,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> with
|
||||||
tileLayout,
|
tileLayout,
|
||||||
sortReverse,
|
sortReverse,
|
||||||
);
|
);
|
||||||
|
final extentController = context.read<TileExtentController>();
|
||||||
final value = await showDialog<Tuple4<ChipSortFactor?, AlbumChipGroupFactor?, TileLayout?, bool>>(
|
final value = await showDialog<Tuple4<ChipSortFactor?, AlbumChipGroupFactor?, TileLayout?, bool>>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
@ -155,6 +157,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> with
|
||||||
groupOptions: _groupOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
groupOptions: _groupOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
||||||
layoutOptions: ChipSetActionDelegate.layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
layoutOptions: ChipSetActionDelegate.layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
||||||
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
||||||
|
tileExtentController: extentController,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,6 +19,7 @@ import 'package:aves/widgets/common/action_mixins/permission_aware.dart';
|
||||||
import 'package:aves/widgets/common/action_mixins/size_aware.dart';
|
import 'package:aves/widgets/common/action_mixins/size_aware.dart';
|
||||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/search/route.dart';
|
import 'package:aves/widgets/common/search/route.dart';
|
||||||
|
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
||||||
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
||||||
import 'package:aves/widgets/dialogs/filter_editors/cover_selection_dialog.dart';
|
import 'package:aves/widgets/dialogs/filter_editors/cover_selection_dialog.dart';
|
||||||
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
||||||
|
@ -220,6 +221,7 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
|
||||||
tileLayout,
|
tileLayout,
|
||||||
sortReverse,
|
sortReverse,
|
||||||
);
|
);
|
||||||
|
final extentController = context.read<TileExtentController>();
|
||||||
final value = await showDialog<Tuple4<ChipSortFactor?, void, TileLayout?, bool>>(
|
final value = await showDialog<Tuple4<ChipSortFactor?, void, TileLayout?, bool>>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
@ -228,6 +230,7 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
|
||||||
sortOptions: sortOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
sortOptions: sortOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
||||||
layoutOptions: layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
layoutOptions: layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
|
||||||
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),
|
||||||
|
tileExtentController: extentController,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:aves/model/device.dart';
|
||||||
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
||||||
import 'package:aves/model/settings/enums/enums.dart';
|
import 'package:aves/model/settings/enums/enums.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
|
@ -28,11 +29,24 @@ class AccessibilitySection extends SettingsSection {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<List<SettingsTile>> tiles(BuildContext context) => [
|
FutureOr<List<SettingsTile>> tiles(BuildContext context) => [
|
||||||
|
if (!device.isTelevision) SettingsTileAccessibilityShowPinchGestureAlternatives(),
|
||||||
SettingsTileAccessibilityAnimations(),
|
SettingsTileAccessibilityAnimations(),
|
||||||
SettingsTileAccessibilityTimeToTakeAction(),
|
SettingsTileAccessibilityTimeToTakeAction(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SettingsTileAccessibilityShowPinchGestureAlternatives extends SettingsTile {
|
||||||
|
@override
|
||||||
|
String title(BuildContext context) => context.l10n.settingsAccessibilityShowPinchGestureAlternatives;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => SettingsSwitchListTile(
|
||||||
|
selector: (context, s) => s.showPinchGestureAlternatives,
|
||||||
|
onChanged: (v) => settings.showPinchGestureAlternatives = v,
|
||||||
|
title: title(context),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
class SettingsTileAccessibilityAnimations extends SettingsTile {
|
class SettingsTileAccessibilityAnimations extends SettingsTile {
|
||||||
@override
|
@override
|
||||||
String title(BuildContext context) => context.l10n.settingsRemoveAnimationsTile;
|
String title(BuildContext context) => context.l10n.settingsRemoveAnimationsTile;
|
||||||
|
|
|
@ -32,11 +32,11 @@ class NavigationSection extends SettingsSection {
|
||||||
@override
|
@override
|
||||||
FutureOr<List<SettingsTile>> tiles(BuildContext context) => [
|
FutureOr<List<SettingsTile>> tiles(BuildContext context) => [
|
||||||
SettingsTileNavigationHomePage(),
|
SettingsTileNavigationHomePage(),
|
||||||
|
if (!device.isTelevision) SettingsTileNavigationKeepScreenOn(),
|
||||||
if (!device.isTelevision) SettingsTileShowBottomNavigationBar(),
|
if (!device.isTelevision) SettingsTileShowBottomNavigationBar(),
|
||||||
|
if (!device.isTelevision) SettingsTileNavigationDoubleBackExit(),
|
||||||
SettingsTileNavigationDrawer(),
|
SettingsTileNavigationDrawer(),
|
||||||
if (!device.isTelevision) SettingsTileNavigationConfirmationDialog(),
|
if (!device.isTelevision) SettingsTileNavigationConfirmationDialog(),
|
||||||
if (!device.isTelevision) SettingsTileNavigationKeepScreenOn(),
|
|
||||||
if (!device.isTelevision) SettingsTileNavigationDoubleBackExit(),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
"welcomeOptional",
|
"welcomeOptional",
|
||||||
"welcomeTermsToggle",
|
"welcomeTermsToggle",
|
||||||
"itemCount",
|
"itemCount",
|
||||||
|
"columnCount",
|
||||||
"timeSeconds",
|
"timeSeconds",
|
||||||
"timeMinutes",
|
"timeMinutes",
|
||||||
"timeDays",
|
"timeDays",
|
||||||
|
@ -516,6 +517,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -588,7 +590,13 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"de": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
"el": [
|
"el": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
|
@ -596,10 +604,17 @@
|
||||||
"filterAspectRatioPortraitLabel",
|
"filterAspectRatioPortraitLabel",
|
||||||
"filterNoAddressLabel",
|
"filterNoAddressLabel",
|
||||||
"keepScreenOnVideoPlayback",
|
"keepScreenOnVideoPlayback",
|
||||||
"settingsViewerShowRatingTags"
|
"settingsViewerShowRatingTags",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
|
"es": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fa": [
|
"fa": [
|
||||||
|
"columnCount",
|
||||||
"clearTooltip",
|
"clearTooltip",
|
||||||
"entryActionCopyToClipboard",
|
"entryActionCopyToClipboard",
|
||||||
"entryActionShowGeoTiffOnMap",
|
"entryActionShowGeoTiffOnMap",
|
||||||
|
@ -982,6 +997,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -1061,7 +1077,13 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"fr": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
"gl": [
|
"gl": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionExportMetadata",
|
"entryInfoActionExportMetadata",
|
||||||
|
@ -1445,6 +1467,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -1527,6 +1550,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"id": [
|
"id": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionExportMetadata",
|
"entryInfoActionExportMetadata",
|
||||||
|
@ -1542,10 +1566,12 @@
|
||||||
"settingsViewerShowRatingTags",
|
"settingsViewerShowRatingTags",
|
||||||
"settingsSubtitleThemeTextPositionTile",
|
"settingsSubtitleThemeTextPositionTile",
|
||||||
"settingsSubtitleThemeTextPositionDialogTitle",
|
"settingsSubtitleThemeTextPositionDialogTitle",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsWidgetDisplayedItem"
|
"settingsWidgetDisplayedItem"
|
||||||
],
|
],
|
||||||
|
|
||||||
"it": [
|
"it": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
|
@ -1553,10 +1579,12 @@
|
||||||
"filterAspectRatioPortraitLabel",
|
"filterAspectRatioPortraitLabel",
|
||||||
"filterNoAddressLabel",
|
"filterNoAddressLabel",
|
||||||
"keepScreenOnVideoPlayback",
|
"keepScreenOnVideoPlayback",
|
||||||
"settingsViewerShowRatingTags"
|
"settingsViewerShowRatingTags",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ja": [
|
"ja": [
|
||||||
|
"columnCount",
|
||||||
"chipActionFilterIn",
|
"chipActionFilterIn",
|
||||||
"filterAspectRatioLandscapeLabel",
|
"filterAspectRatioLandscapeLabel",
|
||||||
"filterAspectRatioPortraitLabel",
|
"filterAspectRatioPortraitLabel",
|
||||||
|
@ -1564,21 +1592,32 @@
|
||||||
"keepScreenOnVideoPlayback",
|
"keepScreenOnVideoPlayback",
|
||||||
"subtitlePositionTop",
|
"subtitlePositionTop",
|
||||||
"subtitlePositionBottom",
|
"subtitlePositionBottom",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsWidgetDisplayedItem"
|
"settingsWidgetDisplayedItem"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"ko": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
"lt": [
|
"lt": [
|
||||||
"keepScreenOnVideoPlayback"
|
"columnCount",
|
||||||
|
"keepScreenOnVideoPlayback",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"nb": [
|
"nb": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
"keepScreenOnVideoPlayback"
|
"keepScreenOnVideoPlayback",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"nl": [
|
"nl": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionExportMetadata",
|
"entryInfoActionExportMetadata",
|
||||||
|
@ -1594,10 +1633,12 @@
|
||||||
"settingsViewerShowRatingTags",
|
"settingsViewerShowRatingTags",
|
||||||
"settingsSubtitleThemeTextPositionTile",
|
"settingsSubtitleThemeTextPositionTile",
|
||||||
"settingsSubtitleThemeTextPositionDialogTitle",
|
"settingsSubtitleThemeTextPositionDialogTitle",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsWidgetDisplayedItem"
|
"settingsWidgetDisplayedItem"
|
||||||
],
|
],
|
||||||
|
|
||||||
"nn": [
|
"nn": [
|
||||||
|
"columnCount",
|
||||||
"sourceStateLoading",
|
"sourceStateLoading",
|
||||||
"sourceStateCataloguing",
|
"sourceStateCataloguing",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
|
@ -1964,6 +2005,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -2047,6 +2089,7 @@
|
||||||
|
|
||||||
"pl": [
|
"pl": [
|
||||||
"itemCount",
|
"itemCount",
|
||||||
|
"columnCount",
|
||||||
"timeSeconds",
|
"timeSeconds",
|
||||||
"timeMinutes",
|
"timeMinutes",
|
||||||
"timeDays",
|
"timeDays",
|
||||||
|
@ -2469,6 +2512,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -2551,6 +2595,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"pt": [
|
"pt": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionExportMetadata",
|
"entryInfoActionExportMetadata",
|
||||||
|
@ -2566,10 +2611,12 @@
|
||||||
"settingsViewerShowRatingTags",
|
"settingsViewerShowRatingTags",
|
||||||
"settingsSubtitleThemeTextPositionTile",
|
"settingsSubtitleThemeTextPositionTile",
|
||||||
"settingsSubtitleThemeTextPositionDialogTitle",
|
"settingsSubtitleThemeTextPositionDialogTitle",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsWidgetDisplayedItem"
|
"settingsWidgetDisplayedItem"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ro": [
|
"ro": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
|
@ -2577,18 +2624,22 @@
|
||||||
"filterAspectRatioPortraitLabel",
|
"filterAspectRatioPortraitLabel",
|
||||||
"filterNoAddressLabel",
|
"filterNoAddressLabel",
|
||||||
"keepScreenOnVideoPlayback",
|
"keepScreenOnVideoPlayback",
|
||||||
"settingsViewerShowRatingTags"
|
"settingsViewerShowRatingTags",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ru": [
|
"ru": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
"keepScreenOnVideoPlayback"
|
"keepScreenOnVideoPlayback",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
],
|
],
|
||||||
|
|
||||||
"th": [
|
"th": [
|
||||||
"itemCount",
|
"itemCount",
|
||||||
|
"columnCount",
|
||||||
"timeSeconds",
|
"timeSeconds",
|
||||||
"timeMinutes",
|
"timeMinutes",
|
||||||
"timeDays",
|
"timeDays",
|
||||||
|
@ -2846,6 +2897,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -2927,7 +2979,13 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"tr": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
"uk": [
|
"uk": [
|
||||||
|
"columnCount",
|
||||||
"setCoverDialogCustom",
|
"setCoverDialogCustom",
|
||||||
"menuActionSelectNone",
|
"menuActionSelectNone",
|
||||||
"albumPageTitle",
|
"albumPageTitle",
|
||||||
|
@ -3083,6 +3141,7 @@
|
||||||
"settingsRemoveAnimationsTile",
|
"settingsRemoveAnimationsTile",
|
||||||
"settingsRemoveAnimationsDialogTitle",
|
"settingsRemoveAnimationsDialogTitle",
|
||||||
"settingsTimeToTakeActionTile",
|
"settingsTimeToTakeActionTile",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives",
|
||||||
"settingsDisplaySectionTitle",
|
"settingsDisplaySectionTitle",
|
||||||
"settingsThemeBrightnessTile",
|
"settingsThemeBrightnessTile",
|
||||||
"settingsThemeBrightnessDialogTitle",
|
"settingsThemeBrightnessDialogTitle",
|
||||||
|
@ -3164,6 +3223,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"zh": [
|
"zh": [
|
||||||
|
"columnCount",
|
||||||
"entryActionShareImageOnly",
|
"entryActionShareImageOnly",
|
||||||
"entryActionShareVideoOnly",
|
"entryActionShareVideoOnly",
|
||||||
"entryInfoActionRemoveLocation",
|
"entryInfoActionRemoveLocation",
|
||||||
|
@ -3171,6 +3231,12 @@
|
||||||
"filterAspectRatioPortraitLabel",
|
"filterAspectRatioPortraitLabel",
|
||||||
"filterNoAddressLabel",
|
"filterNoAddressLabel",
|
||||||
"keepScreenOnVideoPlayback",
|
"keepScreenOnVideoPlayback",
|
||||||
"settingsViewerShowRatingTags"
|
"settingsViewerShowRatingTags",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
|
],
|
||||||
|
|
||||||
|
"zh_Hant": [
|
||||||
|
"columnCount",
|
||||||
|
"settingsAccessibilityShowPinchGestureAlternatives"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue