Architecture and Overview
Architecture and Overview
Our main design goal is to provide independently reusable Android components. We strive to keep dependencies between components as minimal as possible. However, standalone components aren’t always feasible, which is why we have grouped components based on their interactions and dependencies.
On the lowest level, we provide standalone UI components (e.g. autocomplete, progressbar, colors) as well as independent service and support libraries (e.g. Telemetry, Kotlin extensions and Utilities).
The second level consist of so called Concept
modules. These are abstractions that describe contracts for component implementations such as Engine
or Session Storage
, which may in turn have multiple implementations. The purpose of these concepts is to allow for customization and pluggability. Therefore, where available, components should always depend on concept modules (not their implementations) to support bringing in alternative implementations.
On top of Concept
modules we provide Browser
components. These components provide browser-specific functionality by implementing concepts and using lower level components.
On the highest level, we provide Feature
components which provide use case implementations (e.g search, load URL). Features can connect multiple Browser
components with concepts, and will therefore depend on other components.
The following diagram does not contain all available components. See Components for a complete and up-to-date list.
┌─────────────────────┬───────────────────────────────────────────────────────────────────────┐
│ │ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ │ Feature │ │
│ Features combine │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ browser components │ │ Session │ Toolbar │ Search │ │ │
│ with concepts │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ └───────────────────────────────────────────────────────────────────┘ │
├─────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ │ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ │ Browser │ │
│ Browser components │ │ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ │ │
│ may implement │ │ Engine-Gecko Search Toolbar Errorpages │ │
│ concepts and use │ │ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ │ │
│ lower level │ │ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ ┌ ─ ─ ─ ─ ─ ─ ┐ │ │
│ components │ │ Engine-System Session Domains Menu │ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ └ ─ ─ ─ ─ ─ ─ ┘ │ │
│ │ └───────────────────────────────────────────────────────────────────┘ │
├─────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ │ ┌───────────────────────────────────────────────────────────────────┐ │
│ Abstractions and │ │ Concept │ │
│ contracts for │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ component │ │ Engine │ Toolbar │ │ │
│ implementations │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ └───────────────────────────────────────────────────────────────────┘ │
├─────────────────────├───────────────────────────────────────────────────────────────────────┤
│ │ ┌────────────────────────────────┐ ┌────────────────────────────────┐ │
│ │ │ UI │ │ Service │ │
│ Standalone │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ components │ │ Autocomplete │ │ │ Telemetry │ │ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ └────────────────────────────────┘ │
│ │ │ Progress │ │ ┌────────────────────────────────┐ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ Support │ │
│ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ Colors │ │ │ Kotlin extensions │ │ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ Fonts │ │ │ Utilities │ │ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │
│ │ │ Icons │ │ │ │ │
│ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │
│ │ └────────────────────────────────┘ └────────────────────────────────┘ │
└─────────────────────┴───────────────────────────────────────────────────────────────────────┘