π¦ Feature Modules and Extensions
The Thunderbird for Android project is organized into multiple feature modules, each encapsulating a specific functionality of the application. This document provides an overview of the main feature modules, how they are split into subfeatures, and how the application can be extended with additional features.
π Feature Module Best Practices
When developing new feature modules or extending existing ones, follow these best practices:
- API-First Design: Define clear public interfaces before implementation
- Single Responsibility: Each feature module should have a single, well-defined responsibility
- Minimal Dependencies: Minimize dependencies between feature modules
- Proper Layering: Follow Clean Architecture principles within each feature
- Testability: Design features to be easily testable in isolation
- Documentation: Document the purpose and usage of each feature module
- Consistent Naming: Follow the established naming conventions
- Feature Flags: Use feature flags for gradual rollout and A/B testing
- Accessibility: Ensure all features are accessible to all users
- Internationalization: Design features with internationalization in mind
By following these guidelines, the Thunderbird for Android application can maintain a clean, modular architecture while expanding its functionality to meet user needs.
π Feature Module Overview
The application is composed of several core feature modules, each responsible for a specific aspect of the applicationβs functionality:
graph TB subgraph FEATURE[App Features] direction TB subgraph ROW_2[" "] direction LR SETTINGS["`**Settings**<br>App configuration`"] NOTIFICATION["`**Notification**<br>Push and alert handling`"] SEARCH["`**Search**<br>Content discovery`"] WIDGET["`**Widget**<br>Home screen components`"] end subgraph ROW_1[" "] direction LR ACCOUNT["`**Account**<br>User accounts management`"] MAIL["`**Mail**<br>Email handling and display`"] NAVIGATION["`**Navigation**<br>App navigation and UI components`"] ONBOARDING["`**Onboarding**<br>User setup and introduction`"] end end classDef row fill: #d9ffd9, stroke: #d9ffd9, color: #d9ffd9 classDef feature fill: #d9ffd9,stroke: #000000, color: #000000 classDef feature_module fill: #33cc33, stroke: #000000, color:#000000 class ROW_1,ROW_2 row class FEATURE feature class ACCOUNT,MAIL,NAVIGATION,ONBOARDING,SETTINGS,NOTIFICATION,SEARCH,WIDGET feature_module
π§© Feature Module Details
π Account Module
The Account module manages all aspects of email accounts, including setup, configuration, and authentication.
feature:account
βββ feature:account:api
βββ feature:account:impl
βββ feature:account:setup
β βββ feature:account:setup:api
β βββ feature:account:setup:impl
βββ feature:account:settings
β βββ feature:account:settings:api
β βββ feature:account:settings:impl
βββ feature:account:server
β βββ feature:account:server:api
β βββ feature:account:server:impl
β βββ feature:account:server:certificate
β β βββ feature:account:server:certificate:api
β β βββ feature:account:server:certificate:impl
β βββ feature:account:server:settings
β β βββ feature:account:server:settings:api
β β βββ feature:account:server:settings:impl
β βββ feature:account:server:validation
β βββ feature:account:server:validation:api
β βββ feature:account:server:validation:impl
βββ feature:account:auth
β βββ feature:account:auth:api
β βββ feature:account:auth:impl
β βββ feature:account:auth:oauth
β βββ feature:account:auth:oauth:api
β βββ feature:account:auth:oauth:impl
βββ feature:account:storage
βββ feature:account:storage:api
βββ feature:account:storage:impl
βββ feature:account:storage:legacy
βββ feature:account:storage:legacy:api
βββ feature:account:storage:legacy:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for account management
- Setup: New account setup wizard functionality
- API: Public interfaces for account setup
- Implementation: Concrete implementations of setup flows
- Settings: Account-specific settings management
- API: Public interfaces for account settings
- Implementation: Concrete implementations of settings functionality
- Server: Server configuration and management
- API/Implementation: Core server management interfaces and implementations
- Certificate: SSL certificate handling
- Settings: Server settings configuration
- Validation: Server connection validation
- Auth: Authentication functionality
- API/Implementation: Core authentication interfaces and implementations
- OAuth: OAuth-specific authentication implementation
- Storage: Account data persistence
- API/Implementation: Core storage interfaces and implementations
- Legacy: Legacy storage implementation
π§ Mail Module
The Mail module handles core email functionality, including message display, composition, and folder management.
feature:mail
βββ feature:mail:api
βββ feature:mail:impl
βββ feature:mail:account
β βββ feature:mail:account:api
β βββ feature:mail:account:impl
βββ feature:mail:folder
β βββ feature:mail:folder:api
β βββ feature:mail:folder:impl
βββ feature:mail:compose
β βββ feature:mail:compose:api
β βββ feature:mail:compose:impl
βββ feature:mail:message
βββ feature:mail:message:api
βββ feature:mail:message:impl
βββ feature:mail:message:view
β βββ feature:mail:message:view:api
β βββ feature:mail:message:view:impl
βββ feature:mail:message:list
βββ feature:mail:message:list:api
βββ feature:mail:message:list:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for mail functionality
- Account: Mail-specific account interfaces and implementations
- API: Public interfaces for mail account integration
- Implementation: Concrete implementations of mail account functionality
- Folder: Email folder management
- API: Public interfaces for folder operations
- Implementation: Concrete implementations of folder management
- Compose: Email composition functionality
- API: Public interfaces for message composition
- Implementation: Concrete implementations of composition features
- Message: Message handling and display
- API/Implementation: Core message handling interfaces and implementations
- View: Individual message viewing functionality
- List: Message list display and interaction
π§ Navigation Module
The Navigation module provides UI components for navigating through the application.
feature:navigation
βββ feature:navigation:api
βββ feature:navigation:impl
βββ feature:navigation:drawer
βββ feature:navigation:drawer:api
βββ feature:navigation:drawer:impl
βββ feature:navigation:drawer:dropdown
β βββ feature:navigation:drawer:dropdown:api
β βββ feature:navigation:drawer:dropdown:impl
βββ feature:navigation:drawer:siderail
βββ feature:navigation:drawer:siderail:api
βββ feature:navigation:drawer:siderail:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for navigation
- Drawer: Navigation drawer functionality
- API/Implementation: Core drawer interfaces and implementations
- Dropdown: Dropdown-style navigation implementation
- Siderail: Side rail navigation implementation
π Onboarding Module
The Onboarding module guides new users through the initial setup process.
feature:onboarding
βββ feature:onboarding:api
βββ feature:onboarding:impl
βββ feature:onboarding:main
β βββ feature:onboarding:main:api
β βββ feature:onboarding:main:impl
βββ feature:onboarding:welcome
β βββ feature:onboarding:welcome:api
β βββ feature:onboarding:welcome:impl
βββ feature:onboarding:permissions
β βββ feature:onboarding:permissions:api
β βββ feature:onboarding:permissions:impl
βββ feature:onboarding:migration
βββ feature:onboarding:migration:api
βββ feature:onboarding:migration:impl
βββ feature:onboarding:migration:thunderbird
β βββ feature:onboarding:migration:thunderbird:api
β βββ feature:onboarding:migration:thunderbird:impl
βββ feature:onboarding:migration:noop
βββ feature:onboarding:migration:noop:api
βββ feature:onboarding:migration:noop:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for onboarding
- Main: Main onboarding flow
- API: Public interfaces for the main onboarding process
- Implementation: Concrete implementations of the onboarding flow
- Welcome: Welcome screens and initial user experience
- API: Public interfaces for welcome screens
- Implementation: Concrete implementations of welcome screens
- Permissions: Permission request handling
- API: Public interfaces for permission management
- Implementation: Concrete implementations of permission requests
- Migration: Data migration from other apps
- API/Implementation: Core migration interfaces and implementations
- Thunderbird: Thunderbird-specific migration implementation
- Noop: No-operation implementation for testing
βοΈ Settings Module
The Settings module provides interfaces for configuring application behavior.
feature:settings
βββ feature:settings:api
βββ feature:settings:impl
βββ feature:settings:import
β βββ feature:settings:import:api
β βββ feature:settings:import:impl
βββ feature:settings:ui
βββ feature:settings:ui:api
βββ feature:settings:ui:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for settings
- Import: Settings import functionality
- API: Public interfaces for settings import
- Implementation: Concrete implementations of import functionality
- UI: Settings user interface components
- API: Public interfaces for settings UI
- Implementation: Concrete implementations of settings screens
π Notification Module
The Notification module handles push notifications and alerts for new emails and events.
feature:notification
βββ feature:notification:api
βββ feature:notification:impl
βββ feature:notification:email
β βββ feature:notification:email:api
β βββ feature:notification:email:impl
βββ feature:notification:push
βββ feature:notification:push:api
βββ feature:notification:push:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for notifications
- Email: Email-specific notification handling
- API: Public interfaces for email notifications
- Implementation: Concrete implementations of email alerts
- Push: Push notification handling
- API: Public interfaces for push notifications
- Implementation: Concrete implementations of push notification processing
π Search Module
The Search module provides functionality for searching through emails and contacts.
feature:search
βββ feature:search:api
βββ feature:search:impl
βββ feature:search:email
β βββ feature:search:email:api
β βββ feature:search:email:impl
βββ feature:search:contact
β βββ feature:search:contact:api
β βββ feature:search:contact:impl
βββ feature:search:ui
βββ feature:search:ui:api
βββ feature:search:ui:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for search functionality
- Email: Email-specific search capabilities
- API: Public interfaces for email search
- Implementation: Concrete implementations of email search
- Contact: Contact search functionality
- API: Public interfaces for contact search
- Implementation: Concrete implementations of contact search
- UI: Search user interface components
- API: Public interfaces for search UI
- Implementation: Concrete implementations of search screens
π± Widget Module
The Widget module provides home screen widgets for quick access to email functionality.
feature:widget
βββ feature:widget:api
βββ feature:widget:impl
βββ feature:widget:message-list
β βββ feature:widget:message-list:api
β βββ feature:widget:message-list:impl
βββ feature:widget:message-list-glance
β βββ feature:widget:message-list-glance:api
β βββ feature:widget:message-list-glance:impl
βββ feature:widget:shortcut
β βββ feature:widget:shortcut:api
β βββ feature:widget:shortcut:impl
βββ feature:widget:unread
βββ feature:widget:unread:api
βββ feature:widget:unread:impl
Subfeatures:
- API/Implementation: Core public interfaces and implementations for widgets
- Message List: Email list widget
- API: Public interfaces for message list widget
- Implementation: Concrete implementations of message list widget
- Message List Glance: Glanceable message widget
- API: Public interfaces for glance widget
- Implementation: Concrete implementations of glance widget
- Shortcut: App shortcut widgets
- API: Public interfaces for shortcut widgets
- Implementation: Concrete implementations of shortcut widgets
- Unread: Unread message counter widget
- API: Public interfaces for unread counter widget
- Implementation: Concrete implementations of unread counter widget
π Supporting Feature Modules
In addition to the core email functionality, the application includes several supporting feature modules:
π Autodiscovery Module
The Autodiscovery module automatically detects email server settings.
Subfeatures:
- API (
feature:autodiscovery:api
): Public interfaces - Autoconfig (
feature:autodiscovery:autoconfig
): Automatic configuration - Service (
feature:autodiscovery:service
): Service implementation - Demo (
feature:autodiscovery:demo
): Demonstration implementation
π° Funding Module
The Funding module handles in-app financial contributions and funding options.
Subfeatures:
- API (
feature:funding:api
): Public interfaces - Google Play (
feature:funding:googleplay
): Google Play billing integration - Link (
feature:funding:link
): External funding link handling - Noop (
feature:funding:noop
): No-operation implementation
π Migration Module
The Migration module handles data migration between different email clients.
Subfeatures:
- Provider (
feature:migration:provider
): Migration data providers - QR Code (
feature:migration:qrcode
): QR code-based migration - Launcher (
feature:migration:launcher
): Migration launcher- API (
feature:migration:launcher:api
): Launcher interfaces - Noop (
feature:migration:launcher:noop
): No-operation implementation - Thunderbird (
feature:migration:launcher:thunderbird
): Thunderbird-specific implementation
- API (
π Telemetry Module
The Telemetry module handles usage analytics and reporting.
Subfeatures:
- API (
feature:telemetry:api
): Public interfaces - Noop (
feature:telemetry:noop
): No-operation implementation - Glean (
feature:telemetry:glean
): Mozilla Glean integration
π Extending with Additional Features
The modular architecture of Thunderbird for Android allows for easy extension with additional features. To give you an idea how the app could be extended when building a new feature, here are some theoretical examples along with their structure:
π Calendar Feature
A Calendar feature could be added to integrate calendar functionality with email.
feature:calendar
βββ feature:calendar:api
βββ feature:calendar:impl
βββ feature:calendar:event
β βββ feature:calendar:event:api
β βββ feature:calendar:event:impl
βββ feature:calendar:sync
βββ feature:calendar:sync:api
βββ feature:calendar:sync:impl
ποΈ Appointments Feature
An Appointments feature could manage meetings and appointments.
feature:appointment
βββ feature:appointment:api
βββ feature:appointment:impl
βββ feature:appointment:scheduler
β βββ feature:appointment:scheduler:api
β βββ feature:appointment:scheduler:impl
βββ feature:appointment:notification
βββ feature:appointment:notification:api
βββ feature:appointment:notification:impl
π Feature Relationships
Features in the application interact with each other through well-defined APIs. The diagram below illustrates the relationships between different features:
graph TB subgraph CORE[Core Features] ACCOUNT[Account] MAIL[Mail] end subgraph EXTENSIONS[Potential Extensions] CALENDAR[Calendar] APPOINTMENT[Appointments] end MAIL --> |uses| ACCOUNT CALENDAR --> |integrates with| MAIL CALENDAR --> |uses| ACCOUNT APPOINTMENT --> |uses| ACCOUNT APPOINTMENT --> |integrates with| CALENDAR APPOINTMENT --> |uses| MAIL linkStyle default stroke:#999,stroke-width:2px classDef core fill:#e8c8ff,stroke:#000000,color:#000000 classDef core_module fill:#c090ff,stroke:#000000,color:#000000 classDef extension fill:#d0e0ff,stroke:#000000,color:#000000 classDef extension_module fill:#8090ff,stroke:#000000,color:#000000 class CORE core class ACCOUNT,MAIL,NAVIGATION,SETTINGS core_module class EXTENSIONS extension class CALENDAR,TODO,SYNC,NOTES,APPOINTMENT extension_module