Git Product home page Git Product logo

android-components's Introduction

Android components

Task Status Build Status codecov Sputnik

A collection of Android libraries to build browsers or browser-like applications.

Getting Involved

We encourage you to participate in this open source project. We love pull requests, bug reports, ideas, (security) code reviews or any kind of positive contribution.

Before you attempt to make a contribution please read the Community Participation Guidelines.

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 suppport 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         │    │ │                                │ │
    │                     │ │    └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─     │ │                                │ │
    │                     │ └────────────────────────────────┘ └────────────────────────────────┘ │
    └─────────────────────┴───────────────────────────────────────────────────────────────────────┘

Components

  • 🔴 In Development - Not ready to be used in shipping products.
  • Preview - This component is almost ready and can be (partially) tested in products.
  • 🔵 Production ready - Used by shipping products.

Browser

High-level components for building browser(-like) apps.

  • 🔵 Domains Localized and customizable domain lists for auto-completion in browsers.

  • 🔴 Engine-Gecko - Engine implementation based on GeckoView (Release channel).

  • 🔴 Engine-Gecko-Beta - Engine implementation based on GeckoView (Beta channel).

  • 🔴 Engine-Gecko-Nightly - Engine implementation based on GeckoView (Nightly channel).

  • 🔴 Engine-System - Engine implementation based on the system's WebView.

  • Erropages - Responsive browser error pages for Android apps.

  • 🔴 Menu - A generic menu with customizable items primarily for browser toolbars.

  • 🔵 Search - Search plugins and companion code to load, parse and use them.

  • 🔴 Session - A generic representation of a browser session.

  • 🔴 Tabstray - A customizable tabs tray for browsers.

  • 🔴 Toolbar - A customizable toolbar for browsers.

Concept

API contracts and abstraction layers for browser components.

  • 🔴 Engine - Abstraction layer that allows hiding the actual browser engine implementation.

  • 🔴 Tabstray - Abstract definition of a tabs tray component.

  • 🔴 Toolbar - Abstract definition of a browser toolbar component.

Feature

Combined components to implement feature-specific use cases.

  • 🔴 Search - A component that connects an (concept) engine implementation with the browser search module.

  • 🔴 Session - A component that connects an (concept) engine implementation with the browser session module.

  • 🔴 Tabs - A component that connects a trabs tray implementation with the session and toolbar modules.

  • 🔴 Toolbar - A component that connects a (concept) toolbar implementation with the browser session module.

UI

Generic low-level UI components for building apps.

  • 🔵 Autocomplete - A set of components to provide autocomplete functionality.

  • 🔵 Colors - The standard set of Photon colors.

  • 🔵 Fonts - The standard set of fonts used by Mozilla Android products.

  • 🔵 Icons - A collection of often used browser icons.

  • 🔵 Progress - An animated progress bar following the Photon Design System.

Service

Components and libraries to interact with backend services.

  • 🔴 Firefox Accounts (FxA) - A library for integrating with Firefox Accounts.

  • 🔵 Telemetry - A generic library for sending telemetry pings from Android applications to Mozilla's telemetry service.

Support

Supporting components with generic helper code.

  • 🔵 Ktx - A set of Kotlin extensions on top of the Android framework and Kotlin standard library.

  • Test - A collection of helpers for testing components.

  • 🔵 Utils - Generic utility classes to be shared between projects.

Sample apps

Sample apps using various components.

License

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/

android-components's People

Contributors

antifreezzz avatar boek avatar captnblubber avatar carolkng avatar cnevinc avatar csadilek avatar jeandersonbc avatar mcomella avatar mtwtm avatar pocmo avatar shikhart98 avatar silverandroid avatar wajahatkarim3 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.