En/disable memory albums

This commit is contained in:
Ming Ming 2022-01-15 22:21:22 +08:00
parent 781d846806
commit 0e1f96999b
5 changed files with 68 additions and 2 deletions

View file

@ -309,6 +309,14 @@
"@settingsExifSupportTrueSubtitle": { "@settingsExifSupportTrueSubtitle": {
"description": "Subtitle of the EXIF support setting when the value is true. The goal is to warn user about the possible side effects of enabling this setting" "description": "Subtitle of the EXIF support setting when the value is true. The goal is to warn user about the possible side effects of enabling this setting"
}, },
"settingsMemoriesTitle": "Memories",
"@settingsMemoriesTitle": {
"description": "Memory albums contain photos taken in a specific time range in the past"
},
"settingsMemoriesSubtitle": "Show photos taken in the past",
"@settingsMemoriesSubtitle": {
"description": "Memory albums contain photos taken in a specific time range in the past"
},
"settingsAccountTitle": "Account", "settingsAccountTitle": "Account",
"settingsAccountPageTitle": "Account settings", "settingsAccountPageTitle": "Account settings",
"@settingsAccountPageTitle": { "@settingsAccountPageTitle": {

View file

@ -1,5 +1,7 @@
{ {
"cs": [ "cs": [
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsAccountTitle", "settingsAccountTitle",
"settingsAccountPageTitle", "settingsAccountPageTitle",
"settingsIncludedFoldersTitle", "settingsIncludedFoldersTitle",
@ -60,6 +62,8 @@
], ],
"de": [ "de": [
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsAccountTitle", "settingsAccountTitle",
"settingsAccountPageTitle", "settingsAccountPageTitle",
"settingsIncludedFoldersTitle", "settingsIncludedFoldersTitle",
@ -135,6 +139,8 @@
"el": [ "el": [
"collectionsTooltip", "collectionsTooltip",
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsAccountTitle", "settingsAccountTitle",
"settingsAccountPageTitle", "settingsAccountPageTitle",
"settingsIncludedFoldersTitle", "settingsIncludedFoldersTitle",
@ -263,6 +269,8 @@
], ],
"es": [ "es": [
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsMapProviderTitle", "settingsMapProviderTitle",
"addUserInputHint", "addUserInputHint",
"sharedAlbumInfoDialogTitle", "sharedAlbumInfoDialogTitle",
@ -275,6 +283,8 @@
], ],
"fi": [ "fi": [
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsMapProviderTitle", "settingsMapProviderTitle",
"addUserInputHint", "addUserInputHint",
"sharedAlbumInfoDialogTitle", "sharedAlbumInfoDialogTitle",
@ -288,6 +298,8 @@
"fr": [ "fr": [
"collectionsTooltip", "collectionsTooltip",
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsAccountTitle", "settingsAccountTitle",
"settingsAccountPageTitle", "settingsAccountPageTitle",
"settingsIncludedFoldersTitle", "settingsIncludedFoldersTitle",
@ -396,6 +408,8 @@
], ],
"ru": [ "ru": [
"settingsMemoriesTitle",
"settingsMemoriesSubtitle",
"settingsAccountTitle", "settingsAccountTitle",
"settingsAccountPageTitle", "settingsAccountPageTitle",
"settingsIncludedFoldersTitle", "settingsIncludedFoldersTitle",

View file

@ -228,6 +228,14 @@ class AccountPref {
value, value,
(key, value) => provider.setBool(key, value)); (key, value) => provider.setBool(key, value));
bool? isEnableMemoryAlbum() => provider.getBool(PrefKey.isEnableMemoryAlbum);
bool isEnableMemoryAlbumOr([bool def = false]) =>
isEnableMemoryAlbum() ?? def;
Future<bool> setEnableMemoryAlbum(bool value) => _set<bool>(
PrefKey.isEnableMemoryAlbum,
value,
(key, value) => provider.setBool(key, value));
Future<bool> _set<T>(PrefKey key, T value, Future<bool> _set<T>(PrefKey key, T value,
Future<bool> Function(PrefKey key, T value) setFn) async { Future<bool> Function(PrefKey key, T value) setFn) async {
if (await setFn(key, value)) { if (await setFn(key, value)) {
@ -430,6 +438,7 @@ enum PrefKey {
isEnableFaceRecognitionApp, isEnableFaceRecognitionApp,
shareFolder, shareFolder,
hasNewSharedAlbum, hasNewSharedAlbum,
isEnableMemoryAlbum,
} }
extension on PrefKey { extension on PrefKey {
@ -485,6 +494,8 @@ extension on PrefKey {
return "shareFolder"; return "shareFolder";
case PrefKey.hasNewSharedAlbum: case PrefKey.hasNewSharedAlbum:
return "hasNewSharedAlbum"; return "hasNewSharedAlbum";
case PrefKey.isEnableMemoryAlbum:
return "isEnableMemoryAlbum";
} }
} }
} }

View file

@ -139,7 +139,9 @@ class _HomePhotosState extends State<HomePhotos>
_buildAppBar(context), _buildAppBar(context),
if (_metadataTaskState != MetadataTaskState.idle) if (_metadataTaskState != MetadataTaskState.idle)
_buildMetadataTaskHeader(context), _buildMetadataTaskHeader(context),
if (_smartAlbums.isNotEmpty) if (AccountPref.of(widget.account)
.isEnableMemoryAlbumOr(true) &&
_smartAlbums.isNotEmpty)
_buildSmartAlbumList(context), _buildSmartAlbumList(context),
SliverPadding( SliverPadding(
padding: const EdgeInsets.symmetric(vertical: 8), padding: const EdgeInsets.symmetric(vertical: 8),
@ -627,7 +629,10 @@ class _HomePhotosState extends State<HomePhotos>
? 0 ? 0
: _metadataTaskHeaderHeight; : _metadataTaskHeaderHeight;
final smartAlbumListHeight = final smartAlbumListHeight =
_smartAlbums.isNotEmpty ? _SmartAlbumItem.height : 0; AccountPref.of(widget.account).isEnableMemoryAlbumOr(true) &&
_smartAlbums.isNotEmpty
? _SmartAlbumItem.height
: 0;
// scroll extent = list height - widget viewport height // scroll extent = list height - widget viewport height
// + sliver app bar height + metadata task header height // + sliver app bar height + metadata task header height
// + smart album list height + list padding // + smart album list height + list padding

View file

@ -59,6 +59,9 @@ class _SettingsState extends State<Settings> {
initState() { initState() {
super.initState(); super.initState();
_isEnableExif = Pref().isEnableExifOr(); _isEnableExif = Pref().isEnableExifOr();
final settings = AccountPref.of(widget.account);
_isEnableMemoryAlbum = settings.isEnableMemoryAlbumOr(true);
} }
@override @override
@ -96,6 +99,12 @@ class _SettingsState extends State<Settings> {
value: _isEnableExif, value: _isEnableExif,
onChanged: (value) => _onExifSupportChanged(context, value), onChanged: (value) => _onExifSupportChanged(context, value),
), ),
SwitchListTile(
title: Text(L10n.global().settingsMemoriesTitle),
subtitle: Text(L10n.global().settingsMemoriesSubtitle),
value: _isEnableMemoryAlbum,
onChanged: _onEnableMemoryAlbumChanged,
),
_buildSubSettings( _buildSubSettings(
context, context,
leading: Icon( leading: Icon(
@ -283,6 +292,24 @@ class _SettingsState extends State<Settings> {
} }
} }
Future<void> _onEnableMemoryAlbumChanged(bool value) async {
_log.info("[_onEnableMemoryAlbumChanged] New value: $value");
final oldValue = _isEnableMemoryAlbum;
setState(() {
_isEnableMemoryAlbum = value;
});
if (!await AccountPref.of(widget.account).setEnableMemoryAlbum(value)) {
_log.severe("[_onEnableMemoryAlbumChanged] Failed writing pref");
SnackBarManager().showSnackBar(SnackBar(
content: Text(L10n.global().writePreferenceFailureNotification),
duration: k.snackBarDurationNormal,
));
setState(() {
_isEnableMemoryAlbum = oldValue;
});
}
}
void _onCaptureLogChanged(BuildContext context, bool value) async { void _onCaptureLogChanged(BuildContext context, bool value) async {
if (value) { if (value) {
final result = await showDialog<bool>( final result = await showDialog<bool>(
@ -359,6 +386,7 @@ class _SettingsState extends State<Settings> {
} }
late bool _isEnableExif; late bool _isEnableExif;
late bool _isEnableMemoryAlbum;
static final _log = Logger("widget.settings._SettingsState"); static final _log = Logger("widget.settings._SettingsState");