Modules & Packages
Omni is a single Gradle module, but its code is organised into cohesive feature packages. Here’s what lives where.
Feature packages
| Package | Key classes | Responsibility |
|---|---|---|
browser/adblock/ | AdBlockManager | Filter engine, providers, block counter |
browser/extensions/ | BuiltInExtensionManager, AiBlockerManager, UniversalCopyManager | WebExtension install/toggle/messaging |
browser/tabs/ | SmartTabManager | Domain-based tab auto-grouping |
media/ | MediaInterceptor, StreamDownloadEngine, FFmpegBridge | Stream detection, download, audio extraction |
media/player/ | VideoPlayerScreen, OmniMediaService | ExoPlayer UI + background audio |
privacy/ | FireButton, TorManager, VpnManager | Session burn, Tor, WireGuard |
tools/locker/ | LockerDatabase, LockerAuthManager | Encrypted vault (SQLCipher + biometric) |
tools/qrcode/ | BarcodeGenerator, QrCodeDecoder | ZXing QR scan/generate |
ui/theme/ | OmniTheme, OmniColors, UiScale | Material 3 theming |
How they connect
All feature packages hang off the central BrowserViewModel (see Architecture). Each package exposes a focused API that the ViewModel orchestrates — so UI, logic and engine stay cleanly separated.
Adding a feature
- Create (or reuse) a feature package under
com.rebelroot.omni. - Keep engine/state logic out of composables — expose it through the ViewModel.
- Add any user-facing strings to
strings.xml. - Wire the entry point into
BrowserScreenor Quick Tools.
Single module, many packages
Omni deliberately stays one Gradle module — the package structure provides the modularity, without multi-module build overhead.