docs: Consolidate and update documentation (#6616)

Refactor, copyedit, and cleanup documentation to reflect new changes regarding Lawnchair's repository. Also slightly update issue templates to remove a few redundancies.
This commit is contained in:
SuperDragonXD authored and GitHub committed 2026-04-09 13:24:12 +00:00
1 parent 41ca33f0ea
commit 7977e980c2
12 files changed
+134 -182

No files matched your search

+5 -6
View File
@@ -1,6 +1,5 @@
name: Bug report
description: Create a report to help us address issues you are facing with the app.
title: "[BUG] "
labels: [bug, 'status: needs triage']
type: Bug
body:
@@ -8,9 +7,9 @@ body:
attributes:
value: |
> [!IMPORTANT]
> Lawnchair's issue tracker is maintained on a best-effort basis — due to limited resources, we do not guarantee that all issues will be triaged or checked by the developers.
> If you wish to help triage Lawnchair's issues, visit [#4232](https://github.com/LawnchairLauncher/lawnchair/issues/4232) for more information.
> Lawnchair's issue tracker is maintained on a best-effort basis.
> Due to limited resources, we do not guarantee that all issues will be triaged or checked by the developers.
Thanks for taking the time to file this issue! Here are a few things to do before submitting:
1. Use the [**latest nightly version**](https://github.com/LawnchairLauncher/lawnchair#development-builds) when reporting bugs.
2. [**Read the FAQ**](https://lawnchair.app/faq/#common-issues) for common issues; if it is, please don't create an issue about it.
@@ -70,7 +69,7 @@ body:
label: App version
description: |
Open Lawnchair settings > About to view the app version.
On nightly builds, **long-press** the version name and paste the GitHub link here.
placeholder: |
15 Beta 1
@@ -83,7 +82,7 @@ body:
label: Additional context
description: |
Add any other context about the problem here.
If this is a crash report, paste or link the crash message here.
placeholder: |
Crash log: https://katb.in/examplelink
+2 -4
View File
@@ -1,6 +1,5 @@
name: Feature request
description: Suggest features you want the developers (or contributors) to make for the launcher.
title: "[FEATURE] "
labels: [feature-request, 'status: needs triage']
type: Feature
body:
@@ -9,8 +8,7 @@ body:
value: |
> [!IMPORTANT]
> Lawnchair's issue tracker is maintained on a best-effort basis — due to limited resources, we do not guarantee that all issues will be triaged or checked by the developers.
> If you wish to help triage Lawnchair's issues, visit [#4232](https://github.com/LawnchairLauncher/lawnchair/issues/4232) for more information.
Thanks for taking the time to file this issue! Here are a few things to do before submitting:
1. Use the [**latest nightly version**](https://github.com/LawnchairLauncher/lawnchair#development-builds) when requesting.
2. [**Read the FAQ**](https://lawnchair.app/faq) to check if your request is already planned by the developers.
@@ -41,7 +39,7 @@ body:
description: |
See [this FAQ page](https://lawnchair.app/faq/#what-happened-to-lawnchair-legacy) for more info about Lawnchair Legacy, previously
known as Lawnchair 2.
options:
- "Yes"
- "No"
+46 -65
View File
@@ -1,76 +1,64 @@
# Lawnchair contributing guidelines
<picture>
<!-- Avoid image being clickable with slight workaround --->
<!-- Workaround to prevent the image from being clickable --->
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/lawnchair-round.webp" width="100">
<img alt="" src="docs/assets/lawnchair-round.webp" width="100">
</picture>
Welcome to the **Lawnchair** project. We appreciate your interest in contributing. For questions,
Welcome to the **Lawnchair** project. We appreciate your interest in contributing. If you have
questions,
feel free to reach out on [Telegram][telegram] or [Discord][discord].
## No-code contributions
### Bug reports and feature requests
> [!TIP]
> Use the [Lawnchair Nightly builds][nightly] when reporting bugs, as your issue may have already
> been fixed.
> [!WARNING]
> For [security vulnerability][security-report], please do not open an issue. Instead, follow
> the instructions in our [Security Policy][security-policy].
- For **[bug reports][bug-reports]**, please be as detailed as possible and provide clear steps to
reproduce the issue.
- For **[feature requests][feature-requests]**, clearly describe the feature and its potential
benefits.
- For security vulnerabilities, follow the instructions in our [Security Policy][security-policy]
- For translations, visit **[Lawnchair on Crowdin][crowdin]**.
- For documentation, follow
the [developer documentation style guide](https://developers.google.com/style) of Google.
Please be civil, as outlined in our [Code of Conduct][code-of-conduct].
**Tips for contributing**
### Translations
For translations, please visit **[Lawnchair on Crowdin][crowdin]**.
- Follow our [Code of Conduct][code-of-conduct].
- Use Lawnchair's [Nightly builds][nightly] before creating issues.
## Contributing code
### Getting started
1. Clone the repository with the `--recursive` flag to include the project's
submodules.
1. Clone the repository with the `--recursive` flag to include the project's submodules:
```bash
git clone --recursive https://github.com/LawnchairLauncher/lawnchair.git
```
2. Open the project in Android Studio.
3. Select the `lawnWithQuickstepGithubDebug` build variant.
If you encounter errors with modules that ends with `lib` suffix like `iconloaderlib` or `searchuilib`,
run `git submodule update --init --recursive`.
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:
- Always make sure that you're up-to-date with **Lawnchair** by setting your base branch to
`16-dev`.
- Make sure your code is logical and well-formatted. If using Kotlin,
see [“Coding conventions” in the Kotlin documentation][kotlin-coding-conventions];
- [The `lawnchair` package][lawnchair-package]
houses Lawnchair’s own code, whereas [the `src` package][src-package] includes a clone of
the Launcher3 codebase with modifications. Generally, place new files in the former,
keeping changes to the latter to a minimum.
- 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][kotlin-coding-conventions].
- [The `lawnchair` package][lawnchair-package] houses Lawnchair’s own code, whereas [the
`src` package][src-package] 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
- [Lawnchair roadmap](ROADMAP.md)
- [Lawnchair verification](VERIFICATION.md)
- [The Lawnchair Wiki](https://github.com/LawnchairLauncher/lawnchair/wiki)
- [Lawnchair Visual Guidelines](/docs/assets/README.md)
- [Lawnchair Quickstep Compat Library](compatLib/README.md)
- [Lawnchair Preferences Components](lawnchair/src/app/lawnchair/ui/preferences/components/README.md)
- [Lawnchair Platform Frameworks Library SystemUI](platform_frameworks_libs_systemui/README.md)
- [SystemUI Module](systemUI/README.md)
- [ViewCapture](systemUI/viewcapture/README.md)
- [Common](systemUI/common/README.md)
- [Prebuilt Library](prebuilts/libs/README.md)
- [Roadmap](ROADMAP.md)
- [Wiki](https://github.com/LawnchairLauncher/lawnchair/wiki)
- [Visual guidelines](/docs/assets/README.md)
- [`compatLib` module](compatLib/README.md)
- [`preferences` directory](lawnchair/src/app/lawnchair/ui/preferences/components/README.md)
- [`libs/systemui` framework module](platform_frameworks_libs_systemui/README.md)
- [`packages/SystemUI` app](systemUI/README.md)
- [Prebuilt libraries](prebuilts/libs/README.md)
### Development workflow
@@ -90,7 +78,7 @@ We follow the **[Conventional Commits specification][conventional-commits]**.
* **Format:** `type(scope): subject`
* **Example:** `feat(settings): Add toggle for new feature`
* **Allowed Types:** `feat`, `fix`, `style`, `refactor`, `perf`, `docs`, `test`, `chore`.
* **Allowed types:** `feat`, `fix`, `style`, `refactor`, `perf`, `docs`, `test`, `chore`.
### Versioning scheme
@@ -110,9 +98,9 @@ Lawnchair’s version code is composed of five parts, separated by underscores:
4. Lawnchair development version
5. Revision/Release number
#### Lawnchair development stage
#### Lawnchair development stages
This table show list of development stages in use by Lawnchair:
The following table lists the development stages used by Lawnchair:
| Stage | Denote |
|-------------------|--------|
@@ -122,39 +110,33 @@ This table show list of development stages in use by Lawnchair:
| Release Candidate | 03 |
| Release | 04 |
### String naming
### `string.xml` naming
Strings `names` in `strings.xml` should follow this format:
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 below categories |
| Action | $1_action | `apply_action` | Apply | Any generic action verb can fit here |
| Preference or popup label<br/>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 strings that 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 |
| 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<br/>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 locally stored font listing
### 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 release to include the latest fonts.
Fonts. This file should be updated periodically or before a release.
To update Lawnchair’s font listing, follow these steps:
To update the font listing, follow these steps:
1. Get
a [Google Fonts Developer API key][google-fonts-api-key].
1. Obtain a [Google Fonts Developer API key][google-fonts-api-key].
2. Download the JSON file from `https://www.googleapis.com/webfonts/v1/webfonts?key=API_KEY`,
replacing `API_KEY` with the API key from step 1.
replacing `API_KEY` with your key.
3. Replace the content of [`google_fonts.json`](lawnchair/assets/google_fonts.json) with the API
response.
#### Writing or updating Lawnchair documentation
Lawnchair’s documentations are written in Markdown and follow a style guides from
[Google developer documentation style guide](https://developers.google.com/style).
<!-- Links -->
[telegram]: https://t.me/lccommunity
[discord]: https://discord.com/invite/3x8qNWxgGZ
@@ -170,4 +152,3 @@ Lawnchair’s documentations are written in Markdown and follow a style guides f
[src-package]: https://github.com/LawnchairLauncher/lawnchair/tree/16-dev/src
[conventional-commits]: https://www.conventionalcommits.org/en/v1.0.0/
[google-fonts-api-key]: https://developers.google.com/fonts/docs/developer_api#APIKey
+11 -11
View File
@@ -10,10 +10,9 @@
[![Play Store Installs](https://img.shields.io/endpoint?color=green&logo=googleplay&logoColor=green&url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dapp.lawnchair.play%26l%3DPlay%2520Store%2520Installs%26m%3D%24shortinstalls)](https://play.google.com/store/apps/details?id=app.lawnchair.play)
> [!WARNING]
> This branch contains major changes from the rebase of Launcher3, including breaking changes that can cause Lawnchair to break.
>
> If you wish to contribute, read our [contributing guidelines](CONTRIBUTING.md). This branch will undergo many changes as we slowly refactor our codebase, so the `16-dev` branch may be particularly unfriendly to new contributors.
>
> This branch contains major changes from the rebase of Launcher3, including changes that can cause
> Lawnchair to crash or break.
>
> For regular users, we recommend staying on **Lawnchair 15 Beta 2.1**.
<picture>
@@ -31,12 +30,12 @@ This branch houses the codebase of Lawnchair 16, which is currently in developme
## Features
- **Material Expressive Theming:** Adapts to your wallpaper and system theme.
- **At a Glance Widget:** Displays information *at a glance* with support for [Smartspacer](https://github.com/KieronQuinn/Smartspacer).
- **QuickSwitch Support:** Integrates with Android Recents on Android 10-15 (requires root).
- **Global Search:** Allows quick access to apps, contacts, and web results from the home screen.
- **Customization Options:** Provides options to tweak icons, fonts, and colors to your liking.
- And more!
- Material 3 Expressive theming that follows your wallpaper and system colors.
- At a Glance widget support, with integration
for [Smartspacer](https://github.com/KieronQuinn/Smartspacer).
- QuickSwitch support for Android Recents integration on Android 10-15 (root required).
- Global search for apps, contacts, and web results from the home screen.
- Customization options for icon packs, fonts, and color settings.
## Download
@@ -76,7 +75,8 @@ You can also [verify your installation](VERIFICATION.md) to see if you have inst
Interested in keeping yourself up-to-date with every Lawnchair development? Try our development builds!
These builds offer the latest features and bug fixes at a cost of performance and additional issues. Make backups before installing!
These builds offer the latest features and bug fixes at a cost of performance and additional issues.
Make backups before installing.
**Download:** [Obtainium][Obtainium link] • [GitHub][GitHub link] • [nightly.link][Nightly link]
+3 -39
View File
@@ -1,9 +1,7 @@
# Lawnchair development roadmap
This document outlines our high-level strategic priorities. It's a living document, not a set of
unbreakable promises. For the status of individual tasks, see
our [GitHub Issue Tracker](https://github.com/LawnchairLauncher/lawnchair/issues) and our
team's [Kanban board](https://github.com/orgs/LawnchairLauncher/projects/9/views/1).
For the status of individual tasks, see
our [GitHub Issue Tracker](https://github.com/LawnchairLauncher/lawnchair/issues)
## Vision
@@ -15,38 +13,4 @@ Lawnchair's goal is to be:
## Roadmap
### Recently completed
- **Shipped:** `15 Beta 1` to GitHub & Play Store.
- **Completed:** A full architectural overhaul of the Search and Permissions systems.
### Current focus
This is our active development sprint. The goal is to address key bugs and deliver a highly polished
user experience.
- UI/UX overhaul of all Settings screens to Material 3 Expressive.
### Up next
Once the UX overhaul is stable, our focus will shift to delivering highly-requested features that
enhance
customization and control.
- Proper icon swipe gestures
- Folder "cover" mode
- App drawer tabs
### The Android 16 rebase
This is the massive, foundational undertaking to migrate our codebase to the latest Android 16
(AOSP) source. Its completion will be the foundation for our **Lawnchair 16** release.
**Status:** Actively in progress, led by a core community contributor.
### Long term or blocked
Highly-requested features that are blocked by external dependencies or require significant research.
- **Widget Stacking:** A highly complex feature requiring deep architectural investigation.
- **QuickSwitch Stability:** An ongoing effort to mitigate upstream AOSP/OEM bugs.
See the pinned issues for details of our current roadmap.
+21 -19
View File
@@ -1,32 +1,34 @@
# Lawnchair verification
# Verifying your Lawnchair installation
Lawnchair apk are cryptographically signed and can be verified using two verifications system.
1. GitHub or SLSA attestations (Starting with Lawnchair 15 Beta 1)
2. SHA256 of android app certificate
Lawnchair's APKs are cryptographically signed and can be verified using two systems:
## SLSA Attestation (Starting with Lawnchair 15 Beta 1)
1. GitHub / SLSA attestations (Starting with Lawnchair 15 Beta 1)
2. SHA-256 Android app certificate fingerprints
Every release of Lawnchair with the exception of Nightly is attested and verified with SLSA provenance. This repository meet the requirements of SLSA-Level 2 compliance
## SLSA attestation
Every Lawnchair release, starting with Lawnchair 15 Beta 1 (except Nightly builds), is attested and
verified with SLSA provenance.
This repository meets the requirements for SLSA Level 2 compliance.
> [!NOTE]
> It is possible to verify without GitHub CLI by cross-referencing check from
> [GitHub Attestation][github-attestation] with [Sigstore Rekor][sigstore-rekor]
> You can verify without using the GitHub CLI by cross-referencing checks from
> [GitHub Attestations][github-attestation] with [Sigstore Rekor][sigstore-rekor].
1. Install GitHub CLI
2. Download the APK and attestation from [GitHub Attestation][github-attestation]
3. Run `gh attestation verify APK -R LawnchairLauncher/lawnchair`, replace {APK} with the
actual APK file
4. Done
1. Install the [GitHub CLI](https://cli.github.com/).
2. Download the APK and its attestation from [GitHub Attestations][github-attestation].
3. Run `gh attestation verify {APK} -R LawnchairLauncher/lawnchair`, replacing `{APK}` with the path
to the downloaded APK file.
## Android App Certificate
Lawnchair have two app certificates:
* Google Play:
`47:AC:92:63:1C:60:35:13:CC:8D:26:DD:9C:FF:E0:71:9A:8B:36:55:44:DC:CE:C2:09:58:24:EC:25:61:20:A7`
* Elsewhere:
`74:7C:36:45:B3:57:25:8B:2E:23:E8:51:E5:3C:96:74:7F:E0:AD:D0:07:E5:BA:2C:D9:7E:8C:85:57:2E:4D:C5`
Lawnchair uses two app certificates, which can be verified by tools such
as [AppVerifier][3p-appverifier]:
On Android, using a verification app like [AppVerifier][3p-appverifier] can ease up the verifying process.
* **Google Play**:
`47:AC:92:63:1C:60:35:13:CC:8D:26:DD:9C:FF:E0:71:9A:8B:36:55:44:DC:CE:C2:09:58:24:EC:25:61:20:A7`
* **Direct Downloads (Elsewhere)**:
`74:7C:36:45:B3:57:25:8B:2E:23:E8:51:E5:3C:96:74:7F:E0:AD:D0:07:E5:BA:2C:D9:7E:8C:85:57:2E:4D:C5`
[github-attestation]: https://github.com/LawnchairLauncher/lawnchair/attestations
[sigstore-rekor]: https://search.sigstore.dev/
+12 -11
View File
@@ -1,16 +1,16 @@
# Lawnchair Quickstep Compat Library
# Lawnchair Quickstep compat module
The `compatLib` library helps integrate Lawnchair with Recents
(also known as QuickSwitch, Quickstep, or sometimes, Lawnstep)
while ensuring backward-compatibility with older Android versions.
The `compatLib` module provides a compatibility layer that lets Lawnchair integrate with Quickstep
(a system component that provides the Recents screen) across different Android versions, even when
the Quickstep implementation does not match the system version.
Each subdirectory of the `compatLib`, denoted by a letter (e.g., `compatLibVQ` for Android 10),
refers to the compatibility code for that specific Android version.
This enables Recents integration when using tools that replace the system Recents provider,
such as QuickSwitch or the older Lawnstep app.
Starting with Android 16 and above, the `compatLib` will denoted by the codename of the Android version
(e.g., `compatLibVBaklava` for Android 16).
Each submodule is named after the Android version codename, using the first letter
for Android 15 and below and the full codename starting from Android 16 onward.
| Library | Android version |
| Module | Android version |
|-------------------|-----------------|
| compatLibVQ | 10 |
| compatLibVR | 11 |
@@ -20,5 +20,6 @@ Starting with Android 16 and above, the `compatLib` will denoted by the codename
| compatLibVV | 15 |
| compatLibVBaklava | 16 |
Keep in mind that this list does not guarantee Recents compatibility with your Android versions,
as the implementation may still be in progress or not fully functional.
This list does not guarantee Recents compatibility across all Android versions,
as the implementation may be incomplete or not fully functional.
+1 -1
View File
@@ -1,4 +1,4 @@
# Lawnchair Assets Guidelines
# Lawnchair assets guidelines
This directory lists all the decoration & visual explainers used in the Lawnchair Documentation.
+2 -2
View File
@@ -1,11 +1,11 @@
# Lawnchair Prebuilt JARs
# Lawnchair prebuilt libraries
Launcher3 has some dependencies on internal AOSP modules.
To build Lawnchair, you have to build AOSP and obtain these JARs.
## Usage
Lawnchair rely on these JAR:
Lawnchair relies on these JARs:
| File | Command | Android Tag | Target Configuration |
|----------------------------|-------------------------|-----------------------------|----------------------------------------------------|
+31 -4
View File
@@ -1,9 +1,36 @@
# SystemUI Module
This directory contains all of the required SystemUI modules. Some examples of modules include `Common`, which serves as a helper for other SystemUI modules, and `Unfold`, which handles devices with hinges.
This directory contains all the required SystemUI modules, based from
the [upstream source code](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/packages/SystemUI/)
of the SystemUI app.
Upstream source code: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/packages/SystemUI/
Some examples of modules include [`common`](#common-submodule), which serves as a helper for other
SystemUI modules, and
`unfold`, which handles devices with hinges.
## `utils` Module
## `common` submodule
A stripped-down version to only include WindowManagerUtils code to be use by `wmshell`.
`SystemUICommon` is a module that hosts standalone helper libraries. It is intended
to be used by other modules, and therefore should not have other SystemUI dependencies to avoid
circular dependencies.
To maintain the structure of this module, please refrain from adding components at the top level.
Instead, add them to specific sub-packages, such as `systemui/common/buffer/`.
This will help keep the module organized and easy to navigate.
## `utils` submodule
A stripped-down version to only include the `WindowManagerUtils` code used by `wmshell`.
### `viewcapture` submodule
> [!CAUTION]
> `ViewCapture.java` is **extremely performance sensitive**.
> **Any changes should be carried out with great caution** not to hurt performance.
The following measurements should serve as a performance baseline (as of 02.10.2022):
1. The onDraw() function invocation time in WindowListener within ViewCapture is measured with
System.nanoTime(). The following scenario was measured:
- Capturing the notification shade window root view on a freshly rebooted bluejay device (2
notifications present) -> avg. time = 204237ns (0.2ms)
-9
View File
@@ -1,9 +0,0 @@
# SystemUICommon
`SystemUICommon` is a module within SystemUI that hosts standalone helper libraries. It is intended
to be used by other modules, and therefore should not have other SystemUI dependencies to avoid
circular dependencies.
To maintain the structure of this module, please refrain from adding components at the top level.
Instead, add them to specific sub-packages, such as `systemui/common/buffer/`. This will help to
keep the module organized and easy to navigate.
-11
View File
@@ -1,11 +0,0 @@
###ViewCapture Library Readme
ViewCapture.java is extremely performance sensitive. Any changes should be carried out with great caution not to hurt performance.
The following measurements should serve as a performance baseline (as of 02.10.2022):
The onDraw() function invocation time in WindowListener within ViewCapture is measured with System.nanoTime(). The following scenario was measured:
1. Capturing the notification shade window root view on a freshly rebooted bluejay device (2 notifications present) -> avg. time = 204237ns (0.2ms)