From 52a89a0a12ccd2d6002d4cfbb10706605d49095b Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Fri, 23 Jun 2023 15:41:40 +0530 Subject: [PATCH] AlbumRowItem: Add support for showing incoming collections Signed-off-by: Neeraj Gupta <254676+ua741@users.noreply.github.com> --- lib/ui/collections/album/row_item.dart | 68 +++++++++++++++++-------- lib/ui/tabs/shared_collections_tab.dart | 12 ++++- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/lib/ui/collections/album/row_item.dart b/lib/ui/collections/album/row_item.dart index 03586e6f5..36061ab18 100644 --- a/lib/ui/collections/album/row_item.dart +++ b/lib/ui/collections/album/row_item.dart @@ -7,6 +7,7 @@ import "package:photos/models/file.dart"; import 'package:photos/models/gallery_type.dart'; import "package:photos/services/collections_service.dart"; import 'package:photos/theme/ente_theme.dart'; +import "package:photos/ui/sharing/user_avator_widget.dart"; import 'package:photos/ui/viewer/file/no_thumbnail_widget.dart'; import 'package:photos/ui/viewer/file/thumbnail_widget.dart'; import 'package:photos/ui/viewer/gallery/collection_page.dart'; @@ -18,13 +19,18 @@ class AlbumRowItemWidget extends StatelessWidget { final bool showFileCount; final String tagPrefix; - AlbumRowItemWidget( + // Set it to true if the album is shared with user. + // Based on this, we will show the shared album owner's avatar. + final bool isIncomingAlbum; + + const AlbumRowItemWidget( this.c, this.sideOfThumbnail, { + super.key, this.showFileCount = true, this.tagPrefix = "collection", - Key? key, - }) : super(key: Key(c.id.toString())); + this.isIncomingAlbum = false, + }); @override Widget build(BuildContext context) { @@ -40,26 +46,44 @@ class AlbumRowItemWidget extends StatelessWidget { child: SizedBox( height: sideOfThumbnail, width: sideOfThumbnail, - child: FutureBuilder( - future: CollectionsService.instance.getCover(c), - builder: (context, snapshot) { - if (snapshot.hasData) { - final thumbnail = snapshot.data!; - final String heroTag = tagPrefix + thumbnail.tag; - return Hero( - tag: heroTag, - child: ThumbnailWidget( - thumbnail, - shouldShowArchiveStatus: c.isArchived(), - showFavForAlbumOnly: true, - shouldShowSyncStatus: false, - key: Key(heroTag), + child: Stack( + children: [ + FutureBuilder( + future: CollectionsService.instance.getCover(c), + builder: (context, snapshot) { + if (snapshot.hasData) { + final thumbnail = snapshot.data!; + final String heroTag = tagPrefix + thumbnail.tag; + return Hero( + tag: heroTag, + child: ThumbnailWidget( + thumbnail, + shouldShowArchiveStatus: isIncomingAlbum + ? c.hasShareeArchived() + : c.isArchived(), + showFavForAlbumOnly: true, + shouldShowSyncStatus: false, + key: Key(heroTag), + ), + ); + } else { + return const NoThumbnailWidget(); + } + }, + ), + if (isIncomingAlbum) + Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: + const EdgeInsets.only(right: 8.0, bottom: 8.0), + child: UserAvatarWidget( + c.owner!, + thumbnailView: true, + ), ), - ); - } else { - return const NoThumbnailWidget(); - } - }, + ), + ], ), ), ), diff --git a/lib/ui/tabs/shared_collections_tab.dart b/lib/ui/tabs/shared_collections_tab.dart index e06281c21..c32da64a9 100644 --- a/lib/ui/tabs/shared_collections_tab.dart +++ b/lib/ui/tabs/shared_collections_tab.dart @@ -12,10 +12,10 @@ import "package:photos/generated/l10n.dart"; import 'package:photos/models/collection.dart'; import 'package:photos/models/collection_items.dart'; import 'package:photos/services/collections_service.dart'; +import "package:photos/ui/collections/album/row_item.dart"; import 'package:photos/ui/common/loading_widget.dart'; import 'package:photos/ui/tabs/section_title.dart'; import "package:photos/ui/tabs/shared/empty_state.dart"; -import "package:photos/ui/tabs/shared/incoming_album_item.dart"; import "package:photos/ui/tabs/shared/outgoing_album_item.dart"; class SharedCollectionsTab extends StatefulWidget { @@ -78,6 +78,7 @@ class _SharedCollectionsTabState extends State } Widget _getSharedCollectionsGallery(SharedCollections collections) { + const maxThumbnailWidth = 160.0; const double horizontalPaddingOfGridRow = 16; const double crossAxisSpacingOfGrid = 9; final Size size = MediaQuery.of(context).size; @@ -102,9 +103,16 @@ class _SharedCollectionsTabState extends State scrollDirection: Axis.vertical, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { - return IncomingAlbumItem( + return AlbumRowItemWidget( collections.incoming[index], + maxThumbnailWidth, + tagPrefix: "" + "shared_collection", + isIncomingAlbum: true, ); + // return IncomingAlbumItem( + // collections.incoming[index], + // ); }, itemCount: collections.incoming.length, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(