Move memories settings to General > Memories

This commit is contained in:
ashilkn
2025-07-28 17:18:20 +05:30
parent ba9337a3b6
commit 35ede58e78
3 changed files with 174 additions and 94 deletions

View File

@@ -1,19 +1,12 @@
import "dart:async";
import "package:flutter/material.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/events/hide_shared_items_from_home_gallery_event.dart";
import "package:photos/events/memories_changed_event.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/memory_home_widget_service.dart";
import "package:photos/theme/ente_theme.dart";
import "package:photos/ui/components/buttons/icon_button_widget.dart";
import "package:photos/ui/components/captioned_text_widget.dart";
import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart";
import "package:photos/ui/components/title_bar_title_widget.dart";
import "package:photos/ui/components/title_bar_widget.dart";
import "package:photos/ui/components/toggle_switch_widget.dart";
import "package:photos/ui/viewer/gallery/component/group/type.dart";
import "package:photos/ui/viewer/gallery/gallery_group_type_picker_page.dart";
import "package:photos/ui/viewer/gallery/photo_grid_size_picker_page.dart";
@@ -130,82 +123,6 @@ class _GallerySettingsScreenState extends State<GallerySettingsScreen> {
isGestureDetectorDisabled: true,
),
),
const SizedBox(
height: 24,
),
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).showMemories,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () => memoriesCacheService.showAnyMemories,
onChanged: () async {
await memoriesCacheService.setShowAnyMemories(
!memoriesCacheService.showAnyMemories,
);
if (!memoriesCacheService.showAnyMemories) {
unawaited(
MemoryHomeWidgetService.instance.clearWidget(),
);
}
setState(() {});
},
),
),
const SizedBox(
height: 24,
),
memoriesCacheService.curatedMemoriesOption
? MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).curatedMemories,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () =>
localSettings.isSmartMemoriesEnabled,
onChanged: () async {
unawaited(_toggleUpdateMemories());
},
),
)
: const SizedBox(),
memoriesCacheService.curatedMemoriesOption
? const SizedBox(
height: 24,
)
: const SizedBox(),
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).hideSharedItemsFromHomeGallery,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () =>
localSettings.hideSharedItemsFromHomeGallery,
onChanged: () async {
final prevSetting =
localSettings.hideSharedItemsFromHomeGallery;
await localSettings
.setHideSharedItemsFromHomeGallery(
!prevSetting,
);
Bus.instance.fire(
HideSharedItemsFromHomeGalleryEvent(
!prevSetting,
),
);
},
),
),
],
),
);
@@ -218,14 +135,3 @@ class _GallerySettingsScreenState extends State<GallerySettingsScreen> {
);
}
}
Future<void> _toggleUpdateMemories() async {
await localSettings.setSmartMemories(
!localSettings.isSmartMemoriesEnabled,
);
await memoriesCacheService.clearMemoriesCache(
fromDisk: false,
);
await memoriesCacheService.getMemories();
Bus.instance.fire(MemoriesChangedEvent());
}

View File

@@ -15,6 +15,7 @@ import 'package:photos/ui/settings/advanced_settings_screen.dart';
import 'package:photos/ui/settings/common_settings.dart';
import "package:photos/ui/settings/gallery_settings_screen.dart";
import "package:photos/ui/settings/language_picker.dart";
import "package:photos/ui/settings/memories_settings_screen.dart";
import "package:photos/ui/settings/notification_settings_screen.dart";
import "package:photos/ui/settings/widget_settings_screen.dart";
import 'package:photos/utils/navigation_util.dart';
@@ -47,6 +48,18 @@ class GeneralSectionWidget extends StatelessWidget {
},
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).memories,
),
pressedColor: getEnteColorScheme(context).fillFaint,
trailingIcon: Icons.chevron_right_outlined,
trailingIconIsMuted: true,
onTap: () async {
_onMemoriesSettingsTapped(context);
},
),
sectionOptionSpacing,
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).referrals,
@@ -175,4 +188,11 @@ class GeneralSectionWidget extends StatelessWidget {
),
);
}
void _onMemoriesSettingsTapped(BuildContext context) {
routeToPage(
context,
const MemoriesSettingsScreen(),
);
}
}

View File

@@ -0,0 +1,154 @@
import "dart:async";
import "package:flutter/material.dart";
import "package:photos/core/event_bus.dart";
import "package:photos/events/hide_shared_items_from_home_gallery_event.dart";
import "package:photos/events/memories_changed_event.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/memory_home_widget_service.dart";
import "package:photos/theme/ente_theme.dart";
import "package:photos/ui/components/buttons/icon_button_widget.dart";
import "package:photos/ui/components/captioned_text_widget.dart";
import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart";
import "package:photos/ui/components/title_bar_title_widget.dart";
import "package:photos/ui/components/title_bar_widget.dart";
import "package:photos/ui/components/toggle_switch_widget.dart";
class MemoriesSettingsScreen extends StatefulWidget {
const MemoriesSettingsScreen({
super.key,
});
@override
State<MemoriesSettingsScreen> createState() => _MemoriesSettingsScreenState();
}
class _MemoriesSettingsScreenState extends State<MemoriesSettingsScreen> {
@override
Widget build(BuildContext context) {
final colorScheme = getEnteColorScheme(context);
return Scaffold(
body: CustomScrollView(
primary: false,
slivers: <Widget>[
TitleBarWidget(
flexibleSpaceTitle: TitleBarTitleWidget(
title: S.of(context).memories,
),
actionIcons: [
IconButtonWidget(
icon: Icons.close_outlined,
iconButtonType: IconButtonType.secondary,
onTap: () {
Navigator.pop(context);
Navigator.pop(context);
},
),
],
),
SliverList(
delegate: SliverChildBuilderDelegate(
(delegateBuildContext, index) {
return Padding(
padding:
const EdgeInsets.symmetric(horizontal: 16, vertical: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).showMemories,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () => memoriesCacheService.showAnyMemories,
onChanged: () async {
await memoriesCacheService.setShowAnyMemories(
!memoriesCacheService.showAnyMemories,
);
if (!memoriesCacheService.showAnyMemories) {
unawaited(
MemoryHomeWidgetService.instance.clearWidget(),
);
}
setState(() {});
},
),
),
const SizedBox(
height: 24,
),
memoriesCacheService.curatedMemoriesOption
? MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).curatedMemories,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () =>
localSettings.isSmartMemoriesEnabled,
onChanged: () async {
unawaited(_toggleUpdateMemories());
},
),
)
: const SizedBox(),
memoriesCacheService.curatedMemoriesOption
? const SizedBox(
height: 24,
)
: const SizedBox(),
MenuItemWidget(
captionedTextWidget: CaptionedTextWidget(
title: S.of(context).hideSharedItemsFromHomeGallery,
),
menuItemColor: colorScheme.fillFaint,
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () =>
localSettings.hideSharedItemsFromHomeGallery,
onChanged: () async {
final prevSetting =
localSettings.hideSharedItemsFromHomeGallery;
await localSettings
.setHideSharedItemsFromHomeGallery(
!prevSetting,
);
Bus.instance.fire(
HideSharedItemsFromHomeGalleryEvent(
!prevSetting,
),
);
},
),
),
],
),
);
},
childCount: 1,
),
),
],
),
);
}
}
Future<void> _toggleUpdateMemories() async {
await localSettings.setSmartMemories(
!localSettings.isSmartMemoriesEnabled,
);
await memoriesCacheService.clearMemoriesCache(
fromDisk: false,
);
await memoriesCacheService.getMemories();
Bus.instance.fire(MemoriesChangedEvent());
}