19
19
import org .chromium .base .supplier .ObservableSupplier ;
20
20
import org .chromium .base .supplier .ObservableSupplierImpl ;
21
21
import org .chromium .base .supplier .OneshotSupplier ;
22
- import org .chromium .base .supplier .OneshotSupplierImpl ;
23
22
import org .chromium .base .supplier .Supplier ;
24
23
import org .chromium .chrome .R ;
25
24
import org .chromium .chrome .browser .ActivityTabProvider ;
53
52
import org .chromium .chrome .browser .tabmodel .TabClosureParams ;
54
53
import org .chromium .chrome .browser .tabmodel .TabCreatorManager ;
55
54
import org .chromium .chrome .browser .tabmodel .TabModelSelector ;
56
- import org .chromium .chrome .browser .tasks .tab_management .TabGroupUi ;
57
- import org .chromium .chrome .browser .tasks .tab_management .TabManagementDelegateProvider ;
55
+ import org .chromium .chrome .browser .tasks .tab_management .TabGroupUiOneshotSupplier ;
58
56
import org .chromium .chrome .browser .theme .BottomUiThemeColorProvider ;
59
57
import org .chromium .chrome .browser .theme .ThemeColorProvider ;
60
58
import org .chromium .chrome .browser .theme .TopUiThemeColorProvider ;
@@ -112,14 +110,14 @@ public class BraveToolbarManager extends ToolbarManager {
112
110
private TabCreatorManager mTabCreatorManager ;
113
111
private Supplier <ModalDialogManager > mModalDialogManagerSupplier ;
114
112
private TabObscuringHandler mTabObscuringHandler ;
115
- private LayoutStateProvider .LayoutStateObserver mLayoutStateObserver ;
116
113
private LayoutStateProvider mLayoutStateProvider ;
117
114
private ObservableSupplier <ReadAloudController > mReadAloudControllerSupplier ;
118
115
private TopUiThemeColorProvider mTopUiThemeColorProvider ;
119
116
private int mCurrentOrientation ;
117
+ private boolean mInitializedWithNative ;
118
+ private @ Nullable TabGroupUiOneshotSupplier mTabGroupUiOneshotSupplier ;
120
119
121
120
// Own members.
122
- private TabGroupUi mTabGroupUi ;
123
121
private boolean mIsBraveBottomControlsVisible ;
124
122
private ObservableSupplier <Boolean > mOmniboxFocusStateSupplier ;
125
123
private OneshotSupplier <LayoutStateProvider > mLayoutStateProviderSupplier ;
@@ -133,10 +131,10 @@ public class BraveToolbarManager extends ToolbarManager {
133
131
private ObservableSupplier <EdgeToEdgeController > mEdgeToEdgeControllerSupplier ;
134
132
private ObservableSupplier <Profile > mProfileSupplier ;
135
133
private final BrowserControlsSizer mBrowserControlsSizer ;
136
- private OneshotSupplierImpl <BottomControlsContentDelegate > mContentDelegateSupplier =
137
- new OneshotSupplierImpl <>();
138
134
private final DataSharingTabManager mDataSharingTabManager ;
139
135
private ObservableSupplier <TabModelSelector > mTabModelSelectorSupplier ;
136
+ private LayoutStateProvider .LayoutStateObserver mLayoutStateObserver ;
137
+ private Runnable mOpenGridTabSwitcherHandler ;
140
138
141
139
public BraveToolbarManager (
142
140
AppCompatActivity activity ,
@@ -279,29 +277,31 @@ public void enableBottomControls() {
279
277
mIncognitoStateProvider ,
280
278
mActivity );
281
279
282
- mTabGroupUi =
283
- TabManagementDelegateProvider .getDelegate ()
284
- .createTabGroupUi (
285
- mActivity ,
286
- mBottomControls .findViewById (R .id .bottom_container_slot ),
287
- mBrowserControlsSizer ,
288
- mScrimManager ,
289
- mOmniboxFocusStateSupplier ,
290
- mBottomSheetController ,
291
- mDataSharingTabManager ,
292
- mTabModelSelector ,
293
- mTabContentManager ,
294
- mTabCreatorManager ,
295
- mLayoutStateProviderSupplier ,
296
- mModalDialogManagerSupplier .get (),
297
- bottomUiThemeColorProvider );
298
- mContentDelegateSupplier .set (mTabGroupUi );
280
+ mTabGroupUiOneshotSupplier =
281
+ new TabGroupUiOneshotSupplier (
282
+ mActivityTabProvider ,
283
+ mTabModelSelector ,
284
+ mActivity ,
285
+ mBottomControls .findViewById (R .id .bottom_container_slot ),
286
+ mBrowserControlsSizer ,
287
+ mScrimManager ,
288
+ mOmniboxFocusStateSupplier ,
289
+ mBottomSheetController ,
290
+ mDataSharingTabManager ,
291
+ mTabContentManager ,
292
+ mTabCreatorManager ,
293
+ mLayoutStateProviderSupplier ,
294
+ mModalDialogManagerSupplier .get (),
295
+ bottomUiThemeColorProvider );
296
+ var bottomControlsContentDelegateSupplier =
297
+ (OneshotSupplier <BottomControlsContentDelegate >)
298
+ ((OneshotSupplier <? extends BottomControlsContentDelegate >)
299
+ mTabGroupUiOneshotSupplier );
299
300
300
301
BrowserStateBrowserControlsVisibilityDelegate controlsVisibilityDelegate =
301
302
mBrowserControlsSizer .getBrowserVisibilityDelegate ();
302
303
assert controlsVisibilityDelegate != null ;
303
-
304
- mBottomControlsCoordinatorSupplier .set (
304
+ var bottomControlsCoordinator =
305
305
new BraveBottomControlsCoordinator (
306
306
mLayoutStateProviderSupplier ,
307
307
BottomTabSwitcherActionMenuCoordinator .createOnLongClickListener (
@@ -327,14 +327,49 @@ public void enableBottomControls() {
327
327
mFullscreenManager ,
328
328
mEdgeToEdgeControllerSupplier ,
329
329
mBottomControls ,
330
- mContentDelegateSupplier ,
330
+ bottomControlsContentDelegateSupplier ,
331
331
mTabObscuringHandler ,
332
332
mOverlayPanelVisibilitySupplier ,
333
333
getConstraintsProxy (),
334
334
/* readAloudRestoringSupplier= */ () -> {
335
335
final var readAloud = mReadAloudControllerSupplier .get ();
336
336
return readAloud != null && readAloud .isRestoringPlayer ();
337
- }));
337
+ });
338
+ if (mInitializedWithNative ) {
339
+ Runnable closeAllTabsAction =
340
+ () -> {
341
+ mTabModelSelector
342
+ .getModel (mIncognitoStateProvider .isIncognitoSelected ())
343
+ .getTabRemover ()
344
+ .closeTabs (TabClosureParams .closeAllTabs ().build (), false );
345
+ };
346
+
347
+ assert (mActivity instanceof ChromeActivity );
348
+ OnClickListener wrappedNewTabClickHandler =
349
+ v -> {
350
+ recordNewTabClick ();
351
+ ((ChromeActivity ) mActivity )
352
+ .getMenuOrKeyboardActionController ()
353
+ .onMenuOrKeyboardAction (
354
+ mIncognitoStateProvider .isIncognitoSelected ()
355
+ ? R .id .new_incognito_tab_menu_id
356
+ : R .id .new_tab_menu_id ,
357
+ false );
358
+ };
359
+
360
+ bottomControlsCoordinator .initializeWithNative (
361
+ mActivity ,
362
+ mCompositorViewHolder .getResourceManager (),
363
+ mCompositorViewHolder .getLayoutManager (),
364
+ /*tabSwitcherListener*/ v -> mOpenGridTabSwitcherHandler .run (),
365
+ /*newTabClickListener*/ wrappedNewTabClickHandler ,
366
+ mWindowAndroid ,
367
+ mTabModelSelector ,
368
+ mIncognitoStateProvider ,
369
+ mActivity .findViewById (R .id .control_container ),
370
+ closeAllTabsAction );
371
+ }
372
+ mBottomControlsCoordinatorSupplier .set (bottomControlsCoordinator );
338
373
mBottomControls .setBottomControlsCoordinatorSupplier (
339
374
mBottomControlsCoordinatorSupplier );
340
375
updateBraveBottomControlsVisibility ();
@@ -351,6 +386,10 @@ public void enableBottomControls() {
351
386
// Also ToolbarManager.initializeWithNative calls
352
387
// TopToolbarCoordinator.initializeWithNative where 3rd parameter is
353
388
// `OnClickListener tabSwitcherClickHandler`. So it is a tabSwitcherClickHandler.
389
+ //
390
+ // Suppress to observe SharedPreferences, which is discouraged; use another messaging channel
391
+ // instead.
392
+ @ SuppressWarnings ("UseSharedPreferencesManagerFromChromeCheck" )
354
393
@ Override
355
394
public void initializeWithNative (
356
395
@ NonNull LayoutManagerImpl layoutManager ,
@@ -370,43 +409,9 @@ public void initializeWithNative(
370
409
archivedTabCountSupplier ,
371
410
tabModelNotificationDotSupplier );
372
411
412
+ mOpenGridTabSwitcherHandler = openGridTabSwitcherHandler ;
413
+
373
414
if (isToolbarPhone () && BottomToolbarConfiguration .isBraveBottomControlsEnabled ()) {
374
- enableBottomControls ();
375
- Runnable closeAllTabsAction =
376
- () -> {
377
- mTabModelSelector
378
- .getModel (mIncognitoStateProvider .isIncognitoSelected ())
379
- .getTabRemover ()
380
- .closeTabs (TabClosureParams .closeAllTabs ().build (), false );
381
- };
382
-
383
- assert (mActivity instanceof ChromeActivity );
384
- OnClickListener wrappedNewTabClickHandler =
385
- v -> {
386
- recordNewTabClick ();
387
- ((ChromeActivity ) mActivity )
388
- .getMenuOrKeyboardActionController ()
389
- .onMenuOrKeyboardAction (
390
- mIncognitoStateProvider .isIncognitoSelected ()
391
- ? R .id .new_incognito_tab_menu_id
392
- : R .id .new_tab_menu_id ,
393
- false );
394
- };
395
-
396
- assert (mBottomControlsCoordinatorSupplier .get ()
397
- instanceof BraveBottomControlsCoordinator );
398
- ((BraveBottomControlsCoordinator ) mBottomControlsCoordinatorSupplier .get ())
399
- .initializeWithNative (
400
- mActivity ,
401
- mCompositorViewHolder .getResourceManager (),
402
- mCompositorViewHolder .getLayoutManager (),
403
- /*tabSwitcherListener*/ v -> openGridTabSwitcherHandler .run (),
404
- /*newTabClickListener*/ wrappedNewTabClickHandler ,
405
- mWindowAndroid ,
406
- mTabModelSelector ,
407
- mIncognitoStateProvider ,
408
- mActivity .findViewById (R .id .control_container ),
409
- closeAllTabsAction );
410
415
mLocationBar .getContainerView ().setAccessibilityTraversalBefore (R .id .bottom_toolbar );
411
416
}
412
417
}
0 commit comments