feat(settings): add appearance toggle to hide the Explore tab
The Explore tab appears for every Plex-backed profile because the Plex Discover catalog source connects implicitly, with no way to opt out short of a Jellyfin-only profile. Add a Show Explore Tab switch to Appearance > Navigation that hides the tab in the bottom navigation and side rail. UI-only: catalog sources stay connected so watchlist surfaces keep working while the tab is hidden. close #1844
This commit is contained in:
@@ -11,6 +11,7 @@ import 'package:plezy/media/media_backend.dart';
|
||||
import 'package:plezy/media/media_kind.dart';
|
||||
import 'package:plezy/media/media_library.dart';
|
||||
import 'package:plezy/navigation/navigation_tabs.dart';
|
||||
import 'package:plezy/providers/catalog_sources_provider.dart';
|
||||
import 'package:plezy/providers/hidden_libraries_provider.dart';
|
||||
import 'package:plezy/providers/libraries_provider.dart';
|
||||
import 'package:plezy/providers/multi_server_provider.dart';
|
||||
@@ -25,6 +26,12 @@ import '../test_helpers/multi_server_fixtures.dart';
|
||||
import '../test_helpers/prefs.dart';
|
||||
import '../test_helpers/theme.dart';
|
||||
|
||||
/// Minimal source-bearing stand-in: the rail only reads [hasAnySource].
|
||||
class _FakeCatalogSourcesProvider extends CatalogSourcesProvider {
|
||||
@override
|
||||
bool get hasAnySource => true;
|
||||
}
|
||||
|
||||
MediaLibrary _library({
|
||||
required String id,
|
||||
required String title,
|
||||
@@ -68,6 +75,7 @@ Future<void> _pumpBasicRail(
|
||||
bool isSidebarFocused = false,
|
||||
bool alwaysExpanded = false,
|
||||
double? height,
|
||||
CatalogSourcesProvider? catalogSources,
|
||||
}) async {
|
||||
await SettingsService.getInstance();
|
||||
|
||||
@@ -102,6 +110,7 @@ Future<void> _pumpBasicRail(
|
||||
ChangeNotifierProvider<LibrariesProvider>.value(value: librariesProvider),
|
||||
ChangeNotifierProvider<HiddenLibrariesProvider>.value(value: hiddenLibrariesProvider),
|
||||
ChangeNotifierProvider<MultiServerProvider>.value(value: multiServerProvider),
|
||||
if (catalogSources != null) ChangeNotifierProvider<CatalogSourcesProvider>.value(value: catalogSources),
|
||||
],
|
||||
child: MaterialApp(
|
||||
theme: ThemeData(extensions: const [testMonoTokens]),
|
||||
@@ -295,6 +304,22 @@ void main() {
|
||||
expect(targetRect.bottom, lessThanOrEqualTo(railRect.bottom));
|
||||
});
|
||||
|
||||
testWidgets('Explore item follows the showExploreTab appearance setting', (tester) async {
|
||||
final catalogSources = _FakeCatalogSourcesProvider();
|
||||
addTearDown(catalogSources.dispose);
|
||||
|
||||
await _pumpBasicRail(tester, alwaysExpanded: true, catalogSources: catalogSources);
|
||||
expect(find.widgetWithText(NavigationRailItem, 'Explore'), findsOneWidget);
|
||||
|
||||
await SettingsService.instance.write(SettingsService.showExploreTab, false);
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.widgetWithText(NavigationRailItem, 'Explore'), findsNothing);
|
||||
|
||||
await SettingsService.instance.write(SettingsService.showExploreTab, true);
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.widgetWithText(NavigationRailItem, 'Explore'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('reports interaction expansion for shell content push', (tester) async {
|
||||
await SettingsService.getInstance();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user