Open Bug 1948591 Opened 27 days ago Updated 3 days ago

[meta] Android toolbar compose rewrite

Categories

(Fenix :: Toolbar, task)

All
Android
task

Tracking

(Not tracked)

People

(Reporter: petru, Unassigned)

References

(Depends on 13 open bugs)

Details

(Keywords: meta)

Goals:

  1. Improve UI declarativeness with Jetpack Compose
    Simpler layouts with increased conciseness and reduced boilerplate
    Better separation between the view/domain layers with cleaner UI code

  2. Enhance state management with MVI
    Centralized state handling - use a single source of truth for the entire toolbar state while also avoiding inconsistencies in UI or functionality.
    Unidirectional data flow - ensure the UI reacts predictably to user inputs and browser state changes based on clear MVI actions.

  3. Optimize performance & scalability
    Reduce view hierarchy overhead by leveraging Compose’s lightweight recomposition to reduce UI rendering inefficiencies.
    Easier to have asynchronous UI updates done from background - updating the UI state without blocking the UI.

  4. Easier extensibility
    Increased opportunities to reuse common UI elements
    Decoupled business logic in feature specific middlewares

  5. Improve Testability
    The entire functionality of the BrowserToolbar composable can be tested with unit tests (using Robolectric)
    What is being rendered based on the BrowserToolbarState
    What is being dispatched as BrowserToolbarActions
    The basic functionality of the reducer
    Integration tests can be added on top in products like Fenix to test the middlewares functionality and interaction with other features.

  6. Improve Developer Experience
    Adopt a familiar architecture to increase code cohesiveness and support more easier contributions
    Make it possible to use live previews for faster inference of the toolbar UI

How

Proposal overview
Work proposal
Fenix changes diagram

Depends on: 1948608
Depends on: 1948609
Depends on: 1948617
Depends on: 1948618
Depends on: 1948621
Depends on: 1948628
Depends on: 1948629
Depends on: 1948633
Depends on: 1948653
Depends on: 1948654
Depends on: 1948662
Depends on: 1948671
Depends on: 1948677
Depends on: 1948696
Depends on: 1948697
Depends on: 1948701
Depends on: 1948724
Depends on: 1948726
Depends on: 1948729
Depends on: 1948731
Depends on: 1948738
Depends on: 1948750
Depends on: 1948751
Depends on: 1948755
Depends on: 1948756
Depends on: 1948757
Depends on: 1948761
Depends on: 1948762
Depends on: 1948764
Depends on: 1948765
Depends on: 1948835
Depends on: 1948837
Depends on: 1948845
Depends on: 1948848
Depends on: 1948852
Depends on: ct-display-updates
No longer depends on: 1948628
No longer depends on: 1948629
No longer depends on: 1948633
No longer depends on: 1948653
No longer depends on: 1948654
No longer depends on: 1948697
No longer depends on: 1948701
No longer depends on: 1948724
No longer depends on: 1948726
No longer depends on: 1948729
No longer depends on: 1948731
No longer depends on: 1948738
No longer depends on: 1948750
No longer depends on: 1948751
No longer depends on: 1948755
No longer depends on: 1948756
No longer depends on: 1948757
No longer depends on: 1948761
No longer depends on: 1948762
No longer depends on: 1948764
Depends on: ct-foundational
No longer depends on: 1948608
No longer depends on: 1948609
No longer depends on: 1948617
No longer depends on: 1948618
No longer depends on: 1948621
No longer depends on: 1948671
No longer depends on: 1948677
No longer depends on: 1948662
No longer depends on: 1948696
Depends on: 1949421
Depends on: ct-preexistent
Depends on: 1953740
You need to log in before you can comment on or make changes to this bug.