@@ -24,12 +24,11 @@ import 'package:flutter_material_design_icons/flutter_material_design_icons.dart
2424import 'package:flutter_mozilla_components/flutter_mozilla_components.dart' ;
2525import 'package:go_router/go_router.dart' ;
2626import 'package:hooks_riverpod/hooks_riverpod.dart' ;
27- import 'package:share_plus/share_plus.dart' ;
2827import 'package:weblibre/core/providers/defaults.dart' ;
2928import 'package:weblibre/core/routing/routes.dart' ;
3029import 'package:weblibre/features/geckoview/domain/controllers/bottom_sheet.dart' ;
30+ import 'package:weblibre/features/geckoview/domain/entities/states/readerable.dart' ;
3131import 'package:weblibre/features/geckoview/domain/providers.dart' ;
32- import 'package:weblibre/features/geckoview/domain/providers/desktop_mode.dart' ;
3332import 'package:weblibre/features/geckoview/domain/providers/selected_tab.dart' ;
3433import 'package:weblibre/features/geckoview/domain/providers/tab_session.dart' ;
3534import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart' ;
@@ -40,8 +39,8 @@ import 'package:weblibre/features/geckoview/features/browser/presentation/widget
4039import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart' ;
4140import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/extension_shortcut_menu.dart' ;
4241import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/tab_creation_menu.dart' ;
42+ import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/tab_menu.dart' ;
4343import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/tabs_action_button.dart' ;
44- import 'package:weblibre/features/geckoview/features/find_in_page/presentation/controllers/find_in_page.dart' ;
4544import 'package:weblibre/features/geckoview/features/readerview/presentation/controllers/readerable.dart' ;
4645import 'package:weblibre/features/geckoview/features/readerview/presentation/widgets/reader_button.dart' ;
4746import 'package:weblibre/features/tor/domain/services/tor_proxy.dart' ;
@@ -62,6 +61,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
6261
6362 final tabMenuController = useMenuController ();
6463 final extensionMenuController = useMenuController ();
64+ final hamburgerMenuController = useMenuController ();
6565 final trippleDotMenuController = useMenuController ();
6666
6767 final selectedTabId = ref.watch (selectedTabProvider);
@@ -138,7 +138,48 @@ class BrowserBottomAppBar extends HookConsumerWidget {
138138 : null ,
139139 actions: [
140140 if (selectedTabId != null && displayedSheet is ! ViewTabsSheet )
141- ReaderButton (),
141+ Consumer (
142+ builder: (context, ref, child) {
143+ final tabBarReaderView = ref.watch (
144+ generalSettingsWithDefaultsProvider.select (
145+ (value) => value.tabBarReaderView,
146+ ),
147+ );
148+
149+ final readerabilityStateActive = ref.watch (
150+ selectedTabStateProvider.select (
151+ (state) =>
152+ (state? .readerableState ?? ReaderableState .$default ())
153+ .active,
154+ ),
155+ );
156+
157+ return Visibility (
158+ visible: tabBarReaderView || readerabilityStateActive,
159+ child: ReaderButton (
160+ buttonBuilder: (isLoading, readerActive, icon) => InkWell (
161+ onTap: isLoading
162+ ? null
163+ : () async {
164+ await ref
165+ .read (
166+ readerableScreenControllerProvider
167+ .notifier,
168+ )
169+ .toggleReaderView (! readerActive);
170+ },
171+ child: Padding (
172+ padding: const EdgeInsets .symmetric (
173+ vertical: 15.0 ,
174+ horizontal: 8.0 ,
175+ ),
176+ child: icon,
177+ ),
178+ ),
179+ ),
180+ );
181+ },
182+ ),
142183 if (showExtensionShortcut)
143184 ExtensionShortcutMenu (
144185 controller: extensionMenuController,
@@ -153,6 +194,27 @@ class BrowserBottomAppBar extends HookConsumerWidget {
153194 icon: const Icon (MdiIcons .puzzle),
154195 ),
155196 ),
197+ if (selectedTabId != null )
198+ TabMenu (
199+ controller: trippleDotMenuController,
200+ selectedTabId: selectedTabId,
201+ child: InkWell (
202+ onTap: () {
203+ if (trippleDotMenuController.isOpen) {
204+ trippleDotMenuController.close ();
205+ } else {
206+ trippleDotMenuController.open ();
207+ }
208+ },
209+ child: const Padding (
210+ padding: EdgeInsets .symmetric (
211+ horizontal: 8.0 ,
212+ vertical: 15.0 ,
213+ ),
214+ child: Icon (MdiIcons .dotsHorizontal),
215+ ),
216+ ),
217+ ),
156218 TabCreationMenu (
157219 controller: tabMenuController,
158220 selectedTabId: selectedTabId,
@@ -187,7 +249,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
187249 ),
188250 ),
189251 MenuAnchor (
190- controller: trippleDotMenuController ,
252+ controller: hamburgerMenuController ,
191253 builder: (context, controller, child) {
192254 return Padding (
193255 padding: const EdgeInsets .only (right: 4.0 ),
@@ -204,7 +266,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
204266 vertical: 15.0 ,
205267 horizontal: 8.0 ,
206268 ),
207- child: Icon (Icons .more_vert ),
269+ child: Icon (Icons .menu ),
208270 ),
209271 ),
210272 );
@@ -377,80 +439,6 @@ class BrowserBottomAppBar extends HookConsumerWidget {
377439 child: const Text ('Feeds' ),
378440 ),
379441 const Divider (),
380- if (selectedTabId != null )
381- MenuItemButton (
382- onPressed: () async {
383- final tabState = ref.read (
384- tabStateProvider (selectedTabId),
385- );
386-
387- if (tabState? .url case final Uri url) {
388- await ui_helper.launchUrlFeedback (context, url);
389- }
390- },
391- leadingIcon: const Icon (Icons .open_in_browser),
392- child: const Text ('Launch External' ),
393- ),
394- if (selectedTabId != null )
395- MenuItemButton (
396- onPressed: () async {
397- final tabState = ref.read (
398- tabStateProvider (selectedTabId),
399- );
400-
401- if (tabState? .url case final Uri url) {
402- await SharePlus .instance.share (ShareParams (uri: url));
403- }
404- },
405- leadingIcon: const Icon (Icons .share),
406- child: const Text ('Share' ),
407- ),
408- if (selectedTabId != null ) const Divider (),
409- if (selectedTabId != null )
410- MenuItemButton (
411- onPressed: () {
412- final tabId = ref.read (selectedTabProvider);
413- if (tabId != null ) {
414- ref
415- .read (findInPageControllerProvider (tabId).notifier)
416- .show ();
417- }
418- },
419- leadingIcon: const Icon (Icons .search),
420- child: const Text ('Find in page' ),
421- ),
422- if (selectedTabId != null )
423- Consumer (
424- builder: (context, childRef, child) {
425- final enabled = childRef.watch (
426- desktopModeProvider (selectedTabId),
427- );
428-
429- return MenuItemButton (
430- onPressed: () {
431- ref
432- .read (desktopModeProvider (selectedTabId).notifier)
433- .toggle ();
434- },
435- leadingIcon: const Icon (MdiIcons .monitor),
436- trailingIcon: Checkbox (
437- value: enabled,
438- onChanged: (value) {
439- if (value != null ) {
440- ref
441- .read (
442- desktopModeProvider (selectedTabId).notifier,
443- )
444- .enabled (value);
445- trippleDotMenuController.close ();
446- }
447- },
448- ),
449- child: const Text ('Desktop Mode' ),
450- );
451- },
452- ),
453- if (selectedTabId != null ) const Divider (),
454442 if (selectedTabId != null )
455443 MenuItemButton (
456444 onPressed: () async {
@@ -459,7 +447,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
459447 );
460448
461449 await controller.reload ();
462- trippleDotMenuController .close ();
450+ hamburgerMenuController .close ();
463451 },
464452 leadingIcon: const Icon (Icons .refresh),
465453 child: const Text ('Reload' ),
@@ -513,7 +501,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
513501 await controller.goBack ();
514502 }
515503
516- trippleDotMenuController .close ();
504+ hamburgerMenuController .close ();
517505 },
518506 icon: const Icon (Icons .arrow_back),
519507 )
@@ -523,7 +511,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
523511 .read (tabRepositoryProvider.notifier)
524512 .closeTab (selectedTabId);
525513
526- trippleDotMenuController .close ();
514+ hamburgerMenuController .close ();
527515
528516 if (context.mounted) {
529517 ui_helper.showTabUndoClose (
@@ -551,7 +539,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
551539 );
552540
553541 await controller.goForward ();
554- trippleDotMenuController .close ();
542+ hamburgerMenuController .close ();
555543 }
556544 : null ,
557545 icon: const Icon (Icons .arrow_forward),
0 commit comments