10 KiB
Lawnchair contributing guidelines
Welcome to the Lawnchair project. We appreciate your interest in contributing. If you have questions, feel free to reach out on Telegram or Discord.
No-code contributions
- For bug reports, please be as detailed as possible and provide clear steps to reproduce the issue.
- For feature requests, clearly describe the feature and its potential benefits.
- For security vulnerabilities, follow the instructions in our Security Policy
- For translations, visit Lawnchair on Crowdin.
- For documentation, follow the developer documentation style guide of Google.
Tips for contributing
- Follow our Code of Conduct.
- Use Lawnchair's Nightly builds before creating issues.
Contributing code
Getting started
- Clone the repository with the
--recursiveflag to include the project's submodules:git clone --recursive https://github.com/LawnchairLauncher/lawnchair.git - Open the project in Android Studio.
- Select the
lawnWithQuickstepGithubDebugbuild variant.
If you encounter errors with modules that end with the lib suffix, such as iconloaderlib or
searchuilib, run git submodule update --init --recursive.
Here are some contribution tips to help you get started:
- Ensure you are up to date with Lawnchair by setting your base branch to
16-dev. - Make sure your code is logical and formatted correctly. For Kotlin, see the Kotlin coding conventions.
- The
lawnchairpackage houses Lawnchair’s own code, whereas thesrcpackage includes a clone of the Launcher3 codebase with modifications. Generally, place new files in the former and keep changes to the latter to a minimum.
Additional documentation
- Roadmap
- Wiki
- Visual guidelines
compatLibmodulepreferencesdirectorylibs/systemuiframework modulepackages/SystemUIapp- Prebuilt libraries
Development workflow
We use a tiered workflow to balance development speed with stability. The process for merging a
change depends on its complexity and risk. All PRs should target the 16-dev branch.
| Tier | Definition | Examples | Protocol |
|---|---|---|---|
| Trivial changes | Changes with zero risk of functional regression. | Fixing typos in comments or UI text (docs, fix), simple code style fixes (style). |
Commit directly to the active branch. |
| Simple, self-contained work | Changes that are functionally isolated and have a very low risk of side effects. | Most single-file bug fixes, minor UX polish (padding, colors). | 1. Create a Pull Request. 2. Assign a reviewer. 3. Enable "Auto-merge" on the PR. It will merge automatically after CI passes and a reviewer approves. |
| Medium complexity features | New features or changes that affect multiple components but are not deeply architectural. | A new settings screen, a new drawer search provider | 1. Create a detailed Pull Request. 2. Assign the core team for review. |
| Major architectural changes | High-risk, complex changes that affect the core foundation of the app. | Android version rebase | 1. Create a very detailed Pull Request. 2. Mandatory Review: You must wait for at least one formal approval from a key team member before merging. The "Merge on Silence" rule does not apply. |
Commit message convention
We follow the Conventional Commits specification.
- Format:
type(scope): subject - Example:
feat(settings): Add toggle for new feature - Allowed types:
feat,fix,style,refactor,perf,docs,test,chore.
Versioning scheme
Lawnchair’s version code is composed of five parts, separated by underscores:
- Android major version
- Android minor version
- Lawnchair development stage
- Lawnchair development version
- Revision/Release number
Lawnchair development stages
The following table lists the development stages used by Lawnchair:
| Stage | Denote |
|---|---|
| Development | 00 |
| Alpha | 01 |
| Beta | 02 |
| Release Candidate | 03 |
| Release | 04 |
strings.xml naming
String name attributes in strings.xml should follow this format:
| Type | Format | Example usage | Actual string | Other information |
|---|---|---|---|---|
| Generic word | $1 | disagree_or_agree |
Disagree or agree | Should only be used if it doesn't fit the categories below. |
| Action | $1_action | apply_action |
Apply | Any generic action verb fits here. |
| Preference or popup label Preference headers |
$1_label | folders_label |
Folders | |
| Preference or popup description | $1_description | folders_description |
Row and column count | |
| Preference choice | $1_choice | off_choice |
Off | |
| Feature string | (feature_name)_$1 | colorpicker_hsb |
HSB | Feature strings are confined to a specific feature. Examples include the gesture and color picker. |
| Launcher string | $1_launcher | device_contacts_launcher |
Contacts from device | Strings that are specific to the Launcher area. |
Updating the locally stored Google Fonts listing
Lawnchair uses a locally stored JSON file (google_fonts.json) to list available fonts from Google
Fonts. This file should be updated periodically or before a release.
To update the font listing, follow these steps:
- Obtain a Google Fonts Developer API key.
- Download the JSON file from
https://www.googleapis.com/webfonts/v1/webfonts?key=API_KEY, replacingAPI_KEYwith your key. - Replace the content of
google_fonts.jsonwith the API response.