Option to Hide memories (#1345)
This commit is contained in:
commit
bd8a868c57
8 changed files with 92 additions and 5 deletions
5
lib/events/memories_setting_changed.dart
Normal file
5
lib/events/memories_setting_changed.dart
Normal file
|
@ -0,0 +1,5 @@
|
|||
import "package:photos/events/event.dart";
|
||||
|
||||
// todo: consider removing this once we opt for riverpod or similar state management
|
||||
// solution
|
||||
class MemoriesSettingChanged extends Event {}
|
1
lib/generated/intl/messages_en.dart
generated
1
lib/generated/intl/messages_en.dart
generated
|
@ -1133,6 +1133,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"sharedWithYou":
|
||||
MessageLookupByLibrary.simpleMessage("Shared with you"),
|
||||
"sharing": MessageLookupByLibrary.simpleMessage("Sharing..."),
|
||||
"showMemories": MessageLookupByLibrary.simpleMessage("Show memories"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"I agree to the <u-terms>terms of service</u-terms> and <u-policy>privacy policy</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m47,
|
||||
|
|
11
lib/generated/l10n.dart
generated
11
lib/generated/l10n.dart
generated
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import 'intl/messages_all.dart';
|
||||
|
||||
// **************************************************************************
|
||||
|
@ -2950,6 +2951,16 @@ class S {
|
|||
);
|
||||
}
|
||||
|
||||
/// `Show memories`
|
||||
String get showMemories {
|
||||
return Intl.message(
|
||||
'Show memories',
|
||||
name: 'showMemories',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `{count, plural, one{{count} year ago} other{{count} years ago}}`
|
||||
String yearsAgo(num count) {
|
||||
return Intl.plural(
|
||||
|
|
|
@ -435,6 +435,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"showMemories": "Show memories",
|
||||
"yearsAgo": "{count, plural, one{{count} year ago} other{{count} years ago}}",
|
||||
"backupSettings": "Backup settings",
|
||||
"backupOverMobileData": "Backup over mobile data",
|
||||
|
|
|
@ -173,7 +173,7 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
|
|||
TrashSyncService.instance.init(preferences);
|
||||
RemoteSyncService.instance.init(preferences);
|
||||
await SyncService.instance.init(preferences);
|
||||
MemoriesService.instance.init();
|
||||
MemoriesService.instance.init(preferences);
|
||||
LocalSettings.instance.init(preferences);
|
||||
LocalFileUpdateService.instance.init(preferences);
|
||||
SearchService.instance.init();
|
||||
|
|
|
@ -5,18 +5,23 @@ import "package:photos/core/event_bus.dart";
|
|||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/db/memories_db.dart';
|
||||
import "package:photos/events/files_updated_event.dart";
|
||||
import "package:photos/events/memories_setting_changed.dart";
|
||||
import 'package:photos/models/filters/important_items_filter.dart';
|
||||
import 'package:photos/models/memory.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import "package:shared_preferences/shared_preferences.dart";
|
||||
|
||||
class MemoriesService extends ChangeNotifier {
|
||||
final _logger = Logger("MemoryService");
|
||||
final _memoriesDB = MemoriesDB.instance;
|
||||
final _filesDB = FilesDB.instance;
|
||||
late SharedPreferences _prefs;
|
||||
|
||||
static const daysInAYear = 365;
|
||||
static const yearsBefore = 30;
|
||||
static const daysBefore = 7;
|
||||
static const daysAfter = 1;
|
||||
static const _showMemoryKey = "memories.enabled";
|
||||
|
||||
List<Memory>? _cachedMemories;
|
||||
Future<List<Memory>>? _future;
|
||||
|
@ -25,10 +30,11 @@ class MemoriesService extends ChangeNotifier {
|
|||
|
||||
static final MemoriesService instance = MemoriesService._privateConstructor();
|
||||
|
||||
void init() {
|
||||
void init(SharedPreferences prefs) {
|
||||
addListener(() {
|
||||
_cachedMemories = null;
|
||||
});
|
||||
_prefs = prefs;
|
||||
// Clear memory after a delay, in async manner.
|
||||
// Intention of delay is to give more CPU cycles to other tasks
|
||||
Future.delayed(const Duration(seconds: 5), () {
|
||||
|
@ -54,7 +60,19 @@ class MemoriesService extends ChangeNotifier {
|
|||
_future = null;
|
||||
}
|
||||
|
||||
bool get showMemories {
|
||||
return _prefs.getBool(_showMemoryKey) ?? true;
|
||||
}
|
||||
|
||||
Future<void> setShowMemories(bool value) async {
|
||||
await _prefs.setBool(_showMemoryKey, value);
|
||||
Bus.instance.fire(MemoriesSettingChanged());
|
||||
}
|
||||
|
||||
Future<List<Memory>> getMemories() async {
|
||||
if (!showMemories) {
|
||||
return [];
|
||||
}
|
||||
if (_cachedMemories != null) {
|
||||
return _cachedMemories!;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,43 @@
|
|||
import "dart:async";
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import "package:photos/core/event_bus.dart";
|
||||
import "package:photos/events/memories_setting_changed.dart";
|
||||
import 'package:photos/models/memory.dart';
|
||||
import 'package:photos/services/memories_service.dart';
|
||||
import "package:photos/ui/home/memories/memory_cover_widget.dart";
|
||||
|
||||
class MemoriesWidget extends StatelessWidget {
|
||||
class MemoriesWidget extends StatefulWidget {
|
||||
const MemoriesWidget({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<MemoriesWidget> createState() => _MemoriesWidgetState();
|
||||
}
|
||||
|
||||
class _MemoriesWidgetState extends State<MemoriesWidget> {
|
||||
late StreamSubscription<MemoriesSettingChanged> _subscription;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_subscription = Bus.instance.on<MemoriesSettingChanged>().listen((event) {
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_subscription.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (!MemoriesService.instance.showMemories) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return FutureBuilder<List<Memory>>(
|
||||
future: MemoriesService.instance.getMemories(),
|
||||
builder: (context, snapshot) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import "package:photos/core/error-reporting/super_logging.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/services/memories_service.dart";
|
||||
import "package:photos/services/user_remote_flag_service.dart";
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
import 'package:photos/ui/components/buttons/icon_button_widget.dart';
|
||||
|
@ -94,6 +95,26 @@ class _AdvancedSettingsScreenState extends State<AdvancedSettingsScreen> {
|
|||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
MenuItemWidget(
|
||||
captionedTextWidget: CaptionedTextWidget(
|
||||
title: S.of(context).showMemories,
|
||||
),
|
||||
menuItemColor: colorScheme.fillFaint,
|
||||
singleBorderRadius: 8,
|
||||
alignCaptionedTextToLeft: true,
|
||||
trailingWidget: ToggleSwitchWidget(
|
||||
value: () =>
|
||||
MemoriesService.instance.showMemories,
|
||||
onChanged: () async {
|
||||
MemoriesService.instance.setShowMemories(
|
||||
!MemoriesService.instance.showMemories,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
MenuItemWidget(
|
||||
captionedTextWidget: CaptionedTextWidget(
|
||||
title: S.of(context).manageDeviceStorage,
|
||||
|
|
Loading…
Add table
Reference in a new issue