feat(library): add a toggle to hide watched indicators on cards

Watched posters always carried the corner checkmark, and viewers who
find it noisy had no way to turn it off. A new Appearance switch,
Show Watched Indicators (default on), gates the checkmark on every
surface that stamps watch state onto artwork: grid cards, hub rows,
folder tree rows, episode and playlist thumbnails. Progress bars and the
unwatched-count pill keep their own behavior.

close #1998
This commit is contained in:
edde746
2026-09-05 04:18:35 +02:00
parent 4f9e527ef2
commit f45eaf1367
30 changed files with 134 additions and 11 deletions
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Yan menyu genişlənmiş qalır və məzmun sahəsi buna uyğunlaşır",
"showUnwatchedCount": "Baxılmamış sayını göstər",
"showUnwatchedCountDescription": "Seriallarda və mövsümlərdə baxılmamış seriya sayını göstər",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Kartlarda seriya nömrəsini göstər",
"showEpisodeNumberOnCardsDescription": "Seriya kartlarında mövsüm və seriya nömrəsini göstər",
"showSeasonPostersOnTabs": "Mərhələlərdə mövsüm posterlərini göstər",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Страничната лента остава разгъната и зоната със съдържание се наглася да пасне",
"showUnwatchedCount": "Показвай броя негледани",
"showUnwatchedCountDescription": "Показвай броя негледани епизоди при сериали и сезони",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Показвай номера на епизода върху картите",
"showEpisodeNumberOnCardsDescription": "Показвай сезон и номер на епизод върху картите на епизодите",
"showSeasonPostersOnTabs": "Показвай постери на сезоните в табовете",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Sidepanelet forbliver udvidet, og indholdsområdet tilpasser sig",
"showUnwatchedCount": "Vis antal usete",
"showUnwatchedCountDescription": "Vis antal usete episoder på serier og sæsoner",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Vis episodenummer på kort",
"showEpisodeNumberOnCardsDescription": "Vis sæson- og episodenummer på episodekort",
"showSeasonPostersOnTabs": "Vis sæsonplakater på faner",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Seitenleiste bleibt erweitert und Inhaltsbereich passt sich an",
"showUnwatchedCount": "Anzahl nicht gesehener Folgen anzeigen",
"showUnwatchedCountDescription": "Zeigt die Anzahl nicht gesehener Episoden bei Serien und Staffeln an",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Episodennummer auf Karten anzeigen",
"showEpisodeNumberOnCardsDescription": "Staffel- und Episodennummer auf Episodenkarten anzeigen",
"showSeasonPostersOnTabs": "Staffelposter auf Tabs anzeigen",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Sidebar stays expanded and content area adjusts to fit",
"showUnwatchedCount": "Show Unwatched Count",
"showUnwatchedCountDescription": "Display unwatched episode count on shows and seasons",
"showWatchedIndicators": "Show Watched Indicators",
"showWatchedIndicatorsDescription": "Display a checkmark on watched movies, shows, and episodes",
"showEpisodeNumberOnCards": "Show Episode Number on Cards",
"showEpisodeNumberOnCardsDescription": "Show season and episode number on episode cards",
"showSeasonPostersOnTabs": "Show Season Posters on Tabs",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "La barra lateral permanece expandida y el área de contenido se ajusta para adaptarse",
"showUnwatchedCount": "Mostrar el número de elementos no vistos",
"showUnwatchedCountDescription": "Mostrar el número de episodios no vistos en series y temporadas",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Mostrar número de episodio en las tarjetas",
"showEpisodeNumberOnCardsDescription": "Mostrar temporada y episodio en tarjetas de episodio",
"showSeasonPostersOnTabs": "Mostrar pósters de temporada en las pestañas",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "La barre latérale reste étendue et la zone de contenu s'adapte",
"showUnwatchedCount": "Afficher le nombre d’éléments non vus",
"showUnwatchedCountDescription": "Afficher le nombre d’épisodes non vus pour les séries et les saisons",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Afficher le numéro de l’épisode sur les cartes",
"showEpisodeNumberOnCardsDescription": "Afficher les numéros de saison et d’épisode sur les cartes d’épisode",
"showSeasonPostersOnTabs": "Afficher les affiches de saison sur les onglets",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Az oldalsáv kibontva marad, a tartalom területe igazodik hozzá",
"showUnwatchedCount": "Nem látott elemek számának megjelenítése",
"showUnwatchedCountDescription": "Megjeleníti a még nem látott epizódok számát a sorozatoknál és évadoknál",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Epizódszám megjelenítése a kártyákon",
"showEpisodeNumberOnCardsDescription": "Megjeleníti az évad- és epizódszámot az epizódkártyákon",
"showSeasonPostersOnTabs": "Évadborítók megjelenítése a füleken",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "La barra laterale rimane espansa e l'area del contenuto si adatta",
"showUnwatchedCount": "Mostra il numero di episodi non visti",
"showUnwatchedCountDescription": "Mostra il numero di episodi non visti per serie e stagioni",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Mostra il numero dell'episodio sulle schede",
"showEpisodeNumberOnCardsDescription": "Mostra il numero della stagione e dell'episodio sulle schede degli episodi",
"showSeasonPostersOnTabs": "Mostra i poster delle stagioni nelle schede",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "サイドバーを展開したままにし、コンテンツ領域を幅に合わせて調整します",
"showUnwatchedCount": "未視聴数を表示",
"showUnwatchedCountDescription": "番組とシーズンに未視聴エピソード数を表示",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "カードにエピソード番号を表示",
"showEpisodeNumberOnCardsDescription": "エピソードカードにシーズン番号とエピソード番号を表示します",
"showSeasonPostersOnTabs": "タブにシーズンポスターを表示",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Жүйелік мәзір ашық күйінде қалады",
"showUnwatchedCount": "Көрілмегендер санын көрсету",
"showUnwatchedCountDescription": "Сериалдар мен маусымдарда көрілмеген бөлімдер санын көрсету",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Карточкаларда бөлім нөмірін көрсету",
"showEpisodeNumberOnCardsDescription": "Бөлім карточкаларында маусым мен бөлім нөмірін көрсету",
"showSeasonPostersOnTabs": "Қойындыларда маусым постерлерін көрсету",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "사이드바가 확장된 상태로 유지되고 콘텐츠 영역이 맞춰집니다",
"showUnwatchedCount": "미시청 수 표시",
"showUnwatchedCountDescription": "시리즈 및 시즌에 미시청 에피소드 수 표시",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "카드에 에피소드 번호 표시",
"showEpisodeNumberOnCardsDescription": "에피소드 카드에 시즌 및 에피소드 번호 표시",
"showSeasonPostersOnTabs": "탭에 시즌 포스터 표시",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Sidefeltet forblir utvidet og innholdsområdet tilpasser seg",
"showUnwatchedCount": "Vis antall usette",
"showUnwatchedCountDescription": "Vis antall usette episoder på serier og sesonger",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Vis episodenummer på kort",
"showEpisodeNumberOnCardsDescription": "Vis sesong- og episodenummer på episodekort",
"showSeasonPostersOnTabs": "Vis sesongplakater på faner",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Zijbalk blijft uitgevouwen en inhoudsgebied past zich aan",
"showUnwatchedCount": "Aantal ongekeken tonen",
"showUnwatchedCountDescription": "Toon aantal ongekeken afleveringen bij series en seizoenen",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Afleveringsnummer op kaarten tonen",
"showEpisodeNumberOnCardsDescription": "Toon seizoen- en afleveringsnummer op afleveringskaarten",
"showSeasonPostersOnTabs": "Toon seizoensposters op tabbladen",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Panel boczny jest rozwinięty, a obszar treści dostosowuje się",
"showUnwatchedCount": "Pokaż liczbę nieobejrzanych",
"showUnwatchedCountDescription": "Wyświetl liczbę nieobejrzanych odcinków w serialach i sezonach",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Pokaż numer odcinka na kartach",
"showEpisodeNumberOnCardsDescription": "Pokazuj numer sezonu i odcinka na kartach odcinków",
"showSeasonPostersOnTabs": "Pokaż plakaty sezonów na zakładkach",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "A barra lateral fica expandida e a área de conteúdo se ajusta",
"showUnwatchedCount": "Mostrar Contagem de Não Assistidos",
"showUnwatchedCountDescription": "Exibir contagem de episódios não assistidos em séries e temporadas",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Mostrar Número do Episódio nos Cards",
"showEpisodeNumberOnCardsDescription": "Mostrar temporada e episódio nos cartões de episódio",
"showSeasonPostersOnTabs": "Mostrar Pôsteres de Temporada nas Abas",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Боковая панель остаётся развёрнутой, область контента подстраивается",
"showUnwatchedCount": "Показывать количество непросмотренных",
"showUnwatchedCountDescription": "Отображать количество непросмотренных эпизодов для сериалов и сезонов",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Показывать номер эпизода на карточках",
"showEpisodeNumberOnCardsDescription": "Показывать номер сезона и серии на карточках серий",
"showSeasonPostersOnTabs": "Показывать постеры сезонов на вкладках",
+1 -1
View File
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 22
/// Strings: 43756 (1988 per locale)
/// Strings: 43758 (1989 per locale)
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+14 -6
View File
@@ -546,6 +546,12 @@ class Translations$settings$en {
/// en: 'Display unwatched episode count on shows and seasons'
String get showUnwatchedCountDescription => 'Display unwatched episode count on shows and seasons';
/// en: 'Show Watched Indicators'
String get showWatchedIndicators => 'Show Watched Indicators';
/// en: 'Display a checkmark on watched movies, shows, and episodes'
String get showWatchedIndicatorsDescription => 'Display a checkmark on watched movies, shows, and episodes';
/// en: 'Show Episode Number on Cards'
String get showEpisodeNumberOnCards => 'Show Episode Number on Cards';
@@ -7129,6 +7135,8 @@ extension on Translations {
'settings.alwaysKeepSidebarOpenDescription' => 'Sidebar stays expanded and content area adjusts to fit',
'settings.showUnwatchedCount' => 'Show Unwatched Count',
'settings.showUnwatchedCountDescription' => 'Display unwatched episode count on shows and seasons',
'settings.showWatchedIndicators' => 'Show Watched Indicators',
'settings.showWatchedIndicatorsDescription' => 'Display a checkmark on watched movies, shows, and episodes',
'settings.showEpisodeNumberOnCards' => 'Show Episode Number on Cards',
'settings.showEpisodeNumberOnCardsDescription' => 'Show season and episode number on episode cards',
'settings.showSeasonPostersOnTabs' => 'Show Season Posters on Tabs',
@@ -7484,10 +7492,10 @@ extension on Translations {
'fileInfo.previewIndex' => 'Preview Index',
'fileInfo.packetLength' => 'Packet Length',
'fileInfo.filePresent' => 'File Present',
'fileInfo.fileReadable' => 'Readable by Server',
'fileInfo.streamPath' => 'Stream Path',
_ => null,
} ?? switch (path) {
'fileInfo.fileReadable' => 'Readable by Server',
'fileInfo.streamPath' => 'Stream Path',
'fileInfo.optimizedForStreaming' => 'Optimized for Streaming',
'fileInfo.has64bitOffsets' => '64-bit Offsets',
'fileInfo.protocol' => 'Protocol',
@@ -7998,10 +8006,10 @@ extension on Translations {
'libraries.groupings.shows' => 'TV Shows',
'libraries.groupings.seasons' => 'Seasons',
'libraries.groupings.episodes' => 'Episodes',
'libraries.groupings.artists' => 'Artists',
'libraries.groupings.albums' => 'Albums',
_ => null,
} ?? switch (path) {
'libraries.groupings.artists' => 'Artists',
'libraries.groupings.albums' => 'Albums',
'libraries.groupings.tracks' => 'Tracks',
'libraries.groupings.folders' => 'Folders',
'libraries.filterCategories.genre' => 'Genre',
@@ -8512,10 +8520,10 @@ extension on Translations {
'downloads.includeSpecials' => 'Include Specials',
'downloads.howManyEpisodes' => 'How many episodes?',
'downloads.invalidEpisodeCount' => 'Enter a valid episode count.',
'downloads.keepSynced' => 'Keep synced',
'downloads.downloadOnce' => 'Download once',
_ => null,
} ?? switch (path) {
'downloads.keepSynced' => 'Keep synced',
'downloads.downloadOnce' => 'Download once',
'downloads.keepNUnwatched' => ({required Object count}) => 'Keep ${count} unwatched',
'downloads.editSyncRule' => 'Edit sync rule',
'downloads.removeSyncRule' => 'Remove sync rule',
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Sidofältet förblir utfällt och innehållsytan anpassas efter det",
"showUnwatchedCount": "Visa antal osedda",
"showUnwatchedCountDescription": "Visa antal osedda avsnitt för serier och säsonger",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Visa avsnittsnummer på kort",
"showEpisodeNumberOnCardsDescription": "Visa säsongs- och avsnittsnummer på avsnittskort",
"showSeasonPostersOnTabs": "Visa säsongsaffischer på flikar",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Yan menü genişletilmiş kalır ve içerik alanı buna göre ayarlanır",
"showUnwatchedCount": "İzlenmemiş Sayısını Göster",
"showUnwatchedCountDescription": "Dizilerde ve sezonlarda izlenmemiş bölüm sayısını göster",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Kartlarda Bölüm Numarasını Göster",
"showEpisodeNumberOnCardsDescription": "Bölüm kartlarında sezon ve bölüm numarasını göster",
"showSeasonPostersOnTabs": "Sekmelerde Sezon Afişlerini Göster",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "Yon menyu ochiq holatda qoladi",
"showUnwatchedCount": "Koʻrilmaganlar sonini koʻrsatish",
"showUnwatchedCountDescription": "Seriallar va mavsumlarda koʻrilmagan qismlar sonini koʻrsatish",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "Kartochkalarda qism raqamini koʻrsatish",
"showEpisodeNumberOnCardsDescription": "Qism kartochkalarida mavsum va qism raqamini koʻrsatish",
"showSeasonPostersOnTabs": "Varaqlarda mavsum posterlarini koʻrsatish",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "側邊欄保持展開狀態,內容區域自動調整",
"showUnwatchedCount": "顯示未觀看數量",
"showUnwatchedCountDescription": "在影集和單季上顯示未觀看的集數",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "在卡片上顯示集數",
"showEpisodeNumberOnCardsDescription": "在單集卡片上顯示季和集編號",
"showSeasonPostersOnTabs": "在索引標籤上顯示單季海報",
+2
View File
@@ -169,6 +169,8 @@
"alwaysKeepSidebarOpenDescription": "侧边栏保持展开状态,内容区域自动调整",
"showUnwatchedCount": "显示未观看数量",
"showUnwatchedCountDescription": "在剧集和季上显示未观看集数",
"showWatchedIndicators": "",
"showWatchedIndicatorsDescription": "",
"showEpisodeNumberOnCards": "在卡片上显示集数",
"showEpisodeNumberOnCardsDescription": "在剧集卡片上显示季和集编号",
"showSeasonPostersOnTabs": "在选项卡上显示季海报",
@@ -395,6 +395,7 @@ class _FolderTreeItemState extends State<FolderTreeItem> with ContextMenuTapMixi
SettingsService.episodePosterMode,
SettingsService.hideSpoilers,
SettingsService.showUnwatchedCount,
SettingsService.showWatchedIndicators,
],
builder: _buildMediaRow,
);
@@ -65,8 +65,12 @@ class AppearanceSettingsScreen extends StatelessWidget {
title: t.settings.hideSpoilers,
subtitle: t.settings.hideSpoilersDescription,
),
// TODO: "Show watched indicators" toggle (#1998) goes here; the
// pref gates the corner badge on media cards and grid tiles.
SettingSwitchTile(
pref: SettingsService.showWatchedIndicators,
icon: Symbols.check_circle_rounded,
title: t.settings.showWatchedIndicators,
subtitle: t.settings.showWatchedIndicatorsDescription,
),
if (PlatformDetector.isTV())
SettingSwitchTile(
pref: SettingsService.tvFullCardLayout,
+5
View File
@@ -620,6 +620,10 @@ class SettingsService extends BaseSharedPreferencesService {
/// stays collapsed across launches instead of springing back open (#1896).
static const librariesSectionExpanded = BoolPref('libraries_section_expanded', defaultValue: true);
static const showUnwatchedCount = BoolPref('show_unwatched_count', defaultValue: true);
/// The corner checkmark on watched posters/thumbnails (#1998). Progress bars
/// and unwatched counts are unaffected.
static const showWatchedIndicators = BoolPref('show_watched_indicators', defaultValue: true);
static const showEpisodeNumberOnCards = BoolPref('show_episode_number_on_cards', defaultValue: true);
static const showSeasonPostersOnTabs = BoolPref('show_season_posters_on_tabs');
static const hideSpoilers = BoolPref('hide_spoilers');
@@ -1159,6 +1163,7 @@ class SettingsService extends BaseSharedPreferencesService {
alwaysKeepSidebarOpen,
librariesSectionExpanded,
showUnwatchedCount,
showWatchedIndicators,
showEpisodeNumberOnCards,
showSeasonPostersOnTabs,
hideSpoilers,
+1
View File
@@ -435,6 +435,7 @@ class MediaCardState extends State<MediaCard> with ContextMenuTapMixin<MediaCard
SettingsService.showEpisodeNumberOnCards,
SettingsService.hideSpoilers,
SettingsService.showUnwatchedCount,
SettingsService.showWatchedIndicators,
],
builder: _buildContent,
);
+5 -2
View File
@@ -55,7 +55,9 @@ enum WatchedIndicatorSize {
/// Watched/progress overlay for media artwork: watched checkmark,
/// unwatched-count pill (shows/seasons), active-progress bar, and season
/// completion bar. The single implementation behind every surface that
/// stamps watch state onto a poster/thumbnail.
/// stamps watch state onto a poster/thumbnail. Callers that must react to
/// [SettingsService.showWatchedIndicators] or [SettingsService.showUnwatchedCount]
/// flipping wrap themselves in a [SettingsBuilder] on those prefs.
class WatchedIndicator extends StatelessWidget {
final MediaItem item;
final WatchedIndicatorSize size;
@@ -75,6 +77,7 @@ class WatchedIndicator extends StatelessWidget {
@override
Widget build(BuildContext context) {
final bool showCount = showUnwatchedCount ?? SettingsService.instance.read(SettingsService.showUnwatchedCount);
final bool showWatched = SettingsService.instance.read(SettingsService.showWatchedIndicators);
final hasActiveProgress = item.hasActiveProgress;
final unwatched = item.unwatchedCount;
final barRadius = BorderRadius.only(
@@ -85,7 +88,7 @@ class WatchedIndicator extends StatelessWidget {
return Stack(
children: [
// Watched checkmark
if (item.isWatched && !hasActiveProgress)
if (showWatched && item.isWatched && !hasActiveProgress)
Positioned(
top: size.checkInset,
right: size.checkInset,
+57
View File
@@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:plezy/media/media_kind.dart';
import 'package:plezy/services/settings_service.dart';
import 'package:plezy/theme/mono_theme.dart';
import 'package:plezy/widgets/media_progress_bar.dart';
import 'package:plezy/widgets/unwatched_count_badge.dart';
import 'package:plezy/widgets/watched_indicator.dart';
import '../test_helpers/media_items.dart';
import '../test_helpers/prefs.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
setUp(() async {
resetSharedPreferencesForTest();
SettingsService.resetForTesting();
await SettingsService.getInstance();
});
Future<void> pump(WidgetTester tester, WatchedIndicator indicator) => tester.pumpWidget(
MaterialApp(
theme: monoTheme(dark: true),
home: SizedBox(width: 200, height: 300, child: indicator),
),
);
final watchedMovie = testMediaItem(id: 'movie', kind: MediaKind.movie, viewCount: 1);
testWidgets('shows the watched checkmark by default', (tester) async {
await pump(tester, WatchedIndicator(item: watchedMovie));
expect(find.byIcon(Symbols.check_rounded), findsOneWidget);
});
testWidgets('hides only the checkmark when watched indicators are off (#1998)', (tester) async {
await SettingsService.instance.write(SettingsService.showWatchedIndicators, false);
final partiallyWatchedShow = testMediaItem(id: 'show', kind: MediaKind.show, leafCount: 10, viewedLeafCount: 4);
final inProgressMovie = testMediaItem(
id: 'movie-2',
kind: MediaKind.movie,
durationMs: 100000,
viewOffsetMs: 50000,
);
await pump(tester, WatchedIndicator(item: watchedMovie));
expect(find.byIcon(Symbols.check_rounded), findsNothing);
await pump(tester, WatchedIndicator(item: partiallyWatchedShow));
expect(find.byType(UnwatchedCountBadge), findsOneWidget, reason: 'unwatched counts are a separate pref');
await pump(tester, WatchedIndicator(item: inProgressMovie));
expect(find.byType(MediaProgressBar), findsOneWidget, reason: 'progress bars are not indicators');
});
}