Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

πŸ“¦ 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:

  1. API-First Design: Define clear public interfaces before implementation
  2. Single Responsibility: Each feature module should have a single, well-defined responsibility
  3. Minimal Dependencies: Minimize dependencies between feature modules
  4. Proper Layering: Follow Clean Architecture principles within each feature
  5. Testability: Design features to be easily testable in isolation
  6. Documentation: Document the purpose and usage of each feature module
  7. Consistent Naming: Follow the established naming conventions
  8. Feature Flags: Use feature flags for gradual rollout and A/B testing
  9. Accessibility: Ensure all features are accessible to all users
  10. 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

πŸ“Š 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
Last change: 2025-06-26, commit: 3b4ef25