From 4ee06358b9f74a72963949f471dc9b4df931f6cb Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 21 Jul 2019 12:58:28 +0900 Subject: [PATCH] album: improved section headers --- .../provider/MediaStoreImageProvider.java | 2 -- lib/thumbnail_collection.dart | 33 +++++++++++++++---- lib/utils/date_utils.dart | 9 +++++ 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 lib/utils/date_utils.dart diff --git a/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java b/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java index da32f0320..cfbc82580 100644 --- a/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java +++ b/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java @@ -59,8 +59,6 @@ public class MediaStoreImageProvider { try { Cursor cursor = activity.getContentResolver().query(filesUri, PROJECTION, SELECTION, null, orderBy); if (cursor != null) { - Log.d(LOG_TAG, "fetch query returned " + cursor.getCount() + " entries"); - int idColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID); int pathColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); int mimeTypeColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE); diff --git a/lib/thumbnail_collection.dart b/lib/thumbnail_collection.dart index e286d04b0..2f0040b82 100644 --- a/lib/thumbnail_collection.dart +++ b/lib/thumbnail_collection.dart @@ -1,13 +1,14 @@ import 'package:aves/common/draggable_scrollbar.dart'; import 'package:aves/common/outlined_text.dart'; import 'package:aves/thumbnail.dart'; +import 'package:aves/utils/date_utils.dart'; import "package:collection/collection.dart"; import 'package:flutter/material.dart'; import 'package:flutter_sticky_header/flutter_sticky_header.dart'; import 'package:intl/intl.dart'; class ThumbnailCollection extends StatelessWidget { - final Map> sections; + final Map> sections; final ScrollController scrollController = ScrollController(); ThumbnailCollection(List entries) : sections = groupBy(entries, getDayTaken); @@ -22,11 +23,9 @@ class ThumbnailCollection extends StatelessWidget { return null; } - static DateFormat sectionDateFormat = DateFormat('yyyy/MM/dd'); - - static String getDayTaken(Map entry) { - var date = getBestDate(entry); - return date == null ? 'Unknown' : sectionDateFormat.format(date); + static DateTime getDayTaken(Map entry) { + var d = getBestDate(entry); + return d == null ? null : DateTime(d.year, d.month, d.day); } @override @@ -48,7 +47,7 @@ class ThumbnailCollection extends StatelessWidget { floating: true, ), ...sections.keys.map((sectionKey) => SliverStickyHeader( - header: SectionHeader(sectionKey), + header: DaySectionHeader(sectionKey), sliver: SliverGrid( delegate: SliverChildBuilderDelegate( (context, index) { @@ -72,6 +71,26 @@ class ThumbnailCollection extends StatelessWidget { } } +class DaySectionHeader extends StatelessWidget { + final String text; + + static DateFormat md = DateFormat.MMMMd(); + static DateFormat ymd = DateFormat.yMMMMd(); + + static formatDate(DateTime date) { + if (isToday(date)) return 'Today'; + if (isThisYear(date)) return md.format(date); + return ymd.format(date); + } + + DaySectionHeader(DateTime date) : text = formatDate(date); + + @override + Widget build(BuildContext context) { + return SectionHeader(text); + } +} + class SectionHeader extends StatelessWidget { final String primaryText; diff --git a/lib/utils/date_utils.dart b/lib/utils/date_utils.dart new file mode 100644 index 000000000..7bae16b04 --- /dev/null +++ b/lib/utils/date_utils.dart @@ -0,0 +1,9 @@ +bool isAtSameYearAs(DateTime d1, DateTime d2) => d1 != null && d2 != null && d1.year == d2.year; + +bool isAtSameMonthAs(DateTime d1, DateTime d2) => isAtSameYearAs(d1, d2) && d1.month == d2.month; + +bool isAtSameDayAs(DateTime d1, DateTime d2) => isAtSameMonthAs(d1, d2) && d1.day == d2.day; + +bool isToday(DateTime d) => isAtSameDayAs(d, DateTime.now()); + +bool isThisYear(DateTime d) => isAtSameYearAs(d, DateTime.now());